Skip to content

Commit e2fb2ba

Browse files
committed
Implement repr.
1 parent 9528cd6 commit e2fb2ba

5 files changed

Lines changed: 17 additions & 7 deletions

File tree

py/builtin.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,8 @@ MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_callable_obj, mp_builtin_callable);
140140
static mp_obj_t mp_builtin_chr(mp_obj_t o_in) {
141141
int ord = mp_obj_get_int(o_in);
142142
if (0 <= ord && ord <= 0x10ffff) {
143-
char *str = m_new(char, 2);
144-
str[0] = ord;
145-
str[1] = '\0';
146-
return mp_obj_new_str(qstr_from_str_take(str, 2));
143+
char str[2] = {ord, '\0'};
144+
return mp_obj_new_str(qstr_from_strn_copy(str, 1));
147145
} else {
148146
nlr_jump(mp_obj_new_exception_msg(MP_QSTR_ValueError, "chr() arg not in range(0x110000)"));
149147
}
@@ -310,6 +308,14 @@ static mp_obj_t mp_builtin_range(int n_args, const mp_obj_t *args) {
310308

311309
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_range_obj, 1, 3, mp_builtin_range);
312310

311+
static mp_obj_t mp_builtin_repr(mp_obj_t o_in) {
312+
vstr_t *vstr = vstr_new();
313+
mp_obj_print_helper((void (*)(void *env, const char *fmt, ...))vstr_printf, vstr, o_in);
314+
return mp_obj_new_str(qstr_from_str_take(vstr->buf, vstr->alloc));
315+
}
316+
317+
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_repr_obj, mp_builtin_repr);
318+
313319
static mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args) {
314320
assert(1 <= n_args && n_args <= 2);
315321
mp_obj_t value;
@@ -324,6 +330,7 @@ static mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args) {
324330
}
325331
return value;
326332
}
333+
327334
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_sum_obj, 1, 2, mp_builtin_sum);
328335

329336
static mp_obj_t mp_builtin_sorted(mp_obj_t args, mp_map_t *kwargs) {
@@ -343,4 +350,5 @@ static mp_obj_t mp_builtin_sorted(mp_obj_t args, mp_map_t *kwargs) {
343350

344351
return self;
345352
}
353+
346354
MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_sorted_obj, 1, mp_builtin_sorted);

py/builtin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ MP_DECLARE_CONST_FUN_OBJ(mp_builtin_ord_obj);
2121
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_pow_obj);
2222
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_print_obj);
2323
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_range_obj);
24+
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_repr_obj);
2425
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_sorted_obj);
2526
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_sum_obj);

py/mpqstrraw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ Q(ord)
5757
Q(pow)
5858
Q(print)
5959
Q(range)
60+
Q(repr)
6061
Q(set)
6162
Q(sorted)
6263
Q(sum)

py/runtime.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ void rt_init(void) {
134134
mp_map_add_qstr(&map_builtins, MP_QSTR_pow, (mp_obj_t)&mp_builtin_pow_obj);
135135
mp_map_add_qstr(&map_builtins, MP_QSTR_print, (mp_obj_t)&mp_builtin_print_obj);
136136
mp_map_add_qstr(&map_builtins, MP_QSTR_range, (mp_obj_t)&mp_builtin_range_obj);
137+
mp_map_add_qstr(&map_builtins, MP_QSTR_repr, (mp_obj_t)&mp_builtin_repr_obj);
137138
mp_map_add_qstr(&map_builtins, MP_QSTR_sorted, (mp_obj_t)&mp_builtin_sorted_obj);
138139
mp_map_add_qstr(&map_builtins, MP_QSTR_sum, (mp_obj_t)&mp_builtin_sum_obj);
139140

tests/basics/tests/exception1.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
# TODO: requires repr()
2-
#a = IndexError(1, "test", [100, 200])
3-
#print(repr(a))
1+
a = IndexError(1, "test", [100, 200])
2+
print(repr(a))

0 commit comments

Comments
 (0)