From 33af3bf02846eb5cf48c0a2259d7e35275343749 Mon Sep 17 00:00:00 2001 From: Damien Date: Sun, 3 Nov 2013 14:39:47 +0000 Subject: [PATCH] Change Py API names, py_get_* -> py_obj_get_*. --- py/runtime.c | 296 ++++++++++++++++++++++++++------------------------- py/runtime.h | 14 ++- 2 files changed, 158 insertions(+), 152 deletions(-) diff --git a/py/runtime.c b/py/runtime.c index 90c350cec8..b16b44b56c 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -449,6 +449,154 @@ py_obj_t py_obj_new_user(const py_user_info_t *info, machine_uint_t data1, machi return o; } +const char *py_obj_get_type_str(py_obj_t o_in) { + if (IS_SMALL_INT(o_in)) { + return "int"; + } else { + py_obj_base_t *o = o_in; + switch (o->kind) { + case O_CONST: + if (o == py_const_none) { + return "NoneType"; + } else { + return "bool"; + } + case O_STR: + return "str"; +#if MICROPY_ENABLE_FLOAT + case O_FLOAT: + return "float"; +#endif + case O_FUN_0: + case O_FUN_1: + case O_FUN_2: + case O_FUN_N: + case O_FUN_BC: + return "function"; + case O_GEN_INSTANCE: + return "generator"; + case O_TUPLE: + return "tuple"; + case O_LIST: + return "list"; + case O_TUPLE_IT: + return "tuple_iterator"; + case O_LIST_IT: + return "list_iterator"; + case O_SET: + return "set"; + case O_MAP: + return "dict"; + case O_OBJ: + { + py_map_elem_t *qn = py_qstr_map_lookup(o->u_obj.class->u_class.locals, qstr_from_str_static("__qualname__"), false); + assert(qn != NULL); + assert(IS_O(qn->value, O_STR)); + return qstr_str(((py_obj_base_t*)qn->value)->u_str); + } + case O_USER: + return o->u_user.info->type_name; + default: + assert(0); + return "UnknownType"; + } + } +} + +int rt_is_true(py_obj_t arg) { + DEBUG_OP_printf("is true %p\n", arg); + if (IS_SMALL_INT(arg)) { + if (FROM_SMALL_INT(arg) == 0) { + return 0; + } else { + return 1; + } + } else if (arg == py_const_none) { + return 0; + } else if (arg == py_const_false) { + return 0; + } else if (arg == py_const_true) { + return 1; + } else { + assert(0); + return 0; + } +} + +machine_int_t py_obj_get_int(py_obj_t arg) { + if (arg == py_const_false) { + return 0; + } else if (arg == py_const_true) { + return 1; + } else if (IS_SMALL_INT(arg)) { + return FROM_SMALL_INT(arg); + } else { + assert(0); + return 0; + } +} + +#if MICROPY_ENABLE_FLOAT +machine_float_t py_obj_get_float(py_obj_t arg) { + if (arg == py_const_false) { + return 0; + } else if (arg == py_const_true) { + return 1; + } else if (IS_SMALL_INT(arg)) { + return FROM_SMALL_INT(arg); + } else if (IS_O(arg, O_FLOAT)) { + return ((py_obj_base_t*)arg)->u_float; + } else { + assert(0); + return 0; + } +} + +void py_obj_get_complex(py_obj_t arg, py_float_t *real, py_float_t *imag) { + if (arg == py_const_false) { + *real = 0; + *imag = 0; + } else if (arg == py_const_true) { + *real = 1; + *imag = 0; + } else if (IS_SMALL_INT(arg)) { + *real = FROM_SMALL_INT(arg); + *imag = 0; + } else if (IS_O(arg, O_FLOAT)) { + *real = ((py_obj_base_t*)arg)->u_float; + *imag = 0; + } else if (IS_O(arg, O_COMPLEX)) { + *real = ((py_obj_base_t*)arg)->u_complex.real; + *imag = ((py_obj_base_t*)arg)->u_complex.imag; + } else { + assert(0); + *real = 0; + *imag = 0; + } +} +#endif + +qstr py_obj_get_qstr(py_obj_t arg) { + if (IS_O(arg, O_STR)) { + return ((py_obj_base_t*)arg)->u_str; + } else { + assert(0); + return 0; + } +} + +py_obj_t *py_obj_get_array_fixed_n(py_obj_t o_in, machine_int_t n) { + if (IS_O(o_in, O_TUPLE) || IS_O(o_in, O_LIST)) { + py_obj_base_t *o = o_in; + if (o->u_tuple_list.len != n) { + nlr_jump(py_obj_new_exception_2(q_IndexError, "requested length %d but object has length %d", (void*)n, (void*)o->u_tuple_list.len)); + } + return o->u_tuple_list.items; + } else { + nlr_jump(py_obj_new_exception_2(q_TypeError, "object '%s' is not a tuple or list", py_obj_get_type_str(o_in), NULL)); + } +} + void py_user_get_data(py_obj_t o, machine_uint_t *data1, machine_uint_t *data2) { assert(IS_O(o, O_USER)); if (data1 != NULL) { @@ -630,7 +778,7 @@ py_obj_t py_builtin___build_class__(py_obj_t o_class_fun, py_obj_t o_class_name) } py_obj_t py_builtin_range(py_obj_t o_arg) { - return py_obj_new_range(0, py_get_int(o_arg), 1); + return py_obj_new_range(0, py_obj_get_int(o_arg), 1); } #ifdef WRITE_NATIVE @@ -801,60 +949,6 @@ bool py_obj_is_callable(py_obj_t o_in) { } } -const char *py_obj_get_type_str(py_obj_t o_in) { - if (IS_SMALL_INT(o_in)) { - return "int"; - } else { - py_obj_base_t *o = o_in; - switch (o->kind) { - case O_CONST: - if (o == py_const_none) { - return "NoneType"; - } else { - return "bool"; - } - case O_STR: - return "str"; -#if MICROPY_ENABLE_FLOAT - case O_FLOAT: - return "float"; -#endif - case O_FUN_0: - case O_FUN_1: - case O_FUN_2: - case O_FUN_N: - case O_FUN_BC: - return "function"; - case O_GEN_INSTANCE: - return "generator"; - case O_TUPLE: - return "tuple"; - case O_LIST: - return "list"; - case O_TUPLE_IT: - return "tuple_iterator"; - case O_LIST_IT: - return "list_iterator"; - case O_SET: - return "set"; - case O_MAP: - return "dict"; - case O_OBJ: - { - py_map_elem_t *qn = py_qstr_map_lookup(o->u_obj.class->u_class.locals, qstr_from_str_static("__qualname__"), false); - assert(qn != NULL); - assert(IS_O(qn->value, O_STR)); - return qstr_str(((py_obj_base_t*)qn->value)->u_str); - } - case O_USER: - return o->u_user.info->type_name; - default: - assert(0); - return "UnknownType"; - } - } -} - void py_obj_print(py_obj_t o_in) { if (IS_SMALL_INT(o_in)) { printf("%d", (int)FROM_SMALL_INT(o_in)); @@ -957,98 +1051,6 @@ void py_obj_print(py_obj_t o_in) { } } -int rt_is_true(py_obj_t arg) { - DEBUG_OP_printf("is true %p\n", arg); - if (IS_SMALL_INT(arg)) { - if (FROM_SMALL_INT(arg) == 0) { - return 0; - } else { - return 1; - } - } else if (arg == py_const_none) { - return 0; - } else if (arg == py_const_false) { - return 0; - } else if (arg == py_const_true) { - return 1; - } else { - assert(0); - return 0; - } -} - -machine_int_t py_get_int(py_obj_t arg) { - if (arg == py_const_false) { - return 0; - } else if (arg == py_const_true) { - return 1; - } else if (IS_SMALL_INT(arg)) { - return FROM_SMALL_INT(arg); - } else { - assert(0); - return 0; - } -} - -machine_float_t py_obj_get_float(py_obj_t arg) { - if (arg == py_const_false) { - return 0; - } else if (arg == py_const_true) { - return 1; - } else if (IS_SMALL_INT(arg)) { - return FROM_SMALL_INT(arg); - } else if (IS_O(arg, O_FLOAT)) { - return ((py_obj_base_t*)arg)->u_float; - } else { - assert(0); - return 0; - } -} - -void py_obj_get_complex(py_obj_t arg, py_float_t *real, py_float_t *imag) { - if (arg == py_const_false) { - *real = 0; - *imag = 0; - } else if (arg == py_const_true) { - *real = 1; - *imag = 0; - } else if (IS_SMALL_INT(arg)) { - *real = FROM_SMALL_INT(arg); - *imag = 0; - } else if (IS_O(arg, O_FLOAT)) { - *real = ((py_obj_base_t*)arg)->u_float; - *imag = 0; - } else if (IS_O(arg, O_COMPLEX)) { - *real = ((py_obj_base_t*)arg)->u_complex.real; - *imag = ((py_obj_base_t*)arg)->u_complex.imag; - } else { - assert(0); - *real = 0; - *imag = 0; - } -} - -qstr py_get_qstr(py_obj_t arg) { - if (IS_O(arg, O_STR)) { - return ((py_obj_base_t*)arg)->u_str; - } else { - assert(0); - return 0; - } -} - -py_obj_t *py_get_array_fixed_n(py_obj_t o_in, machine_int_t n) { - if (IS_O(o_in, O_TUPLE) || IS_O(o_in, O_LIST)) { - py_obj_base_t *o = o_in; - if (o->u_tuple_list.len != n) { - nlr_jump(py_obj_new_exception_2(q_IndexError, "requested length %d but object has length %d", (void*)n, (void*)o->u_tuple_list.len)); - } - return o->u_tuple_list.items; - } else { - nlr_jump(py_obj_new_exception_2(q_TypeError, "object '%s' is not a tuple or list", py_obj_get_type_str(o_in), NULL)); - } -} - #define PARSE_DEC_IN_INTG (1) #define PARSE_DEC_IN_FRAC (2) #define PARSE_DEC_IN_EXP (3) diff --git a/py/runtime.h b/py/runtime.h index 24df44abf5..7abb3fb7f9 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -97,12 +97,16 @@ void rt_assign_byte_code(int unique_code_id, byte *code, uint len, int n_args, i void rt_assign_native_code(int unique_code_id, py_fun_t f, uint len, int n_args); void rt_assign_inline_asm_code(int unique_code_id, py_fun_t f, uint len, int n_args); void py_obj_print(py_obj_t o); -int rt_is_true(py_obj_t arg); -machine_int_t py_get_int(py_obj_t arg); -machine_float_t py_obj_get_float(py_obj_t arg); -qstr py_get_qstr(py_obj_t arg); -py_obj_t *py_get_array_fixed_n(py_obj_t o, machine_int_t n); + py_obj_t py_obj_new_int(machine_int_t value); +py_obj_t py_obj_new_str(qstr qstr); + +int rt_is_true(py_obj_t arg); +machine_int_t py_obj_get_int(py_obj_t arg); +machine_float_t py_obj_get_float(py_obj_t arg); +qstr py_obj_get_qstr(py_obj_t arg); +py_obj_t *py_obj_get_array_fixed_n(py_obj_t o, machine_int_t n); + py_obj_t rt_load_const_dec(qstr qstr); py_obj_t rt_load_const_str(qstr qstr); py_obj_t rt_load_name(qstr qstr);