From 63b6b09a6cbab4446f42b5b7a8c85e6109cac9f6 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Thu, 11 May 2017 15:37:05 +1000 Subject: src/lvm.js: Setting nil should delete from table Closes #37 --- src/lvm.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lvm.js b/src/lvm.js index 0d30484..4484bf2 100644 --- a/src/lvm.js +++ b/src/lvm.js @@ -1079,7 +1079,10 @@ const settable = function(L, table, key, v, recur) { let element = ltable.luaH_set(table.value, key); if (!element.ttisnil()) { - element.setfrom(v); + if (v.ttisnil()) + ltable.luaH_delete(table.value, key); + else + element.setfrom(v); } else { luaV_finishset(L, table, key, v, element, recur); } @@ -1094,7 +1097,10 @@ const luaV_finishset = function(L, t, key, val, slot, recur) { assert(slot.ttisnil()); tm = ltm.luaT_gettmbyobj(L, t, ltm.TMS.TM_NEWINDEX); // TODO: fasttm if (tm.ttisnil()) { - slot.setfrom(val); + if (val.ttisnil()) + ltable.luaH_delete(t.value, key); + else + slot.setfrom(val); return; } } else { /* not a table; check metamethod */ -- cgit v1.2.3-70-g09d2