<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[195460] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/195460">195460</a></dd>
<dt>Author</dt> <dd>keith_miller@apple.com</dd>
<dt>Date</dt> <dd>2016-01-22 10:44:46 -0800 (Fri, 22 Jan 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>[ES6] Add Symbol.species properties to the relevant constructors
https://bugs.webkit.org/show_bug.cgi?id=153339
Reviewed by Michael Saboff.
Source/JavaScriptCore:
This patch adds Symbol.species to the RegExp, Array, TypedArray, Map, Set, ArrayBuffer, and
Promise constructors. The functions that use these properties will be added in a later
patch.
* builtins/GlobalObject.js:
(speciesGetter):
* runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::finishCreation):
* runtime/ArrayConstructor.h:
(JSC::ArrayConstructor::create):
* runtime/BooleanConstructor.h:
(JSC::BooleanConstructor::create):
* runtime/CommonIdentifiers.h:
* runtime/DateConstructor.h:
(JSC::DateConstructor::create):
* runtime/ErrorConstructor.h:
(JSC::ErrorConstructor::create):
* runtime/JSArrayBufferConstructor.cpp:
(JSC::JSArrayBufferConstructor::finishCreation):
(JSC::JSArrayBufferConstructor::create):
* runtime/JSArrayBufferConstructor.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
* runtime/JSInternalPromiseConstructor.cpp:
(JSC::JSInternalPromiseConstructor::create):
* runtime/JSInternalPromiseConstructor.h:
* runtime/JSPromiseConstructor.cpp:
(JSC::JSPromiseConstructor::create):
(JSC::JSPromiseConstructor::finishCreation):
* runtime/JSPromiseConstructor.h:
* runtime/JSTypedArrayViewConstructor.cpp:
(JSC::JSTypedArrayViewConstructor::finishCreation):
(JSC::JSTypedArrayViewConstructor::create): Deleted.
* runtime/JSTypedArrayViewConstructor.h:
(JSC::JSTypedArrayViewConstructor::create):
* runtime/MapConstructor.cpp:
(JSC::MapConstructor::finishCreation):
* runtime/MapConstructor.h:
(JSC::MapConstructor::create):
* runtime/NumberConstructor.h:
(JSC::NumberConstructor::create):
* runtime/RegExpConstructor.cpp:
(JSC::RegExpConstructor::finishCreation):
* runtime/RegExpConstructor.h:
(JSC::RegExpConstructor::create):
* runtime/SetConstructor.cpp:
(JSC::SetConstructor::finishCreation):
* runtime/SetConstructor.h:
(JSC::SetConstructor::create):
* runtime/StringConstructor.h:
(JSC::StringConstructor::create):
* runtime/SymbolConstructor.h:
(JSC::SymbolConstructor::create):
* runtime/WeakMapConstructor.h:
(JSC::WeakMapConstructor::create):
* runtime/WeakSetConstructor.h:
(JSC::WeakSetConstructor::create):
* tests/stress/symbol-species.js: Added.
(testSymbolSpeciesOnConstructor):
LayoutTests:
Add species to the list of property names on the Symbol object.
* js/Object-getOwnPropertyNames-expected.txt:
* js/script-tests/Object-getOwnPropertyNames.js:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsjsObjectgetOwnPropertyNamesexpectedtxt">trunk/LayoutTests/js/Object-getOwnPropertyNames-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsObjectgetOwnPropertyNamesjs">trunk/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebuiltinsGlobalObjectjs">trunk/Source/JavaScriptCore/builtins/GlobalObject.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayConstructorcpp">trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayConstructorh">trunk/Source/JavaScriptCore/runtime/ArrayConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeBooleanConstructorh">trunk/Source/JavaScriptCore/runtime/BooleanConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonIdentifiersh">trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDateConstructorh">trunk/Source/JavaScriptCore/runtime/DateConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorConstructorh">trunk/Source/JavaScriptCore/runtime/ErrorConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorh">trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSInternalPromiseConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSInternalPromiseConstructorh">trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorh">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSTypedArrayViewConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSTypedArrayViewConstructorh">trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeMapConstructorcpp">trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeMapConstructorh">trunk/Source/JavaScriptCore/runtime/MapConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberConstructorh">trunk/Source/JavaScriptCore/runtime/NumberConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorh">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSetConstructorcpp">trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSetConstructorh">trunk/Source/JavaScriptCore/runtime/SetConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringConstructorh">trunk/Source/JavaScriptCore/runtime/StringConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSymbolConstructorh">trunk/Source/JavaScriptCore/runtime/SymbolConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakMapConstructorh">trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakSetConstructorh">trunk/Source/JavaScriptCore/runtime/WeakSetConstructor.h</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoretestsstresssymbolspeciesjs">trunk/Source/JavaScriptCore/tests/stress/symbol-species.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/LayoutTests/ChangeLog        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-01-22 Keith Miller <keith_miller@apple.com>
+
+ [ES6] Add Symbol.species properties to the relevant constructors
+ https://bugs.webkit.org/show_bug.cgi?id=153339
+
+ Reviewed by Michael Saboff.
+
+ Add species to the list of property names on the Symbol object.
+
+ * js/Object-getOwnPropertyNames-expected.txt:
+ * js/script-tests/Object-getOwnPropertyNames.js:
+
</ins><span class="cx"> 2016-01-22 Chris Fleizach <cfleizach@apple.com>
</span><span class="cx">
</span><span class="cx"> AX: ARIA combo boxes are not returning the right value for selected text range
</span></span></pre></div>
<a id="trunkLayoutTestsjsObjectgetOwnPropertyNamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/Object-getOwnPropertyNames-expected.txt (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/Object-getOwnPropertyNames-expected.txt        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/LayoutTests/js/Object-getOwnPropertyNames-expected.txt        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx"> PASS getSortedOwnPropertyNames(Error.prototype) is ['constructor', 'message', 'name', 'toString']
</span><span class="cx"> PASS getSortedOwnPropertyNames(Math) is ['E','LN10','LN2','LOG10E','LOG2E','PI','SQRT1_2','SQRT2','abs','acos','acosh','asin','asinh','atan','atan2','atanh','cbrt','ceil','clz32','cos','cosh','exp','expm1','floor','fround','hypot','imul','log','log10','log1p','log2','max','min','pow','random','round','sign','sin','sinh','sqrt','tan','tanh','trunc']
</span><span class="cx"> PASS getSortedOwnPropertyNames(JSON) is ['parse', 'stringify']
</span><del>-PASS getSortedOwnPropertyNames(Symbol) is ['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'toStringTag', 'unscopables']
</del><ins>+PASS getSortedOwnPropertyNames(Symbol) is ['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'species', 'toStringTag', 'unscopables']
</ins><span class="cx"> PASS getSortedOwnPropertyNames(Symbol.prototype) is ['constructor', 'toString', 'valueOf']
</span><span class="cx"> PASS globalPropertyNames.indexOf('NaN') != -1 is true
</span><span class="cx"> PASS globalPropertyNames.indexOf('Infinity') != -1 is true
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsObjectgetOwnPropertyNamesjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> "Error.prototype": "['constructor', 'message', 'name', 'toString']",
</span><span class="cx"> "Math": "['E','LN10','LN2','LOG10E','LOG2E','PI','SQRT1_2','SQRT2','abs','acos','acosh','asin','asinh','atan','atan2','atanh','cbrt','ceil','clz32','cos','cosh','exp','expm1','floor','fround','hypot','imul','log','log10','log1p','log2','max','min','pow','random','round','sign','sin','sinh','sqrt','tan','tanh','trunc']",
</span><span class="cx"> "JSON": "['parse', 'stringify']",
</span><del>- "Symbol": "['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'toStringTag', 'unscopables']",
</del><ins>+ "Symbol": "['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'species', 'toStringTag', 'unscopables']",
</ins><span class="cx"> "Symbol.prototype": "['constructor', 'toString', 'valueOf']"
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -1,3 +1,70 @@
</span><ins>+2016-01-22 Keith Miller <keith_miller@apple.com>
+
+ [ES6] Add Symbol.species properties to the relevant constructors
+ https://bugs.webkit.org/show_bug.cgi?id=153339
+
+ Reviewed by Michael Saboff.
+
+ This patch adds Symbol.species to the RegExp, Array, TypedArray, Map, Set, ArrayBuffer, and
+ Promise constructors. The functions that use these properties will be added in a later
+ patch.
+
+ * builtins/GlobalObject.js:
+ (speciesGetter):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::finishCreation):
+ * runtime/ArrayConstructor.h:
+ (JSC::ArrayConstructor::create):
+ * runtime/BooleanConstructor.h:
+ (JSC::BooleanConstructor::create):
+ * runtime/CommonIdentifiers.h:
+ * runtime/DateConstructor.h:
+ (JSC::DateConstructor::create):
+ * runtime/ErrorConstructor.h:
+ (JSC::ErrorConstructor::create):
+ * runtime/JSArrayBufferConstructor.cpp:
+ (JSC::JSArrayBufferConstructor::finishCreation):
+ (JSC::JSArrayBufferConstructor::create):
+ * runtime/JSArrayBufferConstructor.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::init):
+ * runtime/JSInternalPromiseConstructor.cpp:
+ (JSC::JSInternalPromiseConstructor::create):
+ * runtime/JSInternalPromiseConstructor.h:
+ * runtime/JSPromiseConstructor.cpp:
+ (JSC::JSPromiseConstructor::create):
+ (JSC::JSPromiseConstructor::finishCreation):
+ * runtime/JSPromiseConstructor.h:
+ * runtime/JSTypedArrayViewConstructor.cpp:
+ (JSC::JSTypedArrayViewConstructor::finishCreation):
+ (JSC::JSTypedArrayViewConstructor::create): Deleted.
+ * runtime/JSTypedArrayViewConstructor.h:
+ (JSC::JSTypedArrayViewConstructor::create):
+ * runtime/MapConstructor.cpp:
+ (JSC::MapConstructor::finishCreation):
+ * runtime/MapConstructor.h:
+ (JSC::MapConstructor::create):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::create):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::finishCreation):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::create):
+ * runtime/SetConstructor.cpp:
+ (JSC::SetConstructor::finishCreation):
+ * runtime/SetConstructor.h:
+ (JSC::SetConstructor::create):
+ * runtime/StringConstructor.h:
+ (JSC::StringConstructor::create):
+ * runtime/SymbolConstructor.h:
+ (JSC::SymbolConstructor::create):
+ * runtime/WeakMapConstructor.h:
+ (JSC::WeakMapConstructor::create):
+ * runtime/WeakSetConstructor.h:
+ (JSC::WeakSetConstructor::create):
+ * tests/stress/symbol-species.js: Added.
+ (testSymbolSpeciesOnConstructor):
+
</ins><span class="cx"> 2016-01-21 Benjamin Poulain <benjamin@webkit.org>
</span><span class="cx">
</span><span class="cx"> [JSC] The IRC allocator can mess up the degree of Tmps interfering with move-related Tmps
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsGlobalObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/GlobalObject.js (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/GlobalObject.js        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/builtins/GlobalObject.js        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -64,3 +64,10 @@
</span><span class="cx">
</span><span class="cx"> return typeof object === "undefined" || object == null || typeof object === "object";
</span><span class="cx"> }
</span><ins>+
+// FIXME: this needs to have it's name changed to "get [Symbol.species]".
+// see: https://bugs.webkit.org/show_bug.cgi?id=151363
+function speciesGetter()
+{
+ return this;
+}
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include "CopiedSpaceInlines.h"
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "ExceptionHelpers.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "JSArray.h"
</span><span class="cx"> #include "JSFunction.h"
</span><span class="cx"> #include "Lookup.h"
</span><span class="lines">@@ -61,11 +62,12 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void ArrayConstructor::finishCreation(VM& vm, ArrayPrototype* arrayPrototype)
</del><ins>+void ArrayConstructor::finishCreation(VM& vm, ArrayPrototype* arrayPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, arrayPrototype->classInfo()->className);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ArrayConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &slot)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/ArrayConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -28,16 +28,17 @@
</span><span class="cx"> class ArrayAllocationProfile;
</span><span class="cx"> class ArrayPrototype;
</span><span class="cx"> class JSArray;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class ArrayConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = OverridesGetOwnPropertySlot | InternalFunction::StructureFlags;
</span><span class="cx">
</span><del>- static ArrayConstructor* create(VM& vm, Structure* structure, ArrayPrototype* arrayPrototype)
</del><ins>+ static ArrayConstructor* create(VM& vm, Structure* structure, ArrayPrototype* arrayPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> ArrayConstructor* constructor = new (NotNull, allocateCell<ArrayConstructor>(vm.heap)) ArrayConstructor(vm, structure);
</span><del>- constructor->finishCreation(vm, arrayPrototype);
</del><ins>+ constructor->finishCreation(vm, arrayPrototype, speciesSymbol);
</ins><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -49,7 +50,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> protected:
</span><del>- void finishCreation(VM&, ArrayPrototype*);
</del><ins>+ void finishCreation(VM&, ArrayPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> ArrayConstructor(VM&, Structure*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeBooleanConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/BooleanConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/BooleanConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/BooleanConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -26,12 +26,13 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class BooleanPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class BooleanConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static BooleanConstructor* create(VM& vm, Structure* structure, BooleanPrototype* booleanPrototype)
</del><ins>+ static BooleanConstructor* create(VM& vm, Structure* structure, BooleanPrototype* booleanPrototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> BooleanConstructor* constructor = new (NotNull, allocateCell<BooleanConstructor>(vm.heap)) BooleanConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, booleanPrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonIdentifiersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -268,15 +268,15 @@
</span><span class="cx"> macro(match) \
</span><span class="cx"> macro(replace) \
</span><span class="cx"> macro(search) \
</span><del>- macro(species) \
</del><span class="cx"> macro(split) \
</span><span class="cx"> macro(toPrimitive)
</span><span class="cx">
</span><span class="cx"> #define JSC_COMMON_PRIVATE_IDENTIFIERS_EACH_WELL_KNOWN_SYMBOL(macro) \
</span><span class="cx"> macro(hasInstance) \
</span><span class="cx"> macro(iterator) \
</span><del>- macro(unscopables) \
- macro(toStringTag)
</del><ins>+ macro(species) \
+ macro(toStringTag) \
+ macro(unscopables)
</ins><span class="cx">
</span><span class="cx"> #define JSC_COMMON_BYTECODE_INTRINSICS_EACH_NAME(macro) \
</span><span class="cx"> macro(assert) \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDateConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DateConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DateConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/DateConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -26,13 +26,14 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class DatePrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class DateConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
</span><span class="cx">
</span><del>- static DateConstructor* create(VM& vm, Structure* structure, DatePrototype* datePrototype)
</del><ins>+ static DateConstructor* create(VM& vm, Structure* structure, DatePrototype* datePrototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> DateConstructor* constructor = new (NotNull, allocateCell<DateConstructor>(vm.heap)) DateConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, datePrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ErrorConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ErrorConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/ErrorConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -27,12 +27,13 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class ErrorPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class ErrorConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static ErrorConstructor* create(VM& vm, Structure* structure, ErrorPrototype* errorPrototype)
</del><ins>+ static ErrorConstructor* create(VM& vm, Structure* structure, ErrorPrototype* errorPrototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> ErrorConstructor* constructor = new (NotNull, allocateCell<ErrorConstructor>(vm.heap)) ErrorConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, errorPrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx">
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "ExceptionHelpers.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "JSArrayBuffer.h"
</span><span class="cx"> #include "JSArrayBufferPrototype.h"
</span><span class="cx"> #include "JSGlobalObject.h"
</span><span class="lines">@@ -47,22 +48,23 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JSArrayBufferConstructor::finishCreation(VM& vm, JSArrayBufferPrototype* prototype)
</del><ins>+void JSArrayBufferConstructor::finishCreation(VM& vm, JSArrayBufferPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, ASCIILiteral("ArrayBuffer"));
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), DontEnum | DontDelete | ReadOnly);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx">
</span><span class="cx"> JSGlobalObject* globalObject = this->globalObject();
</span><span class="cx"> JSC_NATIVE_FUNCTION(vm.propertyNames->isView, arrayBufferFuncIsView, DontEnum, 1);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-JSArrayBufferConstructor* JSArrayBufferConstructor::create(VM& vm, Structure* structure, JSArrayBufferPrototype* prototype)
</del><ins>+JSArrayBufferConstructor* JSArrayBufferConstructor::create(VM& vm, Structure* structure, JSArrayBufferPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> JSArrayBufferConstructor* result =
</span><span class="cx"> new (NotNull, allocateCell<JSArrayBufferConstructor>(vm.heap))
</span><span class="cx"> JSArrayBufferConstructor(vm, structure);
</span><del>- result->finishCreation(vm, prototype);
</del><ins>+ result->finishCreation(vm, prototype, speciesSymbol);
</ins><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArrayBufferConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class JSArrayBufferPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class JSArrayBufferConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="lines">@@ -38,10 +39,10 @@
</span><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> JSArrayBufferConstructor(VM&, Structure*);
</span><del>- void finishCreation(VM&, JSArrayBufferPrototype*);
</del><ins>+ void finishCreation(VM&, JSArrayBufferPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">
</span><span class="cx"> public:
</span><del>- static JSArrayBufferConstructor* create(VM&, Structure*, JSArrayBufferPrototype*);
</del><ins>+ static JSArrayBufferConstructor* create(VM&, Structure*, JSArrayBufferPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -393,7 +393,10 @@
</span><span class="cx"> #undef CREATE_PROTOTYPE_FOR_DERIVED_ITERATOR_TYPE
</span><span class="cx">
</span><span class="cx"> // Constructors
</span><del>-
</del><ins>+
+ GetterSetter* speciesGetterSetter = GetterSetter::create(vm, this);
+ speciesGetterSetter->setGetter(vm, this, JSFunction::createBuiltinFunction(vm, globalObjectSpeciesGetterCodeGenerator(vm), this));
+
</ins><span class="cx"> ObjectConstructor* objectConstructor = ObjectConstructor::create(vm, this, ObjectConstructor::createStructure(vm, this, m_functionPrototype.get()), m_objectPrototype.get());
</span><span class="cx"> m_objectConstructor.set(vm, this, objectConstructor);
</span><span class="cx">
</span><span class="lines">@@ -401,12 +404,12 @@
</span><span class="cx"> m_definePropertyFunction.set(vm, this, definePropertyFunction);
</span><span class="cx">
</span><span class="cx"> JSCell* functionConstructor = FunctionConstructor::create(vm, FunctionConstructor::createStructure(vm, this, m_functionPrototype.get()), m_functionPrototype.get());
</span><del>- JSCell* arrayConstructor = ArrayConstructor::create(vm, ArrayConstructor::createStructure(vm, this, m_functionPrototype.get()), m_arrayPrototype.get());
</del><ins>+ JSCell* arrayConstructor = ArrayConstructor::create(vm, ArrayConstructor::createStructure(vm, this, m_functionPrototype.get()), m_arrayPrototype.get(), speciesGetterSetter);
</ins><span class="cx">
</span><del>- m_regExpConstructor.set(vm, this, RegExpConstructor::create(vm, RegExpConstructor::createStructure(vm, this, m_functionPrototype.get()), m_regExpPrototype.get()));
</del><ins>+ m_regExpConstructor.set(vm, this, RegExpConstructor::create(vm, RegExpConstructor::createStructure(vm, this, m_functionPrototype.get()), m_regExpPrototype.get(), speciesGetterSetter));
</ins><span class="cx">
</span><span class="cx"> #define CREATE_CONSTRUCTOR_FOR_SIMPLE_TYPE(capitalName, lowerName, properName, instanceType, jsName) \
</span><del>-capitalName ## Constructor* lowerName ## Constructor = capitalName ## Constructor::create(vm, capitalName ## Constructor::createStructure(vm, this, m_functionPrototype.get()), m_ ## lowerName ## Prototype.get()); \
</del><ins>+capitalName ## Constructor* lowerName ## Constructor = capitalName ## Constructor::create(vm, capitalName ## Constructor::createStructure(vm, this, m_functionPrototype.get()), m_ ## lowerName ## Prototype.get(), speciesGetterSetter); \
</ins><span class="cx"> m_ ## lowerName ## Prototype->putDirectWithoutTransition(vm, vm.propertyNames->constructor, lowerName ## Constructor, DontEnum); \
</span><span class="cx">
</span><span class="cx"> FOR_EACH_SIMPLE_BUILTIN_TYPE(CREATE_CONSTRUCTOR_FOR_SIMPLE_TYPE)
</span><span class="lines">@@ -470,7 +473,7 @@
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->Math, MathObject::create(vm, this, MathObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->Reflect, ReflectObject::create(vm, this, ReflectObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
</span><span class="cx">
</span><del>- JSTypedArrayViewConstructor* typedArraySuperConstructor = JSTypedArrayViewConstructor::create(vm, this, JSTypedArrayViewConstructor::createStructure(vm, this, m_functionPrototype.get()), typedArrayProto);
</del><ins>+ JSTypedArrayViewConstructor* typedArraySuperConstructor = JSTypedArrayViewConstructor::create(vm, this, JSTypedArrayViewConstructor::createStructure(vm, this, m_functionPrototype.get()), typedArrayProto, speciesGetterSetter);
</ins><span class="cx"> typedArrayProto->putDirectWithoutTransition(vm, vm.propertyNames->constructor, typedArraySuperConstructor, DontEnum);
</span><span class="cx">
</span><span class="cx"> std::array<InternalFunction*, NUMBER_OF_TYPED_ARRAY_TYPES> typedArrayConstructors;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSInternalPromiseConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -47,10 +47,10 @@
</span><span class="cx"> @end
</span><span class="cx"> */
</span><span class="cx">
</span><del>-JSInternalPromiseConstructor* JSInternalPromiseConstructor::create(VM& vm, Structure* structure, JSInternalPromisePrototype* promisePrototype)
</del><ins>+JSInternalPromiseConstructor* JSInternalPromiseConstructor::create(VM& vm, Structure* structure, JSInternalPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> JSInternalPromiseConstructor* constructor = new (NotNull, allocateCell<JSInternalPromiseConstructor>(vm.heap)) JSInternalPromiseConstructor(vm, structure);
</span><del>- constructor->finishCreation(vm, promisePrototype);
</del><ins>+ constructor->finishCreation(vm, promisePrototype, speciesSymbol);
</ins><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSInternalPromiseConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSInternalPromiseConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> typedef JSPromiseConstructor Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
</span><span class="cx">
</span><del>- static JSInternalPromiseConstructor* create(VM&, Structure*, JSInternalPromisePrototype*);
</del><ins>+ static JSInternalPromiseConstructor* create(VM&, Structure*, JSInternalPromisePrototype*, GetterSetter*);
</ins><span class="cx"> static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include "BuiltinNames.h"
</span><span class="cx"> #include "Error.h"
</span><span class="cx"> #include "Exception.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "IteratorOperations.h"
</span><span class="cx"> #include "JSCBuiltins.h"
</span><span class="cx"> #include "JSCJSValueInlines.h"
</span><span class="lines">@@ -61,10 +62,10 @@
</span><span class="cx"> @end
</span><span class="cx"> */
</span><span class="cx">
</span><del>-JSPromiseConstructor* JSPromiseConstructor::create(VM& vm, Structure* structure, JSPromisePrototype* promisePrototype)
</del><ins>+JSPromiseConstructor* JSPromiseConstructor::create(VM& vm, Structure* structure, JSPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> JSPromiseConstructor* constructor = new (NotNull, allocateCell<JSPromiseConstructor>(vm.heap)) JSPromiseConstructor(vm, structure);
</span><del>- constructor->finishCreation(vm, promisePrototype);
</del><ins>+ constructor->finishCreation(vm, promisePrototype, speciesSymbol);
</ins><span class="cx"> constructor->addOwnInternalSlots(vm, structure->globalObject());
</span><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="lines">@@ -79,11 +80,12 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JSPromiseConstructor::finishCreation(VM& vm, JSPromisePrototype* promisePrototype)
</del><ins>+void JSPromiseConstructor::finishCreation(VM& vm, JSPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, ASCIILiteral("Promise"));
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, promisePrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void JSPromiseConstructor::addOwnInternalSlots(VM& vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -32,13 +32,14 @@
</span><span class="cx">
</span><span class="cx"> class JSPromise;
</span><span class="cx"> class JSPromisePrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class JSPromiseConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
</span><span class="cx">
</span><del>- static JSPromiseConstructor* create(VM&, Structure*, JSPromisePrototype*);
</del><ins>+ static JSPromiseConstructor* create(VM&, Structure*, JSPromisePrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="lines">@@ -47,7 +48,7 @@
</span><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> JSPromiseConstructor(VM&, Structure*);
</span><del>- void finishCreation(VM&, JSPromisePrototype*);
</del><ins>+ void finishCreation(VM&, JSPromisePrototype*, GetterSetter*);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> static ConstructType getConstructData(JSCell*, ConstructData&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSTypedArrayViewConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -28,10 +28,12 @@
</span><span class="cx">
</span><span class="cx"> #include "CallFrame.h"
</span><span class="cx"> #include "Error.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "JSCBuiltins.h"
</span><span class="cx"> #include "JSCellInlines.h"
</span><span class="cx"> #include "JSGenericTypedArrayViewConstructorInlines.h"
</span><span class="cx"> #include "JSObject.h"
</span><ins>+#include "JSTypedArrayViewPrototype.h"
</ins><span class="cx"> #include "JSTypedArrays.h"
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -43,25 +45,17 @@
</span><span class="cx">
</span><span class="cx"> const ClassInfo JSTypedArrayViewConstructor::s_info = { "Function", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTypedArrayViewConstructor) };
</span><span class="cx">
</span><del>-void JSTypedArrayViewConstructor::finishCreation(VM& vm, JSGlobalObject* globalObject, JSObject* prototype)
</del><ins>+void JSTypedArrayViewConstructor::finishCreation(VM& vm, JSGlobalObject* globalObject, JSTypedArrayViewPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, "TypedArray");
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(3), DontEnum | DontDelete | ReadOnly);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx">
</span><span class="cx"> JSC_BUILTIN_FUNCTION(vm.propertyNames->of, typedArrayConstructorOfCodeGenerator, DontEnum);
</span><span class="cx"> JSC_BUILTIN_FUNCTION(vm.propertyNames->from, typedArrayConstructorFromCodeGenerator, DontEnum);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-JSTypedArrayViewConstructor* JSTypedArrayViewConstructor::create(
- VM& vm, JSGlobalObject* globalObject, Structure* structure,
- JSObject* prototype)
-{
- JSTypedArrayViewConstructor* result = new (NotNull, allocateCell<JSTypedArrayViewConstructor>(vm.heap)) JSTypedArrayViewConstructor(vm, structure);
- result->finishCreation(vm, globalObject, prototype);
- return result;
-}
-
</del><span class="cx"> Structure* JSTypedArrayViewConstructor::createStructure(
</span><span class="cx"> VM& vm, JSGlobalObject* globalObject, JSValue prototype)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSTypedArrayViewConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -30,16 +30,24 @@
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><ins>+class JSTypedArrayViewPrototype;
+class GetterSetter;
+
</ins><span class="cx"> class JSTypedArrayViewConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> JSTypedArrayViewConstructor(VM&, Structure*);
</span><del>- void finishCreation(VM&, JSGlobalObject*, JSObject* prototype);
</del><ins>+ void finishCreation(VM&, JSGlobalObject*, JSTypedArrayViewPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">
</span><span class="cx"> public:
</span><del>- static JSTypedArrayViewConstructor* create(VM&, JSGlobalObject*, Structure*, JSObject* prototype);
</del><ins>+ static JSTypedArrayViewConstructor* create(VM& vm, JSGlobalObject* globalObject, Structure* structure, JSTypedArrayViewPrototype* prototype, GetterSetter* speciesSymbol)
+ {
+ JSTypedArrayViewConstructor* result = new (NotNull, allocateCell<JSTypedArrayViewConstructor>(vm.heap)) JSTypedArrayViewConstructor(vm, structure);
+ result->finishCreation(vm, globalObject, prototype, speciesSymbol);
+ return result;
+ }
</ins><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMapConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/MapConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include "MapConstructor.h"
</span><span class="cx">
</span><span class="cx"> #include "Error.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "IteratorOperations.h"
</span><span class="cx"> #include "JSCJSValueInlines.h"
</span><span class="cx"> #include "JSCellInlines.h"
</span><span class="lines">@@ -39,11 +40,12 @@
</span><span class="cx">
</span><span class="cx"> const ClassInfo MapConstructor::s_info = { "Function", &Base::s_info, 0, CREATE_METHOD_TABLE(MapConstructor) };
</span><span class="cx">
</span><del>-void MapConstructor::finishCreation(VM& vm, MapPrototype* mapPrototype)
</del><ins>+void MapConstructor::finishCreation(VM& vm, MapPrototype* mapPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, mapPrototype->classInfo()->className);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, mapPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL callMap(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMapConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MapConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MapConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/MapConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -31,15 +31,16 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class MapPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class MapConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static MapConstructor* create(VM& vm, Structure* structure, MapPrototype* mapPrototype)
</del><ins>+ static MapConstructor* create(VM& vm, Structure* structure, MapPrototype* mapPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> MapConstructor* constructor = new (NotNull, allocateCell<MapConstructor>(vm.heap)) MapConstructor(vm, structure);
</span><del>- constructor->finishCreation(vm, mapPrototype);
</del><ins>+ constructor->finishCreation(vm, mapPrototype, speciesSymbol);
</ins><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx"> : Base(vm, structure)
</span><span class="cx"> {
</span><span class="cx"> }
</span><del>- void finishCreation(VM&, MapPrototype*);
</del><ins>+ void finishCreation(VM&, MapPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> static ConstructType getConstructData(JSCell*, ConstructData&);
</span><span class="cx"> static CallType getCallData(JSCell*, CallData&);
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/NumberConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -26,13 +26,14 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class NumberPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class NumberConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | ImplementsHasInstance | ImplementsDefaultHasInstance;
</span><span class="cx">
</span><del>- static NumberConstructor* create(VM& vm, Structure* structure, NumberPrototype* numberPrototype)
</del><ins>+ static NumberConstructor* create(VM& vm, Structure* structure, NumberPrototype* numberPrototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> NumberConstructor* constructor = new (NotNull, allocateCell<NumberConstructor>(vm.heap)) NumberConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, numberPrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> #include "RegExpConstructor.h"
</span><span class="cx">
</span><span class="cx"> #include "Error.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "JSCInlines.h"
</span><span class="cx"> #include "RegExpMatchesArray.h"
</span><span class="cx"> #include "RegExpPrototype.h"
</span><span class="lines">@@ -90,7 +91,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RegExpConstructor::finishCreation(VM& vm, RegExpPrototype* regExpPrototype)
</del><ins>+void RegExpConstructor::finishCreation(VM& vm, RegExpPrototype* regExpPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, regExpPrototype->classInfo()->className);
</span><span class="cx"> ASSERT(inherits(info()));
</span><span class="lines">@@ -100,6 +101,8 @@
</span><span class="cx">
</span><span class="cx"> // no. of arguments for constructor
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
</span><ins>+
+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RegExpConstructor::destroy(JSCell* cell)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -29,16 +29,17 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class RegExpPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class RegExpConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
</span><span class="cx">
</span><del>- static RegExpConstructor* create(VM& vm, Structure* structure, RegExpPrototype* regExpPrototype)
</del><ins>+ static RegExpConstructor* create(VM& vm, Structure* structure, RegExpPrototype* regExpPrototype, GetterSetter* species)
</ins><span class="cx"> {
</span><span class="cx"> RegExpConstructor* constructor = new (NotNull, allocateCell<RegExpConstructor>(vm.heap)) RegExpConstructor(vm, structure, regExpPrototype);
</span><del>- constructor->finishCreation(vm, regExpPrototype);
</del><ins>+ constructor->finishCreation(vm, regExpPrototype, species);
</ins><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -68,7 +69,7 @@
</span><span class="cx"> static void visitChildren(JSCell*, SlotVisitor&);
</span><span class="cx">
</span><span class="cx"> protected:
</span><del>- void finishCreation(VM&, RegExpPrototype*);
</del><ins>+ void finishCreation(VM&, RegExpPrototype*, GetterSetter* species);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> RegExpConstructor(VM&, Structure*, RegExpPrototype*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSetConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/SetConstructor.cpp        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include "SetConstructor.h"
</span><span class="cx">
</span><span class="cx"> #include "Error.h"
</span><ins>+#include "GetterSetter.h"
</ins><span class="cx"> #include "IteratorOperations.h"
</span><span class="cx"> #include "JSCJSValueInlines.h"
</span><span class="cx"> #include "JSCellInlines.h"
</span><span class="lines">@@ -40,11 +41,12 @@
</span><span class="cx">
</span><span class="cx"> const ClassInfo SetConstructor::s_info = { "Function", &Base::s_info, 0, CREATE_METHOD_TABLE(SetConstructor) };
</span><span class="cx">
</span><del>-void SetConstructor::finishCreation(VM& vm, SetPrototype* setPrototype)
</del><ins>+void SetConstructor::finishCreation(VM& vm, SetPrototype* setPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> Base::finishCreation(vm, setPrototype->classInfo()->className);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->prototype, setPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx"> putDirectWithoutTransition(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><ins>+ putDirectNonIndexAccessor(vm, vm.propertyNames->speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL callSet(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSetConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SetConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SetConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/SetConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -31,15 +31,16 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class SetPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class SetConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static SetConstructor* create(VM& vm, Structure* structure, SetPrototype* setPrototype)
</del><ins>+ static SetConstructor* create(VM& vm, Structure* structure, SetPrototype* setPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx"> SetConstructor* constructor = new (NotNull, allocateCell<SetConstructor>(vm.heap)) SetConstructor(vm, structure);
</span><del>- constructor->finishCreation(vm, setPrototype);
</del><ins>+ constructor->finishCreation(vm, setPrototype, speciesSymbol);
</ins><span class="cx"> return constructor;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx"> : Base(vm, structure)
</span><span class="cx"> {
</span><span class="cx"> }
</span><del>- void finishCreation(VM&, SetPrototype*);
</del><ins>+ void finishCreation(VM&, SetPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> static ConstructType getConstructData(JSCell*, ConstructData&);
</span><span class="cx"> static CallType getCallData(JSCell*, CallData&);
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/StringConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -26,13 +26,14 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class StringPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class StringConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot;
</span><span class="cx">
</span><del>- static StringConstructor* create(VM& vm, Structure* structure, StringPrototype* stringPrototype)
</del><ins>+ static StringConstructor* create(VM& vm, Structure* structure, StringPrototype* stringPrototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> StringConstructor* constructor = new (NotNull, allocateCell<StringConstructor>(vm.heap)) StringConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, stringPrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSymbolConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SymbolConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SymbolConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/SymbolConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -33,13 +33,14 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class SymbolPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class SymbolConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx"> static const unsigned StructureFlags = OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx">
</span><del>- static SymbolConstructor* create(VM& vm, Structure* structure, SymbolPrototype* prototype)
</del><ins>+ static SymbolConstructor* create(VM& vm, Structure* structure, SymbolPrototype* prototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> SymbolConstructor* constructor = new (NotNull, allocateCell<SymbolConstructor>(vm.heap)) SymbolConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, prototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakMapConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/WeakMapConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -31,12 +31,13 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class WeakMapPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class WeakMapConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static WeakMapConstructor* create(VM& vm, Structure* structure, WeakMapPrototype* prototype)
</del><ins>+ static WeakMapConstructor* create(VM& vm, Structure* structure, WeakMapPrototype* prototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> WeakMapConstructor* constructor = new (NotNull, allocateCell<WeakMapConstructor>(vm.heap)) WeakMapConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, prototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakSetConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakSetConstructor.h (195459 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakSetConstructor.h        2016-01-22 18:37:11 UTC (rev 195459)
+++ trunk/Source/JavaScriptCore/runtime/WeakSetConstructor.h        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -31,12 +31,13 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx">
</span><span class="cx"> class WeakSetPrototype;
</span><ins>+class GetterSetter;
</ins><span class="cx">
</span><span class="cx"> class WeakSetConstructor : public InternalFunction {
</span><span class="cx"> public:
</span><span class="cx"> typedef InternalFunction Base;
</span><span class="cx">
</span><del>- static WeakSetConstructor* create(VM& vm, Structure* structure, WeakSetPrototype* prototype)
</del><ins>+ static WeakSetConstructor* create(VM& vm, Structure* structure, WeakSetPrototype* prototype, GetterSetter*)
</ins><span class="cx"> {
</span><span class="cx"> WeakSetConstructor* constructor = new (NotNull, allocateCell<WeakSetConstructor>(vm.heap)) WeakSetConstructor(vm, structure);
</span><span class="cx"> constructor->finishCreation(vm, prototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstresssymbolspeciesjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/stress/symbol-species.js (0 => 195460)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/symbol-species.js         (rev 0)
+++ trunk/Source/JavaScriptCore/tests/stress/symbol-species.js        2016-01-22 18:44:46 UTC (rev 195460)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+speciesConstructors = [RegExp, Array, Int32Array.__proto__, Map, Set, ArrayBuffer, Promise];
+
+function testSymbolSpeciesOnConstructor(constructor) {
+ if (constructor[Symbol.species] !== constructor)
+ throw "Symbol.species should return the constructor for " + constructor.name;
+ constructor[Symbol.species] = true;
+ if (constructor[Symbol.species] !== constructor)
+ throw "Symbol.species was mutable " + constructor.name;
+ try {
+ Object.defineProperty(constructor, Symbol.species, { value: true });
+ } catch(e) {
+ return;
+ }
+ throw "Symbol.species was configurable " + constructor.name;
+}
+
+
+speciesConstructors.forEach(testSymbolSpeciesOnConstructor);
</ins></span></pre>
</div>
</div>
</body>
</html>