summaryrefslogtreecommitdiffstatshomepage
path: root/py/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/obj.c')
-rw-r--r--py/obj.c52
1 files changed, 12 insertions, 40 deletions
diff --git a/py/obj.c b/py/obj.c
index a78af595a6..c2f726bb99 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -14,7 +14,7 @@
#include "runtime.h"
#include "map.h"
-mp_obj_t mp_obj_get_type(mp_obj_t o_in) {
+mp_obj_type_t *mp_obj_get_type(mp_obj_t o_in) {
if (MP_OBJ_IS_SMALL_INT(o_in)) {
return (mp_obj_t)&int_type;
} else if (MP_OBJ_IS_QSTR(o_in)) {
@@ -26,14 +26,7 @@ mp_obj_t mp_obj_get_type(mp_obj_t o_in) {
}
const char *mp_obj_get_type_str(mp_obj_t o_in) {
- if (MP_OBJ_IS_SMALL_INT(o_in)) {
- return "int";
- } else if (MP_OBJ_IS_QSTR(o_in)) {
- return "str";
- } else {
- mp_obj_base_t *o = o_in;
- return o->type->name;
- }
+ return mp_obj_get_type(o_in)->name;
}
void printf_wrapper(void *env, const char *fmt, ...) {
@@ -44,17 +37,11 @@ void printf_wrapper(void *env, const char *fmt, ...) {
}
void mp_obj_print_helper(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind) {
- if (MP_OBJ_IS_SMALL_INT(o_in)) {
- print(env, "%d", (int)MP_OBJ_SMALL_INT_VALUE(o_in));
- } else if (MP_OBJ_IS_QSTR(o_in)) {
- mp_obj_str_print_qstr(print, env, MP_OBJ_QSTR_VALUE(o_in), kind);
+ mp_obj_type_t *type = mp_obj_get_type(o_in);
+ if (type->print != NULL) {
+ type->print(print, env, o_in, kind);
} else {
- mp_obj_base_t *o = o_in;
- if (o->type->print != NULL) {
- o->type->print(print, env, o_in, kind);
- } else {
- print(env, "<%s>", o->type->name);
- }
+ print(env, "<%s>", type->name);
}
}
@@ -94,12 +81,10 @@ machine_int_t mp_obj_hash(mp_obj_t o_in) {
return 1; // needs to hash to same as the integer 1, since True==1
} else if (MP_OBJ_IS_SMALL_INT(o_in)) {
return MP_OBJ_SMALL_INT_VALUE(o_in);
- } else if (MP_OBJ_IS_QSTR(o_in)) {
- return MP_OBJ_QSTR_VALUE(o_in);
+ } else if (MP_OBJ_IS_STR(o_in)) {
+ return mp_obj_str_get_hash(o_in);
} else if (MP_OBJ_IS_TYPE(o_in, &none_type)) {
return (machine_int_t)o_in;
- } else if (MP_OBJ_IS_TYPE(o_in, &str_type)) {
- return mp_obj_str_get(o_in);
} else {
assert(0);
return 0;
@@ -138,10 +123,8 @@ bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2) {
}
return false;
}
- } else if (MP_OBJ_IS_QSTR(o1) || MP_OBJ_IS_QSTR(o2)) {
- return false;
- } else if (MP_OBJ_IS_TYPE(o1, &str_type) && MP_OBJ_IS_TYPE(o2, &str_type)) {
- return mp_obj_str_get(o1) == mp_obj_str_get(o2);
+ } else if (MP_OBJ_IS_STR(o1) && MP_OBJ_IS_STR(o2)) {
+ return mp_obj_str_equal(o1, o2);
} else {
mp_obj_base_t *o = o1;
if (o->type->binary_op != NULL) {
@@ -218,17 +201,6 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) {
}
#endif
-qstr mp_obj_get_qstr(mp_obj_t arg) {
- if (MP_OBJ_IS_QSTR(arg)) {
- return MP_OBJ_QSTR_VALUE(arg);
- } else if (MP_OBJ_IS_TYPE(arg, &str_type)) {
- return mp_obj_str_get(arg);
- } else {
- assert(0);
- return 0;
- }
-}
-
mp_obj_t *mp_obj_get_array_fixed_n(mp_obj_t o_in, machine_int_t n) {
if (MP_OBJ_IS_TYPE(o_in, &tuple_type) || MP_OBJ_IS_TYPE(o_in, &list_type)) {
uint seq_len;
@@ -266,8 +238,8 @@ uint mp_get_index(const mp_obj_type_t *type, machine_uint_t len, mp_obj_t index)
// may return MP_OBJ_NULL
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in) {
mp_small_int_t len = 0;
- if (MP_OBJ_IS_TYPE(o_in, &str_type)) {
- len = qstr_len(mp_obj_str_get(o_in));
+ if (MP_OBJ_IS_STR(o_in)) {
+ len = mp_obj_str_get_len(o_in);
} else if (MP_OBJ_IS_TYPE(o_in, &tuple_type)) {
uint seq_len;
mp_obj_t *seq_items;