Chromium Code Reviews| Index: src/regexp-delay.js |
| =================================================================== |
| --- src/regexp-delay.js (revision 4025) |
| +++ src/regexp-delay.js (working copy) |
| @@ -152,8 +152,12 @@ |
| } |
| string = regExpInput; |
| } |
| - var s = ToString(string); |
| - var length = s.length; |
| + var s; |
| + if (IS_STRING(string)) { |
| + s = string; |
| + } else { |
| + s = ToString(string); |
| + } |
| var lastIndex = this.lastIndex; |
| var i = this.global ? TO_INTEGER(lastIndex) : 0; |
| @@ -172,16 +176,23 @@ |
| } |
| var numResults = NUMBER_OF_CAPTURES(lastMatchInfo) >> 1; |
| - var result = new $Array(numResults); |
| - 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); |
| - } else { |
| - // Make sure the element is present. Avoid reading the undefined |
| - // property from the global object since this may change. |
| - result[i] = void 0; |
| + if (numResults === 1) { |
| + var result = new $Array(1); |
|
Kasper Lund
2010/03/05 14:50:29
I wonder if
result = [ SubString(s, matchStar
|
| + var matchStart = lastMatchInfo[CAPTURE(0)]; |
| + var matchEnd = lastMatchInfo[CAPTURE(1)]; |
| + result[0] = SubString(s, matchStart, matchEnd); |
| + } else { |
| + var result = new $Array(numResults); |
| + 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); |
| + } else { |
| + // Make sure the element is present. Avoid reading the undefined |
| + // property from the global object since this may change. |
| + result[i] = void 0; |
| + } |
| } |
| } |