summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/lua_function.cpp4
-rw-r--r--indra/newview/scripts/lua/test_setdtor.lua28
2 files changed, 17 insertions, 15 deletions
diff --git a/indra/llcommon/lua_function.cpp b/indra/llcommon/lua_function.cpp
index 12cff89fbd..f61cf3fe10 100644
--- a/indra/llcommon/lua_function.cpp
+++ b/indra/llcommon/lua_function.cpp
@@ -1050,7 +1050,7 @@ lua_function(
}
// called with (desc, obj, dtor), returns proxy object
lua_checkdelta(L, -2);
- lluau_checkstack(L, 3); // might get up to 6 stack entries
+// lluau_checkstack(L, 0); // might get up to 3 stack entries
auto desc{ lua_tostdstring(L, 1) };
// Get Lua "references" for each of the object and the dtor function.
int objref = lua_ref(L, 2);
@@ -1150,6 +1150,8 @@ void setdtor_refs::push_metatable(lua_State* L)
return (lhs._target <= rhs._target)
end,
__newindex = function(t, key, value)
+ assert(key ~= '_target',
+ "Don't try to replace a setdtor() proxy's _target")
t._target[key] = value
end,
__call = function(func, ...)
diff --git a/indra/newview/scripts/lua/test_setdtor.lua b/indra/newview/scripts/lua/test_setdtor.lua
index 743c5168d0..61ed86dcc8 100644
--- a/indra/newview/scripts/lua/test_setdtor.lua
+++ b/indra/newview/scripts/lua/test_setdtor.lua
@@ -7,6 +7,7 @@ print('arithmetic')
n = LL.setdtor('arithmetic', 11, print)
print("n =", n)
print("n._target =", n._target)
+print(pcall(function() n._target = 12 end))
print("getmetatable(n) =", inspect(getmetatable(n)))
print("-n =", -n)
for i = 10, 12 do
@@ -20,20 +21,19 @@ for i = 10, 12 do
print(`n >= {i}`, n >= tempi)
print(`n > {i}`, n > tempi)
end
-for i = 2, 3 do
- print(`n + {i} =`, n + i)
- print(`{i} + n =`, i + n)
- print(`n - {i} =`, n - i)
- print(`{i} - n =`, i - n)
- print(`n * {i} =`, n * i)
- print(`{i} * n =`, i * n)
- print(`n / {i} =`, n / i)
- print(`{i} / n =`, i / n)
- print(`n % {i} =`, n % i)
- print(`{i} % n =`, i % n)
- print(`n ^ {i} =`, n ^ i)
- print(`{i} ^ n =`, i ^ n)
-end
+i = 2
+print(`n + {i} =`, n + i)
+print(`{i} + n =`, i + n)
+print(`n - {i} =`, n - i)
+print(`{i} - n =`, i - n)
+print(`n * {i} =`, n * i)
+print(`{i} * n =`, i * n)
+print(`n / {i} =`, n / i)
+print(`{i} / n =`, i / n)
+print(`n % {i} =`, n % i)
+print(`{i} % n =`, i % n)
+print(`n ^ {i} =`, n ^ i)
+print(`{i} ^ n =`, i ^ n)
print('string')
s = LL.setdtor('string', 'hello', print)