fix: catch variable causing issues
This commit is contained in:
parent
bed4014bef
commit
45f52ff123
@ -15,7 +15,9 @@ import me.topchetoeu.jscript.common.environment.Key;
|
|||||||
import me.topchetoeu.jscript.common.mapping.FunctionMap;
|
import me.topchetoeu.jscript.common.mapping.FunctionMap;
|
||||||
import me.topchetoeu.jscript.common.mapping.FunctionMap.FunctionMapBuilder;
|
import me.topchetoeu.jscript.common.mapping.FunctionMap.FunctionMapBuilder;
|
||||||
import me.topchetoeu.jscript.common.parsing.Location;
|
import me.topchetoeu.jscript.common.parsing.Location;
|
||||||
|
import me.topchetoeu.jscript.compilation.control.TryNode;
|
||||||
import me.topchetoeu.jscript.compilation.scope.FunctionScope;
|
import me.topchetoeu.jscript.compilation.scope.FunctionScope;
|
||||||
|
import me.topchetoeu.jscript.compilation.scope.Variable;
|
||||||
|
|
||||||
public final class CompileResult {
|
public final class CompileResult {
|
||||||
public static final Key<Void> DEBUG_LOG = new Key<>();
|
public static final Key<Void> DEBUG_LOG = new Key<>();
|
||||||
@ -28,6 +30,7 @@ public final class CompileResult {
|
|||||||
public final Environment env;
|
public final Environment env;
|
||||||
public int length;
|
public int length;
|
||||||
public final FunctionScope scope;
|
public final FunctionScope scope;
|
||||||
|
public final Map<TryNode, Variable> catchBindings = new HashMap<>();
|
||||||
|
|
||||||
public int temp() {
|
public int temp() {
|
||||||
instructions.add(null);
|
instructions.add(null);
|
||||||
|
@ -27,7 +27,14 @@ public class TryNode extends Node {
|
|||||||
}
|
}
|
||||||
@Override public void compileFunctions(CompileResult target) {
|
@Override public void compileFunctions(CompileResult target) {
|
||||||
tryBody.compileFunctions(target);
|
tryBody.compileFunctions(target);
|
||||||
if (catchBody != null) catchBody.compileFunctions(target);
|
if (catchBody != null) {
|
||||||
|
if (captureName != null) {
|
||||||
|
var index = target.scope.defineCatch(captureName);
|
||||||
|
target.catchBindings.put(this, index);
|
||||||
|
}
|
||||||
|
catchBody.compileFunctions(target);
|
||||||
|
if (captureName != null) target.scope.undefineCatch();
|
||||||
|
}
|
||||||
if (finallyBody != null) finallyBody.compileFunctions(target);
|
if (finallyBody != null) finallyBody.compileFunctions(target);
|
||||||
}
|
}
|
||||||
@Override public void compile(CompileResult target, boolean pollute, BreakpointType bpt) {
|
@Override public void compile(CompileResult target, boolean pollute, BreakpointType bpt) {
|
||||||
@ -45,11 +52,10 @@ public class TryNode extends Node {
|
|||||||
catchStart = target.size() - start;
|
catchStart = target.size() - start;
|
||||||
|
|
||||||
if (captureName != null) {
|
if (captureName != null) {
|
||||||
var catchVar = target.scope.defineCatch(captureName);
|
var catchVar = target.catchBindings.get(this);
|
||||||
target.add(Instruction.loadError()).setLocation(catchBody.loc());
|
target.add(Instruction.loadError()).setLocation(catchBody.loc());
|
||||||
target.add(catchVar.index().toSet(false)).setLocation(catchBody.loc());
|
target.add(catchVar.index().toSet(false)).setLocation(catchBody.loc());
|
||||||
catchBody.compile(target, false);
|
catchBody.compile(target, false);
|
||||||
target.scope.undefineCatch();
|
|
||||||
}
|
}
|
||||||
else catchBody.compile(target, false);
|
else catchBody.compile(target, false);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user