lua_pushstring() private method

private lua_pushstring ( IntPtr luaState, string str ) : void
luaState System.IntPtr
str string
return void
 public void LuaPushString(string str)
 {
     LuaDLL.lua_pushstring(L, str);
 }
 public void LuaRawGlobal(string name)
 {
     LuaDLL.lua_pushstring(L, name);
     LuaDLL.lua_rawget(L, LuaIndexes.LUA_GLOBALSINDEX);
 }
        /*
         * Pushes the object into the Lua stack according to its type.
         */
        internal void push(IntPtr luaState, object o)
        {
            if (o == null)
            {
                LuaDLL.lua_pushnil(luaState);
                return;
            }

            Type t = o.GetType();

            if (t == typeof(bool))
            {
                bool b = (bool)o;
                LuaDLL.lua_pushboolean(luaState, b);
            }
            else if (t == typeof(UnityEngine.Object))
            {
                UnityEngine.Object obj = (UnityEngine.Object)o;

                if (obj == null)
                {
                    LuaDLL.lua_pushnil(luaState);
                    return;
                }
                else
                {
                    pushObject(luaState, o, "luaNet_metatable");
                }
            }
            else if (t.IsEnum)
            {
                LuaScriptMgr.PushEnum(luaState, o);
            }
            else if (t.IsArray)
            {
                LuaScriptMgr.PushArray(luaState, o);
            }
            else if (t.IsPrimitive)
            {
                double d = Convert.ToDouble(o);
                LuaDLL.lua_pushnumber(luaState, d);
            }
            else if (t == typeof(string))
            {
                string str = (string)o;
                LuaDLL.lua_pushstring(luaState, str);
            }
            else if (IsILua(o))
            {
#if !__NOGEN__
                (((ILuaGeneratedType)o).__luaInterface_getLuaTable()).push(luaState);
#endif
            }
            else if (t == typeof(LuaTable))
            {
                ((LuaTable)o).push(luaState);
            }
            else if (t == typeof(LuaCSFunction))
            {
                pushFunction(luaState, (LuaCSFunction)o);
            }
            else if (t == typeof(LuaFunction))
            {
                ((LuaFunction)o).push(luaState);
            }
            else if (t.IsValueType)
            {
                int index = addObject(o);
                PushNewValueObject(luaState, o, index, "luaNet_metatable");
            }
            else
            {
                pushObject(luaState, o, "luaNet_metatable");
            }
        }
 public int pushError(IntPtr luaState, string msg)
 {
     LuaDLL.lua_pushnil(luaState);
     LuaDLL.lua_pushstring(luaState, msg);
     return(2);
 }
示例#5
0
 public static void lua_setglobal(IntPtr luaState, string name)
 {
     LuaDLL.lua_pushstring(luaState, name);
     LuaDLL.lua_insert(luaState, -2);
     LuaDLL.lua_settable(luaState, LuaIndexes.LUA_GLOBALSINDEX);
 }
