Mercurial Hosting > luan
diff core/src/luan/LuanState.java @ 195:24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
git-svn-id: https://luan-java.googlecode.com/svn/trunk@196 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Thu, 03 Jul 2014 08:19:48 +0000 |
parents | cf939124461a |
children | 8960c81eb4bc |
line wrap: on
line diff
--- a/core/src/luan/LuanState.java Wed Jul 02 04:52:25 2014 +0000 +++ b/core/src/luan/LuanState.java Thu Jul 03 08:19:48 2014 +0000 @@ -57,7 +57,6 @@ private LuanTable preload; private LuanTable searchers; - private final List<MetatableGetter> mtGetters; final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); protected LuanState() { @@ -66,11 +65,6 @@ loaded = new LuanTable(); preload = new LuanTable(); searchers = new LuanTable(); - mtGetters = new ArrayList<MetatableGetter>(); - } - - protected LuanState(LuanState luan) { - mtGetters = new ArrayList<MetatableGetter>(luan.mtGetters); } @Override public void deepenClone(LuanState clone,DeepCloner cloner) { @@ -146,21 +140,12 @@ } public final LuanTable getMetatable(Object obj) { - if( obj instanceof LuanTable ) { - LuanTable table = (LuanTable)obj; - return table.getMetatable(); - } - for( MetatableGetter mg : mtGetters ) { - LuanTable table = mg.getMetatable(obj); - if( table != null ) - return table; - } - return null; + return getMetatable(obj,null); } - public final void addMetatableGetter(MetatableGetter mg) { - mtGetters.add(mg); - } + public abstract LuanTable getMetatable(Object obj,MetatableGetter beforeThis); + + public abstract void addMetatableGetter(MetatableGetter mg); public final LuanBit bit(LuanElement el) { return new LuanBit(this,el);