py/compile: When compiling super(), handle closed-over self variable.
The self variable may be closed-over in the function, and in that case the
call to super() should load the contents of the closure cell using
LOAD_DEREF (before this patch it would just load the cell directly).
diff --git a/py/compile.c b/py/compile.c
index 2fbc19c..1e49a35 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2190,9 +2190,10 @@
compile_load_id(comp, MP_QSTR___class__);
// look for first argument to function (assumes it's "self")
for (int i = 0; i < comp->scope_cur->id_info_len; i++) {
- if (comp->scope_cur->id_info[i].flags & ID_FLAG_IS_PARAM) {
+ id_info_t *id = &comp->scope_cur->id_info[i];
+ if (id->flags & ID_FLAG_IS_PARAM) {
// first argument found; load it and call super
- EMIT_LOAD_FAST(MP_QSTR_, comp->scope_cur->id_info[i].local_num);
+ compile_load_id(comp, id->qst);
EMIT_ARG(call_function, 2, 0, 0);
return;
}