Ejemplo n.º 1
0
        static int _GetBaseMetatable(IntPtr L)
        {
            LuaState luaState = LuaState.Get(L);

            int refId;

            LuaLib.lua_pushstring(L, "__refId");                                // |mt|s
            LuaLib.lua_rawget(L, 1);                                            // |mt|v	// v = mt.s
            refId = (int)LuaLib.lua_tonumber(L, -1);
            LuaLib.lua_pop(L, 1);                                               // |mt

            LuaBindMetatable self     = luaState.Bindings.GetMetatableByRefId(refId);
            Type             baseType = self._type.BaseType;

            if (baseType == null)
            {
                // No base type
                LuaLib.lua_pushstring(L, "__base");                             // |mt|s
                LuaLib.lua_pushboolean(L, false);                               // |mt|s|b
                LuaLib.lua_rawset(L, -3);                                       // |mt		// mt.__base = false
            }
            else
            {
                LuaBindMetatable baseMetatable = luaState.Bindings.GetMetatable(baseType, self._metatableType);

                LuaLib.lua_pushstring(L, "__base");                             // |mt|s
                baseMetatable.Push();                                           // |mt|s|basemt
                LuaLib.lua_rawset(L, -3);                                       // |mt		// mt.__base = basemt
            }

            return(0);
        }
Ejemplo n.º 2
0
 public void PushObject(bool o)
 {
     LuaLib.lua_pushboolean(L, o);
 }