From 60cc93d64cb3ff8ed6cd95177f354495b75f4626 Mon Sep 17 00:00:00 2001 From: Ian Farmer Date: Wed, 12 Dec 2007 19:19:03 +0000 Subject: [PATCH] Correctly remove values stored in the array-part of a table. --- build.xml | 2 +- src/core/org/luaj/vm/LTable.java | 1 + src/test/java/org/luaj/vm/LTableTest.java | 17 +++++++++++++++++ src/test/java/org/luaj/vm/LuaJTest.java | 4 ++++ src/test/res/test8.lua | 12 ++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/test/res/test8.lua diff --git a/build.xml b/build.xml index 11dd3b89..4c5a3ba5 100644 --- a/build.xml +++ b/build.xml @@ -1,5 +1,5 @@ - + diff --git a/src/core/org/luaj/vm/LTable.java b/src/core/org/luaj/vm/LTable.java index 373f9704..612c0e02 100644 --- a/src/core/org/luaj/vm/LTable.java +++ b/src/core/org/luaj/vm/LTable.java @@ -362,6 +362,7 @@ public class LTable extends LValue { final int index = key - 1; if ( index < m_vector.length ) { if ( m_vector[ index ] != LNil.NIL ) { + m_vector[ index ] = LNil.NIL; --m_arrayEntries; } return; diff --git a/src/test/java/org/luaj/vm/LTableTest.java b/src/test/java/org/luaj/vm/LTableTest.java index 6f2080b3..60c8bf1d 100644 --- a/src/test/java/org/luaj/vm/LTableTest.java +++ b/src/test/java/org/luaj/vm/LTableTest.java @@ -102,6 +102,23 @@ public class LTableTest extends TestCase { assertEquals( 2, t.size() ); } + public void testRemove0() { + LTable t = new LTable(2, 0); + + t.put( 1, new LString("foo") ); + t.put( 2, new LString("bah") ); + assertNotSame(LNil.NIL, t.get(1)); + assertNotSame(LNil.NIL, t.get(2)); + assertEquals(LNil.NIL, t.get(3)); + + t.put( 1, LNil.NIL ); + t.put( 2, LNil.NIL ); + t.put( 3, LNil.NIL ); + assertEquals(LNil.NIL, t.get(1)); + assertEquals(LNil.NIL, t.get(2)); + assertEquals(LNil.NIL, t.get(3)); + } + public void testRemove1() { LTable t = new LTable(0, 1); diff --git a/src/test/java/org/luaj/vm/LuaJTest.java b/src/test/java/org/luaj/vm/LuaJTest.java index 4e4ef7d3..6daef14c 100644 --- a/src/test/java/org/luaj/vm/LuaJTest.java +++ b/src/test/java/org/luaj/vm/LuaJTest.java @@ -42,6 +42,10 @@ public class LuaJTest extends TestCase { runTest( "test7" ); } + public void testTest8() throws IOException, InterruptedException { + runTest( "test8" ); + } + public void testAutoload() throws IOException, InterruptedException { runTest( "autoload" ); } diff --git a/src/test/res/test8.lua b/src/test/res/test8.lua new file mode 100644 index 00000000..77318f6b --- /dev/null +++ b/src/test/res/test8.lua @@ -0,0 +1,12 @@ +t = {} +t[1] = "foo" +t[2] = "bah" +print(t[1]) +print(t[2]) +print(t[3]) + +t[1] = nil +t[2] = nil +print(t[1]) +print(t[2]) +print(t[3])