changeset 471:f3a24435d04d

add support for __metatable
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 10 May 2015 00:12:42 -0600
parents 5627eb637eb4
children f4aca5a5346a
files core/src/luan/modules/BasicLuan.java
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
diff -r 5627eb637eb4 -r f3a24435d04d core/src/luan/modules/BasicLuan.java
--- a/core/src/luan/modules/BasicLuan.java	Sat May 09 23:54:22 2015 -0600
+++ b/core/src/luan/modules/BasicLuan.java	Sun May 10 00:12:42 2015 -0600
@@ -69,11 +69,17 @@
 		};
 	}
 
-	public static LuanTable get_metatable(LuanTable table) {
-		return table.getMetatable();
+	public static Object get_metatable(LuanTable table) {
+		LuanTable metatable = table.getMetatable();
+		if( metatable == null )
+			return null;
+		Object obj = metatable.rawGet("__metatable");
+		return obj!=null ? obj : metatable;
 	}
 
-	public static LuanTable set_metatable(LuanTable table,LuanTable metatable) {
+	public static LuanTable set_metatable(LuanState luan,LuanTable table,LuanTable metatable) throws LuanException {
+		if( table.getHandler("__metatable") != null )
+			throw luan.exception("cannot change a protected metatable");
 		table.setMetatable(metatable);
 		return table;
 	}