示例#6
0
        public LuaState()
        {
            // Create State
            L = LuaDLL.luaL_newstate();

            // Create LuaInterface library
            LuaDLL.luaL_openlibs(L);
            LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(L, true);
            LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(L);
            LuaDLL.lua_setglobal(L, "luanet");
            LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_getglobal(L, "luanet");
            LuaDLL.lua_pushstring(L, "getmetatable");
            LuaDLL.lua_getglobal(L, "getmetatable");
            LuaDLL.lua_settable(L, -3);

            // Set luanet as global for object translator
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            translator = new ObjectTranslator(this, L);
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);

            GCHandle handle  = GCHandle.Alloc(translator, GCHandleType.Pinned);
            IntPtr   thisptr = GCHandle.ToIntPtr(handle);

            LuaDLL.lua_pushlightuserdata(L, thisptr);
            LuaDLL.lua_setglobal(L, "_translator");

            tracebackFunction = new LuaCSFunction(LuaStatic.traceback);

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaCSFunction(LuaStatic.panic);
            LuaDLL.lua_atpanic(L, panicCallback);

            printFunction = new LuaCSFunction(LuaStatic.print);
            LuaDLL.lua_pushstdcallcfunction(L, printFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "print");

            loadfileFunction = new LuaCSFunction(LuaStatic.loadfile);
            LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile");

            dofileFunction = new LuaCSFunction(LuaStatic.dofile);
            LuaDLL.lua_pushstdcallcfunction(L, dofileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile");

            // Insert our loader FIRST
            loaderFunction = new LuaCSFunction(LuaStatic.loader);
            LuaDLL.lua_pushstdcallcfunction(L, loaderFunction);
            int loaderFunc = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package");
            LuaDLL.lua_getfield(L, -1, "loaders");
            int loaderTable = LuaDLL.lua_gettop(L);

            // Shift table elements right
            for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
                LuaDLL.lua_rawseti(L, loaderTable, e);
            }
            LuaDLL.lua_pushvalue(L, loaderFunc);
            LuaDLL.lua_rawseti(L, loaderTable, 1);
            LuaDLL.lua_settop(L, 0);

            DoString(LuaStatic.init_luanet);
        }
示例#7
0
 public static void lua_rawglobal(IntPtr luaState, string name)
 {
     LuaDLL.lua_pushstring(luaState, name);
     LuaDLL.lua_rawget(luaState, LuaIndexes.LUA_GLOBALSINDEX);
 }
示例#8
0
        /*static void PushNull(IntPtr L)
         * {
         *  LuaDLL.tolua_pushudata(L, 1);
         * }*/

        //PushVarObject
        public static void Push(IntPtr L, object obj)
        {
            if (obj == null)
            {
                LuaDLL.lua_pushnil(L);
                return;
            }

            Type t = obj.GetType();

            if (t.IsValueType)
            {
                if (t == typeof(bool))
                {
                    bool b = (bool)obj;
                    LuaDLL.lua_pushboolean(L, b);
                }
                else if (t.IsEnum)
                {
                    Push(L, (System.Enum)obj);
                }
                else if (t.IsPrimitive)
                {
                    double d = LuaMisc.ToDouble(obj);
                    LuaDLL.lua_pushnumber(L, d);
                }
                else if (t == typeof(Vector3))
                {
                    Push(L, (Vector3)obj);
                }
                else if (t == typeof(Quaternion))
                {
                    Push(L, (Quaternion)obj);
                }
                else if (t == typeof(Vector2))
                {
                    Push(L, (Vector2)obj);
                }
                else if (t == typeof(Vector4))
                {
                    Push(L, (Vector4)obj);
                }
                else if (t == typeof(Color))
                {
                    Push(L, (Color)obj);
                }
                else if (t == typeof(RaycastHit))
                {
                    Push(L, (RaycastHit)obj);
                }
                else if (t == typeof(Touch))
                {
                    Push(L, (Touch)obj);
                }
                else if (t == typeof(Ray))
                {
                    Push(L, (Ray)obj);
                }
                else if (t == typeof(Bounds))
                {
                    Push(L, (Bounds)obj);
                }
                else if (t == typeof(LayerMask))
                {
                    PushLayerMask(L, (LayerMask)obj);
                }
                else
                {
                    PushValue(L, (ValueType)obj);
                }
            }
            else
            {
                if (t.IsArray)
                {
                    Push(L, (Array)obj);
                }
                else if (t == typeof(string))
                {
                    LuaDLL.lua_pushstring(L, (string)obj);
                }
                else if (t.IsSubclassOf(typeof(LuaBaseRef)))
                {
                    Push(L, (LuaBaseRef)obj);
                }
                else if (t.IsSubclassOf(typeof(UnityEngine.Object)))
                {
                    Push(L, (UnityEngine.Object)obj);
                }
                else if (t.IsSubclassOf(typeof(UnityEngine.TrackedReference)))
                {
                    Push(L, (UnityEngine.TrackedReference)obj);
                }
                else if (t == typeof(LuaByteBuffer))
                {
                    LuaByteBuffer lbb = (LuaByteBuffer)obj;
                    LuaDLL.lua_pushlstring(L, lbb.buffer, lbb.buffer.Length);
                }
                else if (t.IsSubclassOf(typeof(Delegate)))
                {
                    Push(L, (Delegate)obj);
                }
                else if (obj is System.Collections.IEnumerator)
                {
                    Push(L, (IEnumerator)obj);
                }
                else if (t == typeof(EventObject))
                {
                    Push(L, (EventObject)obj);
                }
                else if (t == monoType)
                {
                    Push(L, (Type)obj);
                }
                else
                {
                    PushObject(L, obj);
                }
            }
        }
