aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJude Melton-Houghton <jwmhjwmh@gmail.com>2022-11-20 15:26:54 -0500
committerGitHub <noreply@github.com>2022-11-20 21:26:54 +0100
commit475005012a0e34285e6301dca057720694c7ff4e (patch)
treeb3557752ec1538a92b3787c4b6c2d3b03317da30
parent7bf64fc61a6094733f9a9a9401d6f03a8f10edeb (diff)
downloadminetest-475005012a0e34285e6301dca057720694c7ff4e.tar.xz
Improve ABM and LBM registration error handling (#12969)
-rw-r--r--builtin/game/register.lua15
1 files changed, 15 insertions, 0 deletions
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index d4c876898..f0a6cb49a 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -79,8 +79,22 @@ local function check_modname_prefix(name)
end
end
+local function check_node_list(list, field)
+ local t = type(list)
+ if t == "table" then
+ for _, entry in pairs(list) do
+ assert(type(entry) == "string",
+ "Field '" .. field .. "' contains non-string entry")
+ end
+ elseif t ~= "string" and t ~= "nil" then
+ error("Field '" .. field .. "' has invalid type " .. t)
+ end
+end
+
function core.register_abm(spec)
-- Add to core.registered_abms
+ check_node_list(spec.nodenames, "nodenames")
+ check_node_list(spec.neighbors, "neighbors")
assert(type(spec.action) == "function", "Required field 'action' of type function")
core.registered_abms[#core.registered_abms + 1] = spec
spec.mod_origin = core.get_current_modname() or "??"
@@ -89,6 +103,7 @@ end
function core.register_lbm(spec)
-- Add to core.registered_lbms
check_modname_prefix(spec.name)
+ check_node_list(spec.nodenames, "nodenames")
assert(type(spec.action) == "function", "Required field 'action' of type function")
core.registered_lbms[#core.registered_lbms + 1] = spec
spec.mod_origin = core.get_current_modname() or "??"