Index: src/array.js |
diff --git a/src/array.js b/src/array.js |
index 4dd23c8bb464b31b4171e7e671b9a8bb106f1951..7f179ed78b1d23704f342a5a332dfbc49f7e7d22 100644 |
--- a/src/array.js |
+++ b/src/array.js |
@@ -381,10 +381,22 @@ 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; |
+ } |
+ if (!IS_SPEC_FUNCTION(func)) { |
+ return %_CallFunction(array, ObjectToString); |
} |
- return Join(this, this.length, ',', ConvertToString); |
+ return %_CallFunction(array, func); |
} |