]> git.lizzy.rs Git - minetest.git/commitdiff
Add missing item alias metatables to async environment (#12458)
authorsfan5 <sfan5@live.de>
Sun, 3 Jul 2022 23:06:42 +0000 (01:06 +0200)
committerGitHub <noreply@github.com>
Sun, 3 Jul 2022 23:06:42 +0000 (01:06 +0200)
builtin/async/game.lua
builtin/game/register.lua
games/devtest/mods/unittests/async_env.lua
games/devtest/mods/unittests/init.lua
games/devtest/mods/unittests/inside_async_env.lua
games/devtest/mods/unittests/misc.lua

index 8cb9720b66d113aaac82cd4fd96e5ee520665fb0..6512f07068fddc47f0d67c429ac376eb57ca2f1a 100644 (file)
@@ -25,11 +25,13 @@ do
        local all = assert(core.transferred_globals)
        core.transferred_globals = nil
 
-       -- reassemble other tables
        all.registered_nodes = {}
        all.registered_craftitems = {}
        all.registered_tools = {}
        for k, v in pairs(all.registered_items) do
+               -- Disable further modification
+               setmetatable(v, {__newindex = {}})
+               -- Reassemble the other tables
                if v.type == "node" then
                        all.registered_nodes[k] = v
                elseif v.type == "craftitem" then
@@ -43,3 +45,15 @@ do
                core[k] = v
        end
 end
+
+-- For tables that are indexed by item name:
+-- If table[X] does not exist, default to table[core.registered_aliases[X]]
+local alias_metatable = {
+       __index = function(t, name)
+               return rawget(t, core.registered_aliases[name])
+       end
+}
+setmetatable(core.registered_items, alias_metatable)
+setmetatable(core.registered_nodes, alias_metatable)
+setmetatable(core.registered_craftitems, alias_metatable)
+setmetatable(core.registered_tools, alias_metatable)
index 0be107c3633344a378736964522dcf730a213fb1..ee4edabbf73c545e7c069aa89a7456a2942c4670 100644 (file)
@@ -1,4 +1,4 @@
--- Minetest: builtin/misc_register.lua
+-- Minetest: builtin/register.lua
 
 local S = core.get_translator("__builtin")
 
index 3a21bd9e2b2d9d5d5ccc5cad0e95c717ed097811..b7edf941eb78048779a85d99cdae12ba82ed970e 100644 (file)
@@ -123,10 +123,10 @@ local function test_handle_async(cb)
 
        core.handle_async(func, function(...)
                if not deepequal(expect, {...}) then
-                       cb("Values did not equal")
+                       return cb("Values did not equal")
                end
                if core.get_last_run_mod() ~= expect[1] then
-                       cb("Mod name not tracked correctly")
+                       return cb("Mod name not tracked correctly")
                end
 
                -- Test passing of nil arguments and return values
@@ -134,7 +134,7 @@ local function test_handle_async(cb)
                        return a, b
                end, function(a, b)
                        if b ~= 123 then
-                               cb("Argument went missing")
+                               return cb("Argument went missing")
                        end
                        cb()
                end, nil, 123)
@@ -151,7 +151,7 @@ local function test_userdata_passing2(cb, _, pos)
                return vm_:get_node_at(pos_)
        end, function(ret)
                if not deepequal(expect, ret) then
-                       cb("Node data mismatch (one-way)")
+                       return cb("Node data mismatch (one-way)")
                end
 
                -- VManip: test a roundtrip
@@ -159,7 +159,7 @@ local function test_userdata_passing2(cb, _, pos)
                        return vm_
                end, function(vm2)
                        if not deepequal(expect, vm2:get_node_at(pos)) then
-                               cb("Node data mismatch (roundtrip)")
+                               return cb("Node data mismatch (roundtrip)")
                        end
                        cb()
                end, vm)
index 96651a8787380c1279c7f77c5e1019c663ce29e6..0e041be7627c9eae846e93fabae9aeb44d6d0dd8 100644 (file)
@@ -36,6 +36,7 @@ local function await(invoke)
                        called_early = {...}
                else
                        coroutine.resume(co, ...)
+                       co = nil
                end
        end)
        if called_early ~= true then
index 9774771f9881206c7903eb977f434793f3f0e648..4ed0fccd23aa8b685b3a36347eb87da4ba61c7d3 100644 (file)
@@ -2,7 +2,7 @@ unittests = {}
 
 core.log("info", "Hello World")
 
-function unittests.async_test()
+local function do_tests()
        assert(core == minetest)
        -- stuff that should not be here
        assert(not core.get_player_by_name)
@@ -11,5 +11,15 @@ function unittests.async_test()
        -- stuff that should be here
        assert(ItemStack)
        assert(core.registered_items[""])
-       return true
+       -- alias handling
+       assert(core.registered_items["unittests:steel_ingot_alias"].name ==
+               "unittests:steel_ingot")
+end
+
+function unittests.async_test()
+       local ok, err = pcall(do_tests)
+       if not ok then
+               core.log("error", err)
+       end
+       return ok
 end
index 4b53004b1d47567d677471d04c7438ca889e0c79..9ddb0706122aa5a0ea8f21cc4a76ca35fa82198f 100644 (file)
@@ -24,7 +24,7 @@ local function test_dynamic_media(cb, player)
                to_player = player:get_player_name(),
        }, function(name)
                if not call_ok then
-                       cb("impossible condition")
+                       return cb("impossible condition")
                end
                cb()
        end)