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;
 	}