Browse Source

Fix gmatch return value handling

mingodad 8 years ago
parent
commit
2e807204eb
2 changed files with 4 additions and 2 deletions
  1. 2 1
      SquiLu-ext/sq_pcre.cpp
  2. 2 1
      SquiLu-ext/sq_pcre2.cpp

+ 2 - 1
SquiLu-ext/sq_pcre.cpp

@@ -324,7 +324,7 @@ static SQRESULT sq_pcre_gmatch(HSQUIRRELVM v)
             else sq_pushstring(v, subject + start_pos, end_pos - start_pos);
             ++param_count;
         }
-        i = sq_call(v, rc+1, SQFalse, SQTrue);
+        i = sq_call(v, rc+1, SQTrue, SQTrue);
         if(i < 0) return i;
 
         SQObjectType rtype = sq_gettype(v, -1);
@@ -332,6 +332,7 @@ static SQRESULT sq_pcre_gmatch(HSQUIRRELVM v)
         if(rtype == OT_BOOL) {
             sq_getbool(v, -1, &keep_matching);
         }
+        sq_poptop(v); //remove return parameter
 
         if(!keep_matching) break;
 

+ 2 - 1
SquiLu-ext/sq_pcre2.cpp

@@ -406,13 +406,14 @@ static SQRESULT sq_pcre2_gmatch(HSQUIRRELVM v)
             else sq_pushstring(v, subject + start_pos, end_pos - start_pos);
             ++param_count;
         }
-        i = sq_call(v, param_count, SQFalse, SQTrue);
+        i = sq_call(v, param_count, SQTrue, SQTrue);
         if(i < 0) return i;
         SQObjectType rtype = sq_gettype(v, -1);
         SQBool keep_matching = SQFalse;
         if(rtype == OT_BOOL) {
             sq_getbool(v, -1, &keep_matching);
         }
+        sq_poptop(v); //remove return parameter
 
         if(!keep_matching) break;