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 */
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[] { }; }
}
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); }
}