diff --git a/src/core/org/luaj/lib/StringLib.java b/src/core/org/luaj/lib/StringLib.java index d53af290..9abc5014 100644 --- a/src/core/org/luaj/lib/StringLib.java +++ b/src/core/org/luaj/lib/StringLib.java @@ -275,18 +275,17 @@ public class StringLib extends LFunction { * as this would prevent the iteration. */ static void gmatch( LuaState vm ) { + LString src = vm.tolstring( 2 ); + LString pat = vm.tolstring( 3 ); vm.resettop(); - vm.pushlvalue( new GMatchAux(vm) ); + vm.pushlvalue( new GMatchAux(vm, src, pat) ); } static class GMatchAux extends LFunction { - private final LString src,pat; private final int srclen; private final MatchState ms; private int soffset; - public GMatchAux(LuaState vm) { - this.src = vm.tolstring(2); - this.pat = vm.tolstring(3); + public GMatchAux(LuaState vm, LString src, LString pat) { this.srclen = src.length(); this.ms = new MatchState(vm, src, pat); this.soffset = 0; @@ -294,6 +293,7 @@ public class StringLib extends LFunction { public boolean luaStackCall(LuaState vm) { vm.resettop(); for ( ; soffset=0 ) { int soff = soffset; diff --git a/src/test/res/strlib.lua b/src/test/res/strlib.lua index ddccf663..30f31315 100644 --- a/src/test/res/strlib.lua +++ b/src/test/res/strlib.lua @@ -43,3 +43,7 @@ local function badpat() end print( pcall( badpat ) ) + +for k, v in string.gmatch("w=200&h=150", "(%w+)=(%w+)") do + print(k, v) +end diff --git a/src/test/res/strlib.luac b/src/test/res/strlib.luac index bb8dd750..67b354cf 100644 Binary files a/src/test/res/strlib.luac and b/src/test/res/strlib.luac differ