diff options
Diffstat (limited to 'py')
-rw-r--r-- | py/bc0.h | 1 | ||||
-rw-r--r-- | py/compile.c | 27 | ||||
-rw-r--r-- | py/emit.h | 4 | ||||
-rw-r--r-- | py/emitbc.c | 8 | ||||
-rw-r--r-- | py/emitcpy.c | 9 | ||||
-rw-r--r-- | py/emitnative.c | 10 | ||||
-rw-r--r-- | py/nativeglue.c | 1 | ||||
-rw-r--r-- | py/runtime.c | 7 | ||||
-rw-r--r-- | py/runtime.h | 4 | ||||
-rw-r--r-- | py/runtime0.h | 1 | ||||
-rw-r--r-- | py/showbc.c | 7 | ||||
-rw-r--r-- | py/vm.c | 6 | ||||
-rw-r--r-- | py/vmentrytable.h | 1 |
13 files changed, 28 insertions, 58 deletions
@@ -33,7 +33,6 @@ #define MP_BC_LOAD_CONST_NONE (0x11) #define MP_BC_LOAD_CONST_TRUE (0x12) #define MP_BC_LOAD_CONST_SMALL_INT (0x14) // signed var-int -#define MP_BC_LOAD_CONST_BYTES (0x15) // qstr #define MP_BC_LOAD_CONST_STRING (0x16) // qstr #define MP_BC_LOAD_CONST_OBJ (0x17) // ptr #define MP_BC_LOAD_NULL (0x18) diff --git a/py/compile.c b/py/compile.c index 45217cfe99..141cd2db99 100644 --- a/py/compile.c +++ b/py/compile.c @@ -1078,7 +1078,7 @@ STATIC void compile_funcdef_param(compiler_t *comp, mp_parse_node_t pn) { if (comp->have_star) { comp->num_dict_params += 1; #if MICROPY_EMIT_CPYTHON - EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pn_id), false); + EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pn_id)); compile_node(comp, pn_equal); #else // in Micro Python we put the default dict parameters into a dictionary using the bytecode @@ -1096,7 +1096,7 @@ STATIC void compile_funcdef_param(compiler_t *comp, mp_parse_node_t pn) { // compile value then key, then store it to the dict compile_node(comp, pn_equal); - EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pn_id), false); + EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pn_id)); EMIT(store_map); #endif } else { @@ -1178,7 +1178,7 @@ STATIC qstr compile_classdef_helper(compiler_t *comp, mp_parse_node_struct_t *pn close_over_variables_etc(comp, cscope, 0, 0); // get its name - EMIT_ARG(load_const_str, cscope->simple_name, false); + EMIT_ARG(load_const_str, cscope->simple_name); // nodes[1] has parent classes, if any // empty parenthesis (eg class C():) gets here as an empty PN_classdef_2 and needs special handling @@ -1553,7 +1553,7 @@ STATIC void compile_import_from(compiler_t *comp, mp_parse_node_struct_t *pns) { #if MICROPY_EMIT_CPYTHON EMIT_ARG(load_const_verbatim_strn, "('*',)", 6); #else - EMIT_ARG(load_const_str, MP_QSTR__star_, false); + EMIT_ARG(load_const_str, MP_QSTR__star_); EMIT_ARG(build_tuple, 1); #endif @@ -1597,7 +1597,7 @@ STATIC void compile_import_from(compiler_t *comp, mp_parse_node_struct_t *pns) { assert(MP_PARSE_NODE_IS_STRUCT_KIND(pn_nodes[i], PN_import_as_name)); mp_parse_node_struct_t *pns3 = (mp_parse_node_struct_t*)pn_nodes[i]; qstr id2 = MP_PARSE_NODE_LEAF_ARG(pns3->nodes[0]); // should be id - EMIT_ARG(load_const_str, id2, false); + EMIT_ARG(load_const_str, id2); } EMIT_ARG(build_tuple, n); #endif @@ -2531,7 +2531,7 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, mp_parse_node_t pn_ar compile_syntax_error(comp, (mp_parse_node_t)pns_arg, "LHS of keyword arg must be an id"); return; } - EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pns_arg->nodes[0]), false); + EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pns_arg->nodes[0])); compile_node(comp, pns2->nodes[0]); n_keyword += 1; } else { @@ -2979,8 +2979,17 @@ STATIC void compile_node(compiler_t *comp, mp_parse_node_t pn) { mp_uint_t arg = MP_PARSE_NODE_LEAF_ARG(pn); switch (MP_PARSE_NODE_LEAF_KIND(pn)) { case MP_PARSE_NODE_ID: compile_load_id(comp, arg); break; - case MP_PARSE_NODE_STRING: EMIT_ARG(load_const_str, arg, false); break; - case MP_PARSE_NODE_BYTES: EMIT_ARG(load_const_str, arg, true); break; + case MP_PARSE_NODE_STRING: EMIT_ARG(load_const_str, arg); break; + case MP_PARSE_NODE_BYTES: + // only create and load the actual bytes object on the last pass + if (comp->pass != MP_PASS_EMIT) { + EMIT_ARG(load_const_obj, mp_const_none); + } else { + mp_uint_t len; + const byte *data = qstr_data(arg, &len); + EMIT_ARG(load_const_obj, mp_obj_new_bytes(data, len)); + } + break; case MP_PARSE_NODE_TOKEN: default: if (arg == MP_TOKEN_NEWLINE) { // this can occur when file_input lets through a NEWLINE (eg if file starts with a newline) @@ -3367,7 +3376,7 @@ STATIC void compile_scope(compiler_t *comp, scope_t *scope, pass_kind_t pass) { compile_load_id(comp, MP_QSTR___name__); compile_store_id(comp, MP_QSTR___module__); - EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pns->nodes[0]), false); // 0 is class name + EMIT_ARG(load_const_str, MP_PARSE_NODE_LEAF_ARG(pns->nodes[0])); // 0 is class name compile_store_id(comp, MP_QSTR___qualname__); check_for_doc_string(comp, pns->nodes[2]); @@ -84,7 +84,7 @@ typedef struct _emit_method_table_t { void (*import_star)(emit_t *emit); void (*load_const_tok)(emit_t *emit, mp_token_kind_t tok); void (*load_const_small_int)(emit_t *emit, mp_int_t arg); - void (*load_const_str)(emit_t *emit, qstr qst, bool bytes); + void (*load_const_str)(emit_t *emit, qstr qst); void (*load_const_obj)(emit_t *emit, void *obj); void (*load_null)(emit_t *emit); void (*load_attr)(emit_t *emit, qstr qst); @@ -212,7 +212,7 @@ void mp_emit_bc_import_from(emit_t *emit, qstr qst); void mp_emit_bc_import_star(emit_t *emit); void mp_emit_bc_load_const_tok(emit_t *emit, mp_token_kind_t tok); void mp_emit_bc_load_const_small_int(emit_t *emit, mp_int_t arg); -void mp_emit_bc_load_const_str(emit_t *emit, qstr qst, bool bytes); +void mp_emit_bc_load_const_str(emit_t *emit, qstr qst); void mp_emit_bc_load_const_obj(emit_t *emit, void *obj); void mp_emit_bc_load_null(emit_t *emit); void mp_emit_bc_load_attr(emit_t *emit, qstr qst); diff --git a/py/emitbc.c b/py/emitbc.c index f99e703220..fef9054c75 100644 --- a/py/emitbc.c +++ b/py/emitbc.c @@ -486,13 +486,9 @@ void mp_emit_bc_load_const_small_int(emit_t *emit, mp_int_t arg) { } } -void mp_emit_bc_load_const_str(emit_t *emit, qstr qst, bool bytes) { +void mp_emit_bc_load_const_str(emit_t *emit, qstr qst) { emit_bc_pre(emit, 1); - if (bytes) { - emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_CONST_BYTES, qst); - } else { - emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_CONST_STRING, qst); - } + emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_CONST_STRING, qst); } void mp_emit_bc_load_const_obj(emit_t *emit, void *obj) { diff --git a/py/emitcpy.c b/py/emitcpy.c index dc96c529fb..3bdec1716d 100644 --- a/py/emitcpy.c +++ b/py/emitcpy.c @@ -176,7 +176,7 @@ STATIC void emit_cpy_load_const_small_int(emit_t *emit, mp_int_t arg) { } } -STATIC void print_quoted_str(qstr qst, bool bytes) { +STATIC void print_quoted_str(qstr qst) { const char *str = qstr_str(qst); int len = strlen(str); bool has_single_quote = false; @@ -188,9 +188,6 @@ STATIC void print_quoted_str(qstr qst, bool bytes) { has_double_quote = true; } } - if (bytes) { - printf("b"); - } int quote_char = '\''; if (has_single_quote && !has_double_quote) { quote_char = '"'; @@ -213,11 +210,11 @@ STATIC void print_quoted_str(qstr qst, bool bytes) { printf("%c", quote_char); } -STATIC void emit_cpy_load_const_str(emit_t *emit, qstr qst, bool bytes) { +STATIC void emit_cpy_load_const_str(emit_t *emit, qstr qst) { emit_pre(emit, 1, 3); if (emit->pass == MP_PASS_EMIT) { printf("LOAD_CONST "); - print_quoted_str(qst, bytes); + print_quoted_str(qst); printf("\n"); } } diff --git a/py/emitnative.c b/py/emitnative.c index 974b8fc7b5..0d3f78da4e 100644 --- a/py/emitnative.c +++ b/py/emitnative.c @@ -167,7 +167,6 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = { [MP_F_CONVERT_OBJ_TO_NATIVE] = 2, [MP_F_CONVERT_NATIVE_TO_OBJ] = 2, - [MP_F_LOAD_CONST_BYTES] = 1, [MP_F_LOAD_NAME] = 1, [MP_F_LOAD_GLOBAL] = 1, [MP_F_LOAD_BUILD_CLASS] = 0, @@ -1295,7 +1294,7 @@ STATIC void emit_native_load_const_small_int(emit_t *emit, mp_int_t arg) { } } -STATIC void emit_native_load_const_str(emit_t *emit, qstr qst, bool bytes) { +STATIC void emit_native_load_const_str(emit_t *emit, qstr qst) { emit_native_pre(emit); // TODO: Eventually we want to be able to work with raw pointers in viper to // do native array access. For now we just load them as any other object. @@ -1308,12 +1307,7 @@ STATIC void emit_native_load_const_str(emit_t *emit, qstr qst, bool bytes) { } else */ { - if (bytes) { - emit_call_with_imm_arg(emit, MP_F_LOAD_CONST_BYTES, qst, REG_ARG_1); - emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET); - } else { - emit_post_push_imm(emit, VTYPE_PYOBJ, (mp_uint_t)MP_OBJ_NEW_QSTR(qst)); - } + emit_post_push_imm(emit, VTYPE_PYOBJ, (mp_uint_t)MP_OBJ_NEW_QSTR(qst)); } } diff --git a/py/nativeglue.c b/py/nativeglue.c index 4252bb88cd..87213710cf 100644 --- a/py/nativeglue.c +++ b/py/nativeglue.c @@ -92,7 +92,6 @@ void mp_native_raise(mp_obj_t o) { void *const mp_fun_table[MP_F_NUMBER_OF] = { mp_convert_obj_to_native, mp_convert_native_to_obj, - mp_load_const_bytes, mp_load_name, mp_load_global, mp_load_build_class, diff --git a/py/runtime.c b/py/runtime.c index 5fcfa6f905..fb592920b4 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -104,13 +104,6 @@ void mp_deinit(void) { #endif } -mp_obj_t mp_load_const_bytes(qstr qst) { - DEBUG_OP_printf("load b'%s'\n", qstr_str(qst)); - mp_uint_t len; - const byte *data = qstr_data(qst, &len); - return mp_obj_new_bytes(data, len); -} - mp_obj_t mp_load_name(qstr qst) { // logic: search locals, globals, builtins DEBUG_OP_printf("load name %s\n", qstr_str(qst)); diff --git a/py/runtime.h b/py/runtime.h index 419b1d059b..2282ea02cc 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -88,10 +88,6 @@ void mp_delete_global(qstr qst); mp_obj_t mp_unary_op(mp_uint_t op, mp_obj_t arg); mp_obj_t mp_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs); -mp_obj_t mp_load_const_int(qstr qst); -mp_obj_t mp_load_const_dec(qstr qst); -mp_obj_t mp_load_const_bytes(qstr qst); - mp_obj_t mp_call_function_0(mp_obj_t fun); mp_obj_t mp_call_function_1(mp_obj_t fun, mp_obj_t arg); mp_obj_t mp_call_function_2(mp_obj_t fun, mp_obj_t arg1, mp_obj_t arg2); diff --git a/py/runtime0.h b/py/runtime0.h index de637fb469..294c17bf62 100644 --- a/py/runtime0.h +++ b/py/runtime0.h @@ -109,7 +109,6 @@ typedef enum { typedef enum { MP_F_CONVERT_OBJ_TO_NATIVE = 0, MP_F_CONVERT_NATIVE_TO_OBJ, - MP_F_LOAD_CONST_BYTES, MP_F_LOAD_NAME, MP_F_LOAD_GLOBAL, MP_F_LOAD_BUILD_CLASS, diff --git a/py/showbc.c b/py/showbc.c index e08140e6b6..2da8d3febe 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -155,11 +155,6 @@ const byte *mp_bytecode_print_str(const byte *ip) { break; } - case MP_BC_LOAD_CONST_BYTES: - DECODE_QSTR; - printf("LOAD_CONST_BYTES %s", qstr_str(qst)); - break; - case MP_BC_LOAD_CONST_STRING: DECODE_QSTR; printf("LOAD_CONST_STRING '%s'", qstr_str(qst)); @@ -168,7 +163,7 @@ const byte *mp_bytecode_print_str(const byte *ip) { case MP_BC_LOAD_CONST_OBJ: DECODE_PTR; printf("LOAD_CONST_OBJ %p=", (void*)unum); - mp_obj_print((mp_obj_t)unum, PRINT_REPR); + mp_obj_print_helper(&mp_plat_print, (mp_obj_t)unum, PRINT_REPR); break; case MP_BC_LOAD_NULL: @@ -205,12 +205,6 @@ dispatch_loop: DISPATCH(); } - ENTRY(MP_BC_LOAD_CONST_BYTES): { - DECODE_QSTR; - PUSH(mp_load_const_bytes(qst)); - DISPATCH(); - } - ENTRY(MP_BC_LOAD_CONST_STRING): { DECODE_QSTR; PUSH(MP_OBJ_NEW_QSTR(qst)); diff --git a/py/vmentrytable.h b/py/vmentrytable.h index 413914b6ef..d71a8d4f6f 100644 --- a/py/vmentrytable.h +++ b/py/vmentrytable.h @@ -35,7 +35,6 @@ static void* entry_table[256] = { [MP_BC_LOAD_CONST_NONE] = &&entry_MP_BC_LOAD_CONST_NONE, [MP_BC_LOAD_CONST_TRUE] = &&entry_MP_BC_LOAD_CONST_TRUE, [MP_BC_LOAD_CONST_SMALL_INT] = &&entry_MP_BC_LOAD_CONST_SMALL_INT, - [MP_BC_LOAD_CONST_BYTES] = &&entry_MP_BC_LOAD_CONST_BYTES, [MP_BC_LOAD_CONST_STRING] = &&entry_MP_BC_LOAD_CONST_STRING, [MP_BC_LOAD_CONST_OBJ] = &&entry_MP_BC_LOAD_CONST_OBJ, [MP_BC_LOAD_NULL] = &&entry_MP_BC_LOAD_NULL, |