diff --git a/py/compile.c b/py/compile.c
index b7ec0702996bb190f4c561d6c8233dd8af7b8c4a..7117fcae59ca69d644efd02a36070aa66a339b9b 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -3301,18 +3301,6 @@ STATIC void scope_compute_things(scope_t *scope) {
             scope->num_locals += num_free;
         }
     }
-
-    // compute scope_flags
-    int num_free = 0;
-    for (int i = 0; i < scope->id_info_len; i++) {
-        id_info_t *id = &scope->id_info[i];
-        if (id->kind == ID_INFO_KIND_CELL || id->kind == ID_INFO_KIND_FREE) {
-            num_free += 1;
-        }
-    }
-    if (num_free == 0) {
-        scope->scope_flags |= MP_SCOPE_FLAG_NOFREE;
-    }
 }
 
 mp_obj_t mp_compile(mp_parse_node_t pn, qstr source_file, uint emit_opt, bool is_repl) {
diff --git a/py/runtime0.h b/py/runtime0.h
index 294c17bf62cd01ad346b6af04a5a9ce7bd729a85..1d7d64bea6cccef5da205a465199be2743341686 100644
--- a/py/runtime0.h
+++ b/py/runtime0.h
@@ -26,20 +26,10 @@
 #ifndef __MICROPY_INCLUDED_PY_RUNTIME0_H__
 #define __MICROPY_INCLUDED_PY_RUNTIME0_H__
 
-// taken from python source, Include/code.h
 // These must fit in 8 bits; see scope.h
-#define MP_SCOPE_FLAG_OPTIMISED    0x01
-#define MP_SCOPE_FLAG_NEWLOCALS    0x02
-#define MP_SCOPE_FLAG_VARARGS      0x04
-#define MP_SCOPE_FLAG_VARKEYWORDS  0x08
-#define MP_SCOPE_FLAG_NESTED       0x10
-#define MP_SCOPE_FLAG_GENERATOR    0x20
-/* The MP_SCOPE_FLAG_NOFREE flag is set if there are no free or cell variables.
-   This information is redundant, but it allows a single flag test
-   to determine whether there is any extra work to be done when the
-   call frame is setup.
-*/
-#define MP_SCOPE_FLAG_NOFREE       0x40
+#define MP_SCOPE_FLAG_VARARGS      (0x01)
+#define MP_SCOPE_FLAG_VARKEYWORDS  (0x02)
+#define MP_SCOPE_FLAG_GENERATOR    (0x04)
 
 // types for native (viper) function signature
 #define MP_NATIVE_TYPE_OBJ  (0x00)