+++ /dev/null
-// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL]
-package org.xwt.js;
-
-import java.util.*;
-import org.xwt.util.*;
-import java.io.*;
-
-/**
- * This class encapsulates a single trap placed on a given node. The
- * traps for a given property name on a given box are maintained as a
- * linked list stack, with the most recently placed trap at the head
- * of the list.
- */
-class Trap {
-
- JS trapee = null; ///< the box on which this trap was placed
- Object 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) {
- 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 {
- putInvoker.add(1, ByteCodes.PUT, null);
- putInvoker.add(2, Tokens.RETURN, null);
- getInvoker.add(1, ByteCodes.GET, null);
- getInvoker.add(2, Tokens.RETURN, null);
- }
-
- void invoke(Object value) throws JSExn {
- Interpreter i = new Interpreter(putInvoker, false, null);
- i.stack.push(trapee);
- i.stack.push(name);
- i.stack.push(value);
- i.resume();
- }
-
- Object invoke() throws JSExn {
- Interpreter i = new Interpreter(getInvoker, false, null);
- i.stack.push(trapee);
- i.stack.push(name);
- return i.resume();
- }
-
- // FIXME: review; is necessary?
- static class TrapScope extends JSScope {
- Trap t;
- Object val = null;
- boolean cascadeHappened = false;
- public TrapScope(JSScope parent, Trap t, Object val) { super(parent); this.t = t; this.val = val; }
- public Object get(Object key) throws JSExn {
- if (key.equals("trapee")) return t.trapee;
- if (key.equals("callee")) return t.f;
- if (key.equals("trapname")) return t.name;
- return super.get(key);
- }
- }
-}
-