2002/05/16 04:15:12
[org.ibex.core.git] / src / org / xwt / util / JSObject.java
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); }
 
 }