ExtJS breaks with modern Array.prototype.values API due to use of with()
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Nov 2013 20:53:13 +0000 (20:53 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Nov 2013 20:53:13 +0000 (20:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=123440

Reviewed by Beth Dakin.

Source/JavaScriptCore:

As with our attempt to make Arguments use the Array prototype, ExtJS has
a weird dependency on not adding new APIs to core types.  In this case
Array.prototype.values.  The fix is to remove it, and push for ES6 to drop
the API.

* runtime/ArrayPrototype.cpp:

LayoutTests:

Update tests for removal of Array.prototype.values, and add test to ensure that
it's gone.

* js/Object-getOwnPropertyNames-expected.txt:
* js/array-iterators-expected.txt:
* js/basic-for-of-expected.txt:
* js/script-tests/Object-getOwnPropertyNames.js:
* js/script-tests/array-iterators.js:
* js/script-tests/basic-for-of.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@159063 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/js/Object-getOwnPropertyNames-expected.txt
LayoutTests/js/array-iterators-expected.txt
LayoutTests/js/basic-for-of-expected.txt
LayoutTests/js/script-tests/Object-getOwnPropertyNames.js
LayoutTests/js/script-tests/array-iterators.js
LayoutTests/js/script-tests/basic-for-of.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/ArrayPrototype.cpp

index 8506c1a..d12e56f 100644 (file)
@@ -1,5 +1,22 @@
 2013-11-11  Oliver Hunt  <oliver@apple.com>
 
+        ExtJS breaks with modern Array.prototype.values API due to use of with()
+        https://bugs.webkit.org/show_bug.cgi?id=123440
+
+        Reviewed by Beth Dakin.
+
+        Update tests for removal of Array.prototype.values, and add test to ensure that
+        it's gone.
+
+        * js/Object-getOwnPropertyNames-expected.txt:
+        * js/array-iterators-expected.txt:
+        * js/basic-for-of-expected.txt:
+        * js/script-tests/Object-getOwnPropertyNames.js:
+        * js/script-tests/array-iterators.js:
+        * js/script-tests/basic-for-of.js:
+
+2013-11-11  Oliver Hunt  <oliver@apple.com>
+
         Whoops, fix test post move
 
         * js/basic-set.html:
index ba27bce..ed13584 100644 (file)
@@ -45,7 +45,7 @@ PASS getSortedOwnPropertyNames(Object.prototype) is ['__defineGetter__', '__defi
 PASS getSortedOwnPropertyNames(Function) is ['length', 'name', 'prototype']
 PASS getSortedOwnPropertyNames(Function.prototype) is ['apply', 'bind', 'call', 'constructor', 'length', 'name', 'toString']
 PASS getSortedOwnPropertyNames(Array) is ['isArray', 'length', 'name', 'prototype']
-PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'entries', 'every', 'filter', 'forEach', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']
+PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'entries', 'every', 'filter', 'forEach', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift']
 PASS getSortedOwnPropertyNames(String) is ['fromCharCode', 'length', 'name', 'prototype']
 PASS getSortedOwnPropertyNames(String.prototype) is ['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'concat', 'constructor', 'fixed', 'fontcolor', 'fontsize', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'replace', 'search', 'slice', 'small', 'split', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimLeft', 'trimRight', 'valueOf']
 PASS getSortedOwnPropertyNames(Boolean) is ['length', 'name', 'prototype']
index 32416b6..4dd763d 100644 (file)
@@ -3,6 +3,7 @@ This test checks the behavior of the iterator methods on Array objects.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
+PASS 'values' in [] is false
 PASS key is 0
 PASS key is 1
 PASS key is 2
@@ -10,13 +11,6 @@ PASS key is 3
 PASS key is 4
 PASS key is 5
 PASS testArray.length is 6
-PASS value is 1
-PASS value is 2
-PASS value is 3
-PASS value is 4
-PASS value is 5
-PASS value is 6
-PASS testArray.length is 6
 PASS value is testArray[key]
 PASS key is 0
 PASS value is 1
index bebc3d4..6f10b17 100644 (file)
@@ -10,13 +10,6 @@ PASS value is testArray[3]
 PASS value is testArray[4]
 PASS value is testArray[5]
 PASS testArray.length is 6
-PASS value is testArray[0]
-PASS value is testArray[1]
-PASS value is testArray[2]
-PASS value is testArray[3]
-PASS value is testArray[4]
-PASS value is testArray[5]
-PASS testArray.length is 6
 PASS key is 0
 PASS key is 1
 PASS key is 2
index ffce476..f6f725f 100644 (file)
@@ -53,7 +53,7 @@ var expectedPropertyNamesSet = {
     "Function": "['length', 'name', 'prototype']",
     "Function.prototype": "['apply', 'bind', 'call', 'constructor', 'length', 'name', 'toString']",
     "Array": "['isArray', 'length', 'name', 'prototype']",
-    "Array.prototype": "['concat', 'constructor', 'entries', 'every', 'filter', 'forEach', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']",
+    "Array.prototype": "['concat', 'constructor', 'entries', 'every', 'filter', 'forEach', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift']",
     "String": "['fromCharCode', 'length', 'name', 'prototype']",
     "String.prototype": "['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'concat', 'constructor', 'fixed', 'fontcolor', 'fontsize', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'replace', 'search', 'slice', 'small', 'split', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimLeft', 'trimRight', 'valueOf']",
     "Boolean": "['length', 'name', 'prototype']",
index 610185a..76059cf 100644 (file)
@@ -2,6 +2,7 @@ description(
 "This test checks the behavior of the iterator methods on Array objects."
 );
 
+shouldBeFalse("'values' in []");
 
 var testArray = [1,2,3,4,5,6]
 var keys = testArray.keys();
@@ -13,15 +14,6 @@ for (var key of keys) {
 
 shouldBe("testArray.length", String(i))
 
-var values = testArray.values();
-var i = 0;
-for (var value of values) {
-    i++;
-    shouldBe("value", String(i) )
-}
-
-shouldBe("testArray.length", String(i))
-
 var entries = testArray.entries();
 var i = 0;
 for (var [key, value] of entries) {
index 5f22f33..57bebe2 100644 (file)
@@ -6,12 +6,6 @@ description(
 var testArray = [1,2,3,4,5,6]
 
 var i = 0;
-for (var value of testArray.values())
-    shouldBe("value", "testArray[" + i++ + "]")
-
-shouldBe("testArray.length", String(i))
-
-var i = 0;
 for (var value of testArray)
     shouldBe("value", "testArray[" + i++ + "]")
 
index 1cd3b95..a73b4a4 100644 (file)
@@ -1,3 +1,17 @@
+2013-11-11  Oliver Hunt  <oliver@apple.com>
+
+        ExtJS breaks with modern Array.prototype.values API due to use of with()
+        https://bugs.webkit.org/show_bug.cgi?id=123440
+
+        Reviewed by Beth Dakin.
+
+        As with our attempt to make Arguments use the Array prototype, ExtJS has
+        a weird dependency on not adding new APIs to core types.  In this case
+        Array.prototype.values.  The fix is to remove it, and push for ES6 to drop
+        the API.
+
+        * runtime/ArrayPrototype.cpp:
+
 2013-11-11  Gabor Rapcsanyi  <rgabor@webkit.org>
 
         Fix CPU(ARM_TRADITIONAL) build after r159039.
index 339da74..e0c599c 100644 (file)
@@ -116,7 +116,6 @@ const ClassInfo ArrayPrototype::s_info = {"Array", &JSArray::s_info, 0, ExecStat
   reduce         arrayProtoFuncReduce         DontEnum|Function 1
   reduceRight    arrayProtoFuncReduceRight    DontEnum|Function 1
   map            arrayProtoFuncMap            DontEnum|Function 1
-  values         arrayProtoFuncValues         DontEnum|Function 0
   entries        arrayProtoFuncEntries        DontEnum|Function 0
   keys           arrayProtoFuncKeys           DontEnum|Function 0
 @end