From e744b9be2b41f501b278585bcc794f76a3a3dfd7 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Tue, 6 Jul 2010 05:26:19 +0000 Subject: [PATCH] Improve weak table implementation --- src/core/org/luaj/vm2/LuaTable.java | 4 ++-- src/core/org/luaj/vm2/LuaValue.java | 3 ++- src/core/org/luaj/vm2/WeakTable.java | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/org/luaj/vm2/LuaTable.java b/src/core/org/luaj/vm2/LuaTable.java index f336c6f3..387e4d8a 100644 --- a/src/core/org/luaj/vm2/LuaTable.java +++ b/src/core/org/luaj/vm2/LuaTable.java @@ -30,7 +30,7 @@ public class LuaTable extends LuaValue { protected LuaValue[] array; protected LuaValue[] hashKeys; protected LuaValue[] hashValues; - private int hashEntries; + protected int hashEntries; protected LuaValue m_metatable; public LuaTable() { @@ -170,7 +170,7 @@ public class LuaTable extends LuaValue { return hashget( key ); } - private LuaValue hashget(LuaValue key) { + protected LuaValue hashget(LuaValue key) { if ( hashEntries > 0 ) { LuaValue v = hashValues[hashFindSlot(key)]; return v!=null? v: NIL; diff --git a/src/core/org/luaj/vm2/LuaValue.java b/src/core/org/luaj/vm2/LuaValue.java index 84f2deb6..4bdf6808 100644 --- a/src/core/org/luaj/vm2/LuaValue.java +++ b/src/core/org/luaj/vm2/LuaValue.java @@ -317,8 +317,9 @@ public class LuaValue extends Varargs { // lua number/string conversion public LuaString strvalue() { typerror("strValue"); return null; } - public LuaValue strongkey() { return this; } + public LuaValue strongkey() { return strongvalue(); } public LuaValue strongvalue() { return this; } + public boolean isweaknil() { return false; } // conversion from java values public static LuaBoolean valueOf(boolean b) { return b? LuaValue.TRUE: FALSE; }; diff --git a/src/core/org/luaj/vm2/WeakTable.java b/src/core/org/luaj/vm2/WeakTable.java index 0b602961..87f770ef 100644 --- a/src/core/org/luaj/vm2/WeakTable.java +++ b/src/core/org/luaj/vm2/WeakTable.java @@ -269,7 +269,6 @@ public class WeakTable extends LuaTable { this.weakvalue = weakvalue; } - // when looking up the value, look in the keys metatable public LuaValue strongvalue() { LuaValue key = weakkey.strongkey(); if ( key.isnil() )