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)))})"); } }
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); }
private bool IsInteger(int index) => CApi.lua_isinteger(lua_State, index) == 1;