Skip to content

Commit

Permalink
fix: ensure stacks of new instances are empty
Browse files Browse the repository at this point in the history
  • Loading branch information
gudzpoz committed Jun 26, 2024
1 parent 71ddcb3 commit 61fcb17
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,11 @@ private void testNotSupported() {
}

private void testStackOperations() {
try (Lua L = constructor.get()) {
assertEquals(0, L.getTop());
assertEquals(0, L.newThread().getTop());
}

Lua sub = L.newThread();
int top = L.getTop();
L.setTop(top + 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,37 +22,53 @@ public LuaValueSuite(T L) {

public void test() {
L.openLibraries();

assertEquals(0, L.getTop());
equalityTest(L);
equalityTest(L.newThread());
assertEquals(0, L.getTop());
Lua J = L.newThread();
L.pop(1);
equalityTest(J);
assertEquals(0, L.getTop());
try (Lua K = new Lua51()) {
equalityTest(K);
}
assertEquals(0, L.getTop());
differentThreadTest();
assertEquals(0, L.getTop());
tableTest();
assertEquals(0, L.getTop());
tableMapTest();
assertEquals(0, L.getTop());
nilTest();
assertEquals(0, L.getTop());
stringTest();
assertEquals(0, L.getTop());
toStringTest();
assertEquals(0, L.getTop());
callTest();
assertEquals(0, L.getTop());
luaStateTest();
assertEquals(0, L.getTop());
}

@SuppressWarnings("SuspiciousMethodCalls")
private void tableMapTest() {
LuaValue map = L.eval("t = { 1, 2, 3, 4, a = 5, b = 6, c = 7, d = 8 }; return t")[0];
assertEquals(8, map.entrySet().size());
assertEquals(4, map.length());
assertEquals(0, L.getTop());
assertTrue(map.containsKey("a"));
map.entrySet().removeIf(next -> next.getKey().toString().equals("a"));
assertEquals(7, map.entrySet().size());
assertEquals(4, map.length());
assertEquals(0, L.getTop());
L.run("assert(not t.a)");
assertFalse(map.containsKey("a"));
assertEquals(7, map.remove("c").toInteger());
assertEquals(6, Objects.requireNonNull(map.put(L.from("b"), L.from(10))).toInteger());
assertEquals(10, map.get("b").toInteger());
assertEquals(1, map.get((Number) 1).toInteger());
assertEquals(0, L.getTop());

assertThrows(NoSuchElementException.class, () -> L.eval("return {}")[0].entrySet().iterator().next());
assertThrows(IllegalStateException.class, () -> L.eval("return {}")[0].entrySet().iterator().remove());
Expand All @@ -67,13 +83,15 @@ private void tableMapTest() {
assertThrows(UnsupportedOperationException.class, () -> i.set(1, new Object()));
assertThrows(UnsupportedOperationException.class, () -> i.set("", new Object()));
assertThrows(UnsupportedOperationException.class, i::call);
assertEquals(0, L.getTop());

assertEquals(1, i.toNumber(), 0.000001);
assertEquals(1, i.toInteger());
assertTrue(i.toBoolean());
L.push(0);
LuaValue j = L.get();
assertFalse(j.toBoolean());
assertEquals(0, L.getTop());
}

private void toStringTest() {
Expand Down Expand Up @@ -136,6 +154,7 @@ private void nilTest() {

private void tableTest() {
int top = L.getTop();
assertEquals(0, L.getTop());
LuaValue[] values = L.eval("return {1, 2, 3, a = 'b', c = 'd'}, 1024");
assertEquals(2, values.length);
LuaValue value = values[0];
Expand All @@ -147,6 +166,7 @@ private void tableTest() {
assertEquals(3., map.get(3.));
assertEquals("b", map.get("a"));
assertEquals("d", map.get("c"));
assertEquals(0, L.getTop());

assertEquals(top, L.getTop());
assertEquals(1., value.get(1).toJavaObject());
Expand Down Expand Up @@ -179,13 +199,16 @@ private void differentThreadTest() {
assertThrows(UnsupportedOperationException.class, () -> L.get().get(K.get()));
K.pushNil();
K.get().push(L);
assertEquals(NIL, L.type(-1));
L.pop(1);

K.pushNil();
LuaValue nil = K.get();
L.push(nil, Lua.Conversion.NONE);
assertTrue(L.isNil(-1));
L.pop(1);
Lua J = L.newThread();
L.pop(1);
J.pushNil();
L.push(J.get(), Lua.Conversion.NONE);
assertTrue(L.isNil(-1));
Expand Down
2 changes: 1 addition & 1 deletion jni/luajava/jua.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ void initMetaRegistry(lua_State * L) {
lua_pushcfunction(L, &jobjectEquals);
lua_setfield(L, -2, LUA_METAFIELD_EQ);
}
lua_pop(L, 1);

if (luaL_newmetatable(L, JAVA_PACKAGE_META_REGISTRY) == 1) {
/* Lua:
Expand All @@ -289,7 +290,6 @@ void initMetaRegistry(lua_State * L) {
lua_pushcfunction(L, &jclassNewIndex);
lua_setfield(L, -2, LUA_METAFIELD_NEWINDEX);
}

lua_pop(L, 1);
}

Expand Down
2 changes: 2 additions & 0 deletions lua52/jni/mod/luacomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
*/
static inline void luaJ_openlib_call(lua_State * L, const char * libName, lua_CFunction loader) {
luaL_requiref(L, libName, loader, 1);
lua_pop(L, 1);
}

luaL_Reg allAvailableLibs[] = {
{ "", luaopen_base },
{ "_G", luaopen_base },
{ "package", luaopen_package },
{ "coroutine", luaopen_coroutine },
Expand Down
2 changes: 2 additions & 0 deletions lua53/jni/mod/luacomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
*/
static inline void luaJ_openlib_call(lua_State * L, const char * libName, lua_CFunction loader) {
luaL_requiref(L, libName, loader, 1);
lua_pop(L, 1);
}

luaL_Reg allAvailableLibs[] = {
{ "", luaopen_base },
{ "_G", luaopen_base },
{ "package", luaopen_package },
{ "coroutine", luaopen_coroutine },
Expand Down
2 changes: 2 additions & 0 deletions lua54/jni/mod/luacomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
*/
static inline void luaJ_openlib_call(lua_State * L, const char * libName, lua_CFunction loader) {
luaL_requiref(L, libName, loader, 1);
lua_pop(L, 1);
}

luaL_Reg allAvailableLibs[] = {
{ "", luaopen_base },
{ "_G", luaopen_base },
{ "package", luaopen_package },
{ "coroutine", luaopen_coroutine },
Expand Down

0 comments on commit 61fcb17

Please sign in to comment.