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; |
+ } |
} |
} |