/** Encapsulates a single JS interpreter (ie call stack) */
class Interpreter implements ByteCodes, Tokens {
-
+ private static final int MAX_STACK_SIZE = 512;
// Thread-Interpreter Mapping /////////////////////////////////////////////////////////////////////////
while (t != null && t.f.numFormalArgs == 0) t = t.next;
if (t == null) { target = ts.t.trapee; key = ts.t.name; }
- } else if (target instanceof Trap.TrapScope && key.equals(((Trap.TrapScope)target).t.name)) {
- throw je("tried to put to " + key + " inside a trap it owns; use cascade instead");
-
} else if (target instanceof JS) {
if (target instanceof JSScope) {
JSScope p = (JSScope)target; // search the scope-path for the trap
}
if (t != null) {
stack.push(new CallMarker(this));
+ if(stack.size() > MAX_STACK_SIZE) throw new JSExn("stack overflow");
JSArray args = new JSArray();
args.addElement(val);
stack.push(args);
}
if (t != null) {
stack.push(new CallMarker(this));
+ if(stack.size() > MAX_STACK_SIZE) throw new JSExn("stack overflow");
JSArray args = new JSArray();
stack.push(args);
f = t.f;
JSArray arguments = new JSArray();
for(int i=0; i<numArgs; i++) arguments.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
stack.push(new CallMarker(this));
+ if(stack.size() > MAX_STACK_SIZE) throw new JSExn("stack overflow");
stack.push(arguments);
f = (JSFunction)object;
scope = new JSScope(f.parentScope);