aboutsummaryrefslogtreecommitdiff
path: root/src/script/common
diff options
context:
space:
mode:
authorJude Melton-Houghton <jwmhjwmh@gmail.com>2022-03-29 12:07:00 -0400
committerGitHub <noreply@github.com>2022-03-29 18:07:00 +0200
commit06d197cdd042392e1551e5e7244c61300a6bb4e3 (patch)
treec47a0c58917f5f89af1c5128e42611d0d8a3d320 /src/script/common
parent11aab4198be1a0f1104a433896e908e4c86de0c9 (diff)
downloadminetest-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.cpp19
-rw-r--r--src/script/common/c_internal.h1
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