From ad5e776dc96c43b8b853021f74f66b598ac4b3bc Mon Sep 17 00:00:00 2001 From: Ian Farmer Date: Mon, 19 Nov 2007 23:06:26 +0000 Subject: [PATCH] Add a string.gmatch call to strlib.lua test case and fix the bug it exposed. --- src/core/org/luaj/lib/StringLib.java | 10 +++++----- src/test/res/strlib.lua | 4 ++++ src/test/res/strlib.luac | Bin 2536 -> 2784 bytes 3 files changed, 9 insertions(+), 5 deletions(-) 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 bb8dd7508b14feb1a6916b21b42469a99083c68b..67b354cf7f3d83c535669796b6c5ce9500aac203 100644 GIT binary patch delta 325 zcmaDM{6KVqIuqxD$@kgBH#%4_nYubKFt{~dQp0|T`T zTSHR=h=7J_xwfV)nB4q{xt*DD!Q?u2>CIEwO_=KSff}%31E4rE2B`t@4S|>qh(VSn zC8iW4mN4`Ine%~I0Ejix@{1JGQ}a@b5=-)nG#O?<QwkDG82W(B$v_MO03j(6a{vGU