X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Futil%2FJSObject.java;h=ab747e2035a2aae7f87feecd06489c5e904b72c9;hb=ab013ce8da25c0f90bfb9b13a0e42b9b1fb52e0d;hp=4692aff11afc2f8bddf3ab4ecc073821018855aa;hpb=50f669dc73cb77ef8a0b053863a8653c6b181886;p=org.ibex.core.git diff --git a/src/org/xwt/util/JSObject.java b/src/org/xwt/util/JSObject.java index 4692aff..ab747e2 100644 --- a/src/org/xwt/util/JSObject.java +++ b/src/org/xwt/util/JSObject.java @@ -77,6 +77,7 @@ public class JSObject implements Scriptable { public JSObject() { } public JSObject(boolean privateVars) { this.privateVars = privateVars; } + public Object get(String name) { return get(name, null); } public Object get(String name, Scriptable start) { if (name == null || name.equals("") || properties == null) return null; @@ -111,11 +112,25 @@ public class JSObject implements Scriptable { properties.put(name, null, value); } - /** if a put is made directly to us (rather than cascading up to Top), it must be a var-declaration */ + /** + * if a put is made directly to us (rather than cascading up to + * Top), by a script for whom we are in the ultimate parent + * scope, it must be a var-declaration + */ + public void put(String name, Object value) { put(name, null, value); } public void put(String name, Scriptable start, Object value) { if (sealed) return; if (name == null || name.equals("")) return; - putPrivately(name, value, getCurrentFunctionSourceName()); + + if (getPrivately(name, getCurrentFunctionSourceName()) != null) + putPrivately(name, value, getCurrentFunctionSourceName()); + + for(Scriptable cur = Context.enter().currentFunction; cur != null; cur = cur.getParentScope()) + if (cur == this) { + putPrivately(name, value, getCurrentFunctionSourceName()); + return; + } + putGlobally(name, start, value); } /** if privateVars is enabled, we always return false, to see if the put propagates up to Top */ @@ -171,9 +186,9 @@ public class JSObject implements Scriptable { public void setPrototype(Scriptable p) { } public void delete(int i) { } public Object getDefaultValue(Class hint) { return "Top"; } - public void put(int i, Scriptable start, Object value) { } - public Object get(int i, Scriptable start) { return null; } - public boolean has(int i, Scriptable start) { return false; } + public void put(int i, Scriptable start, Object value) { put(String.valueOf(i), start, value); } + public Object get(int i, Scriptable start) { return get(String.valueOf(i), start); } + public boolean has(int i, Scriptable start) { return has(String.valueOf(i), start); } public Object[] getIds() { return new Object[] { }; } } @@ -192,9 +207,9 @@ public class JSObject implements Scriptable { public void setPrototype(Scriptable p) { } public String getClassName() { return this.getClass().getName(); } public Object getDefaultValue(Class hint) { return toString(); } - public void put(int i, Scriptable start, Object value) { } - public Object get(int i, Scriptable start) { return null; } - public boolean has(int i, Scriptable start) { return false; } + public void put(int i, Scriptable start, Object value) { put(String.valueOf(i), start, value); } + public Object get(int i, Scriptable start) { return get(String.valueOf(i), start); } + public boolean has(int i, Scriptable start) { return has(String.valueOf(i), start); } }