diff --git a/py/compile.c b/py/compile.c
index d8e175bb6e779639a2eaa7ff3732ec005455cc57..adf76fb9747e002d259491bccf6d5ab5fd6290ea 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -3456,7 +3456,6 @@ mp_raw_code_t *mp_compile_to_raw_code(mp_parse_tree_t *parse_tree, qstr source_f
                     }
                     comp->emit_method_table = &NATIVE_EMITTER(method_table);
                     comp->emit = emit_native;
-                    EMIT_ARG(set_native_type, MP_EMIT_NATIVE_TYPE_ENABLE, s->emit_options == MP_EMIT_OPT_VIPER, 0);
                     break;
 #endif // MICROPY_EMIT_NATIVE
 
diff --git a/py/emit.h b/py/emit.h
index e9980b58520a4c5b3ee1c7972a7d5d071df54b08..f63bb1d7a51bdafabe827c31ad29d82f28dd2582 100644
--- a/py/emit.h
+++ b/py/emit.h
@@ -51,7 +51,6 @@ typedef enum {
 
 #define MP_EMIT_BREAK_FROM_FOR (0x8000)
 
-#define MP_EMIT_NATIVE_TYPE_ENABLE (0)
 #define MP_EMIT_NATIVE_TYPE_RETURN (1)
 #define MP_EMIT_NATIVE_TYPE_ARG    (2)
 
diff --git a/py/emitnative.c b/py/emitnative.c
index eb402c06b08cd734b178577bd5798fe8429b3020..0794b9d5022729d3d157ed2438cc09f84a109172 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -224,12 +224,7 @@ void EXPORT_FUN(free)(emit_t *emit) {
 }
 
 STATIC void emit_native_set_native_type(emit_t *emit, mp_uint_t op, mp_uint_t arg1, qstr arg2) {
-    switch (op) {
-        case MP_EMIT_NATIVE_TYPE_ENABLE:
-            emit->do_viper_types = arg1;
-            break;
-
-        default: {
+    {
             vtype_kind_t type;
             switch (arg2) {
                 case MP_QSTR_object: type = VTYPE_PYOBJ; break;
@@ -248,8 +243,6 @@ STATIC void emit_native_set_native_type(emit_t *emit, mp_uint_t op, mp_uint_t ar
                 assert(arg1 < emit->local_vtype_alloc);
                 emit->local_vtype[arg1] = type;
             }
-            break;
-        }
     }
 }
 
@@ -262,6 +255,7 @@ STATIC void emit_native_start_pass(emit_t *emit, pass_kind_t pass, scope_t *scop
     DEBUG_printf("start_pass(pass=%u, scope=%p)\n", pass, scope);
 
     emit->pass = pass;
+    emit->do_viper_types = scope->emit_options == MP_EMIT_OPT_VIPER;
     emit->stack_start = 0;
     emit->stack_size = 0;
     emit->last_emit_was_return_value = false;