2002/05/16 04:15:12
authormegacz <megacz@xwt.org>
Fri, 30 Jan 2004 06:47:14 +0000 (06:47 +0000)
committermegacz <megacz@xwt.org>
Fri, 30 Jan 2004 06:47:14 +0000 (06:47 +0000)
darcs-hash:20040130064714-2ba56-72d8b3e451f5607435e9cc413c9a848718d2e6f7.gz

CHANGES
src/org/xwt/util/JSObject.java

diff --git a/CHANGES b/CHANGES
index d6cf21c..71f85da 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
 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.
 
index 4692aff..84c7737 100644 (file)
@@ -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); }
 
 }