Fix entries for non-matches in the results array of RegExp.exec
authorSimon Hausmann <simon.hausmann@digia.com>
Thu, 17 Jan 2013 13:28:31 +0000 (14:28 +0100)
committerLars Knoll <lars.knoll@digia.com>
Thu, 17 Jan 2013 14:12:18 +0000 (15:12 +0100)
A capture that failed to match should result an entry in the
results array with value undefined.

Change-Id: I08fedfc59cda752b209e79ff8abf7ee105a0c527
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
qv4ecmaobjects.cpp
tests/TestExpectations

index 3f1ad3c..61abadc 100644 (file)
@@ -2915,8 +2915,10 @@ Value RegExpPrototype::method_exec(ExecutionContext *ctx)
     for (int i = 0; i < r->value->captureCount(); ++i) {
         int start = matchOffsets[i * 2];
         int end = matchOffsets[i * 2 + 1];
+        Value entry = Value::undefinedValue();
         if (start != -1 && end != -1)
-            array->array.push_back(Value::fromString(ctx, s.mid(start, end - start)));
+            entry = Value::fromString(ctx, s.mid(start, end - start));
+        array->array.push_back(entry);
     }
 
     array->__put__(ctx, QLatin1String("index"), Value::fromInt32(result));
index 7284105..499caca 100644 (file)
@@ -377,35 +377,18 @@ S15.1.2.2_A9.2 failing
 S15.1.2.2_A9.3 failing
 S15.1.2.2_A9.4 failing
 S15.1.2.2_A9.7 failing
-S15.10.2.3_A1_T15 failing
-S15.10.2.3_A1_T17 failing
-S15.10.2.3_A1_T2 failing
-S15.10.2.5_A1_T4 failing
 S15.10.2.12_A6_T1 failing
 S15.10.2.12_A1_T1 failing
 S15.10.2.12_A2_T1 failing
 S15.10.2.12_A3_T1 failing
 S15.10.2.12_A4_T1 failing
 S15.10.2.12_A5_T1 failing
-S15.10.2.7_A5_T2 failing
-S15.10.2.8_A1_T4 failing
-S15.10.2.8_A2_T1 failing
 S15.10.2.8_A3_T15 failing
 S15.10.2.8_A3_T16 failing
 S15.10.2.8_A3_T17 failing
 S15.10.2.8_A3_T18 failing
-S15.10.2.8_A3_T19 failing
-S15.10.2.8_A3_T2 failing
-S15.10.2.8_A3_T22 failing
-S15.10.2.8_A3_T25 failing
-S15.10.2.8_A3_T26 failing
-S15.10.2.8_A3_T27 failing
-S15.10.2.8_A3_T28 failing
-S15.10.2.8_A3_T29 failing
-S15.10.2.9_A1_T2 failing
 S15.10.5_A1 failing
 S15.10.6.2_A1_T2 failing
-S15.10.6.2_A1_T6 failing
 S15.10.6.2_A4_T1 failing
 S15.10.6.2_A4_T10 failing
 S15.10.6.2_A4_T11 failing