示例#9
0
        public static void Push(IntPtr L, object obj)
        {
            if (obj == null)
            {
                LuaDLL.lua_pushnil(L);
                return;
            }
            Type type = obj.GetType();

            if (type.get_IsValueType())
            {
                if (type == typeof(bool))
                {
                    bool value = (bool)obj;
                    LuaDLL.lua_pushboolean(L, value);
                }
                else if (type.get_IsEnum())
                {
                    ToLua.Push(L, (Enum)obj);
                }
                else if (type.get_IsPrimitive())
                {
                    double number = LuaMisc.ToDouble(obj);
                    LuaDLL.lua_pushnumber(L, number);
                }
                else if (type == typeof(Vector3))
                {
                    ToLua.Push(L, (Vector3)obj);
                }
                else if (type == typeof(Quaternion))
                {
                    ToLua.Push(L, (Quaternion)obj);
                }
                else if (type == typeof(Vector2))
                {
                    ToLua.Push(L, (Vector2)obj);
                }
                else if (type == typeof(Vector4))
                {
                    ToLua.Push(L, (Vector4)obj);
                }
                else if (type == typeof(Color))
                {
                    ToLua.Push(L, (Color)obj);
                }
                else if (type == typeof(RaycastHit))
                {
                    ToLua.Push(L, (RaycastHit)obj);
                }
                else if (type == typeof(Touch))
                {
                    ToLua.Push(L, (Touch)obj);
                }
                else if (type == typeof(Ray))
                {
                    ToLua.Push(L, (Ray)obj);
                }
                else if (type == typeof(Bounds))
                {
                    ToLua.Push(L, (Bounds)obj);
                }
                else if (type == typeof(LayerMask))
                {
                    ToLua.PushLayerMask(L, (LayerMask)obj);
                }
                else
                {
                    ToLua.PushValue(L, (ValueType)obj);
                }
            }
            else if (type.get_IsArray())
            {
                ToLua.Push(L, (Array)obj);
            }
            else if (type == typeof(string))
            {
                LuaDLL.lua_pushstring(L, (string)obj);
            }
            else if (type.IsSubclassOf(typeof(LuaBaseRef)))
            {
                ToLua.Push(L, (LuaBaseRef)obj);
            }
            else if (type.IsSubclassOf(typeof(Object)))
            {
                ToLua.Push(L, (Object)obj);
            }
            else if (type.IsSubclassOf(typeof(TrackedReference)))
            {
                ToLua.Push(L, (TrackedReference)obj);
            }
            else if (type == typeof(LuaByteBuffer))
            {
                LuaByteBuffer luaByteBuffer = (LuaByteBuffer)obj;
                LuaDLL.lua_pushlstring(L, luaByteBuffer.buffer, luaByteBuffer.buffer.Length);
            }
            else if (type.IsSubclassOf(typeof(Delegate)))
            {
                ToLua.Push(L, (Delegate)obj);
            }
            else if (obj is IEnumerator)
            {
                ToLua.Push(L, (IEnumerator)obj);
            }
            else if (type == typeof(EventObject))
            {
                ToLua.Push(L, (EventObject)obj);
            }
            else if (type == ToLua.monoType)
            {
                ToLua.Push(L, (Type)obj);
            }
            else
            {
                ToLua.PushObject(L, obj);
            }
        }