fixed bugs 495 and 499
[org.ibex.core.git] / src / org / ibex / js / Interpreter.java
index 59b48c3..92b29a4 100644 (file)
@@ -245,6 +245,11 @@ class Interpreter implements ByteCodes, Tokens {
                     }
                 }
                 if (t != null) {
+                    stack.pop();
+                    stack.push(new CallMarker(this));
+                    stack.push(target);
+                    JSArray args = new JSArray();
+                    args.addElement(val);
                     f = t.f;
                     scope = new Trap.TrapScope(f.parentScope, t, val);
                     pc = -1;
@@ -289,15 +294,12 @@ class Interpreter implements ByteCodes, Tokens {
                         } else {
                             t = ((JS)o).getTrap(v);
                         }
-
                         while (t != null && t.f.numFormalArgs != 0) t = t.next; // get first read trap
-                        if (t != null) {
-                            stack.push(new CallMarker(this));
-                            JSArray args = new JSArray();
-                            stack.push(args);
-                        }
                     }
                     if (t != null) {
+                        stack.push(new CallMarker(this));
+                        JSArray args = new JSArray();
+                        stack.push(args);
                         f = t.f;
                         scope = new Trap.TrapScope(f.parentScope, t, null);
                         ((Trap.TrapScope)scope).cascadeHappened = true;
@@ -367,7 +369,7 @@ class Interpreter implements ByteCodes, Tokens {
 
             case THROW:
                 throw new JSExn(stack.pop());
-
+                /* FIXME
             case MAKE_GRAMMAR: {
                 final Grammar r = (Grammar)arg;
                 final JSScope final_scope = scope;
@@ -389,7 +391,7 @@ class Interpreter implements ByteCodes, Tokens {
                 stack.push(r2);
                 break;
             }
-
+                */
             case ADD_TRAP: case DEL_TRAP: {
                 Object val = stack.pop();
                 Object key = stack.pop();