Commit 40c1272e authored by Damien George's avatar Damien George
Browse files

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).
parent a0973b09
...@@ -2190,9 +2190,10 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, mp_parse_node_t pn_ar ...@@ -2190,9 +2190,10 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, mp_parse_node_t pn_ar
compile_load_id(comp, MP_QSTR___class__); compile_load_id(comp, MP_QSTR___class__);
// look for first argument to function (assumes it's "self") // look for first argument to function (assumes it's "self")
for (int i = 0; i < comp->scope_cur->id_info_len; i++) { 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 // 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); EMIT_ARG(call_function, 2, 0, 0);
return; return;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment