diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-14 15:23:09 -0800 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-14 15:23:09 -0800 |
commit | 66a5bf681def9404a624eba9235d024a104b2602 (patch) | |
tree | 055d871ff4ba92b7077e4534530859d6db41f9ac /py/objstr.c | |
parent | 0f59203e37de155c3c7e3fadb35fd3b06cb75478 (diff) | |
parent | f5a0a7d2b30d390f03dd0b6f8866ec619d2c5ee3 (diff) | |
download | micropython-66a5bf681def9404a624eba9235d024a104b2602.tar.gz micropython-66a5bf681def9404a624eba9235d024a104b2602.zip |
Merge pull request #142 from chipaca/containment
Implemented support for `in` and `not in` operators.
Diffstat (limited to 'py/objstr.c')
-rw-r--r-- | py/objstr.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/py/objstr.c b/py/objstr.c index f48bde6001..8b7ab9692f 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -85,6 +85,15 @@ mp_obj_t str_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { return mp_obj_new_str(qstr_from_str_take(val, alloc_len)); } break; + case RT_COMPARE_OP_IN: + case RT_COMPARE_OP_NOT_IN: + /* NOTE `a in b` is `b.__contains__(a)` */ + if (MP_OBJ_IS_TYPE(rhs_in, &str_type)) { + const char *rhs_str = qstr_str(((mp_obj_str_t*)rhs_in)->qstr); + /* FIXME \0 in strs */ + return MP_BOOL((op == RT_COMPARE_OP_IN) ^ (strstr(lhs_str, rhs_str) == NULL)); + } + break; } return MP_OBJ_NULL; // op not supported |