| Index: src/string.js
|
| ===================================================================
|
| --- src/string.js (revision 3544)
|
| +++ src/string.js (working copy)
|
| @@ -505,7 +505,7 @@
|
| // ECMA-262 section 15.5.4.14
|
| function StringSplit(separator, limit) {
|
| var subject = ToString(this);
|
| - limit = (limit === void 0) ? 0xffffffff : ToUint32(limit);
|
| + limit = (IS_UNDEFINED(limit)) ? 0xffffffff : TO_UINT32(limit);
|
| if (limit === 0) return [];
|
|
|
| // ECMA-262 says that if separator is undefined, the result should
|
| @@ -604,22 +604,30 @@
|
|
|
| // ECMA-262 section 15.5.4.15
|
| function StringSubstring(start, end) {
|
| - var s = ToString(this);
|
| + var s = this;
|
| + if (!IS_STRING(s)) s = ToString(s);
|
| var s_len = s.length;
|
| +
|
| var start_i = TO_INTEGER(start);
|
| + if (start_i < 0) {
|
| + start_i = 0;
|
| + } else if (start_i > s_len) {
|
| + start_i = s_len;
|
| + }
|
| +
|
| var end_i = s_len;
|
| - if (!IS_UNDEFINED(end))
|
| + if (!IS_UNDEFINED(end)) {
|
| end_i = TO_INTEGER(end);
|
| -
|
| - if (start_i < 0) start_i = 0;
|
| - if (start_i > s_len) start_i = s_len;
|
| - if (end_i < 0) end_i = 0;
|
| - if (end_i > s_len) end_i = s_len;
|
| -
|
| - if (start_i > end_i) {
|
| - var tmp = end_i;
|
| - end_i = start_i;
|
| - start_i = tmp;
|
| + if (end_i > s_len) {
|
| + end_i = s_len;
|
| + } else {
|
| + if (end_i < 0) end_i = 0;
|
| + if (start_i > end_i) {
|
| + var tmp = end_i;
|
| + end_i = start_i;
|
| + start_i = tmp;
|
| + }
|
| + }
|
| }
|
|
|
| return SubString(s, start_i, end_i);
|
| @@ -790,21 +798,14 @@
|
| }
|
|
|
|
|
| -// StringBuilder support.
|
| -
|
| -function StringBuilder() {
|
| - this.elements = new $Array();
|
| -}
|
| -
|
| -
|
| +// ReplaceResultBuilder support.
|
| function ReplaceResultBuilder(str) {
|
| this.elements = new $Array();
|
| this.special_string = str;
|
| }
|
|
|
|
|
| -ReplaceResultBuilder.prototype.add =
|
| -StringBuilder.prototype.add = function(str) {
|
| +ReplaceResultBuilder.prototype.add = function(str) {
|
| if (!IS_STRING(str)) str = ToString(str);
|
| if (str.length > 0) {
|
| var elements = this.elements;
|
| @@ -828,13 +829,9 @@
|
| }
|
|
|
|
|
| -StringBuilder.prototype.generate = function() {
|
| - return %StringBuilderConcat(this.elements, "");
|
| -}
|
| -
|
| -
|
| ReplaceResultBuilder.prototype.generate = function() {
|
| - return %StringBuilderConcat(this.elements, this.special_string);
|
| + var elements = this.elements;
|
| + return %StringBuilderConcat(elements, elements.length, this.special_string);
|
| }
|
|
|
|
|
|
|