<!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>[201619] 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/201619">201619</a></dd>
<dt>Author</dt> <dd>msaboff@apple.com</dd>
<dt>Date</dt> <dd>2016-06-02 15:01:50 -0700 (Thu, 02 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/200694">r200694</a>): %ThrowTypeError% is not unique
https://bugs.webkit.org/show_bug.cgi?id=158231

Reviewed by Joseph Pecoraro.

Source/JavaScriptCore:

The ES6 standard in section 9.2.7.1 states that %ThrowTypeError% is unique.  This
change reverts the handling of TypeError before <a href="http://trac.webkit.org/projects/webkit/changeset/200694">r200694</a> and then rolls in
throwTypeErrorGetterSetter() with the renamed throwTypeErrorArgumentsCalleeAndCallerGetterSetter().

* runtime/ClonedArguments.cpp:
(JSC::ClonedArguments::getOwnPropertySlot):
(JSC::ClonedArguments::materializeSpecials):
* runtime/JSBoundFunction.cpp:
(JSC::JSBoundFunction::finishCreation):
(JSC::JSBoundFunction::visitChildren):
* runtime/JSFunction.cpp:
(JSC::getThrowTypeErrorGetterSetter):
(JSC::JSFunction::callerGetter):
(JSC::JSFunction::defineOwnProperty):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::visitChildren):
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::regExpProtoSymbolReplaceFunction):
(JSC::JSGlobalObject::regExpProtoGlobalGetter):
(JSC::JSGlobalObject::regExpProtoUnicodeGetter):
(JSC::JSGlobalObject::throwTypeErrorArgumentsCalleeAndCallerGetterSetter):
(JSC::JSGlobalObject::moduleLoader):
(JSC::JSGlobalObject::throwTypeErrorGetterSetter): Deleted.
(JSC::JSGlobalObject::throwTypeErrorCalleeAndCallerGetterSetter): Deleted.
(JSC::JSGlobalObject::throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter): Deleted.
(JSC::JSGlobalObject::throwTypeErrorArgumentsAndCallerInClassContextGetterSetter): Deleted.
* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncThrowTypeError):
(JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller):
(JSC::globalFuncThrowTypeErrorCalleeAndCaller): Deleted.
(JSC::globalFuncThrowTypeErrorArgumentsAndCallerInStrictMode): Deleted.
(JSC::globalFuncThrowTypeErrorArgumentsAndCallerInClassContext): Deleted.
* runtime/JSGlobalObjectFunctions.h:
* tests/stress/reflect-set.js:

LayoutTests:

Rebased tests for the new TypeError messages.
Added a new test, throw-type-error-is-unique.html.

