From fcf813de3a03ebc0bdd71c26935ab29896385c75 Mon Sep 17 00:00:00 2001 From: Rat Poison Date: Mon, 12 Oct 2020 05:50:33 +0200 Subject: [PATCH] Fix GetTable, SetTable, RawGet, RawSet if index<0 pop() operation breaks relative indices because all stack elements shift. --- lua/lua.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/lua.go b/lua/lua.go index 18c8db2..4b8bd2f 100644 --- a/lua/lua.go +++ b/lua/lua.go @@ -264,8 +264,8 @@ func (state *State) SetMetaTableAt(index int) { // See https://www.lua.org/manual/5.3/manual.html#lua_gettable func (state *State) GetTable(index int) Type { var ( - key = state.frame().pop() obj = state.get(index) + key = state.frame().pop() ) val := state.gettable(obj, key, false) state.frame().push(val) @@ -281,9 +281,9 @@ func (state *State) GetTable(index int) Type { // See https://www.lua.org/manual/5.3/manual.html#lua_settable func (state *State) SetTable(index int) { var ( + obj = state.get(index) val = state.frame().pop() key = state.frame().pop() - obj = state.get(index) ) state.settable(obj, key, val, false) } @@ -351,8 +351,8 @@ func (state *State) SetIndex(index int, entry int64) { // See https://www.lua.org/manual/5.3/manual.html#lua_rawget func (state *State) RawGet(index int) Type { var ( - key = state.frame().pop() obj = state.get(index) + key = state.frame().pop() ) val := state.gettable(obj, key, true) state.frame().push(val) @@ -364,9 +364,9 @@ func (state *State) RawGet(index int) Type { // See https://www.lua.org/manual/5.3/manual.html#lua_rawset func (state *State) RawSet(index int) { var ( + obj = state.get(index) val = state.frame().pop() key = state.frame().pop() - obj = state.get(index) ) state.settable(obj, key, val, true) }