Exemplo n.º 1
0
        private object LuaObjToCLRObj(int index)
        {
            switch ((LuaTypes)CApi.lua_type(lua_State, index))
            {
            case LuaTypes.Nil:
                return(null);

            case LuaTypes.Boolean:
                return(ConvertToBool(index));

            case LuaTypes.String:
                return(ConvertToString(index));

            case LuaTypes.Number:
            {
                if (CApi.lua_isinteger(lua_State, index) == 0)
                {
                    return(ConvertToDouble(index));
                }
                else
                {
                    return(ConvertToInt(index));
                }
            }

            case LuaTypes.Table:
            {
                return(ConvertToTable(index));
            }

            default:
                throw new LuaException($"Unsupported type of index {index} ({Marshal.PtrToStringAnsi(CApi.lua_typename(lua_State, CApi.lua_type(lua_State, index)))})");
            }
        }
Exemplo n.º 2
0
        private long ConvertToInt(int index)
        {
            if (CApi.lua_isinteger(lua_State, index) == 0)
            {
                throw new LuaInvalidCastException($"Index {index} doesn't contain a integer value");
            }

            var convertedValue = CApi.lua_tointegerx(lua_State, index, out int isNum);

            if (isNum == 0)
            {
                throw new LuaInvalidCastException($"Failed to convert index {index} to double. Index contains {ConvertToString(index)}");
            }
            return(convertedValue);
        }
Exemplo n.º 3
0
 private bool IsInteger(int index) => CApi.lua_isinteger(lua_State, index) == 1;