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() {