diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-03-29 12:07:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 18:07:00 +0200 |
commit | 06d197cdd042392e1551e5e7244c61300a6bb4e3 (patch) | |
tree | c47a0c58917f5f89af1c5128e42611d0d8a3d320 /src/script/common | |
parent | 11aab4198be1a0f1104a433896e908e4c86de0c9 (diff) | |
download | minetest-06d197cdd042392e1551e5e7244c61300a6bb4e3.tar.gz minetest-06d197cdd042392e1551e5e7244c61300a6bb4e3.tar.bz2 minetest-06d197cdd042392e1551e5e7244c61300a6bb4e3.zip |
Store vector metatable in registry
Diffstat (limited to 'src/script/common')
-rw-r--r-- | src/script/common/c_converter.cpp | 19 | ||||
-rw-r--r-- | src/script/common/c_internal.h | 1 |
2 files changed, 4 insertions, 16 deletions
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 08fb9ad30..b5ff52f73 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -52,25 +52,12 @@ if (value < F1000_MIN || value > F1000_MAX) { \ /** - * A helper which sets (if available) the vector metatable from builtin as metatable - * for the table on top of the stack + * A helper which sets the vector metatable for the table on top of the stack */ static void set_vector_metatable(lua_State *L) { - // get vector.metatable - lua_getglobal(L, "vector"); - if (!lua_istable(L, -1)) { - // there is no global vector table - lua_pop(L, 1); - errorstream << "set_vector_metatable in c_converter.cpp: " << - "missing global vector table" << std::endl; - return; - } - lua_getfield(L, -1, "metatable"); - // set the metatable - lua_setmetatable(L, -3); - // pop vector global - lua_pop(L, 1); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_VECTOR_METATABLE); + lua_setmetatable(L, -2); } void push_v3f(lua_State *L, v3f p) diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index 94cfd61fb..c43db34aa 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -55,6 +55,7 @@ extern "C" { #define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) #define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3) #define CUSTOM_RIDX_HTTP_API_LUA (CUSTOM_RIDX_BASE + 4) +#define CUSTOM_RIDX_VECTOR_METATABLE (CUSTOM_RIDX_BASE + 5) // Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata |