@@ -946,33 +946,39 @@ STATIC void emit_native_load_local(emit_t *emit, qstr qst, mp_uint_t local_num,
946946 }
947947}
948948
949- STATIC void emit_native_load_name (emit_t * emit , qstr qst ) {
950- DEBUG_printf ("load_name(%s)\n" , qstr_str (qst ));
949+ STATIC void emit_native_load_global (emit_t * emit , qstr qst , int kind ) {
950+ MP_STATIC_ASSERT (MP_F_LOAD_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_F_LOAD_NAME );
951+ MP_STATIC_ASSERT (MP_F_LOAD_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_F_LOAD_GLOBAL );
951952 emit_native_pre (emit );
952- emit_call_with_imm_arg (emit , MP_F_LOAD_NAME , qst , REG_ARG_1 );
953- emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
954- }
955-
956- STATIC void emit_native_load_global (emit_t * emit , qstr qst ) {
957- DEBUG_printf ("load_global(%s)\n" , qstr_str (qst ));
958- emit_native_pre (emit );
959- // check for builtin casting operators
960- if (emit -> do_viper_types && qst == MP_QSTR_int ) {
961- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_INT );
962- } else if (emit -> do_viper_types && qst == MP_QSTR_uint ) {
963- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_UINT );
964- } else if (emit -> do_viper_types && qst == MP_QSTR_ptr ) {
965- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR );
966- } else if (emit -> do_viper_types && qst == MP_QSTR_ptr8 ) {
967- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR8 );
968- } else if (emit -> do_viper_types && qst == MP_QSTR_ptr16 ) {
969- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR16 );
970- } else if (emit -> do_viper_types && qst == MP_QSTR_ptr32 ) {
971- emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR32 );
953+ if (kind == MP_EMIT_IDOP_GLOBAL_NAME ) {
954+ DEBUG_printf ("load_name(%s)\n" , qstr_str (qst ));
972955 } else {
973- emit_call_with_imm_arg (emit , MP_F_LOAD_GLOBAL , qst , REG_ARG_1 );
974- emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
956+ DEBUG_printf ("load_global(%s)\n" , qstr_str (qst ));
957+ if (emit -> do_viper_types ) {
958+ // check for builtin casting operators
959+ if (qst == MP_QSTR_int ) {
960+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_INT );
961+ return ;
962+ } else if (qst == MP_QSTR_uint ) {
963+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_UINT );
964+ return ;
965+ } else if (qst == MP_QSTR_ptr ) {
966+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR );
967+ return ;
968+ } else if (qst == MP_QSTR_ptr8 ) {
969+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR8 );
970+ return ;
971+ } else if (qst == MP_QSTR_ptr16 ) {
972+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR16 );
973+ return ;
974+ } else if (qst == MP_QSTR_ptr32 ) {
975+ emit_post_push_imm (emit , VTYPE_BUILTIN_CAST , VTYPE_PTR32 );
976+ return ;
977+ }
978+ }
975979 }
980+ emit_call_with_imm_arg (emit , MP_F_LOAD_NAME + kind , qst , REG_ARG_1 );
981+ emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
976982}
977983
978984STATIC void emit_native_load_attr (emit_t * emit , qstr qst ) {
@@ -1194,25 +1200,25 @@ STATIC void emit_native_store_local(emit_t *emit, qstr qst, mp_uint_t local_num,
11941200 }
11951201}
11961202
1197- STATIC void emit_native_store_name (emit_t * emit , qstr qst ) {
1198- // mp_store_name, but needs conversion of object (maybe have mp_viper_store_name(obj, type))
1199- vtype_kind_t vtype ;
1200- emit_pre_pop_reg (emit , & vtype , REG_ARG_2 );
1201- assert (vtype == VTYPE_PYOBJ );
1202- emit_call_with_imm_arg (emit , MP_F_STORE_NAME , qst , REG_ARG_1 ); // arg1 = name
1203- emit_post (emit );
1204- }
1205-
1206- STATIC void emit_native_store_global (emit_t * emit , qstr qst ) {
1207- vtype_kind_t vtype = peek_vtype (emit , 0 );
1208- if (vtype == VTYPE_PYOBJ ) {
1203+ STATIC void emit_native_store_global (emit_t * emit , qstr qst , int kind ) {
1204+ MP_STATIC_ASSERT (MP_F_STORE_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_F_STORE_NAME );
1205+ MP_STATIC_ASSERT (MP_F_STORE_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_F_STORE_GLOBAL );
1206+ if (kind == MP_EMIT_IDOP_GLOBAL_NAME ) {
1207+ // mp_store_name, but needs conversion of object (maybe have mp_viper_store_name(obj, type))
1208+ vtype_kind_t vtype ;
12091209 emit_pre_pop_reg (emit , & vtype , REG_ARG_2 );
1210+ assert (vtype == VTYPE_PYOBJ );
12101211 } else {
1211- emit_pre_pop_reg (emit , & vtype , REG_ARG_1 );
1212- emit_call_with_imm_arg (emit , MP_F_CONVERT_NATIVE_TO_OBJ , vtype , REG_ARG_2 ); // arg2 = type
1213- ASM_MOV_REG_REG (emit -> as , REG_ARG_2 , REG_RET );
1212+ vtype_kind_t vtype = peek_vtype (emit , 0 );
1213+ if (vtype == VTYPE_PYOBJ ) {
1214+ emit_pre_pop_reg (emit , & vtype , REG_ARG_2 );
1215+ } else {
1216+ emit_pre_pop_reg (emit , & vtype , REG_ARG_1 );
1217+ emit_call_with_imm_arg (emit , MP_F_CONVERT_NATIVE_TO_OBJ , vtype , REG_ARG_2 ); // arg2 = type
1218+ ASM_MOV_REG_REG (emit -> as , REG_ARG_2 , REG_RET );
1219+ }
12141220 }
1215- emit_call_with_imm_arg (emit , MP_F_STORE_GLOBAL , qst , REG_ARG_1 ); // arg1 = name
1221+ emit_call_with_imm_arg (emit , MP_F_STORE_NAME + kind , qst , REG_ARG_1 ); // arg1 = name
12161222 emit_post (emit );
12171223}
12181224
@@ -1417,15 +1423,11 @@ STATIC void emit_native_delete_local(emit_t *emit, qstr qst, mp_uint_t local_num
14171423 }
14181424}
14191425
1420- STATIC void emit_native_delete_name (emit_t * emit , qstr qst ) {
1421- emit_native_pre (emit );
1422- emit_call_with_imm_arg (emit , MP_F_DELETE_NAME , qst , REG_ARG_1 );
1423- emit_post (emit );
1424- }
1425-
1426- STATIC void emit_native_delete_global (emit_t * emit , qstr qst ) {
1426+ STATIC void emit_native_delete_global (emit_t * emit , qstr qst , int kind ) {
1427+ MP_STATIC_ASSERT (MP_F_DELETE_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_F_DELETE_NAME );
1428+ MP_STATIC_ASSERT (MP_F_DELETE_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_F_DELETE_GLOBAL );
14271429 emit_native_pre (emit );
1428- emit_call_with_imm_arg (emit , MP_F_DELETE_GLOBAL , qst , REG_ARG_1 );
1430+ emit_call_with_imm_arg (emit , MP_F_DELETE_NAME + kind , qst , REG_ARG_1 );
14291431 emit_post (emit );
14301432}
14311433
@@ -2194,17 +2196,14 @@ const emit_method_table_t EXPORT_FUN(method_table) = {
21942196
21952197 {
21962198 emit_native_load_local ,
2197- emit_native_load_name ,
21982199 emit_native_load_global ,
21992200 },
22002201 {
22012202 emit_native_store_local ,
2202- emit_native_store_name ,
22032203 emit_native_store_global ,
22042204 },
22052205 {
22062206 emit_native_delete_local ,
2207- emit_native_delete_name ,
22082207 emit_native_delete_global ,
22092208 },
22102209
0 commit comments