| Index: src/array.js
|
| diff --git a/src/array.js b/src/array.js
|
| index 4dd23c8bb464b31b4171e7e671b9a8bb106f1951..397adc7582671109f98aa729160704f109a3e21d 100644
|
| --- a/src/array.js
|
| +++ b/src/array.js
|
| @@ -201,17 +201,14 @@ function ConvertToString(x) {
|
|
|
|
|
| function ConvertToLocaleString(e) {
|
| - if (e == null) {
|
| + if (IS_NULL_OR_UNDEFINED(e)) {
|
| return '';
|
| } else {
|
| - // e_obj's toLocaleString might be overwritten, check if it is a function.
|
| - // Call ToString if toLocaleString is not a function.
|
| - // See issue 877615.
|
| + // According to ES5, seciton 15.4.4.3, the toLocaleString conversion
|
| + // must throw a TypeError if ToObject(e).toLocaleString isn't
|
| + // callable.
|
| var e_obj = ToObject(e);
|
| - if (IS_SPEC_FUNCTION(e_obj.toLocaleString))
|
| - return ToString(e_obj.toLocaleString());
|
| - else
|
| - return ToString(e);
|
| + return %ToString(e_obj.toLocaleString());
|
| }
|
| }
|
|
|
| @@ -381,18 +378,31 @@ function SimpleMove(array, start_i, del_count, len, num_additional_args) {
|
|
|
|
|
| function ArrayToString() {
|
| - if (!IS_ARRAY(this)) {
|
| - throw new $TypeError('Array.prototype.toString is not generic');
|
| + var array;
|
| + var func;
|
| + if (IS_ARRAY(this)) {
|
| + func = this.join;
|
| + if (func === ArrayJoin) {
|
| + return Join(this, this.length, ',', ConvertToString);
|
| + }
|
| + array = this;
|
| + } else {
|
| + array = ToObject(this);
|
| + func = array.join;
|
| }
|
| - return Join(this, this.length, ',', ConvertToString);
|
| + if (!IS_SPEC_FUNCTION(func)) {
|
| + return %_CallFunction(array, ObjectToString);
|
| + }
|
| + return %_CallFunction(array, func);
|
| }
|
|
|
|
|
| function ArrayToLocaleString() {
|
| - if (!IS_ARRAY(this)) {
|
| - throw new $TypeError('Array.prototype.toString is not generic');
|
| - }
|
| - return Join(this, this.length, ',', ConvertToLocaleString);
|
| + var array = ToObject(this);
|
| + var arrayLen = array.length;
|
| + var len = TO_UINT32(arrayLen);
|
| + if (len === 0) return "";
|
| + return Join(array, len, ',', ConvertToLocaleString);
|
| }
|
|
|
|
|
|
|