Change Py API names, py_get_* -> py_obj_get_*.
This commit is contained in:
parent
014e19fc4d
commit
33af3bf028
296
py/runtime.c
296
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)
|
||||
|
14
py/runtime.h
14
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);
|
||||
|
Loading…
Reference in New Issue
Block a user