diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-11-20 15:26:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-20 21:26:54 +0100 |
commit | 475005012a0e34285e6301dca057720694c7ff4e (patch) | |
tree | b3557752ec1538a92b3787c4b6c2d3b03317da30 | |
parent | 7bf64fc61a6094733f9a9a9401d6f03a8f10edeb (diff) | |
download | minetest-475005012a0e34285e6301dca057720694c7ff4e.tar.xz |
Improve ABM and LBM registration error handling (#12969)
-rw-r--r-- | builtin/game/register.lua | 15 |
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 "??" |