* inspector/runtime/getProperties-expected.txt:
* js/basic-strict-mode-expected.txt:
* js/caller-property-expected.txt:
* js/class-method-and-constructor-properties-expected.txt:
* js/script-tests/caller-property.js:
(strictCaller):
(strictTailCaller):
* js/script-tests/class-method-and-constructor-properties.js:
(F.prototype.getElement):
(F):
(G.prototype.get item):
(G):
(H.prototype.arguments):
(H):
* js/script-tests/throw-type-error-is-unique.js: Added.
(ThrowTypeErrorSource):
(ThrowTypeErrorSource.prototype.checkTypeErrorFunctions):
(A):
(strictArguments):
(test):
* js/throw-type-error-is-unique-expected.txt: Added.
* js/throw-type-error-is-unique.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsinspectorruntimegetPropertiesexpectedtxt">trunk/LayoutTests/inspector/runtime/getProperties-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsbasicstrictmodeexpectedtxt">trunk/LayoutTests/js/basic-strict-mode-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjscallerpropertyexpectedtxt">trunk/LayoutTests/js/caller-property-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsclassmethodandconstructorpropertiesexpectedtxt">trunk/LayoutTests/js/class-method-and-constructor-properties-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsscripttestscallerpropertyjs">trunk/LayoutTests/js/script-tests/caller-property.js</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsclassmethodandconstructorpropertiesjs">trunk/LayoutTests/js/script-tests/class-method-and-constructor-properties.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeClonedArgumentscpp">trunk/Source/JavaScriptCore/runtime/ClonedArguments.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSBoundFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjecth">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionsh">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressreflectsetjs">trunk/Source/JavaScriptCore/tests/stress/reflect-set.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsscriptteststhrowtypeerrorisuniquejs">trunk/LayoutTests/js/script-tests/throw-type-error-is-unique.js</a></li>
<li><a href="#trunkLayoutTestsjsthrowtypeerrorisuniqueexpectedtxt">trunk/LayoutTests/js/throw-type-error-is-unique-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsthrowtypeerrorisuniquehtml">trunk/LayoutTests/js/throw-type-error-is-unique.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/ChangeLog        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-06-02  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        REGRESSION(r200694): %ThrowTypeError% is not unique
+        https://bugs.webkit.org/show_bug.cgi?id=158231
+
+        Reviewed by Joseph Pecoraro.
+
+        Rebased tests for the new TypeError messages.
+        Added a new test, throw-type-error-is-unique.html.
+
+        * inspector/runtime/getProperties-expected.txt:
+        * js/basic-strict-mode-expected.txt:
+        * js/caller-property-expected.txt:
+        * js/class-method-and-constructor-properties-expected.txt:
+        * js/script-tests/caller-property.js:
+        (strictCaller):
+        (strictTailCaller):
+        * js/script-tests/class-method-and-constructor-properties.js:
+        (F.prototype.getElement):
+        (F):
+        (G.prototype.get item):
+        (G):
+        (H.prototype.arguments):
+        (H):
+        * js/script-tests/throw-type-error-is-unique.js: Added.
+        (ThrowTypeErrorSource):
+        (ThrowTypeErrorSource.prototype.checkTypeErrorFunctions):
+        (A):
+        (strictArguments):
+        (test):
+        * js/throw-type-error-is-unique-expected.txt: Added.
+        * js/throw-type-error-is-unique.html: Added.
+
</ins><span class="cx"> 2016-06-02  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix a couple of mistakes in CSSParserValue memory management
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorruntimegetPropertiesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/runtime/getProperties-expected.txt (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/runtime/getProperties-expected.txt        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/inspector/runtime/getProperties-expected.txt        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -21,8 +21,8 @@
</span><span class="cx">   __proto__ function function () {
</span><span class="cx">     [native code]
</span><span class="cx"> }
</span><del>-  arguments object TypeError: Type error
-  caller object TypeError: Type error
</del><ins>+  arguments object TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+  caller object TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
</ins><span class="cx">   length number 0
</span><span class="cx">   name string bound Number
</span><span class="cx"> Internal properties:
</span><span class="lines">@@ -38,8 +38,8 @@
</span><span class="cx">   __proto__ function function () {
</span><span class="cx">     [native code]
</span><span class="cx"> }
</span><del>-  arguments object TypeError: Type error
-  caller object TypeError: Type error
</del><ins>+  arguments object TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+  caller object TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
</ins><span class="cx">   length number 0
</span><span class="cx">   name string bound 
</span><span class="cx"> Internal properties:
</span></span></pre></div>
<a id="trunkLayoutTestsjsbasicstrictmodeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/basic-strict-mode-expected.txt (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/basic-strict-mode-expected.txt        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/js/basic-strict-mode-expected.txt        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -56,18 +56,18 @@
</span><span class="cx"> PASS (function(){(function (){var a; function f() {'use strict'; delete a;} })()}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
</span><span class="cx"> PASS (function (){'use strict'; with(1){};}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
</span><span class="cx"> PASS (function(){(function (){'use strict'; with(1){};})}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
</span><del>-PASS (function (){'use strict'; arguments.callee; })() threw exception TypeError: 'callee' and 'caller' cannot be accessed in strict mode..
-PASS (function (){'use strict'; arguments.caller; })() threw exception TypeError: 'callee' and 'caller' cannot be accessed in strict mode..
-PASS (function f(){'use strict'; f.arguments; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(){'use strict'; f.caller; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(){'use strict'; f.arguments=5; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(){'use strict'; f.caller=5; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function (arg){'use strict'; arguments.callee; })() threw exception TypeError: 'callee' and 'caller' cannot be accessed in strict mode..
-PASS (function (arg){'use strict'; arguments.caller; })() threw exception TypeError: 'callee' and 'caller' cannot be accessed in strict mode..
-PASS (function f(arg){'use strict'; f.arguments; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(arg){'use strict'; f.caller; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(arg){'use strict'; f.arguments=5; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS (function f(arg){'use strict'; f.caller=5; })() threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS (function (){'use strict'; arguments.callee; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function (){'use strict'; arguments.caller; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(){'use strict'; f.arguments; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(){'use strict'; f.caller; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(){'use strict'; f.arguments=5; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(){'use strict'; f.caller=5; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function (arg){'use strict'; arguments.callee; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function (arg){'use strict'; arguments.caller; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(arg){'use strict'; f.arguments; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(arg){'use strict'; f.caller; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(arg){'use strict'; f.arguments=5; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS (function f(arg){'use strict'; f.caller=5; })() threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS &quot;caller&quot; in function(){&quot;use strict&quot;} is true
</span><span class="cx"> PASS (function(){&quot;use strict&quot;;}).hasOwnProperty(&quot;caller&quot;) is true
</span><span class="cx"> PASS &quot;arguments&quot; in function(){&quot;use strict&quot;} is true
</span></span></pre></div>
<a id="trunkLayoutTestsjscallerpropertyexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/caller-property-expected.txt (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/caller-property-expected.txt        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/js/caller-property-expected.txt        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -7,25 +7,25 @@
</span><span class="cx"> PASS childHasCallerWhenCalledWithoutParent is false
</span><span class="cx"> PASS childHasCallerWhenCalledFromWithinParent is true
</span><span class="cx"> PASS nonStrictCaller(nonStrictCallee) is nonStrictCaller
</span><del>-PASS nonStrictCaller(strictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS nonStrictCaller(strictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS strictCaller(nonStrictCallee) threw exception TypeError: Function.caller used to retrieve strict caller.
</span><del>-PASS strictCaller(strictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS strictCaller(strictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS strictTailCaller(nonStrictCallee) is null
</span><del>-PASS strictTailCaller(strictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS strictTailCaller(strictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS nonStrictCaller(boundNonStrictCallee) is nonStrictCaller
</span><del>-PASS nonStrictCaller(boundStrictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS nonStrictCaller(boundStrictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS strictCaller(boundNonStrictCallee) threw exception TypeError: Function.caller used to retrieve strict caller.
</span><del>-PASS strictCaller(boundStrictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS strictCaller(boundStrictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS strictTailCaller(boundNonStrictCallee) is null
</span><del>-PASS strictTailCaller(boundStrictCallee) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS strictTailCaller(boundStrictCallee) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS nonStrictGetter(nonStrictAccessor) is nonStrictGetter
</span><span class="cx"> PASS nonStrictSetter(nonStrictAccessor) is true
</span><del>-PASS nonStrictGetter(strictAccessor) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS nonStrictSetter(strictAccessor) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS nonStrictGetter(strictAccessor) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS nonStrictSetter(strictAccessor) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS strictGetter(nonStrictAccessor) threw exception TypeError: Function.caller used to retrieve strict caller.
</span><span class="cx"> PASS strictSetter(nonStrictAccessor) threw exception TypeError: Function.caller used to retrieve strict caller.
</span><del>-PASS strictGetter(strictAccessor) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
-PASS strictSetter(strictAccessor) threw exception TypeError: 'caller' and 'arguments' cannot be accessed in strict mode..
</del><ins>+PASS strictGetter(strictAccessor) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
+PASS strictSetter(strictAccessor) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode..
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsclassmethodandconstructorpropertiesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/class-method-and-constructor-properties-expected.txt (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/class-method-and-constructor-properties-expected.txt        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/js/class-method-and-constructor-properties-expected.txt        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -3,28 +3,28 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS (new A()).constructor.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new A()).constructor.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new B()).constructor.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new B()).constructor.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new C()).constructor.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new C()).constructor.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new D()).constructor.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new D()).constructor.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new E()).getItem.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new E()).getItem.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new F()).getItem.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new F()).getItem.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new F()).getElement.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new F()).getElement.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
</del><ins>+PASS (new A()).constructor.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new A()).constructor.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new B()).constructor.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new B()).constructor.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new C()).constructor.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new C()).constructor.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new D()).constructor.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new D()).constructor.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new E()).getItem.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new E()).getItem.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new F()).getItem.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new F()).getItem.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new F()).getElement.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new F()).getElement.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
</ins><span class="cx"> PASS (new G()).item.caller:::undefined
</span><span class="cx"> PASS (new G()).item.arguments:::undefined
</span><del>-PASS H.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS H.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
</del><ins>+PASS H.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS H.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
</ins><span class="cx"> PASS (new H()).caller():::&quot;value&quot;
</span><span class="cx"> PASS (new H()).arguments():::&quot;value&quot;
</span><del>-PASS (new H()).caller.caller:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
-PASS (new H()).caller.arguments:::TypeError: 'caller' and 'arguments' cannot be accessed in class context.
</del><ins>+PASS (new H()).caller.caller:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
+PASS (new H()).caller.arguments:::TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.
</ins><span class="cx"> PASS successfullyParsed:::true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestscallerpropertyjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/script-tests/caller-property.js (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/caller-property.js        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/js/script-tests/caller-property.js        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> function strictCaller(x) { &quot;use strict&quot;; var result = x(); return result; }
</span><span class="cx"> function strictTailCaller(x) { &quot;use strict&quot;; return x(); }
</span><span class="cx"> shouldBe(&quot;nonStrictCaller(nonStrictCallee)&quot;, &quot;nonStrictCaller&quot;);
</span><del>-shouldThrow(&quot;nonStrictCaller(strictCallee)&quot;);
-shouldThrow(&quot;strictCaller(nonStrictCallee)&quot;, '&quot;TypeError: Function.caller used to retrieve strict caller&quot;');
-shouldThrow(&quot;strictCaller(strictCallee)&quot;);
</del><ins>+shouldThrow(&quot;nonStrictCaller(strictCallee)&quot;, '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow(&quot;strictCaller(nonStrictCallee)&quot;);
+shouldThrow(&quot;strictCaller(strictCallee)&quot;, '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
</ins><span class="cx"> shouldBe(&quot;strictTailCaller(nonStrictCallee)&quot;, &quot;null&quot;);
</span><span class="cx"> shouldThrow(&quot;strictTailCaller(strictCallee)&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsclassmethodandconstructorpropertiesjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/script-tests/class-method-and-constructor-properties.js (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/class-method-and-constructor-properties.js        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/LayoutTests/js/script-tests/class-method-and-constructor-properties.js        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -33,20 +33,20 @@
</span><span class="cx"> class F extends E { getElement() { return 'text'}}
</span><span class="cx"> class G extends E { get item() { return 'text'} }
</span><span class="cx"> 
</span><del>-shouldThrow('(new A()).constructor.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new A()).constructor.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new B()).constructor.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new B()).constructor.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new C()).constructor.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new C()).constructor.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new D()).constructor.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new D()).constructor.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new E()).getItem.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new E()).getItem.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new F()).getItem.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new F()).getItem.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new F()).getElement.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new F()).getElement.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
</del><ins>+shouldThrow('(new A()).constructor.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new A()).constructor.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new B()).constructor.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new B()).constructor.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new C()).constructor.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new C()).constructor.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new D()).constructor.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new D()).constructor.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new E()).getItem.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new E()).getItem.arguments', '');
+shouldThrow('(new F()).getItem.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new F()).getItem.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new F()).getElement.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new F()).getElement.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
</ins><span class="cx"> 
</span><span class="cx"> shouldBe('(new G()).item.caller', 'undefined');
</span><span class="cx"> shouldBe('(new G()).item.arguments', 'undefined');
</span><span class="lines">@@ -56,14 +56,14 @@
</span><span class="cx">   arguments() { return 'value'; }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-shouldThrow('H.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('H.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
</del><ins>+shouldThrow('H.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('H.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
</ins><span class="cx"> 
</span><span class="cx"> shouldBe('(new H()).caller()', '&quot;value&quot;');
</span><span class="cx"> shouldBe('(new H()).arguments()', '&quot;value&quot;');
</span><span class="cx"> 
</span><del>-shouldThrow('(new H()).caller.caller', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
-shouldThrow('(new H()).caller.arguments', '&quot;TypeError: \'caller\' and \'arguments\' cannot be accessed in class context.&quot;');
</del><ins>+shouldThrow('(new H()).caller.caller', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
+shouldThrow('(new H()).caller.arguments', '&quot;TypeError: \'arguments\', \'callee\', and \'caller\' cannot be accessed in strict mode.&quot;');
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> var successfullyParsed = true;
</span></span></pre></div>
<a id="trunkLayoutTestsjsscriptteststhrowtypeerrorisuniquejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/script-tests/throw-type-error-is-unique.js (0 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/throw-type-error-is-unique.js                                (rev 0)
+++ trunk/LayoutTests/js/script-tests/throw-type-error-is-unique.js        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+&quot;use strict&quot;;
+
+description('Tests ES6 %ThrowTypeError% intrinsic is unique');
+
+class ThrowTypeErrorSource {
+    constructor(context, base, names)
+    {
+        this.context = context;
+        this.base = base;
+        this.names = names;
+    }
+
+    checkTypeErrorFunctions(throwTypeErrorFunction)
+    {
+        let errors = 0;
+        for (let name of this.names) {
+            let desc = Object.getOwnPropertyDescriptor(this.base, name);
+
+            if (!desc)
+                return 0;
+
+            for (let accessorType of [&quot;get&quot;, &quot;set&quot;]) {
+                let accessor = desc[accessorType];
+                if (accessor &amp;&amp; accessor !== throwTypeErrorFunction) {
+                    testFailed(this.context + &quot; &quot; + accessorType + &quot;ter for \&quot;&quot; + name + &quot;\&quot; is not the same %ThrowTypeError% intrinsic&quot;);
+                    errors++;
+                }
+            }
+        }
+
+        return errors;
+    }
+}
+
+class A { };
+let arrayProtoPush = Array.prototype.push;
+
+function strictArguments()
+{
+    return arguments;
+}
+
+let sloppyArguments = Function(&quot;return arguments;&quot;);
+
+function test()
+{
+    let baseThrowTypeErrorFunction = Object.getOwnPropertyDescriptor(arguments, &quot;caller&quot;).get;
+
+    let sources = [
+        new ThrowTypeErrorSource(&quot;Function.prototype&quot;, Function.prototype, [&quot;arguments&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Array.prototype.push (builtin)&quot;, arrayProtoPush, [&quot;arguments&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Strict function arguments&quot;, strictArguments, [&quot;arguments&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Sloppy function arguments&quot;, sloppyArguments, [&quot;arguments&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Strict arguments&quot;, strictArguments(), [&quot;callee&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Sloppy arguments&quot;, sloppyArguments(), [&quot;callee&quot;, &quot;caller&quot;]),
+        new ThrowTypeErrorSource(&quot;Class constructor&quot;, (new A()).constructor, [&quot;arguments&quot;, &quot;caller&quot;])
+    ];
+
+    let errors = 0;
+
+    for (let source of sources)
+        errors += source.checkTypeErrorFunctions(baseThrowTypeErrorFunction);
+
+    if (!errors)
+        testPassed(&quot;%ThrowTypeError% intrinsic is unique&quot;);
+}
+
+test();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsthrowtypeerrorisuniqueexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/throw-type-error-is-unique-expected.txt (0 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/throw-type-error-is-unique-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/throw-type-error-is-unique-expected.txt        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Tests ES6 %ThrowTypeError% intrinsic is unique
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS %ThrowTypeError% intrinsic is unique
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsthrowtypeerrorisuniquehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/throw-type-error-is-unique.html (0 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/throw-type-error-is-unique.html                                (rev 0)
+++ trunk/LayoutTests/js/throw-type-error-is-unique.html        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;script-tests/throw-type-error-is-unique.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -1,5 +1,48 @@
</span><span class="cx"> 2016-06-02  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        REGRESSION(r200694): %ThrowTypeError% is not unique
+        https://bugs.webkit.org/show_bug.cgi?id=158231
+
+        Reviewed by Joseph Pecoraro.
+
+        The ES6 standard in section 9.2.7.1 states that %ThrowTypeError% is unique.  This
+        change reverts the handling of TypeError before r200694 and then rolls in
+        throwTypeErrorGetterSetter() with the renamed throwTypeErrorArgumentsCalleeAndCallerGetterSetter().
+
+        * runtime/ClonedArguments.cpp:
+        (JSC::ClonedArguments::getOwnPropertySlot):
+        (JSC::ClonedArguments::materializeSpecials):
+        * runtime/JSBoundFunction.cpp:
+        (JSC::JSBoundFunction::finishCreation):
+        (JSC::JSBoundFunction::visitChildren):
+        * runtime/JSFunction.cpp:
+        (JSC::getThrowTypeErrorGetterSetter):
+        (JSC::JSFunction::callerGetter):
+        (JSC::JSFunction::defineOwnProperty):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::init):
+        (JSC::JSGlobalObject::visitChildren):
+        * runtime/JSGlobalObject.h:
+        (JSC::JSGlobalObject::regExpProtoSymbolReplaceFunction):
+        (JSC::JSGlobalObject::regExpProtoGlobalGetter):
+        (JSC::JSGlobalObject::regExpProtoUnicodeGetter):
+        (JSC::JSGlobalObject::throwTypeErrorArgumentsCalleeAndCallerGetterSetter):
+        (JSC::JSGlobalObject::moduleLoader):
+        (JSC::JSGlobalObject::throwTypeErrorGetterSetter): Deleted.
+        (JSC::JSGlobalObject::throwTypeErrorCalleeAndCallerGetterSetter): Deleted.
+        (JSC::JSGlobalObject::throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter): Deleted.
+        (JSC::JSGlobalObject::throwTypeErrorArgumentsAndCallerInClassContextGetterSetter): Deleted.
+        * runtime/JSGlobalObjectFunctions.cpp:
+        (JSC::globalFuncThrowTypeError):
+        (JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller):
+        (JSC::globalFuncThrowTypeErrorCalleeAndCaller): Deleted.
+        (JSC::globalFuncThrowTypeErrorArgumentsAndCallerInStrictMode): Deleted.
+        (JSC::globalFuncThrowTypeErrorArgumentsAndCallerInClassContext): Deleted.
+        * runtime/JSGlobalObjectFunctions.h:
+        * tests/stress/reflect-set.js:
+
+2016-06-02  Michael Saboff  &lt;msaboff@apple.com&gt;
+
</ins><span class="cx">         [iOS]: Some JSC stress tests fail running out of executable memory when the LLInt is disabled
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=158317
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeClonedArgumentscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ClonedArguments.cpp (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ClonedArguments.cpp        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/ClonedArguments.cpp        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -158,11 +158,11 @@
</span><span class="cx"> 
</span><span class="cx">         if (isStrictMode) {
</span><span class="cx">             if (ident == vm.propertyNames-&gt;callee) {
</span><del>-                slot.setGetterSlot(thisObject, DontDelete | DontEnum | Accessor, thisObject-&gt;globalObject()-&gt;throwTypeErrorCalleeAndCallerGetterSetter());
</del><ins>+                slot.setGetterSlot(thisObject, DontDelete | DontEnum | Accessor, thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter());
</ins><span class="cx">                 return true;
</span><span class="cx">             }
</span><span class="cx">             if (ident == vm.propertyNames-&gt;caller) {
</span><del>-                slot.setGetterSlot(thisObject, DontDelete | DontEnum | Accessor, thisObject-&gt;globalObject()-&gt;throwTypeErrorCalleeAndCallerGetterSetter());
</del><ins>+                slot.setGetterSlot(thisObject, DontDelete | DontEnum | Accessor, thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter());
</ins><span class="cx">                 return true;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -238,8 +238,8 @@
</span><span class="cx">     bool isStrictMode = executable-&gt;isStrictMode();
</span><span class="cx">     
</span><span class="cx">     if (isStrictMode) {
</span><del>-        putDirectAccessor(exec, vm.propertyNames-&gt;callee, globalObject()-&gt;throwTypeErrorCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
-        putDirectAccessor(exec, vm.propertyNames-&gt;caller, globalObject()-&gt;throwTypeErrorCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
</del><ins>+        putDirectAccessor(exec, vm.propertyNames-&gt;callee, globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
+        putDirectAccessor(exec, vm.propertyNames-&gt;caller, globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
</ins><span class="cx">     } else
</span><span class="cx">         putDirect(vm, vm.propertyNames-&gt;callee, JSValue(m_callee.get()));
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSBoundFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -196,8 +196,8 @@
</span><span class="cx">     Base::finishCreation(vm, executable, length, name);
</span><span class="cx">     ASSERT(inherits(info()));
</span><span class="cx"> 
</span><del>-    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;arguments, globalObject()-&gt;throwTypeErrorGetterSetter(), DontDelete | DontEnum | Accessor);
-    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;caller, globalObject()-&gt;throwTypeErrorGetterSetter(), DontDelete | DontEnum | Accessor);
</del><ins>+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;arguments, globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
+    putDirectNonIndexAccessor(vm, vm.propertyNames-&gt;caller, globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSBoundFunction::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSFunction.cpp (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -319,13 +319,6 @@
</span><span class="cx">     return functor.result();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GetterSetter* getThrowTypeErrorGetterSetter(JSFunction* function)
-{
-    return function-&gt;jsExecutable()-&gt;isClassConstructorFunction() || function-&gt;jsExecutable()-&gt;parseMode() == SourceParseMode::MethodMode
-        ? function-&gt;globalObject()-&gt;throwTypeErrorArgumentsAndCallerInClassContextGetterSetter()
-        : function-&gt;globalObject()-&gt;throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter();
-}
-
</del><span class="cx"> EncodedJSValue JSFunction::callerGetter(ExecState* exec, EncodedJSValue thisValue, PropertyName, JSObject*)
</span><span class="cx"> {
</span><span class="cx">     JSFunction* thisObj = jsCast&lt;JSFunction*&gt;(JSValue::decode(thisValue));
</span><span class="lines">@@ -375,7 +368,7 @@
</span><span class="cx">         if (thisObject-&gt;jsExecutable()-&gt;isStrictMode() || thisObject-&gt;jsExecutable()-&gt;isClassConstructorFunction()) {
</span><span class="cx">             bool result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx">             if (!result) {
</span><del>-                GetterSetter* errorGetterSetter = getThrowTypeErrorGetterSetter(thisObject);
</del><ins>+                GetterSetter* errorGetterSetter = thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter();
</ins><span class="cx">                 thisObject-&gt;putDirectAccessor(exec, propertyName, errorGetterSetter, DontDelete | DontEnum | Accessor);
</span><span class="cx">                 result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx">                 ASSERT(result);
</span><span class="lines">@@ -390,7 +383,7 @@
</span><span class="cx">         if (thisObject-&gt;jsExecutable()-&gt;isStrictMode() || thisObject-&gt;jsExecutable()-&gt;isClassConstructorFunction()) {
</span><span class="cx">             bool result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx">             if (!result) {
</span><del>-                GetterSetter* errorGetterSetter = getThrowTypeErrorGetterSetter(thisObject);
</del><ins>+                GetterSetter* errorGetterSetter = thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter();
</ins><span class="cx">                 thisObject-&gt;putDirectAccessor(exec, propertyName, errorGetterSetter, DontDelete | DontEnum | Accessor);
</span><span class="cx">                 result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx">                 ASSERT(result);
</span><span class="lines">@@ -499,7 +492,7 @@
</span><span class="cx">         if (thisObject-&gt;jsExecutable()-&gt;isStrictMode()) {
</span><span class="cx">             PropertySlot slot(thisObject, PropertySlot::InternalMethodType::VMInquiry);
</span><span class="cx">             if (!Base::getOwnPropertySlot(thisObject, exec, propertyName, slot))
</span><del>-                thisObject-&gt;putDirectAccessor(exec, propertyName, getThrowTypeErrorGetterSetter(thisObject), DontDelete | DontEnum | Accessor);
</del><ins>+                thisObject-&gt;putDirectAccessor(exec, propertyName, thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
</ins><span class="cx">             return Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException);
</span><span class="cx">         }
</span><span class="cx">         valueCheck = !descriptor.value() || sameValue(exec, descriptor.value(), retrieveArguments(exec, thisObject));
</span><span class="lines">@@ -507,7 +500,7 @@
</span><span class="cx">         if (thisObject-&gt;jsExecutable()-&gt;isStrictMode()) {
</span><span class="cx">             PropertySlot slot(thisObject, PropertySlot::InternalMethodType::VMInquiry);
</span><span class="cx">             if (!Base::getOwnPropertySlot(thisObject, exec, propertyName, slot))
</span><del>-                thisObject-&gt;putDirectAccessor(exec, propertyName, getThrowTypeErrorGetterSetter(thisObject), DontDelete | DontEnum | Accessor);
</del><ins>+                thisObject-&gt;putDirectAccessor(exec, propertyName, thisObject-&gt;globalObject()-&gt;throwTypeErrorArgumentsCalleeAndCallerGetterSetter(), DontDelete | DontEnum | Accessor);
</ins><span class="cx">             return Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException);
</span><span class="cx">         }
</span><span class="cx">         valueCheck = !descriptor.value() || sameValue(exec, descriptor.value(), retrieveCallerFunction(exec, thisObject));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -384,30 +384,14 @@
</span><span class="cx">             getterSetter-&gt;setSetter(init.vm, init.owner, thrower);
</span><span class="cx">             init.set(getterSetter);
</span><span class="cx">         });
</span><del>-    m_throwTypeErrorCalleeAndCallerGetterSetter.initLater(
</del><ins>+    m_throwTypeErrorArgumentsCalleeAndCallerGetterSetter.initLater(
</ins><span class="cx">         [] (const Initializer&lt;GetterSetter&gt;&amp; init) {
</span><del>-            JSFunction* thrower = JSFunction::create(init.vm, init.owner, 0, String(), globalFuncThrowTypeErrorCalleeAndCaller);
</del><ins>+            JSFunction* thrower = JSFunction::create(init.vm, init.owner, 0, String(), globalFuncThrowTypeErrorArgumentsCalleeAndCaller);
</ins><span class="cx">             GetterSetter* getterSetter = GetterSetter::create(init.vm, init.owner);
</span><span class="cx">             getterSetter-&gt;setGetter(init.vm, init.owner, thrower);
</span><span class="cx">             getterSetter-&gt;setSetter(init.vm, init.owner, thrower);
</span><span class="cx">             init.set(getterSetter);
</span><span class="cx">         });
</span><del>-    m_throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter.initLater(
-        [] (const Initializer&lt;GetterSetter&gt;&amp; init) {
-            JSFunction* thrower = JSFunction::create(init.vm, init.owner, 0, String(), globalFuncThrowTypeErrorArgumentsAndCallerInStrictMode);
-            GetterSetter* getterSetter = GetterSetter::create(init.vm, init.owner);
-            getterSetter-&gt;setGetter(init.vm, init.owner, thrower);
-            getterSetter-&gt;setSetter(init.vm, init.owner, thrower);
-            init.set(getterSetter);
-        });
-    m_throwTypeErrorArgumentsAndCallerInClassContextGetterSetter.initLater(
-        [] (const Initializer&lt;GetterSetter&gt;&amp; init) {
-            JSFunction* thrower = JSFunction::create(init.vm, init.owner, 0, String(), globalFuncThrowTypeErrorArgumentsAndCallerInClassContext);
-            GetterSetter* getterSetter = GetterSetter::create(init.vm, init.owner);
-            getterSetter-&gt;setGetter(init.vm, init.owner, thrower);
-            getterSetter-&gt;setSetter(init.vm, init.owner, thrower);
-            init.set(getterSetter);
-        });
</del><span class="cx">     m_nullGetterFunction.set(vm, this, NullGetterFunction::create(vm, NullGetterFunction::createStructure(vm, this, m_functionPrototype.get())));
</span><span class="cx">     m_nullSetterFunction.set(vm, this, NullSetterFunction::create(vm, NullSetterFunction::createStructure(vm, this, m_functionPrototype.get())));
</span><span class="cx">     m_objectPrototype.set(vm, this, ObjectPrototype::create(vm, this, ObjectPrototype::createStructure(vm, this, jsNull())));
</span><span class="lines">@@ -1074,9 +1058,7 @@
</span><span class="cx">     visitor.append(&amp;thisObject-&gt;m_newPromiseCapabilityFunction);
</span><span class="cx">     visitor.append(&amp;thisObject-&gt;m_functionProtoHasInstanceSymbolFunction);
</span><span class="cx">     thisObject-&gt;m_throwTypeErrorGetterSetter.visit(visitor);
</span><del>-    thisObject-&gt;m_throwTypeErrorCalleeAndCallerGetterSetter.visit(visitor);
-    thisObject-&gt;m_throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter.visit(visitor);
-    thisObject-&gt;m_throwTypeErrorArgumentsAndCallerInClassContextGetterSetter.visit(visitor);
</del><ins>+    thisObject-&gt;m_throwTypeErrorArgumentsCalleeAndCallerGetterSetter.visit(visitor);
</ins><span class="cx">     visitor.append(&amp;thisObject-&gt;m_moduleLoader);
</span><span class="cx"> 
</span><span class="cx">     visitor.append(&amp;thisObject-&gt;m_objectPrototype);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -242,14 +242,12 @@
</span><span class="cx">     LazyProperty&lt;JSGlobalObject, JSFunction&gt; m_initializePromiseFunction;
</span><span class="cx">     WriteBarrier&lt;JSFunction&gt; m_newPromiseCapabilityFunction;
</span><span class="cx">     WriteBarrier&lt;JSFunction&gt; m_functionProtoHasInstanceSymbolFunction;
</span><ins>+    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorGetterSetter;
</ins><span class="cx">     WriteBarrier&lt;JSObject&gt; m_regExpProtoExec;
</span><span class="cx">     WriteBarrier&lt;JSObject&gt; m_regExpProtoSymbolReplace;
</span><span class="cx">     WriteBarrier&lt;JSObject&gt; m_regExpProtoGlobalGetter;
</span><span class="cx">     WriteBarrier&lt;JSObject&gt; m_regExpProtoUnicodeGetter;
</span><del>-    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorGetterSetter;
-    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorCalleeAndCallerGetterSetter;
-    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter;
-    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorArgumentsAndCallerInClassContextGetterSetter;
</del><ins>+    LazyProperty&lt;JSGlobalObject, GetterSetter&gt; m_throwTypeErrorArgumentsCalleeAndCallerGetterSetter;
</ins><span class="cx"> 
</span><span class="cx">     WriteBarrier&lt;ModuleLoaderObject&gt; m_moduleLoader;
</span><span class="cx"> 
</span><span class="lines">@@ -490,11 +488,10 @@
</span><span class="cx">     JSObject* regExpProtoSymbolReplaceFunction() const { return m_regExpProtoSymbolReplace.get(); }
</span><span class="cx">     JSObject* regExpProtoGlobalGetter() const { return m_regExpProtoGlobalGetter.get(); }
</span><span class="cx">     JSObject* regExpProtoUnicodeGetter() const { return m_regExpProtoUnicodeGetter.get(); }
</span><del>-
-    GetterSetter* throwTypeErrorGetterSetter() { return m_throwTypeErrorGetterSetter.get(this); }
-    GetterSetter* throwTypeErrorCalleeAndCallerGetterSetter() { return m_throwTypeErrorCalleeAndCallerGetterSetter.get(this); }
-    GetterSetter* throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter() { return m_throwTypeErrorArgumentsAndCallerInStrictModeGetterSetter.get(this); }
-    GetterSetter* throwTypeErrorArgumentsAndCallerInClassContextGetterSetter() { return m_throwTypeErrorArgumentsAndCallerInClassContextGetterSetter.get(this); }
</del><ins>+    GetterSetter* throwTypeErrorArgumentsCalleeAndCallerGetterSetter()
+    {
+        return m_throwTypeErrorArgumentsCalleeAndCallerGetterSetter.get(this);
+    }
</ins><span class="cx">     
</span><span class="cx">     ModuleLoaderObject* moduleLoader() const { return m_moduleLoader.get(); }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -781,22 +781,12 @@
</span><span class="cx"> {
</span><span class="cx">     return throwVMTypeError(exec);
</span><span class="cx"> }
</span><del>-
-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorCalleeAndCaller(ExecState* exec)
</del><ins>+    
+EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsCalleeAndCaller(ExecState* exec)
</ins><span class="cx"> {
</span><del>-    return throwVMTypeError(exec, &quot;'callee' and 'caller' cannot be accessed in strict mode.&quot;);
</del><ins>+    return throwVMTypeError(exec, &quot;'arguments', 'callee', and 'caller' cannot be accessed in strict mode.&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsAndCallerInStrictMode(ExecState* exec)
-{
-    return throwVMTypeError(exec, &quot;'caller' and 'arguments' cannot be accessed in strict mode.&quot;);
-}
-
-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsAndCallerInClassContext(ExecState* exec)
-{
-    return throwVMTypeError(exec, &quot;'caller' and 'arguments' cannot be accessed in class context.&quot;);
-}
-
</del><span class="cx"> class GlobalFuncProtoGetterFunctor {
</span><span class="cx"> public:
</span><span class="cx">     GlobalFuncProtoGetterFunctor(ExecState* exec, JSObject* thisObject)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -49,9 +49,7 @@
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncEscape(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncUnescape(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeError(ExecState*);
</span><del>-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorCalleeAndCaller(ExecState*);
-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsAndCallerInStrictMode(ExecState*);
-EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsAndCallerInClassContext(ExecState*);
</del><ins>+EncodedJSValue JSC_HOST_CALL globalFuncThrowTypeErrorArgumentsCalleeAndCaller(ExecState*);
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncProtoGetter(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncProtoSetter(ExecState*);
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL globalFuncBuiltinLog(ExecState*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressreflectsetjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/stress/reflect-set.js (201618 => 201619)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/reflect-set.js        2016-06-02 21:53:55 UTC (rev 201618)
+++ trunk/Source/JavaScriptCore/tests/stress/reflect-set.js        2016-06-02 22:01:50 UTC (rev 201619)
</span><span class="lines">@@ -877,10 +877,10 @@
</span><span class="cx"> 
</span><span class="cx">         shouldThrow(() =&gt; {
</span><span class="cx">             Reflect.set(object, 'callee', 'Cappuccino');
</span><del>-        }, `TypeError: 'callee' and 'caller' cannot be accessed in strict mode.`);
</del><ins>+        }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.`);
</ins><span class="cx">         shouldThrow(() =&gt; {
</span><span class="cx">             Reflect.get(object, 'callee');
</span><del>-        }, `TypeError: 'callee' and 'caller' cannot be accessed in strict mode.`);
</del><ins>+        }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in strict mode.`);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     function test4() {
</span></span></pre>
</div>
</div>

</body>
</html>