[ES6] Fix name enumeration of static functions for Symbol constructor
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 17 Apr 2015 21:22:39 +0000 (21:22 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 17 Apr 2015 21:22:39 +0000 (21:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143891

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Fix missing symbolPrototypeTable registration to the js class object.
This patch fixes name enumeration of static functions (Symbol.key, Symbol.keyFor) for Symbol constructor.

* runtime/SymbolConstructor.cpp:

LayoutTests:

Add property names tests for Symbol constructor, Symbol object and Symbol.prototype.

* js/Object-getOwnPropertyNames-expected.txt: Removed.
* js/script-tests/Object-getOwnPropertyNames.js:

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

LayoutTests/ChangeLog
LayoutTests/js/Object-getOwnPropertyNames-expected.txt
LayoutTests/js/script-tests/Object-getOwnPropertyNames.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/SymbolConstructor.cpp

index df21b6f..e1d4ce4 100644 (file)
@@ -1,3 +1,15 @@
+2015-04-17  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [ES6] Fix name enumeration of static functions for Symbol constructor
+        https://bugs.webkit.org/show_bug.cgi?id=143891
+
+        Reviewed by Geoffrey Garen.
+
+        Add property names tests for Symbol constructor, Symbol object and Symbol.prototype.
+
+        * js/Object-getOwnPropertyNames-expected.txt: Removed.
+        * js/script-tests/Object-getOwnPropertyNames.js:
+
 2015-04-17  Beth Dakin  <bdakin@apple.com>
 
         Force mouse events should go through normal mouse event handling code paths
index 53956ac..f57f655 100644 (file)
@@ -30,6 +30,7 @@ PASS getSortedOwnPropertyNames(argumentsObject()) is ['callee', 'length']
 PASS getSortedOwnPropertyNames(argumentsObject(1)) is ['0', 'callee', 'length']
 PASS getSortedOwnPropertyNames(argumentsObject(1,2,3)) is ['0', '1', '2', 'callee', 'length']
 PASS getSortedOwnPropertyNames((function(){arguments.__proto__=[1,2,3];return arguments;})()) is ['callee', 'length']
+PASS getSortedOwnPropertyNames(Object(Symbol.iterator)) is []
 PASS getSortedOwnPropertyNames(parseInt) is ['length', 'name']
 PASS getSortedOwnPropertyNames(parseFloat) is ['length', 'name']
 PASS getSortedOwnPropertyNames(isNaN) is ['length', 'name']
@@ -60,6 +61,8 @@ PASS getSortedOwnPropertyNames(Error) is ['length', 'name', 'prototype']
 PASS getSortedOwnPropertyNames(Error.prototype) is ['constructor', 'message', 'name', 'toString']
 PASS getSortedOwnPropertyNames(Math) is ['E','LN10','LN2','LOG10E','LOG2E','PI','SQRT1_2','SQRT2','abs','acos','acosh','asin','asinh','atan','atan2','atanh','cbrt','ceil','cos','cosh','exp','expm1','floor','fround','hypot','imul','log','log10','log1p','log2','max','min','pow','random','round','sign','sin','sinh','sqrt','tan','tanh','trunc']
 PASS getSortedOwnPropertyNames(JSON) is ['parse', 'stringify']
+PASS getSortedOwnPropertyNames(Symbol) is ['for', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'unscopables']
+PASS getSortedOwnPropertyNames(Symbol.prototype) is ['constructor', 'toString', 'valueOf']
 PASS globalPropertyNames.indexOf('NaN') != -1 is true
 PASS globalPropertyNames.indexOf('Infinity') != -1 is true
 PASS globalPropertyNames.indexOf('undefined') != -1 is true
@@ -77,6 +80,7 @@ PASS globalPropertyNames.indexOf('Object') != -1 is true
 PASS globalPropertyNames.indexOf('Function') != -1 is true
 PASS globalPropertyNames.indexOf('Array') != -1 is true
 PASS globalPropertyNames.indexOf('String') != -1 is true
+PASS globalPropertyNames.indexOf('Symbol') != -1 is true
 PASS globalPropertyNames.indexOf('Boolean') != -1 is true
 PASS globalPropertyNames.indexOf('Number') != -1 is true
 PASS globalPropertyNames.indexOf('Date') != -1 is true
index 3a37436..eda638c 100644 (file)
@@ -36,6 +36,8 @@ var expectedPropertyNamesSet = {
      "argumentsObject(1)": "['0', 'callee', 'length']",
      "argumentsObject(1,2,3)": "['0', '1', '2', 'callee', 'length']",
     "(function(){arguments.__proto__=[1,2,3];return arguments;})()": "['callee', 'length']",
+// Symbol objects
+    "Object(Symbol.iterator)": "[]",
 // Built-in ECMA functions
     "parseInt": "['length', 'name']",
     "parseFloat": "['length', 'name']",
@@ -67,7 +69,9 @@ var expectedPropertyNamesSet = {
     "Error": "['length', 'name', 'prototype']",
     "Error.prototype": "['constructor', 'message', 'name', 'toString']",
     "Math": "['E','LN10','LN2','LOG10E','LOG2E','PI','SQRT1_2','SQRT2','abs','acos','acosh','asin','asinh','atan','atan2','atanh','cbrt','ceil','cos','cosh','exp','expm1','floor','fround','hypot','imul','log','log10','log1p','log2','max','min','pow','random','round','sign','sin','sinh','sqrt','tan','tanh','trunc']",
-    "JSON": "['parse', 'stringify']"
+    "JSON": "['parse', 'stringify']",
+    "Symbol": "['for', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'unscopables']",
+    "Symbol.prototype": "['constructor', 'toString', 'valueOf']"
 };
 
 function getSortedOwnPropertyNames(obj)
@@ -99,6 +103,7 @@ var expectedGlobalPropertyNames = [
     "Function",
     "Array",
     "String",
+    "Symbol",
     "Boolean",
     "Number",
     "Date",
index 1e47844..d92cea2 100644 (file)
@@ -1,3 +1,15 @@
+2015-04-17  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [ES6] Fix name enumeration of static functions for Symbol constructor
+        https://bugs.webkit.org/show_bug.cgi?id=143891
+
+        Reviewed by Geoffrey Garen.
+
+        Fix missing symbolPrototypeTable registration to the js class object.
+        This patch fixes name enumeration of static functions (Symbol.key, Symbol.keyFor) for Symbol constructor.
+
+        * runtime/SymbolConstructor.cpp:
+
 2015-04-17  Basile Clement  <basile_clement@apple.com>
 
         Inline JSFunction allocation in DFG
index 2382654..5363b9b 100644 (file)
@@ -47,7 +47,7 @@ namespace JSC {
 
 STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(SymbolConstructor);
 
-const ClassInfo SymbolConstructor::s_info = { "Function", &Base::s_info, 0, CREATE_METHOD_TABLE(SymbolConstructor) };
+const ClassInfo SymbolConstructor::s_info = { "Function", &Base::s_info, &symbolConstructorTable, CREATE_METHOD_TABLE(SymbolConstructor) };
 
 /* Source for SymbolConstructor.lut.h
 @begin symbolConstructorTable