Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
4899ff94
Commit
4899ff94
authored
Jan 15, 2014
by
Damien George
Browse files
Merge branch 'str-repr' of github.com:pfalcon/micropython into pfalcon-str-repr
Conflicts: tests/basics/tests/exception1.py
parents
7a9d0c45
36c4499d
Changes
28
Hide whitespace changes
Inline
Side-by-side
py/builtin.c
View file @
4899ff94
...
...
@@ -64,7 +64,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR(mp_builtin___build_class___obj, 2, mp_builtin___buil
static
mp_obj_t
mp_builtin___repl_print__
(
mp_obj_t
o
)
{
if
(
o
!=
mp_const_none
)
{
mp_obj_print
(
o
);
mp_obj_print
(
o
,
PRINT_REPR
);
printf
(
"
\n
"
);
}
return
mp_const_none
;
...
...
@@ -283,13 +283,7 @@ static mp_obj_t mp_builtin_print(int n_args, const mp_obj_t *args) {
if
(
i
>
0
)
{
printf
(
" "
);
}
if
(
MP_OBJ_IS_TYPE
(
args
[
i
],
&
str_type
))
{
// special case, print string raw
printf
(
"%s"
,
qstr_str
(
mp_obj_str_get
(
args
[
i
])));
}
else
{
// print the object Python style
mp_obj_print
(
args
[
i
]);
}
mp_obj_print
(
args
[
i
],
PRINT_STR
);
}
printf
(
"
\n
"
);
return
mp_const_none
;
...
...
@@ -310,7 +304,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_range_obj, 1, 3, mp_builtin_range
static
mp_obj_t
mp_builtin_repr
(
mp_obj_t
o_in
)
{
vstr_t
*
vstr
=
vstr_new
();
mp_obj_print_helper
((
void
(
*
)(
void
*
env
,
const
char
*
fmt
,
...))
vstr_printf
,
vstr
,
o_in
);
mp_obj_print_helper
((
void
(
*
)(
void
*
env
,
const
char
*
fmt
,
...))
vstr_printf
,
vstr
,
o_in
,
PRINT_REPR
);
return
mp_obj_new_str
(
qstr_from_str_take
(
vstr
->
buf
,
vstr
->
alloc
));
}
...
...
@@ -352,3 +346,11 @@ static mp_obj_t mp_builtin_sorted(mp_obj_t args, mp_map_t *kwargs) {
}
MP_DEFINE_CONST_FUN_OBJ_KW
(
mp_builtin_sorted_obj
,
1
,
mp_builtin_sorted
);
static
mp_obj_t
mp_builtin_str
(
mp_obj_t
o_in
)
{
vstr_t
*
vstr
=
vstr_new
();
mp_obj_print_helper
((
void
(
*
)(
void
*
,
const
char
*
,
...))
vstr_printf
,
vstr
,
o_in
,
PRINT_STR
);
return
mp_obj_new_str
(
qstr_from_str_take
(
vstr
->
buf
,
vstr
->
alloc
));
}
MP_DEFINE_CONST_FUN_OBJ_1
(
mp_builtin_str_obj
,
mp_builtin_str
);
py/builtin.h
View file @
4899ff94
...
...
@@ -25,3 +25,4 @@ MP_DECLARE_CONST_FUN_OBJ(mp_builtin_range_obj);
MP_DECLARE_CONST_FUN_OBJ
(
mp_builtin_repr_obj
);
MP_DECLARE_CONST_FUN_OBJ
(
mp_builtin_sorted_obj
);
MP_DECLARE_CONST_FUN_OBJ
(
mp_builtin_sum_obj
);
MP_DECLARE_CONST_FUN_OBJ
(
mp_builtin_str_obj
);
py/mpqstrraw.h
View file @
4899ff94
...
...
@@ -65,6 +65,7 @@ Q(repr)
Q
(
set
)
Q
(
sorted
)
Q
(
sum
)
Q
(
str
)
Q
(
tuple
)
Q
(
type
)
Q
(
zip
)
...
...
py/obj.c
View file @
4899ff94
...
...
@@ -41,21 +41,21 @@ void printf_wrapper(void *env, const char *fmt, ...) {
va_end
(
args
);
}
void
mp_obj_print_helper
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
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
{
mp_obj_base_t
*
o
=
o_in
;
if
(
o
->
type
->
print
!=
NULL
)
{
o
->
type
->
print
(
print
,
env
,
o_in
);
o
->
type
->
print
(
print
,
env
,
o_in
,
kind
);
}
else
{
print
(
env
,
"<%s>"
,
o
->
type
->
name
);
}
}
}
void
mp_obj_print
(
mp_obj_t
o_in
)
{
mp_obj_print_helper
(
printf_wrapper
,
NULL
,
o_in
);
void
mp_obj_print
(
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_print_helper
(
printf_wrapper
,
NULL
,
o_in
,
kind
);
}
bool
mp_obj_is_callable
(
mp_obj_t
o_in
)
{
...
...
py/obj.h
View file @
4899ff94
...
...
@@ -85,7 +85,11 @@ typedef mp_obj_t (*mp_fun_t)(void);
typedef
mp_obj_t
(
*
mp_fun_var_t
)(
int
n
,
const
mp_obj_t
*
);
typedef
mp_obj_t
(
*
mp_fun_kw_t
)(
mp_obj_t
,
struct
_mp_map_t
*
);
typedef
void
(
*
mp_print_fun_t
)(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o
);
typedef
enum
{
PRINT_STR
,
PRINT_REPR
}
mp_print_kind_t
;
typedef
void
(
*
mp_print_fun_t
)(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o
,
mp_print_kind_t
kind
);
typedef
mp_obj_t
(
*
mp_make_new_fun_t
)(
mp_obj_t
type_in
,
int
n_args
,
const
mp_obj_t
*
args
);
// args are in reverse order in the array
typedef
mp_obj_t
(
*
mp_call_n_fun_t
)(
mp_obj_t
fun
,
int
n_args
,
const
mp_obj_t
*
args
);
// args are in reverse order in the array
typedef
mp_obj_t
(
*
mp_call_n_kw_fun_t
)(
mp_obj_t
fun
,
int
n_args
,
int
n_kw
,
const
mp_obj_t
*
args
);
// args are in reverse order in the array
...
...
@@ -230,8 +234,8 @@ mp_obj_t mp_obj_new_module(qstr module_name);
mp_obj_t
mp_obj_get_type
(
mp_obj_t
o_in
);
const
char
*
mp_obj_get_type_str
(
mp_obj_t
o_in
);
void
mp_obj_print_helper
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
);
void
mp_obj_print
(
mp_obj_t
o
);
void
mp_obj_print_helper
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
);
void
mp_obj_print
(
mp_obj_t
o
,
mp_print_kind_t
kind
);
bool
mp_obj_is_callable
(
mp_obj_t
o_in
);
machine_int_t
mp_obj_hash
(
mp_obj_t
o_in
);
...
...
py/objbool.c
View file @
4899ff94
...
...
@@ -13,7 +13,7 @@ typedef struct _mp_obj_bool_t {
bool
value
;
}
mp_obj_bool_t
;
static
void
bool_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
bool_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
mp_obj_bool_t
*
self
=
self_in
;
if
(
self
->
value
)
{
print
(
env
,
"True"
);
...
...
py/objcomplex.c
View file @
4899ff94
...
...
@@ -21,7 +21,7 @@ typedef struct _mp_obj_complex_t {
mp_obj_t
mp_obj_new_complex
(
mp_float_t
real
,
mp_float_t
imag
);
void
complex_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
void
complex_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_complex_t
*
o
=
o_in
;
if
(
o
->
real
==
0
)
{
print
(
env
,
"%.8gj"
,
o
->
imag
);
...
...
py/objdict.c
View file @
4899ff94
...
...
@@ -20,7 +20,7 @@ typedef struct _mp_obj_dict_t {
static
mp_obj_t
mp_obj_new_dict_iterator
(
mp_obj_dict_t
*
dict
,
int
cur
);
static
mp_map_elem_t
*
dict_it_iternext_elem
(
mp_obj_t
self_in
);
static
void
dict_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
dict_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
mp_obj_dict_t
*
self
=
self_in
;
bool
first
=
true
;
print
(
env
,
"{"
);
...
...
@@ -31,9 +31,9 @@ static void dict_print(void (*print)(void *env, const char *fmt, ...), void *env
print
(
env
,
", "
);
}
first
=
false
;
mp_obj_print_helper
(
print
,
env
,
next
->
key
);
mp_obj_print_helper
(
print
,
env
,
next
->
key
,
PRINT_REPR
);
print
(
env
,
": "
);
mp_obj_print_helper
(
print
,
env
,
next
->
value
);
mp_obj_print_helper
(
print
,
env
,
next
->
value
,
PRINT_REPR
);
}
print
(
env
,
"}"
);
}
...
...
@@ -350,7 +350,7 @@ static mp_obj_t dict_view_getiter(mp_obj_t view_in) {
return
o
;
}
static
void
dict_view_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
dict_view_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
assert
(
MP_OBJ_IS_TYPE
(
self_in
,
&
dict_view_type
));
mp_obj_dict_view_t
*
self
=
self_in
;
bool
first
=
true
;
...
...
@@ -363,7 +363,7 @@ static void dict_view_print(void (*print)(void *env, const char *fmt, ...), void
print
(
env
,
", "
);
}
first
=
false
;
mp_obj_print_helper
(
print
,
env
,
next
);
mp_obj_print_helper
(
print
,
env
,
next
,
PRINT_REPR
);
}
print
(
env
,
"])"
);
}
...
...
py/objexcept.c
View file @
4899ff94
...
...
@@ -21,13 +21,25 @@ typedef struct mp_obj_exception_t {
mp_obj_tuple_t
args
;
}
mp_obj_exception_t
;
void
exception_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
void
exception_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_exception_t
*
o
=
o_in
;
if
(
o
->
msg
!=
0
)
{
print
(
env
,
"%s: %s"
,
qstr_str
(
o
->
id
),
qstr_str
(
o
->
msg
));
}
else
{
print
(
env
,
"%s"
,
qstr_str
(
o
->
id
));
tuple_print
(
print
,
env
,
&
o
->
args
);
// Yes, that's how CPython has it
if
(
kind
==
PRINT_REPR
)
{
print
(
env
,
"%s"
,
qstr_str
(
o
->
id
));
}
if
(
kind
==
PRINT_STR
)
{
if
(
o
->
args
.
len
==
0
)
{
print
(
env
,
""
);
return
;
}
else
if
(
o
->
args
.
len
==
1
)
{
mp_obj_print_helper
(
print
,
env
,
o
->
args
.
items
[
0
],
PRINT_STR
);
return
;
}
}
tuple_print
(
print
,
env
,
&
o
->
args
,
kind
);
}
}
...
...
py/objfloat.c
View file @
4899ff94
...
...
@@ -19,7 +19,7 @@ typedef struct _mp_obj_float_t {
mp_obj_t
mp_obj_new_float
(
mp_float_t
value
);
static
void
float_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
static
void
float_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_float_t
*
o
=
o_in
;
print
(
env
,
"%.8g"
,
o
->
value
);
}
...
...
py/objgenerator.c
View file @
4899ff94
...
...
@@ -61,7 +61,7 @@ typedef struct _mp_obj_gen_instance_t {
mp_obj_t
state
[];
}
mp_obj_gen_instance_t
;
void
gen_instance_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
void
gen_instance_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
print
(
env
,
"<generator object 'fun-name' at %p>"
,
self_in
);
}
...
...
py/objint.c
View file @
4899ff94
...
...
@@ -39,7 +39,7 @@ const mp_obj_type_t int_type = {
#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
)
{
void
int_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
}
// This is called only for non-SMALL_INT
...
...
py/objint.h
View file @
4899ff94
...
...
@@ -5,5 +5,5 @@ typedef struct _mp_obj_int_t {
#endif
}
mp_obj_int_t
;
void
int_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
);
void
int_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
);
mp_obj_t
int_binary_op
(
int
op
,
mp_obj_t
lhs_in
,
mp_obj_t
rhs_in
);
py/objlist.c
View file @
4899ff94
...
...
@@ -26,14 +26,14 @@ static mp_obj_t list_extend(mp_obj_t self_in, mp_obj_t arg_in);
/******************************************************************************/
/* list */
static
void
list_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
static
void
list_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_list_t
*
o
=
o_in
;
print
(
env
,
"["
);
for
(
int
i
=
0
;
i
<
o
->
len
;
i
++
)
{
if
(
i
>
0
)
{
print
(
env
,
", "
);
}
mp_obj_print_helper
(
print
,
env
,
o
->
items
[
i
]);
mp_obj_print_helper
(
print
,
env
,
o
->
items
[
i
]
,
PRINT_REPR
);
}
print
(
env
,
"]"
);
}
...
...
py/objmodule.c
View file @
4899ff94
...
...
@@ -17,7 +17,7 @@ typedef struct _mp_obj_module_t {
mp_map_t
*
globals
;
}
mp_obj_module_t
;
static
void
module_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
module_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
mp_obj_module_t
*
self
=
self_in
;
print
(
env
,
"<module '%s' from '-unknown-file-'>"
,
qstr_str
(
self
->
name
));
}
...
...
py/objnone.c
View file @
4899ff94
...
...
@@ -10,7 +10,7 @@ typedef struct _mp_obj_none_t {
mp_obj_base_t
base
;
}
mp_obj_none_t
;
void
none_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
void
none_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
print
(
env
,
"None"
);
}
...
...
py/objset.c
View file @
4899ff94
...
...
@@ -25,7 +25,7 @@ typedef struct _mp_obj_set_it_t {
static
mp_obj_t
set_it_iternext
(
mp_obj_t
self_in
);
void
set_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
void
set_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
mp_obj_set_t
*
self
=
self_in
;
if
(
self
->
set
.
used
==
0
)
{
print
(
env
,
"set()"
);
...
...
@@ -39,7 +39,7 @@ void set_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj
print
(
env
,
", "
);
}
first
=
false
;
mp_obj_print_helper
(
print
,
env
,
self
->
set
.
table
[
i
]);
mp_obj_print_helper
(
print
,
env
,
self
->
set
.
table
[
i
]
,
PRINT_REPR
);
}
}
print
(
env
,
"}"
);
...
...
py/objslice.c
View file @
4899ff94
...
...
@@ -16,7 +16,7 @@ typedef struct _mp_obj_ellipsis_t {
mp_obj_base_t
base
;
}
mp_obj_ellipsis_t
;
void
ellipsis_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
void
ellipsis_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
print
(
env
,
"Ellipsis"
);
}
...
...
@@ -42,7 +42,7 @@ typedef struct _mp_obj_slice_t {
machine_int_t
stop
;
}
mp_obj_slice_t
;
void
slice_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
void
slice_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_slice_t
*
o
=
o_in
;
print
(
env
,
"slice("
INT_FMT
", "
INT_FMT
")"
,
o
->
start
,
o
->
stop
);
}
...
...
py/objstr.c
View file @
4899ff94
...
...
@@ -22,10 +22,14 @@ 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
)
{
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
;
// TODO need to escape chars etc
print
(
env
,
"'%s'"
,
qstr_str
(
self
->
qstr
));
if
(
kind
==
PRINT_STR
)
{
print
(
env
,
"%s"
,
qstr_str
(
self
->
qstr
));
}
else
{
// TODO need to escape chars etc
print
(
env
,
"'%s'"
,
qstr_str
(
self
->
qstr
));
}
}
mp_obj_t
str_binary_op
(
int
op
,
mp_obj_t
lhs_in
,
mp_obj_t
rhs_in
)
{
...
...
@@ -254,13 +258,6 @@ mp_obj_t str_strip(int n_args, const mp_obj_t *args) {
return
mp_obj_new_str
(
qstr_from_str_take
(
stripped_str
,
stripped_len
+
1
));
}
void
vstr_printf_wrapper
(
void
*
env
,
const
char
*
fmt
,
...)
{
va_list
args
;
va_start
(
args
,
fmt
);
vstr_vprintf
(
env
,
fmt
,
args
);
va_end
(
args
);
}
mp_obj_t
str_format
(
int
n_args
,
const
mp_obj_t
*
args
)
{
assert
(
MP_OBJ_IS_TYPE
(
args
[
0
],
&
str_type
));
mp_obj_str_t
*
self
=
args
[
0
];
...
...
@@ -277,7 +274,8 @@ mp_obj_t str_format(int n_args, const mp_obj_t *args) {
if
(
arg_i
>=
n_args
)
{
nlr_jump
(
mp_obj_new_exception_msg
(
MP_QSTR_IndexError
,
"tuple index out of range"
));
}
mp_obj_print_helper
(
vstr_printf_wrapper
,
vstr
,
args
[
arg_i
]);
// TODO: may be PRINT_REPR depending on formatting code
mp_obj_print_helper
((
void
(
*
)(
void
*
,
const
char
*
,
...))
vstr_printf
,
vstr
,
args
[
arg_i
],
PRINT_STR
);
arg_i
++
;
}
}
else
{
...
...
py/objtuple.c
View file @
4899ff94
...
...
@@ -16,14 +16,14 @@ static mp_obj_t mp_obj_new_tuple_iterator(mp_obj_tuple_t *tuple, int cur);
/******************************************************************************/
/* tuple */
void
tuple_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
)
{
void
tuple_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
o_in
,
mp_print_kind_t
kind
)
{
mp_obj_tuple_t
*
o
=
o_in
;
print
(
env
,
"("
);
for
(
int
i
=
0
;
i
<
o
->
len
;
i
++
)
{
if
(
i
>
0
)
{
print
(
env
,
", "
);
}
mp_obj_print_helper
(
print
,
env
,
o
->
items
[
i
]);
mp_obj_print_helper
(
print
,
env
,
o
->
items
[
i
]
,
PRINT_REPR
);
}
if
(
o
->
len
==
1
)
{
print
(
env
,
","
);
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment