X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FTrap.java;h=248ae6ae816ccfb923e682571857e4a6440cb809;hb=ce791e4058158295bce9cf7b6698c2b565d571d7;hp=4b2f92aecc07205a70ea71921c35f1aad0b2f4e0;hpb=3591b88b94a6bb378af3d4abe6eb5233ce583104;p=org.ibex.core.git diff --git a/src/org/ibex/js/Trap.java b/src/org/ibex/js/Trap.java index 4b2f92a..248ae6a 100644 --- a/src/org/ibex/js/Trap.java +++ b/src/org/ibex/js/Trap.java @@ -10,17 +10,17 @@ package org.ibex.js; class Trap { JS trapee = null; ///< the box on which this trap was placed - Object name = null; ///< the property that the trap was placed on + JS name = null; ///< the property that the trap was placed on JSFunction f = null; ///< the function for this trap Trap next = null; ///< the next trap down the trap stack - Trap(JS b, String n, JSFunction f, Trap nx) { + Trap(JS b, JS n, JSFunction f, Trap nx) { trapee = b; name = n; this.f = f; this.next = nx; } - private static final JSFunction putInvoker = new JSFunction("putInvoker", 0, null); - private static final JSFunction getInvoker = new JSFunction("getInvoker", 0, null); + static final JSFunction putInvoker = new JSFunction("putInvoker", 0, null); + static final JSFunction getInvoker = new JSFunction("getInvoker", 0, null); static { putInvoker.add(1, ByteCodes.PUT, null); @@ -29,7 +29,10 @@ class Trap { getInvoker.add(2, Tokens.RETURN, null); } - void invoke(Object value) throws JSExn { + boolean readTrap() { return f.numFormalArgs == 0; } + boolean writeTrap() { return f.numFormalArgs != 0; } + + void invoke(JS value) throws JSExn { Interpreter i = new Interpreter(putInvoker, false, null); i.stack.push(trapee); i.stack.push(name); @@ -37,7 +40,7 @@ class Trap { i.resume(); } - Object invoke() throws JSExn { + JS invoke() throws JSExn { Interpreter i = new Interpreter(getInvoker, false, null); i.stack.push(trapee); i.stack.push(name); @@ -45,7 +48,7 @@ class Trap { } // FIXME: review; is necessary? - static class TrapScope extends JSScope { + /*static class TrapScope extends JSScope { Trap t; Object val = null; boolean cascadeHappened = false; @@ -56,6 +59,6 @@ class Trap { if (key.equals("trapname")) return t.name; return super.get(key); } - } + }*/ }