diff --git a/py/compile.c b/py/compile.c
index 7117fca..8580c8c 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2786,6 +2786,7 @@
     compile_scope_func_lambda_param(comp, pn, PN_varargslist_name, PN_varargslist_star, PN_varargslist_dbl_star);
 }
 
+#if MICROPY_EMIT_NATIVE
 STATIC void compile_scope_func_annotations(compiler_t *comp, mp_parse_node_t pn) {
     if (!MP_PARSE_NODE_IS_STRUCT(pn)) {
         // no annotation
@@ -2816,22 +2817,19 @@
     mp_parse_node_t pn_annotation = pns->nodes[1];
 
     if (!MP_PARSE_NODE_IS_NULL(pn_annotation)) {
-        #if MICROPY_EMIT_NATIVE
         qstr param_name = MP_PARSE_NODE_LEAF_ARG(pns->nodes[0]);
         id_info_t *id_info = scope_find(comp->scope_cur, param_name);
         assert(id_info != NULL);
 
-        if (comp->scope_cur->emit_options == MP_EMIT_OPT_VIPER) {
-            if (MP_PARSE_NODE_IS_ID(pn_annotation)) {
-                qstr arg_type = MP_PARSE_NODE_LEAF_ARG(pn_annotation);
-                EMIT_ARG(set_native_type, MP_EMIT_NATIVE_TYPE_ARG, id_info->local_num, arg_type);
-            } else {
-                compile_syntax_error(comp, pn_annotation, "parameter annotation must be an identifier");
-            }
+        if (MP_PARSE_NODE_IS_ID(pn_annotation)) {
+            qstr arg_type = MP_PARSE_NODE_LEAF_ARG(pn_annotation);
+            EMIT_ARG(set_native_type, MP_EMIT_NATIVE_TYPE_ARG, id_info->local_num, arg_type);
+        } else {
+            compile_syntax_error(comp, pn_annotation, "parameter annotation must be an identifier");
         }
-        #endif // MICROPY_EMIT_NATIVE
     }
 }
+#endif // MICROPY_EMIT_NATIVE
 
 STATIC void compile_scope_comp_iter(compiler_t *comp, mp_parse_node_t pn_iter, mp_parse_node_t pn_inner_expr, int l_top, int for_depth) {
     tail_recursion:
@@ -2954,8 +2952,11 @@
         if (comp->pass == MP_PASS_SCOPE) {
             comp->have_star = false;
             apply_to_single_or_list(comp, pns->nodes[1], PN_typedargslist, compile_scope_func_param);
-        } else {
+        }
+        #if MICROPY_EMIT_NATIVE
+        else if (scope->emit_options == MP_EMIT_OPT_VIPER) {
             // compile annotations; only needed on latter compiler passes
+            // only needed for viper emitter
 
             // argument annotations
             apply_to_single_or_list(comp, pns->nodes[1], PN_typedargslist, compile_scope_func_annotations);
@@ -2963,19 +2964,16 @@
             // pns->nodes[2] is return/whole function annotation
             mp_parse_node_t pn_annotation = pns->nodes[2];
             if (!MP_PARSE_NODE_IS_NULL(pn_annotation)) {
-                #if MICROPY_EMIT_NATIVE
-                if (scope->emit_options == MP_EMIT_OPT_VIPER) {
-                    // nodes[2] can be null or a test-expr
-                    if (MP_PARSE_NODE_IS_ID(pn_annotation)) {
-                        qstr ret_type = MP_PARSE_NODE_LEAF_ARG(pn_annotation);
-                        EMIT_ARG(set_native_type, MP_EMIT_NATIVE_TYPE_RETURN, 0, ret_type);
-                    } else {
-                        compile_syntax_error(comp, pn_annotation, "return annotation must be an identifier");
-                    }
+                // nodes[2] can be null or a test-expr
+                if (MP_PARSE_NODE_IS_ID(pn_annotation)) {
+                    qstr ret_type = MP_PARSE_NODE_LEAF_ARG(pn_annotation);
+                    EMIT_ARG(set_native_type, MP_EMIT_NATIVE_TYPE_RETURN, 0, ret_type);
+                } else {
+                    compile_syntax_error(comp, pn_annotation, "return annotation must be an identifier");
                 }
-                #endif // MICROPY_EMIT_NATIVE
             }
         }
+        #endif // MICROPY_EMIT_NATIVE
 
         compile_node(comp, pns->nodes[3]); // 3 is function body
         // emit return if it wasn't the last opcode
