From b4a0c7cfaa668c295324ace3113113f11fdfc851 Mon Sep 17 00:00:00 2001 From: megacz Date: Fri, 30 Jan 2004 06:47:14 +0000 Subject: [PATCH] 2002/05/16 04:15:12 darcs-hash:20040130064714-2ba56-72d8b3e451f5607435e9cc413c9a848718d2e6f7.gz --- CHANGES | 3 ++- src/org/xwt/util/JSObject.java | 25 +++++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index d6cf21c..71f85da 100644 --- a/CHANGES +++ b/CHANGES @@ -137,5 +137,6 @@ 15-May megacz XWT.java: added xwt.screen{Width,Height} - +15-May megacz JSObject.java: added extra logic to discriminate between + public and private puts. 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); } } -- 1.7.10.4