X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fxwt%2Futil%2FJSObject.java;h=84c77374b61902341e80ce849e7fc8c5ba72d1c4;hb=b4a0c7cfaa668c295324ace3113113f11fdfc851;hp=4692aff11afc2f8bddf3ab4ecc073821018855aa;hpb=d7e79488ab54bedd5b769d87a27014515d51b0e8;p=org.ibex.core.git diff --git a/src/org/xwt/util/JSObject.java b/src/org/xwt/util/JSObject.java index 4692aff..84c7737 100644 --- a/src/org/xwt/util/JSObject.java +++ b/src/org/xwt/util/JSObject.java @@ -111,11 +111,20 @@ 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, Scriptable start, Object value) { if (sealed) return; if (name == null || name.equals("")) return; - 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 +180,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 +201,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); } }