From d201bc301233d8dd1d12a5181f9ac98412f777bf Mon Sep 17 00:00:00 2001 From: Enyby Date: Sun, 15 Dec 2019 20:39:26 +0200 Subject: [PATCH] Fix work with weak tables. ``` a = {}; setmetatable(a, {__mode = 'vk'}); a[1], a[2], a[3] = {}, {}, {}; for k, v in pairs(a) do print(k, v) end print('ok') ``` --- src/core/org/luaj/vm2/LuaTable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/org/luaj/vm2/LuaTable.java b/src/core/org/luaj/vm2/LuaTable.java index b4b6cae2..9aa8f065 100644 --- a/src/core/org/luaj/vm2/LuaTable.java +++ b/src/core/org/luaj/vm2/LuaTable.java @@ -472,7 +472,8 @@ public class LuaTable extends LuaValue implements Metatable { } } if ( checkLoadFactor() ) { - if ( key.isinttype() && key.toint() > 0 ) { + if ( (m_metatable == null || !(m_metatable.useWeakKeys() || m_metatable.useWeakValues())) + && key.isinttype() && key.toint() > 0 ) { // a rehash might make room in the array portion for this key. rehash( key.toint() ); if ( arrayset(key.toint(), value) )