From d6b82cd5916f6f7a3596938d919b685fd405c99d Mon Sep 17 00:00:00 2001 From: EvilFactory Date: Wed, 31 Aug 2022 14:53:32 -0300 Subject: [PATCH] better error handling in LuaUserData.lua --- .../BarotraumaShared/Lua/LuaUserData.lua | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua b/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua index f42cf58d3..9b33ea908 100644 --- a/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua +++ b/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua @@ -20,20 +20,39 @@ luaUserData.CreateUserDataFromDescriptor = clrLuaUserData.CreateUserDataFromDesc luaUserData.CreateUserDataFromType = clrLuaUserData.CreateUserDataFromType luaUserData.RegisterType = function(typeName) - local descriptor = clrLuaUserData.RegisterType(typeName) + local success, result = pcall(clrLuaUserData.RegisterType, typeName) - luaUserData.Descriptors[typeName] = descriptor + if not success then + error(result, 2) + end - return descriptor + luaUserData.Descriptors[typeName] = result + + return result end luaUserData.RegisterTypeBarotrauma = function(typeName) - return luaUserData.RegisterType("Barotrauma." .. typeName) + typeName = "Barotrauma." .. typeName + local success, result = pcall(luaUserData.RegisterType, typeName) + + if not success then + error(result, 2) + end + + return result end luaUserData.AddCallMetaTable = function (userdata) + if userdata == nil then + error("Attempted to add a call metatable to a nil value.", 2) + end + debug.setmetatable(userdata, { - __call = function(obj, ...) + __call = function(obj, ...) + if userdata == nil then + error("userdata was nil.", 2) + end + local success, result = pcall(userdata.__new, ...) if not success then @@ -46,11 +65,15 @@ luaUserData.AddCallMetaTable = function (userdata) end luaUserData.CreateStatic = function(typeName, addCallMethod) - local staticUserdata = clrLuaUserData.CreateStatic(typeName) + local success, result = pcall(clrLuaUserData.CreateStatic, typeName) - if addCallMethod then - luaUserData.AddCallMetaTable(staticUserdata) + if not success then + error(result, 2) end - return staticUserdata + if addCallMethod then + luaUserData.AddCallMetaTable(result) + end + + return result end \ No newline at end of file