Second stage of qstr revamp: uPy str object can be qstr or not.
diff --git a/py/objint.c b/py/objint.c
index 02628b7..1305f19 100644
--- a/py/objint.c
+++ b/py/objint.c
@@ -20,34 +20,35 @@
return MP_OBJ_NEW_SMALL_INT(0);
case 1:
- if (MP_OBJ_IS_TYPE(args[0], &str_type)) {
+ if (MP_OBJ_IS_STR(args[0])) {
// a string, parse it
- return MP_OBJ_NEW_SMALL_INT(strtonum(qstr_str(mp_obj_get_qstr(args[0])), 0));
+ uint l;
+ const byte *s = mp_obj_str_get_data(args[0], &l);
+ return MP_OBJ_NEW_SMALL_INT(strtonum((const char*)s, 0));
} else {
return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int(args[0]));
}
case 2:
+ {
// should be a string, parse it
// TODO proper error checking of argument types
- return MP_OBJ_NEW_SMALL_INT(strtonum(qstr_str(mp_obj_get_qstr(args[0])), mp_obj_get_int(args[1])));
+ uint l;
+ const byte *s = mp_obj_str_get_data(args[0], &l);
+ return MP_OBJ_NEW_SMALL_INT(strtonum((const char*)s, mp_obj_get_int(args[1])));
+ }
default:
nlr_jump(mp_obj_new_exception_msg_1_arg(MP_QSTR_TypeError, "int takes at most 2 arguments, %d given", (void*)(machine_int_t)n_args));
}
}
-const mp_obj_type_t int_type = {
- { &mp_const_type },
- "int",
- .print = int_print,
- .make_new = int_make_new,
- .binary_op = int_binary_op,
-};
-
#if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_NONE
-// This is called only for non-SMALL_INT
+
void int_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
+ if (MP_OBJ_IS_SMALL_INT(self_in)) {
+ print(env, "%d", (int)MP_OBJ_SMALL_INT_VALUE(self_in));
+ }
}
// This is called only for non-SMALL_INT
@@ -88,4 +89,12 @@
return MP_OBJ_SMALL_INT_VALUE(self_in);
}
-#endif
+#endif // MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_NONE
+
+const mp_obj_type_t int_type = {
+ { &mp_const_type },
+ "int",
+ .print = int_print,
+ .make_new = int_make_new,
+ .binary_op = int_binary_op,
+};