Mercurial Hosting > luan
diff core/src/luan/LuanPropertyMeta.java @ 415:ce8e19567911
make LuanPropertyMeta a singleton
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 30 Apr 2015 06:04:17 -0600 |
parents | 8937263f59f6 |
children | 91af5337b9ae |
line wrap: on
line diff
--- a/core/src/luan/LuanPropertyMeta.java Wed Apr 29 19:06:18 2015 -0600 +++ b/core/src/luan/LuanPropertyMeta.java Thu Apr 30 06:04:17 2015 -0600 @@ -4,38 +4,21 @@ import java.util.Iterator; -public final class LuanPropertyMeta extends LuanMeta implements DeepCloneable<LuanPropertyMeta> { - private LuanTable getters; - private LuanTable setters; +public final class LuanPropertyMeta extends LuanMeta { + public static final LuanPropertyMeta INSTANCE = new LuanPropertyMeta(); private LuanPropertyMeta() {} - public static LuanPropertyMeta newInstance() { - LuanPropertyMeta meta = new LuanPropertyMeta(); - meta.getters = new LuanTable(); - meta.setters = new LuanTable(); - return meta; - } - - public LuanTable getters() { - return getters; + public LuanTable getters(LuanTable tbl) { + return (LuanTable)tbl.getMetatable().get("get"); } - public LuanTable setters() { - return setters; - } - - @Override public LuanPropertyMeta shallowClone() { - return new LuanPropertyMeta(); - } - - @Override public void deepenClone(LuanPropertyMeta clone,DeepCloner cloner) { - clone.getters = cloner.get(getters); - clone.setters = cloner.get(setters); + public LuanTable setters(LuanTable tbl) { + return (LuanTable)tbl.getMetatable().get("set"); } @Override public Object __index(LuanState luan,LuanTable tbl,Object key) throws LuanException { - Object obj = getters.get(key); + Object obj = getters(tbl).get(key); if( obj == null ) return null; if( !(obj instanceof LuanFunction) ) @@ -44,9 +27,9 @@ return luan.call(fn); } - @Override protected Iterator keys() { + @Override protected Iterator keys(final LuanTable tbl) { return new Iterator() { - final Iterator<Map.Entry<Object,Object>> iter = getters.iterator(); + final Iterator<Map.Entry<Object,Object>> iter = getters(tbl).iterator(); @Override public boolean hasNext() { return iter.hasNext(); @@ -66,7 +49,7 @@ } @Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object value) throws LuanException { - Object obj = setters.get(key); + Object obj = setters(tbl).get(key); if( obj == null ) throw luan.exception("can't set property '"+key+"'"); if( !(obj instanceof LuanFunction) ) @@ -77,8 +60,8 @@ @Override public LuanTable newMetatable() { LuanTable mt = super.newMetatable(); - mt.put( "get", getters ); - mt.put( "set", setters ); + mt.put( "get", new LuanTable() ); + mt.put( "set", new LuanTable() ); return mt; }