/** A sensible implementation of the abstract methods in the JS class */
public static class Obj extends JS {
- private Hash entries = new Hash();
+ private Hash entries = null;
private boolean sealed = false;
public Obj() { this(false); }
public Obj(boolean sealed) { this.sealed = sealed; }
- /** a sealed object cannot have its properties modified */
- public void setSeal(boolean sealed) { this.sealed = sealed; }
- public void put(Object key, Object val) { if (!sealed) entries.put(key, val); }
- public Object[] keys() { return(entries.keys()); }
- public Object get(Object key) {
- if(callMethod((String)key,null,true) == Boolean.TRUE)
- return new Internal.CallableStub(this,key);
- return entries.get(key);
+ public void setSeal(boolean sealed) { this.sealed = sealed; } ///< a sealed object cannot have its properties modified
+ public void put(Object key, Object val) { put(key, null, val); }
+ protected void put(Object key, Object key2, Object val) {
+ if (sealed) return;
+ if (entries == null) entries = new Hash();
+ entries.put(key, key2, val); }
+ public Object[] keys() { return entries == null ? new Object[0] : entries.keys(); }
+ public Object get(Object key) { return get(key, null); }
+ protected Object get(Object key, Object key2) {
+ if (entries == null) return null;
+ if(key2 == null && callMethod((String)key, null, true) == Boolean.TRUE)
+ return new Internal.CallableStub(this, key);
+ return entries.get(key, key2);
}
}