<!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  &lt;keith_miller@apple.com&gt;
+
+        [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  &lt;cfleizach@apple.com&gt;
</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">     &quot;Error.prototype&quot;: &quot;['constructor', 'message', 'name', 'toString']&quot;,
</span><span class="cx">     &quot;Math&quot;: &quot;['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']&quot;,
</span><span class="cx">     &quot;JSON&quot;: &quot;['parse', 'stringify']&quot;,
</span><del>-    &quot;Symbol&quot;: &quot;['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'toStringTag', 'unscopables']&quot;,
</del><ins>+    &quot;Symbol&quot;: &quot;['for', 'hasInstance', 'iterator', 'keyFor', 'length', 'name', 'prototype', 'species', 'toStringTag', 'unscopables']&quot;,
</ins><span class="cx">     &quot;Symbol.prototype&quot;: &quot;['constructor', 'toString', 'valueOf']&quot;
</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  &lt;keith_miller@apple.com&gt;
+
+        [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  &lt;benjamin@webkit.org&gt;
</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 === &quot;undefined&quot; || object == null || typeof object === &quot;object&quot;;
</span><span class="cx"> }
</span><ins>+
+// FIXME: this needs to have it's name changed to &quot;get [Symbol.species]&quot;.
+// 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 &quot;CopiedSpaceInlines.h&quot;
</span><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;ExceptionHelpers.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;JSArray.h&quot;
</span><span class="cx"> #include &quot;JSFunction.h&quot;
</span><span class="cx"> #include &quot;Lookup.h&quot;
</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&amp; vm, ArrayPrototype* arrayPrototype)
</del><ins>+void ArrayConstructor::finishCreation(VM&amp; vm, ArrayPrototype* arrayPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, arrayPrototype-&gt;classInfo()-&gt;className);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;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 &amp;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&amp; vm, Structure* structure, ArrayPrototype* arrayPrototype)
</del><ins>+    static ArrayConstructor* create(VM&amp; vm, Structure* structure, ArrayPrototype* arrayPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx">     {
</span><span class="cx">         ArrayConstructor* constructor = new (NotNull, allocateCell&lt;ArrayConstructor&gt;(vm.heap)) ArrayConstructor(vm, structure);
</span><del>-        constructor-&gt;finishCreation(vm, arrayPrototype);
</del><ins>+        constructor-&gt;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&amp;, ArrayPrototype*);
</del><ins>+    void finishCreation(VM&amp;, ArrayPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     ArrayConstructor(VM&amp;, 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&amp; vm, Structure* structure, BooleanPrototype* booleanPrototype)
</del><ins>+    static BooleanConstructor* create(VM&amp; vm, Structure* structure, BooleanPrototype* booleanPrototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         BooleanConstructor* constructor = new (NotNull, allocateCell&lt;BooleanConstructor&gt;(vm.heap)) BooleanConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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&amp; vm, Structure* structure, DatePrototype* datePrototype)
</del><ins>+    static DateConstructor* create(VM&amp; vm, Structure* structure, DatePrototype* datePrototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         DateConstructor* constructor = new (NotNull, allocateCell&lt;DateConstructor&gt;(vm.heap)) DateConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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&amp; vm, Structure* structure, ErrorPrototype* errorPrototype)
</del><ins>+    static ErrorConstructor* create(VM&amp; vm, Structure* structure, ErrorPrototype* errorPrototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         ErrorConstructor* constructor = new (NotNull, allocateCell&lt;ErrorConstructor&gt;(vm.heap)) ErrorConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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 &quot;Error.h&quot;
</span><span class="cx"> #include &quot;ExceptionHelpers.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;JSArrayBuffer.h&quot;
</span><span class="cx"> #include &quot;JSArrayBufferPrototype.h&quot;
</span><span class="cx"> #include &quot;JSGlobalObject.h&quot;
</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&amp; vm, JSArrayBufferPrototype* prototype)
</del><ins>+void JSArrayBufferConstructor::finishCreation(VM&amp; vm, JSArrayBufferPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, ASCIILiteral(&quot;ArrayBuffer&quot;));
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, prototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(1), DontEnum | DontDelete | ReadOnly);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> 
</span><span class="cx">     JSGlobalObject* globalObject = this-&gt;globalObject();
</span><span class="cx">     JSC_NATIVE_FUNCTION(vm.propertyNames-&gt;isView, arrayBufferFuncIsView, DontEnum, 1);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSArrayBufferConstructor* JSArrayBufferConstructor::create(VM&amp; vm, Structure* structure, JSArrayBufferPrototype* prototype)
</del><ins>+JSArrayBufferConstructor* JSArrayBufferConstructor::create(VM&amp; vm, Structure* structure, JSArrayBufferPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     JSArrayBufferConstructor* result =
</span><span class="cx">         new (NotNull, allocateCell&lt;JSArrayBufferConstructor&gt;(vm.heap))
</span><span class="cx">         JSArrayBufferConstructor(vm, structure);
</span><del>-    result-&gt;finishCreation(vm, prototype);
</del><ins>+    result-&gt;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&amp;, Structure*);
</span><del>-    void finishCreation(VM&amp;, JSArrayBufferPrototype*);
</del><ins>+    void finishCreation(VM&amp;, JSArrayBufferPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    static JSArrayBufferConstructor* create(VM&amp;, Structure*, JSArrayBufferPrototype*);
</del><ins>+    static JSArrayBufferConstructor* create(VM&amp;, 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-&gt;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-&gt;putDirectWithoutTransition(vm, vm.propertyNames-&gt;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-&gt;Math, MathObject::create(vm, this, MathObject::createStructure(vm, this, m_objectPrototype.get())), DontEnum);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;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-&gt;putDirectWithoutTransition(vm, vm.propertyNames-&gt;constructor, typedArraySuperConstructor, DontEnum);
</span><span class="cx"> 
</span><span class="cx">     std::array&lt;InternalFunction*, NUMBER_OF_TYPED_ARRAY_TYPES&gt; 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&amp; vm, Structure* structure, JSInternalPromisePrototype* promisePrototype)
</del><ins>+JSInternalPromiseConstructor* JSInternalPromiseConstructor::create(VM&amp; vm, Structure* structure, JSInternalPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     JSInternalPromiseConstructor* constructor = new (NotNull, allocateCell&lt;JSInternalPromiseConstructor&gt;(vm.heap)) JSInternalPromiseConstructor(vm, structure);
</span><del>-    constructor-&gt;finishCreation(vm, promisePrototype);
</del><ins>+    constructor-&gt;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&amp;, Structure*, JSInternalPromisePrototype*);
</del><ins>+    static JSInternalPromiseConstructor* create(VM&amp;, Structure*, JSInternalPromisePrototype*, GetterSetter*);
</ins><span class="cx">     static Structure* createStructure(VM&amp;, 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 &quot;BuiltinNames.h&quot;
</span><span class="cx"> #include &quot;Error.h&quot;
</span><span class="cx"> #include &quot;Exception.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;IteratorOperations.h&quot;
</span><span class="cx"> #include &quot;JSCBuiltins.h&quot;
</span><span class="cx"> #include &quot;JSCJSValueInlines.h&quot;
</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&amp; vm, Structure* structure, JSPromisePrototype* promisePrototype)
</del><ins>+JSPromiseConstructor* JSPromiseConstructor::create(VM&amp; vm, Structure* structure, JSPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     JSPromiseConstructor* constructor = new (NotNull, allocateCell&lt;JSPromiseConstructor&gt;(vm.heap)) JSPromiseConstructor(vm, structure);
</span><del>-    constructor-&gt;finishCreation(vm, promisePrototype);
</del><ins>+    constructor-&gt;finishCreation(vm, promisePrototype, speciesSymbol);
</ins><span class="cx">     constructor-&gt;addOwnInternalSlots(vm, structure-&gt;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&amp; vm, JSPromisePrototype* promisePrototype)
</del><ins>+void JSPromiseConstructor::finishCreation(VM&amp; vm, JSPromisePrototype* promisePrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, ASCIILiteral(&quot;Promise&quot;));
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, promisePrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSPromiseConstructor::addOwnInternalSlots(VM&amp; 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&amp;, Structure*, JSPromisePrototype*);
</del><ins>+    static JSPromiseConstructor* create(VM&amp;, Structure*, JSPromisePrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">     static Structure* createStructure(VM&amp;, 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&amp;, Structure*);
</span><del>-    void finishCreation(VM&amp;, JSPromisePrototype*);
</del><ins>+    void finishCreation(VM&amp;, JSPromisePrototype*, GetterSetter*);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     static ConstructType getConstructData(JSCell*, ConstructData&amp;);
</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 &quot;CallFrame.h&quot;
</span><span class="cx"> #include &quot;Error.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;JSCBuiltins.h&quot;
</span><span class="cx"> #include &quot;JSCellInlines.h&quot;
</span><span class="cx"> #include &quot;JSGenericTypedArrayViewConstructorInlines.h&quot;
</span><span class="cx"> #include &quot;JSObject.h&quot;
</span><ins>+#include &quot;JSTypedArrayViewPrototype.h&quot;
</ins><span class="cx"> #include &quot;JSTypedArrays.h&quot;
</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 = { &quot;Function&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTypedArrayViewConstructor) };
</span><span class="cx"> 
</span><del>-void JSTypedArrayViewConstructor::finishCreation(VM&amp; vm, JSGlobalObject* globalObject, JSObject* prototype)
</del><ins>+void JSTypedArrayViewConstructor::finishCreation(VM&amp; vm, JSGlobalObject* globalObject, JSTypedArrayViewPrototype* prototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, &quot;TypedArray&quot;);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, prototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(3), DontEnum | DontDelete | ReadOnly);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;speciesSymbol, speciesSymbol, Accessor | ReadOnly | DontEnum | DontDelete);
</ins><span class="cx"> 
</span><span class="cx">     JSC_BUILTIN_FUNCTION(vm.propertyNames-&gt;of, typedArrayConstructorOfCodeGenerator, DontEnum);
</span><span class="cx">     JSC_BUILTIN_FUNCTION(vm.propertyNames-&gt;from, typedArrayConstructorFromCodeGenerator, DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTypedArrayViewConstructor* JSTypedArrayViewConstructor::create(
-    VM&amp; vm, JSGlobalObject* globalObject, Structure* structure,
-    JSObject* prototype)
-{
-    JSTypedArrayViewConstructor* result = new (NotNull, allocateCell&lt;JSTypedArrayViewConstructor&gt;(vm.heap)) JSTypedArrayViewConstructor(vm, structure);
-    result-&gt;finishCreation(vm, globalObject, prototype);
-    return result;
-}
-
</del><span class="cx"> Structure* JSTypedArrayViewConstructor::createStructure(
</span><span class="cx">     VM&amp; 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&amp;, Structure*);
</span><del>-    void finishCreation(VM&amp;, JSGlobalObject*, JSObject* prototype);
</del><ins>+    void finishCreation(VM&amp;, JSGlobalObject*, JSTypedArrayViewPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    static JSTypedArrayViewConstructor* create(VM&amp;, JSGlobalObject*, Structure*, JSObject* prototype);
</del><ins>+    static JSTypedArrayViewConstructor* create(VM&amp; vm, JSGlobalObject* globalObject, Structure* structure, JSTypedArrayViewPrototype* prototype, GetterSetter* speciesSymbol)
+    {
+        JSTypedArrayViewConstructor* result = new (NotNull, allocateCell&lt;JSTypedArrayViewConstructor&gt;(vm.heap)) JSTypedArrayViewConstructor(vm, structure);
+        result-&gt;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 &quot;MapConstructor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Error.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;IteratorOperations.h&quot;
</span><span class="cx"> #include &quot;JSCJSValueInlines.h&quot;
</span><span class="cx"> #include &quot;JSCellInlines.h&quot;
</span><span class="lines">@@ -39,11 +40,12 @@
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo MapConstructor::s_info = { &quot;Function&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(MapConstructor) };
</span><span class="cx"> 
</span><del>-void MapConstructor::finishCreation(VM&amp; vm, MapPrototype* mapPrototype)
</del><ins>+void MapConstructor::finishCreation(VM&amp; vm, MapPrototype* mapPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, mapPrototype-&gt;classInfo()-&gt;className);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, mapPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;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&amp; vm, Structure* structure, MapPrototype* mapPrototype)
</del><ins>+    static MapConstructor* create(VM&amp; vm, Structure* structure, MapPrototype* mapPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx">     {
</span><span class="cx">         MapConstructor* constructor = new (NotNull, allocateCell&lt;MapConstructor&gt;(vm.heap)) MapConstructor(vm, structure);
</span><del>-        constructor-&gt;finishCreation(vm, mapPrototype);
</del><ins>+        constructor-&gt;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&amp;, MapPrototype*);
</del><ins>+    void finishCreation(VM&amp;, MapPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">     static ConstructType getConstructData(JSCell*, ConstructData&amp;);
</span><span class="cx">     static CallType getCallData(JSCell*, CallData&amp;);
</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&amp; vm, Structure* structure, NumberPrototype* numberPrototype)
</del><ins>+    static NumberConstructor* create(VM&amp; vm, Structure* structure, NumberPrototype* numberPrototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         NumberConstructor* constructor = new (NotNull, allocateCell&lt;NumberConstructor&gt;(vm.heap)) NumberConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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 &quot;RegExpConstructor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Error.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="cx"> #include &quot;RegExpMatchesArray.h&quot;
</span><span class="cx"> #include &quot;RegExpPrototype.h&quot;
</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&amp; vm, RegExpPrototype* regExpPrototype)
</del><ins>+void RegExpConstructor::finishCreation(VM&amp; vm, RegExpPrototype* regExpPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, regExpPrototype-&gt;classInfo()-&gt;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-&gt;length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
</span><ins>+
+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;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&amp; vm, Structure* structure, RegExpPrototype* regExpPrototype)
</del><ins>+    static RegExpConstructor* create(VM&amp; vm, Structure* structure, RegExpPrototype* regExpPrototype, GetterSetter* species)
</ins><span class="cx">     {
</span><span class="cx">         RegExpConstructor* constructor = new (NotNull, allocateCell&lt;RegExpConstructor&gt;(vm.heap)) RegExpConstructor(vm, structure, regExpPrototype);
</span><del>-        constructor-&gt;finishCreation(vm, regExpPrototype);
</del><ins>+        constructor-&gt;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&amp;);
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><del>-    void finishCreation(VM&amp;, RegExpPrototype*);
</del><ins>+    void finishCreation(VM&amp;, RegExpPrototype*, GetterSetter* species);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     RegExpConstructor(VM&amp;, 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 &quot;SetConstructor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Error.h&quot;
</span><ins>+#include &quot;GetterSetter.h&quot;
</ins><span class="cx"> #include &quot;IteratorOperations.h&quot;
</span><span class="cx"> #include &quot;JSCJSValueInlines.h&quot;
</span><span class="cx"> #include &quot;JSCellInlines.h&quot;
</span><span class="lines">@@ -40,11 +41,12 @@
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo SetConstructor::s_info = { &quot;Function&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(SetConstructor) };
</span><span class="cx"> 
</span><del>-void SetConstructor::finishCreation(VM&amp; vm, SetPrototype* setPrototype)
</del><ins>+void SetConstructor::finishCreation(VM&amp; vm, SetPrototype* setPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx"> {
</span><span class="cx">     Base::finishCreation(vm, setPrototype-&gt;classInfo()-&gt;className);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;prototype, setPrototype, DontEnum | DontDelete | ReadOnly);
</span><span class="cx">     putDirectWithoutTransition(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum | DontDelete);
</span><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;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&amp; vm, Structure* structure, SetPrototype* setPrototype)
</del><ins>+    static SetConstructor* create(VM&amp; vm, Structure* structure, SetPrototype* setPrototype, GetterSetter* speciesSymbol)
</ins><span class="cx">     {
</span><span class="cx">         SetConstructor* constructor = new (NotNull, allocateCell&lt;SetConstructor&gt;(vm.heap)) SetConstructor(vm, structure);
</span><del>-        constructor-&gt;finishCreation(vm, setPrototype);
</del><ins>+        constructor-&gt;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&amp;, SetPrototype*);
</del><ins>+    void finishCreation(VM&amp;, SetPrototype*, GetterSetter* speciesSymbol);
</ins><span class="cx">     static ConstructType getConstructData(JSCell*, ConstructData&amp;);
</span><span class="cx">     static CallType getCallData(JSCell*, CallData&amp;);
</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&amp; vm, Structure* structure, StringPrototype* stringPrototype)
</del><ins>+    static StringConstructor* create(VM&amp; vm, Structure* structure, StringPrototype* stringPrototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         StringConstructor* constructor = new (NotNull, allocateCell&lt;StringConstructor&gt;(vm.heap)) StringConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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&amp; vm, Structure* structure, SymbolPrototype* prototype)
</del><ins>+    static SymbolConstructor* create(VM&amp; vm, Structure* structure, SymbolPrototype* prototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         SymbolConstructor* constructor = new (NotNull, allocateCell&lt;SymbolConstructor&gt;(vm.heap)) SymbolConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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&amp; vm, Structure* structure, WeakMapPrototype* prototype)
</del><ins>+    static WeakMapConstructor* create(VM&amp; vm, Structure* structure, WeakMapPrototype* prototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         WeakMapConstructor* constructor = new (NotNull, allocateCell&lt;WeakMapConstructor&gt;(vm.heap)) WeakMapConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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&amp; vm, Structure* structure, WeakSetPrototype* prototype)
</del><ins>+    static WeakSetConstructor* create(VM&amp; vm, Structure* structure, WeakSetPrototype* prototype, GetterSetter*)
</ins><span class="cx">     {
</span><span class="cx">         WeakSetConstructor* constructor = new (NotNull, allocateCell&lt;WeakSetConstructor&gt;(vm.heap)) WeakSetConstructor(vm, structure);
</span><span class="cx">         constructor-&gt;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 &quot;Symbol.species should return the constructor for &quot; + constructor.name;
+    constructor[Symbol.species] = true;
+    if (constructor[Symbol.species] !== constructor)
+        throw &quot;Symbol.species was mutable &quot; + constructor.name;
+    try {
+        Object.defineProperty(constructor, Symbol.species, { value: true });
+    } catch(e) {
+        return;
+    }
+    throw &quot;Symbol.species was configurable &quot; + constructor.name;
+}
+
+
+speciesConstructors.forEach(testSymbolSpeciesOnConstructor);
</ins></span></pre>
</div>
</div>

</body>
</html>