Chromium Code Reviews| Index: src/regexp.js |
| =================================================================== |
| --- src/regexp.js (revision 5973) |
| +++ src/regexp.js (working copy) |
| @@ -120,22 +120,28 @@ |
| function BuildResultFromMatchInfo(lastMatchInfo, s) { |
| var numResults = NUMBER_OF_CAPTURES(lastMatchInfo) >> 1; |
| - var result = %_RegExpConstructResult(numResults, lastMatchInfo[CAPTURE0], s); |
| - if (numResults === 1) { |
| - var matchStart = lastMatchInfo[CAPTURE(0)]; |
| - var matchEnd = lastMatchInfo[CAPTURE(1)]; |
| - result[0] = SubString(s, matchStart, matchEnd); |
| + var start = lastMatchInfo[CAPTURE0]; |
| + var end = lastMatchInfo[CAPTURE1]; |
| + var result = %_RegExpConstructResult(numResults, start, s); |
| + if (start + 1 == end) { |
|
Lasse Reichstein
2010/12/13 09:29:13
Why not just lop from match 0/j = 3 instead of spe
sandholm
2010/12/13 12:03:35
The array lookup for start is re-used in the RegEx
|
| + result[0] = %_StringCharAt(s, start); |
| } else { |
| - for (var i = 0; i < numResults; i++) { |
| - var matchStart = lastMatchInfo[CAPTURE(i << 1)]; |
| - var matchEnd = lastMatchInfo[CAPTURE((i << 1) + 1)]; |
| - if (matchStart != -1 && matchEnd != -1) { |
| - result[i] = SubString(s, matchStart, matchEnd); |
| + result[0] = %_SubString(s, start, end); |
| + } |
| + var j = 5; |
|
Lasse Reichstein
2010/12/13 09:29:13
var j = REGEXP_FIRST_CAPTURE + 2;
sandholm
2010/12/13 12:03:35
Done.
|
| + for (var i = 1; i < numResults; i++) { |
| + start = lastMatchInfo[j++]; |
| + end = lastMatchInfo[j++]; |
| + if (end != -1) { |
| + if (start + 1 == end) { |
| + result[i] = %_StringCharAt(s, start); |
| } else { |
| - // Make sure the element is present. Avoid reading the undefined |
| - // property from the global object since this may change. |
| - result[i] = void 0; |
| + result[i] = %_SubString(s, start, end); |
| } |
| + } else { |
| + // Make sure the element is present. Avoid reading the undefined |
| + // property from the global object since this may change. |
| + result[i] = void 0; |
| } |
| } |
| return result; |