diff --git a/py/obj.c b/py/obj.c index f90c67b0c..42f86cf17 100644 --- a/py/obj.c +++ b/py/obj.c @@ -44,6 +44,8 @@ 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); } else { mp_obj_base_t *o = o_in; if (o->type->print != NULL) { diff --git a/py/obj.h b/py/obj.h index 11ec4afe8..faf023147 100644 --- a/py/obj.h +++ b/py/obj.h @@ -280,6 +280,7 @@ void mp_obj_exception_get_traceback(mp_obj_t self_in, machine_uint_t *n, machine // str extern const mp_obj_type_t str_type; qstr mp_obj_str_get(mp_obj_t self_in); +void mp_obj_str_print_qstr(void (*print)(void *env, const char *fmt, ...), void *env, qstr q, mp_print_kind_t kind); #if MICROPY_ENABLE_FLOAT // float diff --git a/py/objstr.c b/py/objstr.c index c232b1c92..5e87097a8 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -22,16 +22,20 @@ static mp_obj_t mp_obj_new_str_iterator(mp_obj_str_t *str, int cur); /******************************************************************************/ /* str */ -void str_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) { - mp_obj_str_t *self = self_in; +void mp_obj_str_print_qstr(void (*print)(void *env, const char *fmt, ...), void *env, qstr q, mp_print_kind_t kind) { if (kind == PRINT_STR) { - print(env, "%s", qstr_str(self->qstr)); + print(env, "%s", qstr_str(q)); } else { // TODO need to escape chars etc - print(env, "'%s'", qstr_str(self->qstr)); + print(env, "'%s'", qstr_str(q)); } } +void str_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) { + mp_obj_str_t *self = self_in; + mp_obj_str_print_qstr(print, env, self->qstr, kind); +} + mp_obj_t str_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { mp_obj_str_t *lhs = lhs_in; const char *lhs_str = qstr_str(lhs->qstr);