summaryrefslogtreecommitdiffstatshomepage
path: root/py/runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/py/runtime.c b/py/runtime.c
index f88c92be63..48e815f0fa 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -217,6 +217,10 @@ mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t 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);
+ if (h == 0) {
+ GET_STR_DATA_LEN(arg, data, len);
+ h = qstr_compute_hash(data, len);
+ }
return MP_OBJ_NEW_SMALL_INT(h);
} else {
mp_obj_type_t *type = mp_obj_get_type(arg);
@@ -1390,6 +1394,18 @@ void *m_malloc_fail(size_t num_bytes) {
}
}
+NORETURN void mp_raise_msg(const mp_obj_type_t *exc_type, const char *msg) {
+ nlr_raise(mp_obj_new_exception_msg(exc_type, msg));
+}
+
+NORETURN void mp_raise_ValueError(const char *msg) {
+ mp_raise_msg(&mp_type_ValueError, msg);
+}
+
+NORETURN void mp_raise_TypeError(const char *msg) {
+ mp_raise_msg(&mp_type_TypeError, msg);
+}
+
NORETURN void mp_not_implemented(const char *msg) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_NotImplementedError, msg));
+ mp_raise_msg(&mp_type_NotImplementedError, msg);
}