diff --git a/src/Lua/Runtime/LuaVirtualMachine.cs b/src/Lua/Runtime/LuaVirtualMachine.cs index 6519850d..6b6a2b0b 100644 --- a/src/Lua/Runtime/LuaVirtualMachine.cs +++ b/src/Lua/Runtime/LuaVirtualMachine.cs @@ -2666,6 +2666,7 @@ out metamethod { var RA = context.Instruction.A + context.FrameBase; stack.Get(RA) = table.ArrayLength; + stack.NotifyTop(RA + 1); return true; } diff --git a/tests/Lua.Tests/OperatorTests.cs b/tests/Lua.Tests/OperatorTests.cs index 8e46b88c..de5c54c5 100644 --- a/tests/Lua.Tests/OperatorTests.cs +++ b/tests/Lua.Tests/OperatorTests.cs @@ -184,4 +184,24 @@ public async Task Test_GreaterThanOrEquals(double a, double b) Assert.That(result, Has.Length.EqualTo(1)); Assert.That(result[0], Is.EqualTo(new LuaValue(a >= b))); } + + [Test] + public async Task Test_TableLength() + { + using var state = LuaState.Create(); + state.OpenBasicLibrary(); + var source = + @" +function f1() + local c = {} + return #c +end +function f2(a, b) + assert(b == nil) +end +f1() +f2() +"; + await state.DoStringAsync(source); + } }