Skip to content

Commit

Permalink
[js] Fix creation of missing outer scopes
Browse files Browse the repository at this point in the history
  • Loading branch information
pmurias committed May 16, 2017
1 parent 4bd35f9 commit e0cd8a5
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions src/vm/js/nqp-runtime/code-ref.js
Expand Up @@ -46,30 +46,40 @@ class CodeRef extends NQPObject {
/* HACK */
let searched = staticCode;

let fakeCtx = new StaticCtx();
let fakeCtx;
let fakeOuterCtx;

let fakeOuterCtx = fakeCtx;

while (searched) {
let staticVars;
if (searched.outerCodeRef && (staticVars = searched.outerCodeRef.staticVars)) {
for (var staticVarName in staticVars) {
fakeCtx[staticVarName] = staticVars[staticVarName];
}
let setOuter = outer => {
if (fakeCtx) {
fakeCtx.$$outer = outer;
} else {
fakeOuterCtx = outer;
}
};

while (true) {
if (searched.outerCtx) {
fakeCtx.$$outer = searched.outerCtx;
setOuter(searched.outerCtx);
break;
}
} else if (searched.outerCodeRef) {
let newFakeCtx = new StaticCtx();

searched = searched.outerCodeRef;
setOuter(newFakeCtx);

if (searched) {
let newFakeCtx = new StaticCtx();
fakeCtx.$$outer = newFakeCtx;
fakeCtx = newFakeCtx;

let outerCode = searched.outerCodeRef;
fakeCtx.$$cuid = searched.outerCodeRef.cuid;
let staticVars = outerCode.staticVars;
if (staticVars) {
for (var staticVarName in staticVars) {
fakeCtx[staticVarName] = staticVars[staticVarName];
}
}
searched = searched.outerCodeRef;
} else {
fakeCtx.$$outer = null;
setOuter(null);
break;
}
}

Expand Down

0 comments on commit e0cd8a5

Please sign in to comment.