Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
76d982ef
Commit
76d982ef
authored
Jan 13, 2014
by
Paul Sokolovsky
Browse files
type->print(): Distinguish str() and repr() variety by passing extra param.
parent
24224d7c
Changes
25
Hide whitespace changes
Inline
Side-by-side
py/builtin.c
View file @
76d982ef
...
...
@@ -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
;
...
...
@@ -285,13 +285,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
;
...
...
py/obj.c
View file @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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 @
76d982ef
...
...
@@ -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
)
{
...
...
@@ -277,7 +281,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
(
vstr_printf_wrapper
,
vstr
,
args
[
arg_i
],
PRINT_STR
);
arg_i
++
;
}
}
else
{
...
...
py/objtuple.c
View file @
76d982ef
...
...
@@ -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
,
","
);
...
...
py/objtuple.h
View file @
76d982ef
...
...
@@ -4,4 +4,4 @@ typedef struct _mp_obj_tuple_t {
mp_obj_t
items
[];
}
mp_obj_tuple_t
;
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
);
py/objtype.c
View file @
76d982ef
...
...
@@ -66,7 +66,7 @@ static mp_map_elem_t *mp_obj_class_lookup(const mp_obj_type_t *type, qstr attr,
}
}
static
void
class_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
class_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
print
(
env
,
"<%s object at %p>"
,
mp_obj_get_type_str
(
self_in
),
self_in
);
}
...
...
@@ -148,7 +148,7 @@ static bool class_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
// - there is a constant mp_obj_type_t (called mp_const_type) for the 'type' object
// - creating a new class (a new type) creates a new mp_obj_type_t
static
void
type_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
)
{
static
void
type_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
mp_obj_type_t
*
self
=
self_in
;
print
(
env
,
"<class '%s'>"
,
self
->
name
);
}
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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