diff options
Diffstat (limited to 'py/runtime.c')
-rw-r--r-- | py/runtime.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/py/runtime.c b/py/runtime.c index a6cf7e0177..4f2d5a1600 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -32,6 +32,7 @@ #include "py/nlr.h" #include "py/parsenum.h" #include "py/compile.h" +#include "py/objstr.h" #include "py/objtuple.h" #include "py/objlist.h" #include "py/objmodule.h" @@ -200,6 +201,8 @@ mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg) { switch (op) { case MP_UNARY_OP_BOOL: return MP_BOOL(val != 0); + case MP_UNARY_OP_HASH: + return arg; case MP_UNARY_OP_POSITIVE: return arg; case MP_UNARY_OP_NEGATIVE: @@ -215,6 +218,10 @@ mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg) { assert(0); return arg; } + } else if (op == MP_UNARY_OP_HASH && MP_OBJ_IS_STR_OR_BYTES(arg)) { + // fast path for hashing str/bytes + GET_STR_HASH(arg, h); + return MP_OBJ_NEW_SMALL_INT(h); } else { mp_obj_type_t *type = mp_obj_get_type(arg); if (type->unary_op != NULL) { |