Esempio n. 1
0
 /*
  * Creates the metatable for delegates
  */
 private void createFunctionMetatable(LuaCore.lua_State luaState)
 {
     LuaLib.luaL_newmetatable(luaState, "luaNet_function");
     LuaLib.lua_pushstring(luaState, "__gc");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__call");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.execDelegateFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_settop(luaState, -2);
 }
Esempio n. 2
0
        /*
         * Pushes a new object into the Lua stack with the provided
         * metatable
         */
        private void pushNewObject(LuaCore.lua_State luaState, object o, int index, string metatable)
        {
            if (metatable == "luaNet_metatable")
            {
                // Gets or creates the metatable for the object's type
                LuaLib.luaL_getmetatable(luaState, o.GetType().AssemblyQualifiedName);

                if (LuaLib.lua_isnil(luaState, -1))
                {
                    LuaLib.lua_settop(luaState, -2);
                    LuaLib.luaL_newmetatable(luaState, o.GetType().AssemblyQualifiedName);
                    LuaLib.lua_pushstring(luaState, "cache");
                    LuaLib.lua_newtable(luaState);
                    LuaLib.lua_rawset(luaState, -3);
                    LuaLib.lua_pushlightuserdata(luaState, LuaLib.luanet_gettag());
                    LuaLib.lua_pushnumber(luaState, 1);
                    LuaLib.lua_rawset(luaState, -3);
                    LuaLib.lua_pushstring(luaState, "__index");
                    LuaLib.lua_pushstring(luaState, "luaNet_indexfunction");
                    LuaLib.lua_rawget(luaState, (int)LuaIndexes.Registry);
                    LuaLib.lua_rawset(luaState, -3);
                    LuaLib.lua_pushstring(luaState, "__gc");
                    LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
                    LuaLib.lua_rawset(luaState, -3);
                    LuaLib.lua_pushstring(luaState, "__tostring");
                    LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
                    LuaLib.lua_rawset(luaState, -3);
                    LuaLib.lua_pushstring(luaState, "__newindex");
                    LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
                    LuaLib.lua_rawset(luaState, -3);
                }
            }
            else
            {
                LuaLib.luaL_getmetatable(luaState, metatable);
            }

            // Stores the object index in the Lua list and pushes the
            // index into the Lua stack
            LuaLib.luaL_getmetatable(luaState, "luaNet_objects");
            LuaLib.luanet_newudata(luaState, index);
            LuaLib.lua_pushvalue(luaState, -3);
            LuaLib.lua_remove(luaState, -4);
            LuaLib.lua_setmetatable(luaState, -2);
            LuaLib.lua_pushvalue(luaState, -1);
            LuaLib.lua_rawseti(luaState, -3, index);
            LuaLib.lua_remove(luaState, -2);
        }
Esempio n. 3
0
 /*
  * Registers the global functions used by LuaInterface
  */
 private void setGlobalFunctions(LuaCore.lua_State luaState)
 {
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.indexFunction);
     LuaLib.lua_setglobal(luaState, "get_object_member");
     LuaLib.lua_pushstdcallcfunction(luaState, importTypeFunction);
     LuaLib.lua_setglobal(luaState, "import_type");
     LuaLib.lua_pushstdcallcfunction(luaState, loadAssemblyFunction);
     LuaLib.lua_setglobal(luaState, "load_assembly");
     LuaLib.lua_pushstdcallcfunction(luaState, registerTableFunction);
     LuaLib.lua_setglobal(luaState, "make_object");
     LuaLib.lua_pushstdcallcfunction(luaState, unregisterTableFunction);
     LuaLib.lua_setglobal(luaState, "free_object");
     LuaLib.lua_pushstdcallcfunction(luaState, getMethodSigFunction);
     LuaLib.lua_setglobal(luaState, "get_method_bysig");
     LuaLib.lua_pushstdcallcfunction(luaState, getConstructorSigFunction);
     LuaLib.lua_setglobal(luaState, "get_constructor_bysig");
 }
Esempio n. 4
0
 /*
  * Creates the metatable for superclasses (the base
  * field of registered tables)
  */
 private void createBaseClassMetatable(LuaCore.lua_State luaState)
 {
     LuaLib.luaL_newmetatable(luaState, "luaNet_searchbase");
     LuaLib.lua_pushstring(luaState, "__gc");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__tostring");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__index");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.baseIndexFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__newindex");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_settop(luaState, -2);
 }
Esempio n. 5
0
 /*
  * Creates the metatable for type references
  */
 private void createClassMetatable(LuaCore.lua_State luaState)
 {
     LuaLib.luaL_newmetatable(luaState, "luaNet_class");
     LuaLib.lua_pushstring(luaState, "__gc");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__tostring");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__index");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.classIndexFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__newindex");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.classNewindexFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_pushstring(luaState, "__call");
     LuaLib.lua_pushstdcallcfunction(luaState, metaFunctions.callConstructorFunction);
     LuaLib.lua_settable(luaState, -3);
     LuaLib.lua_settop(luaState, -2);
 }