Mercurial Hosting > luan
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; }