diff --git a/src/core/org/luaj/lib/BaseLib.java b/src/core/org/luaj/lib/BaseLib.java index 7dd57dd5..98d65496 100644 --- a/src/core/org/luaj/lib/BaseLib.java +++ b/src/core/org/luaj/lib/BaseLib.java @@ -175,8 +175,13 @@ public class BaseLib extends LFunction { vm.resettop(); vm.pushnil(); } else { - vm.insert(1); + vm.replace(1); vm.settop(1); + vm.getfield(-1,LValue.TM_METATABLE); + if ( vm.isnil(-1) ) + vm.pop(1); + else + vm.remove(1); } break; } diff --git a/src/core/org/luaj/vm/LTable.java b/src/core/org/luaj/vm/LTable.java index 9e3b117b..2bf99d24 100644 --- a/src/core/org/luaj/vm/LTable.java +++ b/src/core/org/luaj/vm/LTable.java @@ -270,7 +270,7 @@ public class LTable extends LValue { } /** Valid for tables */ - public org.luaj.vm.LTable luaGetMetatable() { + public LTable luaGetMetatable() { return this.m_metatable; } diff --git a/src/core/org/luaj/vm/LuaState.java b/src/core/org/luaj/vm/LuaState.java index 0e517c05..8c4dfd8d 100644 --- a/src/core/org/luaj/vm/LuaState.java +++ b/src/core/org/luaj/vm/LuaState.java @@ -899,7 +899,11 @@ public class LuaState extends Lua { return calls[cc-callStackDepth]; } - private LValue mtget(LValue t, LString tag) { + private void indexError(LValue nontable) { + error( "attempt to index ? (a "+nontable.luaGetTypeName()+" value)", 1 ); + } + + private LValue luaV_getmetafield(LValue t, LString tag) { LTable mt = t.luaGetMetatable(); if ( mt == null ) return null; @@ -907,10 +911,6 @@ public class LuaState extends Lua { return h.isNil()? null: h; } - private void indexError(LValue nontable) { - error( "attempt to index ? (a "+nontable.luaGetTypeName()+" value)", 1 ); - } - public LValue luaV_gettable(LValue table, LValue key) { LValue h=LNil.NIL,t=table; for ( int loop=0; loop