Mercurial Hosting > luan
diff src/luan/LuanTable.java @ 1166:7ef40e1923b7
add back Thread.global
allow metatables to have metatables
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 08 Feb 2018 02:22:51 -0700 |
parents | ba4daf107e07 |
children | 73d754b1889f |
line wrap: on
line diff
--- a/src/luan/LuanTable.java Wed Feb 07 23:16:12 2018 -0700 +++ b/src/luan/LuanTable.java Thu Feb 08 02:22:51 2018 -0700 @@ -114,7 +114,7 @@ } public String toString(LuanState luan) throws LuanException { - Object h = getHandler("__to_string"); + Object h = getHandler(luan,"__to_string"); if( h == null ) return rawToString(); LuanFunction fn = Luan.checkFunction(h); @@ -129,7 +129,7 @@ Object value = rawGet(key); if( value != null ) return value; - Object h = getHandler("__index"); + Object h = getHandler(luan,"__index"); if( h==null ) return null; if( h instanceof LuanFunction ) { @@ -159,7 +159,7 @@ } public void put(LuanState luan,Object key,Object value) throws LuanException { - Object h = getHandler("__new_index"); + Object h = getHandler(luan,"__new_index"); if( h==null || rawGet(key)!=null ) { rawPut(key,value); return; @@ -263,7 +263,7 @@ } public int length(LuanState luan) throws LuanException { - Object h = getHandler("__len"); + Object h = getHandler(luan,"__len"); if( h != null ) { LuanFunction fn = Luan.checkFunction(h); return (Integer)Luan.first(fn.call(luan,new Object[]{this})); @@ -295,7 +295,7 @@ } public Iterator<Map.Entry> iterator(final LuanState luan) throws LuanException { - if( getHandler("__pairs") == null ) + if( getHandler(luan,"__pairs") == null ) return rawIterator(); final LuanFunction fn = pairs(luan); return new Iterator<Map.Entry>() { @@ -332,7 +332,7 @@ } public LuanFunction pairs(LuanState luan) throws LuanException { - Object h = getHandler("__pairs"); + Object h = getHandler(luan,"__pairs"); if( h != null ) { if( h instanceof LuanFunction ) { LuanFunction fn = (LuanFunction)h; @@ -430,9 +430,9 @@ this.metatable = metatable; } - public Object getHandler(String op) { + public Object getHandler(LuanState luan,String op) throws LuanException { check(); - return metatable==null ? null : metatable.rawGet(op); + return metatable==null ? null : metatable.get(luan,op); } private Map<Object,Object> newMap() {