<!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>[181810] 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/181810">181810</a></dd>
<dt>Author</dt> <dd>ggaren@apple.com</dd>
<dt>Date</dt> <dd>2015-03-20 13:12:10 -0700 (Fri, 20 Mar 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Function.prototype.toString should not decompile the AST
https://bugs.webkit.org/show_bug.cgi?id=142853
Reviewed by Sam Weinig.
Source/JavaScriptCore:
To recover the function parameter string, Function.prototype.toString
decompiles the function parameters from the AST. This is bad for a few
reasons:
(1) It requires us to keep pieces of the AST live forever. This is an
awkward design and a waste of memory.
(2) It doesn't match Firefox or Chrome (because it changes whitespace
and ES6 destructuring expressions).
(3) It doesn't scale to ES6 default argument parameters, which require
arbitrarily complex decompilation.
(4) It can counterfeit all the line numbers in a function (because
whitespace can include newlines).
(5) It's expensive, and we've seen cases where websites invoke
Function.prototype.toString a lot by accident.
The fix is to do what we do for the rest of the function: Just quote the
original source text.
Since this change inevitably changes some function stringification, I
took the opportunity to make our stringification match Firefox's and
Chrome's.
* API/tests/testapi.c:
(assertEqualsAsUTF8String): Be more informative when this fails.
(main): Updated to match new stringification rules.
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::UnlinkedFunctionExecutable::paramString): Deleted. Yay!
* bytecode/UnlinkedCodeBlock.h:
* parser/Nodes.h:
(JSC::StatementNode::isFuncDeclNode): New helper for constructing
anonymous functions.
* parser/SourceCode.h:
(JSC::SourceCode::SourceCode): Allow zero because WebCore wants it.
* runtime/CodeCache.cpp:
(JSC::CodeCache::getFunctionExecutableFromGlobalCode): Updated for use
of function declaration over function expression.
* runtime/Executable.cpp:
(JSC::FunctionExecutable::paramString): Deleted. Yay!
* runtime/Executable.h:
(JSC::FunctionExecutable::parameterCount):
* runtime/FunctionConstructor.cpp:
(JSC::constructFunctionSkippingEvalEnabledCheck): Added a newline after
the opening brace to match Firefox and Chrome, and a space after the comma
to match Firefox and WebKit coding style. Added the function name to
the text of the function so it would look right when stringify-ing. Switched
from parentheses to braces to produce a function declaration instead of
a function expression because we are required to exclude the function's
name from its scope, and that's what a function declaration does.
* runtime/FunctionPrototype.cpp:
(JSC::functionProtoFuncToString): Removed an old workaround because the
library it worked around doesn't really exist anymore, and the behavior
doesn't match Firefox or Chrome. Use type profiling offsets instead of
function body offsets because we want to include the function name and
the parameter string, rather than stitching them in manually by
decompiling the AST.
(JSC::insertSemicolonIfNeeded): Deleted.
* tests/mozilla/js1_2/function/tostring-1.js:
* tests/mozilla/js1_5/Scope/regress-185485.js:
(with.g): Updated these test results for formatting changes.
Source/WebCore:
* bindings/js/JSLazyEventListener.cpp:
(WebCore::JSLazyEventListener::initializeJSFunction): Adjust the line
number of attribute event listeners to account for the leading newline
now added by JavaScriptCore.
This solution is not perfect, but there are a lot of pre-existing problems
with line and column reporting for attribute event listeners, and this
preserves existing behavior with reasonable reliability.
LayoutTests:
Updated test results to match new rules for Function.prototype.toString.
* fast/dom/TreeWalker/acceptNode-filter-expected.txt: Removed a space
because it was not in the original source.
* fast/events/window-onerror2-expected.txt: Column number changed because
the event listener body starts on its own line now. This was a bit wrong
before and is still a bit wrong now in a different way.
* fast/profiler/dead-time-expected.txt:
* fast/profiler/inline-event-handler-expected.txt:
* fast/profiler/stop-profiling-after-setTimeout-expected.txt: Line number
changed because WebCore shifts line nubmers on attribute event listeners
by one.
* js/class-syntax-default-constructor-expected.txt: Constructor name
is not present now because it is not present in the source text. This
test failed before and it still fails now in a slightly different way.
* js/destructuring-assignment-expected.txt: Destructuring arguments now
match their source text faithfully.
* js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt:
Removed a space because it was not present in the original source text.
* js/dfg-resolve-global-specific-dictionary-expected.txt: Ditto.
* js/function-toString-semicolon-insertion-expected.txt: Removed.
* js/script-tests/function-toString-semicolon-insertion.js: Removed.
* js/function-toString-semicolon-insertion.html: Removed. This test checked
for a work-around that I have removed.
* js/object-literal-computed-methods-expected.txt:
* js/object-literal-methods-expected.txt: These tests fail because object
literal methods do not register their function names appropriately. This
was a pre-existing failure that is now more explicit.
* js/dom/JSON-parse-expected.txt:
* js/dom/JSON-stringify-expected.txt: Whitespace removed because it was
not present in the original.
* js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Ditto.
* js/dom/function-prototype-expected.txt:
* js/dom/function-prototype.html: Ditto.
* js/dom/parse-error-external-script-in-new-Function-expected.txt: Line
changed by one due to new extra newline.
* js/dom/script-start-end-locations-expected.txt: Lines and columns
changed due to new extra newline.
* js/dom/toString-and-valueOf-override-expected.txt: Whitespace removed
because it was not present in the original.
* js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Ditto.
* js/kde/lval-exceptions-expected.txt: Ditto.
* js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js: Ditto.
* js/script-tests/dfg-resolve-global-specific-dictionary.js: Ditto.
* platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt: Ditto.
* storage/domstorage/localstorage/string-conversion-expected.txt: Ditto.
* storage/domstorage/sessionstorage/string-conversion-expected.txt: Ditto.
* userscripts/window-onerror-for-isolated-world-1-expected.txt:
* userscripts/window-onerror-for-isolated-world-2-expected.txt: Line numbers
changed because of new anonymous function formatting. These line numbers
were wrong before and they are still wrong now.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomTreeWalkeracceptNodefilterexpectedtxt">trunk/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasteventswindowonerror2expectedtxt">trunk/LayoutTests/fast/events/window-onerror2-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerdeadtimeexpectedtxt">trunk/LayoutTests/fast/profiler/dead-time-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerinlineeventhandlerexpectedtxt">trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerstopprofilingaftersetTimeoutexpectedtxt">trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsclasssyntaxdefaultconstructorexpectedtxt">trunk/LayoutTests/js/class-syntax-default-constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdestructuringassignmentexpectedtxt">trunk/LayoutTests/js/destructuring-assignment-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdfgredundantloadofcapturedvariableprovenconstantexpectedtxt">trunk/LayoutTests/js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdfgresolveglobalspecificdictionaryexpectedtxt">trunk/LayoutTests/js/dfg-resolve-global-specific-dictionary-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomJSONparseexpectedtxt">trunk/LayoutTests/js/dom/JSON-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomJSONstringifyexpectedtxt">trunk/LayoutTests/js/dom/JSON-stringify-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdfgstrcatoverobjectsthenexitonitexpectedtxt">trunk/LayoutTests/js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomfunctionprototypeexpectedtxt">trunk/LayoutTests/js/dom/function-prototype-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomfunctionprototypehtml">trunk/LayoutTests/js/dom/function-prototype.html</a></li>
<li><a href="#trunkLayoutTestsjsdomparseerrorexternalscriptinnewFunctionexpectedtxt">trunk/LayoutTests/js/dom/parse-error-external-script-in-new-Function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomscriptstartendlocationsexpectedtxt">trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomscripttestsdfgstrcatoverobjectsthenexitonitjs">trunk/LayoutTests/js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js</a></li>
<li><a href="#trunkLayoutTestsjsdomtoStringandvalueOfoverrideexpectedtxt">trunk/LayoutTests/js/dom/toString-and-valueOf-override-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjskdelvalexceptionsexpectedtxt">trunk/LayoutTests/js/kde/lval-exceptions-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsobjectliteralcomputedmethodsexpectedtxt">trunk/LayoutTests/js/object-literal-computed-methods-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsobjectliteralmethodsexpectedtxt">trunk/LayoutTests/js/object-literal-methods-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsdfgredundantloadofcapturedvariableprovenconstantjs">trunk/LayoutTests/js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsdfgresolveglobalspecificdictionaryjs">trunk/LayoutTests/js/script-tests/dfg-resolve-global-specific-dictionary.js</a></li>
<li><a href="#trunkLayoutTestsplatformmachttptestsmediamediasourcemediasourcesourcebuffermodeexpectedtxt">trunk/LayoutTests/platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstoragedomstoragelocalstoragestringconversionexpectedtxt">trunk/LayoutTests/storage/domstorage/localstorage/string-conversion-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstoragedomstoragesessionstoragestringconversionexpectedtxt">trunk/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt</a></li>
<li><a href="#trunkLayoutTestsuserscriptswindowonerrorforisolatedworld1expectedtxt">trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-1-expected.txt</a></li>
<li><a href="#trunkLayoutTestsuserscriptswindowonerrorforisolatedworld2expectedtxt">trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-2-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIteststestapic">trunk/Source/JavaScriptCore/API/tests/testapi.c</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerNodesCodegencpp">trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesh">trunk/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceCodeh">trunk/Source/JavaScriptCore/parser/SourceCode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutablecpp">trunk/Source/JavaScriptCore/runtime/Executable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutableh">trunk/Source/JavaScriptCore/runtime/Executable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionPrototypecpp">trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsmozillajs1_2functiontostring1js">trunk/Source/JavaScriptCore/tests/mozilla/js1_2/function/tostring-1.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsmozillajs1_5Scoperegress185485js">trunk/Source/JavaScriptCore/tests/mozilla/js1_5/Scope/regress-185485.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSLazyEventListenercpp">trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsfunctiontoStringsemicoloninsertionexpectedtxt">trunk/LayoutTests/js/function-toString-semicolon-insertion-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsfunctiontoStringsemicoloninsertionhtml">trunk/LayoutTests/js/function-toString-semicolon-insertion.html</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsfunctiontoStringsemicoloninsertionjs">trunk/LayoutTests/js/script-tests/function-toString-semicolon-insertion.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/ChangeLog        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,3 +1,84 @@
</span><ins>+2015-03-19 Geoffrey Garen <ggaren@apple.com>
+
+ Function.prototype.toString should not decompile the AST
+ https://bugs.webkit.org/show_bug.cgi?id=142853
+
+ Reviewed by Sam Weinig.
+
+ Updated test results to match new rules for Function.prototype.toString.
+
+ * fast/dom/TreeWalker/acceptNode-filter-expected.txt: Removed a space
+ because it was not in the original source.
+
+ * fast/events/window-onerror2-expected.txt: Column number changed because
+ the event listener body starts on its own line now. This was a bit wrong
+ before and is still a bit wrong now in a different way.
+
+ * fast/profiler/dead-time-expected.txt:
+ * fast/profiler/inline-event-handler-expected.txt:
+ * fast/profiler/stop-profiling-after-setTimeout-expected.txt: Line number
+ changed because WebCore shifts line nubmers on attribute event listeners
+ by one.
+
+ * js/class-syntax-default-constructor-expected.txt: Constructor name
+ is not present now because it is not present in the source text. This
+ test failed before and it still fails now in a slightly different way.
+
+ * js/destructuring-assignment-expected.txt: Destructuring arguments now
+ match their source text faithfully.
+
+ * js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt:
+ Removed a space because it was not present in the original source text.
+
+ * js/dfg-resolve-global-specific-dictionary-expected.txt: Ditto.
+
+ * js/function-toString-semicolon-insertion-expected.txt: Removed.
+ * js/script-tests/function-toString-semicolon-insertion.js: Removed.
+ * js/function-toString-semicolon-insertion.html: Removed. This test checked
+ for a work-around that I have removed.
+
+ * js/object-literal-computed-methods-expected.txt:
+ * js/object-literal-methods-expected.txt: These tests fail because object
+ literal methods do not register their function names appropriately. This
+ was a pre-existing failure that is now more explicit.
+
+ * js/dom/JSON-parse-expected.txt:
+ * js/dom/JSON-stringify-expected.txt: Whitespace removed because it was
+ not present in the original.
+
+ * js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Ditto.
+
+ * js/dom/function-prototype-expected.txt:
+ * js/dom/function-prototype.html: Ditto.
+
+ * js/dom/parse-error-external-script-in-new-Function-expected.txt: Line
+ changed by one due to new extra newline.
+
+ * js/dom/script-start-end-locations-expected.txt: Lines and columns
+ changed due to new extra newline.
+
+ * js/dom/toString-and-valueOf-override-expected.txt: Whitespace removed
+ because it was not present in the original.
+
+ * js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Ditto.
+
+ * js/kde/lval-exceptions-expected.txt: Ditto.
+
+ * js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js: Ditto.
+
+ * js/script-tests/dfg-resolve-global-specific-dictionary.js: Ditto.
+
+ * platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt: Ditto.
+
+ * storage/domstorage/localstorage/string-conversion-expected.txt: Ditto.
+
+ * storage/domstorage/sessionstorage/string-conversion-expected.txt: Ditto.
+
+ * userscripts/window-onerror-for-isolated-world-1-expected.txt:
+ * userscripts/window-onerror-for-isolated-world-2-expected.txt: Line numbers
+ changed because of new anonymous function formatting. These line numbers
+ were wrong before and they are still wrong now.
+
</ins><span class="cx"> 2015-03-20 Brent Fulgham <bfulgham@apple.com>
</span><span class="cx">
</span><span class="cx"> [Win] Add some skips to support EWS use.
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomTreeWalkeracceptNodefilterexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> PASS walker.nextNode(); walker.currentNode.id is 'B1'
</span><span class="cx">
</span><span class="cx"> Testing acceptNode callee
</span><del>-Callee: function (node) {
</del><ins>+Callee: function(node) {
</ins><span class="cx"> debug('Callee: ' + arguments.callee);
</span><span class="cx"> return NodeFilter.FILTER_ACCEPT;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkLayoutTestsfasteventswindowonerror2expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/events/window-onerror2-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/window-onerror2-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/fast/events/window-onerror2-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Test that uncaught exceptions will be reported to the window.onerror handler. Bug 8519.
</span><span class="cx">
</span><span class="cx"> Main frame window.onerror: Error: Inline script exception at window-onerror2.html, line: 34, column: 47
</span><del>-Main frame window.onerror: Exception in onload at window-onerror2.html, line: 2, column: 167
</del><ins>+Main frame window.onerror: Exception in onload at window-onerror2.html, line: 2, column: 66
</ins><span class="cx"> Main frame window.onerror: Error: Exception in setTimeout at window-onerror2.html, line: 29, column: 47
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerdeadtimeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/dead-time-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/dead-time-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/fast/profiler/dead-time-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx">
</span><span class="cx"> Profile title: Dead time in profile.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>- onload dead-time.html (line 21:45)
</del><ins>+ onload dead-time.html (line 20:52)
</ins><span class="cx"> startTest dead-time.html (line 13:1)
</span><span class="cx"> setTimeout (no file) (line 0:0)
</span><span class="cx"> (program) dead-time.html (line 1:1)
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerinlineeventhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -7,7 +7,7 @@
</span><span class="cx"> startTest inline-event-handler.html (line 11:1)
</span><span class="cx"> getElementById (no file) (line 0:0)
</span><span class="cx"> click (no file) (line 0:0)
</span><del>- onclick inline-event-handler.html (line 31:127)
</del><ins>+ onclick inline-event-handler.html (line 30:135)
</ins><span class="cx"> eventListener inline-event-handler.html (line 17:26)
</span><span class="cx"> anonymousFunction profiler-test-JS-resources.js (line 29:37)
</span><span class="cx"> insertNewText profiler-test-JS-resources.js (line 17:26)
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerstopprofilingaftersetTimeoutexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx">
</span><span class="cx"> Profile title: Stop profiling from a timeout
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>- onload stop-profiling-after-setTimeout.html (line 21:45)
</del><ins>+ onload stop-profiling-after-setTimeout.html (line 20:52)
</ins><span class="cx"> startTest stop-profiling-after-setTimeout.html (line 13:1)
</span><span class="cx"> setTimeout (no file) (line 0:0)
</span><span class="cx"> (program) stop-profiling-after-setTimeout.html (line 1:1)
</span></span></pre></div>
<a id="trunkLayoutTestsjsclasssyntaxdefaultconstructorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/class-syntax-default-constructor-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/class-syntax-default-constructor-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/class-syntax-default-constructor-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx"> PASS B() threw exception TypeError: Cannot call a class constructor.
</span><span class="cx"> PASS B.prototype.constructor.name is "B"
</span><span class="cx"> PASS A !== B is true
</span><del>-FAIL A.prototype.constructor should be function B() { super(...arguments); }. Was function A() { }.
</del><ins>+FAIL A.prototype.constructor should be function () { super(...arguments); }. Was function () { }.
</ins><span class="cx"> PASS new (class extends (class { constructor(a, b) { return [a, b]; } }) {})(1, 2) is [1, 2]
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsjsdestructuringassignmentexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/destructuring-assignment-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/destructuring-assignment-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/destructuring-assignment-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -6,75 +6,75 @@
</span><span class="cx"> PASS var [a,b]=['1','2']; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function([a,b]) { return a+b;})
</span><span class="cx"> PASS (function([a,b]) { return a+b;})(['1','2']) is '12'
</span><del>-PASS (function ([a,b]) { return a+b;})(['1','2']) is '12'
</del><ins>+PASS (function([a,b]) { return a+b;})(['1','2']) is '12'
</ins><span class="cx"> PASS ([a,b]=['1','2']); var r=a+b; r is '12'
</span><span class="cx"> PASS [a,b]=['1','2']; var r=a+b; r is '12'
</span><span class="cx"> PASS var {a,b}={a:'1',b:'2'}; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})({a:'1',b:'2'}) is '12'
</span><del>-PASS (function ({a:a,b:b}) { return a+b;})({a:'1',b:'2'}) is '12'
</del><ins>+PASS (function({a,b}) { return a+b;})({a:'1',b:'2'}) is '12'
</ins><span class="cx"> PASS ({a,b}={a:'1',b:'2'}); var r=a+b; r is '12'
</span><span class="cx"> PASS var {c:a,d:b}={c:'1',d:'2'}; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({c:a,d:b}) { return a+b;})
</span><span class="cx"> PASS (function({c:a,d:b}) { return a+b;})({c:'1',d:'2'}) is '12'
</span><del>-PASS (function ({c:a,d:b}) { return a+b;})({c:'1',d:'2'}) is '12'
</del><ins>+PASS (function({c:a,d:b}) { return a+b;})({c:'1',d:'2'}) is '12'
</ins><span class="cx"> PASS ({c:a,d:b}={c:'1',d:'2'}); var r=a+b; r is '12'
</span><span class="cx"> PASS var {c:b,d:a}={c:'1',d:'2'}; var r=a+b; r is '21'
</span><span class="cx"> Function as String: (function({c:b,d:a}) { return a+b;})
</span><span class="cx"> PASS (function({c:b,d:a}) { return a+b;})({c:'1',d:'2'}) is '21'
</span><del>-PASS (function ({c:b,d:a}) { return a+b;})({c:'1',d:'2'}) is '21'
</del><ins>+PASS (function({c:b,d:a}) { return a+b;})({c:'1',d:'2'}) is '21'
</ins><span class="cx"> PASS ({c:b,d:a}={c:'1',d:'2'}); var r=a+b; r is '21'
</span><span class="cx"> PASS var {true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}={true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}; var r=a+b+c+d+e+f+g+h; r is 'abcdefgh'
</span><span class="cx"> Function as String: (function({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})
</span><span class="cx"> PASS (function({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</span><del>-PASS (function ({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,"foo bar":h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</del><ins>+PASS (function({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</ins><span class="cx"> PASS ({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}={true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}); var r=a+b+c+d+e+f+g+h; r is 'abcdefgh'
</span><span class="cx"> PASS var [{c:a,d:b}]=[{c:'1',d:'2'}]; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function([{c:a,d:b}]) { return a+b;})
</span><span class="cx"> PASS (function([{c:a,d:b}]) { return a+b;})([{c:'1',d:'2'}]) is '12'
</span><del>-PASS (function ([{c:a,d:b}]) { return a+b;})([{c:'1',d:'2'}]) is '12'
</del><ins>+PASS (function([{c:a,d:b}]) { return a+b;})([{c:'1',d:'2'}]) is '12'
</ins><span class="cx"> PASS ([{c:a,d:b}]=[{c:'1',d:'2'}]); var r=a+b; r is '12'
</span><span class="cx"> PASS [{c:a,d:b}]=[{c:'1',d:'2'}]; var r=a+b; r is '12'
</span><span class="cx"> PASS var {x:[{c:a,d:b}]}={x:[{c:'1',d:'2'}]}; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({x:[{c:a,d:b}]}) { return a+b;})
</span><span class="cx"> PASS (function({x:[{c:a,d:b}]}) { return a+b;})({x:[{c:'1',d:'2'}]}) is '12'
</span><del>-PASS (function ({x:[{c:a,d:b}]}) { return a+b;})({x:[{c:'1',d:'2'}]}) is '12'
</del><ins>+PASS (function({x:[{c:a,d:b}]}) { return a+b;})({x:[{c:'1',d:'2'}]}) is '12'
</ins><span class="cx"> PASS ({x:[{c:a,d:b}]}={x:[{c:'1',d:'2'}]}); var r=a+b; r is '12'
</span><span class="cx"> PASS var [a,b]=anArray; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function([a,b]) { return a+b;})
</span><span class="cx"> PASS (function([a,b]) { return a+b;})(anArray) is '12'
</span><del>-PASS (function ([a,b]) { return a+b;})(anArray) is '12'
</del><ins>+PASS (function([a,b]) { return a+b;})(anArray) is '12'
</ins><span class="cx"> PASS ([a,b]=anArray); var r=a+b; r is '12'
</span><span class="cx"> PASS [a,b]=anArray; var r=a+b; r is '12'
</span><span class="cx"> PASS var {a,b}=anArray; var r=a+b; r is '34'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})(anArray) is '34'
</span><del>-PASS (function ({a:a,b:b}) { return a+b;})(anArray) is '34'
</del><ins>+PASS (function({a,b}) { return a+b;})(anArray) is '34'
</ins><span class="cx"> PASS ({a,b}=anArray); var r=a+b; r is '34'
</span><span class="cx"> PASS var {a:a,b:b}=anArray; var r=a+b; r is '34'
</span><span class="cx"> Function as String: (function({a:a,b:b}) { return a+b;})
</span><span class="cx"> PASS (function({a:a,b:b}) { return a+b;})(anArray) is '34'
</span><del>-PASS (function ({a:a,b:b}) { return a+b;})(anArray) is '34'
</del><ins>+PASS (function({a:a,b:b}) { return a+b;})(anArray) is '34'
</ins><span class="cx"> PASS ({a:a,b:b}=anArray); var r=a+b; r is '34'
</span><span class="cx"> PASS var {a,b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})(anObject) is '12'
</span><del>-PASS (function ({a:a,b:b}) { return a+b;})(anObject) is '12'
</del><ins>+PASS (function({a,b}) { return a+b;})(anObject) is '12'
</ins><span class="cx"> PASS ({a,b}=anObject); var r=a+b; r is '12'
</span><span class="cx"> PASS var {a:a,b:b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a:a,b:b}) { return a+b;})
</span><span class="cx"> PASS (function({a:a,b:b}) { return a+b;})(anObject) is '12'
</span><del>-PASS (function ({a:a,b:b}) { return a+b;})(anObject) is '12'
</del><ins>+PASS (function({a:a,b:b}) { return a+b;})(anObject) is '12'
</ins><span class="cx"> PASS ({a:a,b:b}=anObject); var r=a+b; r is '12'
</span><span class="cx"> PASS var {0:a,1:b}=anObject; var r=a+b; r is '34'
</span><span class="cx"> Function as String: (function({0:a,1:b}) { return a+b;})
</span><span class="cx"> PASS (function({0:a,1:b}) { return a+b;})(anObject) is '34'
</span><del>-PASS (function ({0:a,1:b}) { return a+b;})(anObject) is '34'
</del><ins>+PASS (function({0:a,1:b}) { return a+b;})(anObject) is '34'
</ins><span class="cx"> PASS ({0:a,1:b}=anObject); var r=a+b; r is '34'
</span><span class="cx"> PASS var {'a':a,'b':b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({'a':a,'b':b}) { return a+b;})
</span><span class="cx"> PASS (function({'a':a,'b':b}) { return a+b;})(anObject) is '12'
</span><del>-PASS (function ({"a":a,"b":b}) { return a+b;})(anObject) is '12'
</del><ins>+PASS (function({'a':a,'b':b}) { return a+b;})(anObject) is '12'
</ins><span class="cx"> PASS ({'a':a,'b':b}=anObject); var r=a+b; r is '12'
</span><span class="cx"> PASS a+b is '1122'
</span><span class="cx"> PASS a+b is '2211'
</span></span></pre></div>
<a id="trunkLayoutTestsjsdfgredundantloadofcapturedvariableprovenconstantexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,106 +3,106 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
-PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
-PASS "" + foo(o, i % 2) is "function () { return x; }"
</del><ins>+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
+PASS "" + foo(o, i % 2) is "function() { return 32; },function() { return 32; }"
+PASS "" + foo(o, i % 2) is "function() { return x; }"
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsdfgresolveglobalspecificdictionaryexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dfg-resolve-global-specific-dictionary-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dfg-resolve-global-specific-dictionary-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dfg-resolve-global-specific-dictionary-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,206 +3,206 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
-PASS "" + foo() is "function () { }"
</del><ins>+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
+PASS "" + foo() is "function() { }"
</ins><span class="cx"> PASS "" + foo() is "42"
</span><span class="cx"> PASS "" + foo() is "42"
</span><span class="cx"> PASS "" + foo() is "42"
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomJSONparseexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/JSON-parse-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/JSON-parse-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/JSON-parse-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,599 +1,599 @@
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse();
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception Error: JSON.parse requires at least one parameter.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected EOF.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('1');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('-1');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('Infinity');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected identifier "Infinity".
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('NaN');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected identifier "NaN".
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('null');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('undefined');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected identifier "undefined".
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{}');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('({})');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected token '('.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{a}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected '}'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{a:}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected '}'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{a:5}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected '}'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{a:5,}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected '}'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a"}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected ':' before value in object property definition.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected token '}'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":5}');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"__proto__":5}');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":5,}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Property name must be a string literal.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":5,,}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Property name must be a string literal.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":5,"a",}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Expected ':'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"a":(5,"a"),}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected token '('.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[]');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[1]');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[1,]');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected comma at the end of array expression.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[1,2]');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[1,2,,]');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected token ','.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('[1,2,,4]');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unexpected token ','.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('""');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"\'"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\z"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Invalid escape character z.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\\z"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Invalid escape character z.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\\\z"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\tz"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\tz"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\nz"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\nz"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\rz"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\rz"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\/z"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\/z"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\bz"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\bz"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\rz"');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unterminated string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\rz"');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\uz" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\uz" " is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u0z" " is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u00z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u00z"" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u000z" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u000Az" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u000az" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u000Gz" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u000G" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u000gz" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u000g" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u00A0z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u00a0z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u00G0z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u00G0" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u00g0z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u00g0" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0A00z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0a00z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0G00z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u0G00" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\u0g00z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\u0g00" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\uA000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\ua000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\uG000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\uG000" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a\\ug000z" ');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: "\ug000" is not a valid unicode escape.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('00');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('01');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('0.a');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Invalid digits after decimal point.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('0x0');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('2e1.3');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('2e-+10');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Exponent symbols should be followed by an optional '+' or '-' and then by at least one number.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('2e+-10');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Exponent symbols should be followed by an optional '+' or '-' and then by at least one number.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('2e3e4');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('-01.0');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('-01');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unable to parse JSON string.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('-01.a');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Invalid digits after decimal point.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('1.e1');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Invalid digits after decimal point.
</span><span class="cx"> json2.js did not throw for a test we expect to throw.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{/* block comments are not allowed */}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unrecognized token '/'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{// line comments are not allowed \n}');
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception SyntaxError: JSON Parse error: Unrecognized token '/'.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('true');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('false');
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject,null,100));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null,100));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null,100));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject,null," "));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null," "));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null," "));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject,null,"\t"));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null,"\t"));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null,"\t"));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject,null,"\n"));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject,null,"\n"));
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse("true", log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse("false", log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse("null", log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse("1", log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse("1.5", log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('"a string"', log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleArray), log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexArray), log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject), log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject), log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse('{"__proto__":{"a":5}}', log);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse("true", logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse("false", logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse("null", logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse("1", logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse("1.5", logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse('"a string"', logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(simpleArray), logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(complexArray), logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject), logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject), logOrder);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse("true", logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse("false", logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse("null", logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse("1", logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse("1.5", logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse('"a string"', logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse(JSON.stringify(simpleArray), logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse(JSON.stringify(complexArray), logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse(JSON.stringify(simpleObject), logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> logOrderString = "";
</span><span class="cx"> jsonObject.parse(JSON.stringify(complexObject), logOrder);
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(complexArray), throwAfterFifthCall);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception from reviver.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(simpleObject), throwAfterFifthCall);
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> return jsonObject.parse(JSON.stringify(complexObject), throwAfterFifthCall);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception from reviver.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> try { jsonObject.parse(JSON.stringify(complexArray), throwAfterFifthCall); } catch (e) {}
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> try { jsonObject.parse(JSON.stringify(simpleObject), throwAfterFifthCall); } catch (e) {}
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> callCount = 0;
</span><span class="cx"> logOrderString = "";
</span><span class="cx"> try { jsonObject.parse(JSON.stringify(complexObject), throwAfterFifthCall); } catch (e) {}
</span><span class="cx"> return logOrderString;
</span><span class="cx"> }
</span><span class="cx"> PASS JSON.stringify(tests[i](nativeJSON)) is JSON.stringify(tests[i](JSON))
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.parse(JSON.stringify(unicode));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].unstringifiedExpected
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomJSONstringifyexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/JSON-stringify-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/JSON-stringify-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/JSON-stringify-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,529 +1,529 @@
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(1);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(1.5);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(-1);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(-1.5);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(null);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify("string");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Number(0));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Number(1));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Number(1.5));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Number(-1));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Number(-1.5));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new String("a string object"));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Boolean(true));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var value = new Number(1);
</span><span class="cx"> value.valueOf = function() { return 2; }
</span><span class="cx"> return jsonObject.stringify(value);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var value = new Boolean(true);
</span><span class="cx"> value.valueOf = function() { return 2; }
</span><span class="cx"> return jsonObject.stringify(value);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var value = new String("fail");
</span><span class="cx"> value.toString = function() { return "converted string"; }
</span><span class="cx"> return jsonObject.stringify(value);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(true);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(false);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Date(0));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON: Date.prototype.toJSON});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception TypeError: toISOString is not a function.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ return "custom toISOString"; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ return {}; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception TypeError: toISOString did not return a primitive value.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON: Date.prototype.toJSON, toISOString: function(){ throw "An exception"; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception An exception.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var d = new Date(0);
</span><span class="cx"> d.toISOString = null;
</span><span class="cx"> return jsonObject.stringify(d);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception TypeError: toISOString is not a function.
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var d = new Date(0);
</span><span class="cx"> d.toJSON = undefined;
</span><span class="cx"> return jsonObject.stringify(d);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({get Foo() { return "bar"; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({get Foo() { this.foo="wibble"; return "bar"; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var count = 0;
</span><span class="cx"> jsonObject.stringify({get Foo() { count++; return "bar"; }});
</span><span class="cx"> return count;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var count = 0;
</span><span class="cx"> return jsonObject.stringify({get Foo() { count++; delete this.bar; return "bar"; }, bar: "wibble"});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var count = 0;
</span><span class="cx"> return jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7}, function(k,v){allString = allString && (typeof k == "string"); return v});
</span><span class="cx"> return allString;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> jsonObject.stringify([1,2,3,4,5], function(k,v){allString = allString && (typeof k == "string"); return v});
</span><span class="cx"> return allString;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = [];
</span><span class="cx"> return jsonObject.stringify({a:"1", b:"2", c:"3", 5:4, 4:5, 2:6, 1:7}, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = ["a"];
</span><span class="cx"> return jsonObject.stringify({get a(){return 1;array[1]="b";array[2]="c"}, b:"2", c:"3"}, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
</span><span class="cx"> return jsonObject.stringify(simpleObject, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
</span><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = [1, new Number(2), NaN, Infinity, -Infinity, new String("str")];
</span><span class="cx"> return jsonObject.stringify({"1":"1","2":"2","NaN":"NaN","Infinity":"Infinity","-Infinity":"-Infinity","str":"str"}, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = ["1","2","3"];
</span><span class="cx"> return jsonObject.stringify({1:'a', 2:'b', 3:'c'}, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = ["1","2","3"];
</span><span class="cx"> return jsonObject.stringify(simpleArray, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArray, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArray, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArray, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArray, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, 10);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, 11);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObject, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArray, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArray, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArray, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArray, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObject, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObject, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObject, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObject, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = ["1","2","3"];
</span><span class="cx"> return jsonObject.stringify(simpleArrayWithProto, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArrayWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArrayWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArrayWithProto, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleArrayWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, 10);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, 11);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(simpleObjectWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArrayWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArrayWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArrayWithProto, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexArrayWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObjectWithProto, null, " ");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObjectWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObjectWithProto, null, "ab");
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(complexObjectWithProto, null, 4);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(clientRect);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(objectWithSideEffectGetter);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(objectWithSideEffectGetter);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(objectWithSideEffectGetterAndProto);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(objectWithSideEffectGetterAndProto);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(arrayWithSideEffectGetter);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(arrayWithSideEffectGetterAndProto);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> replaceTracker = "";
</span><span class="cx"> jsonObject.stringify([1,2,3,,,,4,5,6], replaceFunc);
</span><span class="cx"> return replaceTracker;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> replaceTracker = "";
</span><span class="cx"> jsonObject.stringify({a:"a", b:"b", c:"c", 3: "d", 2: "e", 1: "f"}, replaceFunc);
</span><span class="cx"> return replaceTracker;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var count = 0;
</span><span class="cx"> var array = [{toString:function(){count++; array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}];
</span><span class="cx"> jsonObject.stringify(simpleObject, array);
</span><span class="cx"> return count;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var allString = true;
</span><span class="cx"> var array = [{toString:function(){array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}, 'b', 'c'];
</span><span class="cx"> return jsonObject.stringify(simpleObject, array);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var count = 0;
</span><span class="cx"> var array = [{toString:function(){count++; array[0]='a'; array[1]='c'; array[2]='b'; return 'a'}}, 'b', 'c'];
</span><span class="cx"> jsonObject.stringify(simpleObject, array);
</span><span class="cx"> return count;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:"1", get b() { this.a="foo"; return "getter"; }, c:"3"});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:"1", get b() { this.c="foo"; return "getter"; }, c:"3"});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var setterCalled = false;
</span><span class="cx"> jsonObject.stringify({a:"1", set b(s) { setterCalled = true; return "setter"; }, c:"3"});
</span><span class="cx"> return setterCalled;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:"1", get b(){ return "getter"; }, set b(s) { return "setter"; }, c:"3"});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(new Array(10));
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify([undefined,,null,0,false]);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({p1:undefined,p2:null,p3:0,p4:false});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> cycleTracker = "";
</span><span class="cx"> return jsonObject.stringify(cyclicObject);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception TypeError: JSON.stringify cannot serialize cyclic structures..
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> cycleTracker = "";
</span><span class="cx"> try { jsonObject.stringify(cyclicObject); } catch(e) { cycleTracker += " -> exception" }
</span><span class="cx"> return cycleTracker;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> cycleTracker = "";
</span><span class="cx"> return jsonObject.stringify(cyclicArray);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) threw exception TypeError: JSON.stringify cannot serialize cyclic structures..
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> cycleTracker = "";
</span><span class="cx"> try { jsonObject.stringify(cyclicArray); } catch(e) { cycleTracker += " -> exception" }
</span><span class="cx"> return cycleTracker;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i].expected
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> getterCalls = 0;
</span><span class="cx"> return jsonObject.stringify(magicObject) + " :: getter calls = " + getterCalls;
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(undefined);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(null);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON:function(){ return undefined; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({toJSON:function(){ return null; }});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify([{toJSON:function(){ return undefined; }}]);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify([{toJSON:function(){ return null; }}]);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:{toJSON:function(){ return undefined; }}});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:{toJSON:function(){ return null; }}});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:{toJSON:function(){ return function(){}; }}});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify({a:function(){}});
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var deepObject = {};
</span><span class="cx"> for (var i = 0; i < 2048; i++)
</span><span class="cx"> deepObject = {next:deepObject};
</span><span class="cx"> return jsonObject.stringify(deepObject);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var deepArray = [];
</span><span class="cx"> for (var i = 0; i < 2048; i++)
</span><span class="cx"> deepArray = [deepArray];
</span><span class="cx"> return jsonObject.stringify(deepArray);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var depth = 0;
</span><span class="cx"> function toDeepVirtualJSONObject() {
</span><span class="cx"> if (++depth >= 2048)
</span><span class="lines">@@ -535,7 +535,7 @@
</span><span class="cx"> return jsonObject.stringify(toDeepVirtualJSONObject());
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> var depth = 0;
</span><span class="cx"> function toDeepVirtualJSONArray() {
</span><span class="cx"> if (++depth >= 2048)
</span><span class="lines">@@ -546,7 +546,7 @@
</span><span class="cx"> }
</span><span class="cx"> return jsonObject.stringify(toDeepVirtualJSONArray());
</span><span class="cx"> }
</span><del>-function (jsonObject) {
</del><ins>+function(jsonObject){
</ins><span class="cx"> return jsonObject.stringify(fullCharsetString);
</span><span class="cx"> }
</span><span class="cx"> PASS tests[i](nativeJSON) is tests[i](JSON)
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdfgstrcatoverobjectsthenexitonitexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,706 +3,706 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
-PASS bar() is "function () { }"
</del><ins>+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
+PASS bar() is "function() { }"
</ins><span class="cx"> PASS bar() is "42"
</span><span class="cx"> PASS bar() is "42"
</span><span class="cx"> PASS bar() is "42"
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomfunctionprototypeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/function-prototype-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/function-prototype-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/function-prototype-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,7 +3,7 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS actual is 'function () { }'
</del><ins>+PASS actual is 'function() { }'
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomfunctionprototypehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/function-prototype.html (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/function-prototype.html        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/function-prototype.html        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> var actual = "" + MyClass.runTest();
</span><del>-shouldBe("actual", "'function () { }'");
</del><ins>+shouldBe("actual", "'function() { }'");
</ins><span class="cx"> </script>
</span><span class="cx"> <script src="../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomparseerrorexternalscriptinnewFunctionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/parse-error-external-script-in-new-Function-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/parse-error-external-script-in-new-Function-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/parse-error-external-script-in-new-Function-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,2 +1,2 @@
</span><del>-CONSOLE MESSAGE: line 3: SyntaxError: Unexpected identifier 'error'
</del><ins>+CONSOLE MESSAGE: line 4: SyntaxError: Unexpected identifier 'error'
</ins><span class="cx"> This tests that a line number and error message is printed for a parse error in a separate source file using new Function().
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomscriptstartendlocationsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -243,35 +243,35 @@
</span><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx">
</span><span class="cx"> new Function Object:
</span><del>-function "" { 1:16 - 1:245 }
-function "nf1a" { 1:77 - 1:236 }
-function "nf1b" { 1:107 - 1:226 }
-function "nf1c" { 1:137 - 1:216 }
</del><ins>+function "anonymous" { 1:27 - 2:228 }
+function "nf1a" { 2:60 - 2:219 }
+function "nf1b" { 2:90 - 2:209 }
+function "nf1c" { 2:120 - 2:199 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function "" { 1:16 - 17:8 }
-function "nf2a" { 4:21 - 15:5 }
-function "nf2b" { 6:25 - 13:9 }
-function "nf2c" { 8:29 - 11:13 }
</del><ins>+function "anonymous" { 1:27 - 18:8 }
+function "nf2a" { 5:21 - 16:5 }
+function "nf2b" { 7:25 - 14:9 }
+function "nf2c" { 9:29 - 12:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function "" { 1:16 - 1:245 }
-function "nf1a" { 1:77 - 1:236 }
-function "nf1b" { 1:107 - 1:226 }
-function "nf1c" { 1:137 - 1:216 }
</del><ins>+function "anonymous" { 1:27 - 2:228 }
+function "nf1a" { 2:60 - 2:219 }
+function "nf1b" { 2:90 - 2:209 }
+function "nf1c" { 2:120 - 2:199 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function "" { 1:16 - 1:254 }
-function "nfi1a" { 1:78 - 1:244 }
-function "nfi1b" { 1:110 - 1:233 }
-function "nfi1c" { 1:142 - 1:222 }
</del><ins>+function "anonymous" { 1:27 - 2:237 }
+function "nfi1a" { 2:61 - 2:227 }
+function "nfi1b" { 2:93 - 2:216 }
+function "nfi1c" { 2:125 - 2:205 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function "" { 1:16 - 17:8 }
-function "nf2a" { 4:21 - 15:5 }
-function "nf2b" { 6:25 - 13:9 }
-function "nf2c" { 8:29 - 11:13 }
</del><ins>+function "anonymous" { 1:27 - 18:8 }
+function "nf2a" { 5:21 - 16:5 }
+function "nf2b" { 7:25 - 14:9 }
+function "nf2c" { 9:29 - 12:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function "" { 1:16 - 17:9 }
-function "nfi2a" { 4:22 - 15:5 }
-function "nfi2b" { 6:26 - 13:9 }
-function "nfi2c" { 8:30 - 11:13 }
</del><ins>+function "anonymous" { 1:27 - 18:9 }
+function "nfi2a" { 5:22 - 16:5 }
+function "nfi2b" { 7:26 - 14:9 }
+function "nfi2c" { 9:30 - 12:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx">
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomscripttestsdfgstrcatoverobjectsthenexitonitjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">
</span><span class="cx"> var x = function() { };
</span><span class="cx">
</span><del>-var expected = "\"function () { }\"";
</del><ins>+var expected = "\"function() { }\"";
</ins><span class="cx"> var blah = this;
</span><span class="cx"> for (var i = 0; i < 1000; ++i) {
</span><span class="cx"> blah["i" + i] = i;
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomtoStringandvalueOfoverrideexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/toString-and-valueOf-override-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/toString-and-valueOf-override-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/dom/toString-and-valueOf-override-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx"> [span] : toString
</span><span class="cx"> String(span) : toString
</span><span class="cx"> String([span]) : toString
</span><del>-span.toString : function () { return "toString"; }
</del><ins>+span.toString : function() { return "toString" }
</ins><span class="cx"> span.toString() (cached in variable) : toString
</span><span class="cx"> span.toString() : toString
</span><span class="cx"> [span].toString() : toString
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> [span] : valueOf
</span><span class="cx"> String(span) : valueOf
</span><span class="cx"> String([span]) : valueOf
</span><del>-span.toString : function () { return new Object(); }
</del><ins>+span.toString : function() { return new Object(); }
</ins><span class="cx"> span.toString() (cached in variable) : [object Object]
</span><span class="cx"> span.toString() : [object Object]
</span><span class="cx"> [span].toString() : valueOf
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> [span] : toString
</span><span class="cx"> String(span) : toString
</span><span class="cx"> String([span]) : toString
</span><del>-span.toString : function () { return 'toString'; }
</del><ins>+span.toString : function() { return 'toString'; }
</ins><span class="cx"> span.toString() (cached in variable) : toString
</span><span class="cx"> span.toString() : toString
</span><span class="cx"> [span].toString() : toString
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><del>-span.toString : function () { return new Object(); }
</del><ins>+span.toString : function() { return new Object(); }
</ins><span class="cx"> span.toString() (cached in variable) : [object Object]
</span><span class="cx"> span.toString() : [object Object]
</span><span class="cx"> TypeError: No default value
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-span.toString : function () { throw "Exception"; }
</del><ins>+span.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx"> [span] : toString
</span><span class="cx"> String(span) : toString
</span><span class="cx"> String([span]) : toString
</span><del>-span.toString : function () { return 'toString'; }
</del><ins>+span.toString : function() { return 'toString'; }
</ins><span class="cx"> span.toString() (cached in variable) : toString
</span><span class="cx"> span.toString() : toString
</span><span class="cx"> [span].toString() : toString
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-span.toString : function () { throw "Exception"; }
</del><ins>+span.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> [window] : toString
</span><span class="cx"> String(window) : toString
</span><span class="cx"> String([window]) : toString
</span><del>-window.toString : function () { return "toString"; }
</del><ins>+window.toString : function() { return "toString" }
</ins><span class="cx"> window.toString() (cached in variable) : toString
</span><span class="cx"> window.toString() : toString
</span><span class="cx"> [window].toString() : toString
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> [window] : valueOf
</span><span class="cx"> String(window) : valueOf
</span><span class="cx"> String([window]) : valueOf
</span><del>-window.toString : function () { return new Object(); }
</del><ins>+window.toString : function() { return new Object(); }
</ins><span class="cx"> window.toString() (cached in variable) : [object Object]
</span><span class="cx"> window.toString() : [object Object]
</span><span class="cx"> [window].toString() : valueOf
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx"> [window] : toString
</span><span class="cx"> String(window) : toString
</span><span class="cx"> String([window]) : toString
</span><del>-window.toString : function () { return 'toString'; }
</del><ins>+window.toString : function() { return 'toString'; }
</ins><span class="cx"> window.toString() (cached in variable) : toString
</span><span class="cx"> window.toString() : toString
</span><span class="cx"> [window].toString() : toString
</span><span class="lines">@@ -148,7 +148,7 @@
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><del>-window.toString : function () { return new Object(); }
</del><ins>+window.toString : function() { return new Object(); }
</ins><span class="cx"> window.toString() (cached in variable) : [object Object]
</span><span class="cx"> window.toString() : [object Object]
</span><span class="cx"> TypeError: No default value
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-window.toString : function () { throw "Exception"; }
</del><ins>+window.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -172,7 +172,7 @@
</span><span class="cx"> [window] : toString
</span><span class="cx"> String(window) : toString
</span><span class="cx"> String([window]) : toString
</span><del>-window.toString : function () { return 'toString'; }
</del><ins>+window.toString : function() { return 'toString'; }
</ins><span class="cx"> window.toString() (cached in variable) : toString
</span><span class="cx"> window.toString() : toString
</span><span class="cx"> [window].toString() : toString
</span><span class="lines">@@ -184,7 +184,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-window.toString : function () { throw "Exception"; }
</del><ins>+window.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -209,7 +209,7 @@
</span><span class="cx"> [Navigator] : toString
</span><span class="cx"> String(Navigator) : toString
</span><span class="cx"> String([Navigator]) : toString
</span><del>-Navigator.toString : function () { return "toString"; }
</del><ins>+Navigator.toString : function() { return "toString" }
</ins><span class="cx"> Navigator.toString() (cached in variable) : toString
</span><span class="cx"> Navigator.toString() : toString
</span><span class="cx"> [Navigator].toString() : toString
</span><span class="lines">@@ -221,7 +221,7 @@
</span><span class="cx"> [Navigator] : valueOf
</span><span class="cx"> String(Navigator) : valueOf
</span><span class="cx"> String([Navigator]) : valueOf
</span><del>-Navigator.toString : function () { return new Object(); }
</del><ins>+Navigator.toString : function() { return new Object(); }
</ins><span class="cx"> Navigator.toString() (cached in variable) : [object Object]
</span><span class="cx"> Navigator.toString() : [object Object]
</span><span class="cx"> [Navigator].toString() : valueOf
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx"> [Navigator] : toString
</span><span class="cx"> String(Navigator) : toString
</span><span class="cx"> String([Navigator]) : toString
</span><del>-Navigator.toString : function () { return 'toString'; }
</del><ins>+Navigator.toString : function() { return 'toString'; }
</ins><span class="cx"> Navigator.toString() (cached in variable) : toString
</span><span class="cx"> Navigator.toString() : toString
</span><span class="cx"> [Navigator].toString() : toString
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><del>-Navigator.toString : function () { return new Object(); }
</del><ins>+Navigator.toString : function() { return new Object(); }
</ins><span class="cx"> Navigator.toString() (cached in variable) : [object Object]
</span><span class="cx"> Navigator.toString() : [object Object]
</span><span class="cx"> TypeError: No default value
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-Navigator.toString : function () { throw "Exception"; }
</del><ins>+Navigator.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -269,7 +269,7 @@
</span><span class="cx"> [Navigator] : toString
</span><span class="cx"> String(Navigator) : toString
</span><span class="cx"> String([Navigator]) : toString
</span><del>-Navigator.toString : function () { return 'toString'; }
</del><ins>+Navigator.toString : function() { return 'toString'; }
</ins><span class="cx"> Navigator.toString() (cached in variable) : toString
</span><span class="cx"> Navigator.toString() : toString
</span><span class="cx"> [Navigator].toString() : toString
</span><span class="lines">@@ -281,7 +281,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-Navigator.toString : function () { throw "Exception"; }
</del><ins>+Navigator.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx"> [History] : toString
</span><span class="cx"> String(History) : toString
</span><span class="cx"> String([History]) : toString
</span><del>-History.toString : function () { return "toString"; }
</del><ins>+History.toString : function() { return "toString" }
</ins><span class="cx"> History.toString() (cached in variable) : toString
</span><span class="cx"> History.toString() : toString
</span><span class="cx"> [History].toString() : toString
</span><span class="lines">@@ -318,7 +318,7 @@
</span><span class="cx"> [History] : valueOf
</span><span class="cx"> String(History) : valueOf
</span><span class="cx"> String([History]) : valueOf
</span><del>-History.toString : function () { return new Object(); }
</del><ins>+History.toString : function() { return new Object(); }
</ins><span class="cx"> History.toString() (cached in variable) : [object Object]
</span><span class="cx"> History.toString() : [object Object]
</span><span class="cx"> [History].toString() : valueOf
</span><span class="lines">@@ -330,7 +330,7 @@
</span><span class="cx"> [History] : toString
</span><span class="cx"> String(History) : toString
</span><span class="cx"> String([History]) : toString
</span><del>-History.toString : function () { return 'toString'; }
</del><ins>+History.toString : function() { return 'toString'; }
</ins><span class="cx"> History.toString() (cached in variable) : toString
</span><span class="cx"> History.toString() : toString
</span><span class="cx"> [History].toString() : toString
</span><span class="lines">@@ -342,7 +342,7 @@
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><del>-History.toString : function () { return new Object(); }
</del><ins>+History.toString : function() { return new Object(); }
</ins><span class="cx"> History.toString() (cached in variable) : [object Object]
</span><span class="cx"> History.toString() : [object Object]
</span><span class="cx"> TypeError: No default value
</span><span class="lines">@@ -354,7 +354,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-History.toString : function () { throw "Exception"; }
</del><ins>+History.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -366,7 +366,7 @@
</span><span class="cx"> [History] : toString
</span><span class="cx"> String(History) : toString
</span><span class="cx"> String([History]) : toString
</span><del>-History.toString : function () { return 'toString'; }
</del><ins>+History.toString : function() { return 'toString'; }
</ins><span class="cx"> History.toString() (cached in variable) : toString
</span><span class="cx"> History.toString() : toString
</span><span class="cx"> [History].toString() : toString
</span><span class="lines">@@ -378,7 +378,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-History.toString : function () { throw "Exception"; }
</del><ins>+History.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -403,7 +403,7 @@
</span><span class="cx"> [Selection] : toString
</span><span class="cx"> String(Selection) : toString
</span><span class="cx"> String([Selection]) : toString
</span><del>-Selection.toString : function () { return "toString"; }
</del><ins>+Selection.toString : function() { return "toString" }
</ins><span class="cx"> Selection.toString() (cached in variable) : toString
</span><span class="cx"> Selection.toString() : toString
</span><span class="cx"> [Selection].toString() : toString
</span><span class="lines">@@ -415,7 +415,7 @@
</span><span class="cx"> [Selection] : valueOf
</span><span class="cx"> String(Selection) : valueOf
</span><span class="cx"> String([Selection]) : valueOf
</span><del>-Selection.toString : function () { return new Object(); }
</del><ins>+Selection.toString : function() { return new Object(); }
</ins><span class="cx"> Selection.toString() (cached in variable) : [object Object]
</span><span class="cx"> Selection.toString() : [object Object]
</span><span class="cx"> [Selection].toString() : valueOf
</span><span class="lines">@@ -427,7 +427,7 @@
</span><span class="cx"> [Selection] : toString
</span><span class="cx"> String(Selection) : toString
</span><span class="cx"> String([Selection]) : toString
</span><del>-Selection.toString : function () { return 'toString'; }
</del><ins>+Selection.toString : function() { return 'toString'; }
</ins><span class="cx"> Selection.toString() (cached in variable) : toString
</span><span class="cx"> Selection.toString() : toString
</span><span class="cx"> [Selection].toString() : toString
</span><span class="lines">@@ -439,7 +439,7 @@
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><span class="cx"> TypeError: No default value
</span><del>-Selection.toString : function () { return new Object(); }
</del><ins>+Selection.toString : function() { return new Object(); }
</ins><span class="cx"> Selection.toString() (cached in variable) : [object Object]
</span><span class="cx"> Selection.toString() : [object Object]
</span><span class="cx"> TypeError: No default value
</span><span class="lines">@@ -451,7 +451,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-Selection.toString : function () { throw "Exception"; }
</del><ins>+Selection.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="lines">@@ -463,7 +463,7 @@
</span><span class="cx"> [Selection] : toString
</span><span class="cx"> String(Selection) : toString
</span><span class="cx"> String([Selection]) : toString
</span><del>-Selection.toString : function () { return 'toString'; }
</del><ins>+Selection.toString : function() { return 'toString'; }
</ins><span class="cx"> Selection.toString() (cached in variable) : toString
</span><span class="cx"> Selection.toString() : toString
</span><span class="cx"> [Selection].toString() : toString
</span><span class="lines">@@ -475,7 +475,7 @@
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span><del>-Selection.toString : function () { throw "Exception"; }
</del><ins>+Selection.toString : function() { throw "Exception"; }
</ins><span class="cx"> Exception
</span><span class="cx"> Exception
</span><span class="cx"> Exception
</span></span></pre></div>
<a id="trunkLayoutTestsjsfunctiontoStringsemicoloninsertionexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/function-toString-semicolon-insertion-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/function-toString-semicolon-insertion-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/function-toString-semicolon-insertion-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,15 +0,0 @@
</span><del>-This test checks that functions re-string-ify in a way that is syntactically compatible with concatenation.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS (function(){return}).toString() is 'function () {return;}'
-PASS (function(){return }).toString() is 'function () {return; }'
-PASS (function(){return
-}).toString() is 'function () {return;\n}'
-PASS (function(){}).toString() is 'function () {}'
-PASS (function(){ }).toString() is 'function () { }'
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsjsfunctiontoStringsemicoloninsertionhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/function-toString-semicolon-insertion.html (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/function-toString-semicolon-insertion.html        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/function-toString-semicolon-insertion.html        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../resources/js-test-pre.js"></script>
-</head>
-<body>
-<script src="script-tests/function-toString-semicolon-insertion.js"></script>
-<script src="../resources/js-test-post.js"></script>
-</body>
-</html>
</del></span></pre></div>
<a id="trunkLayoutTestsjskdelvalexceptionsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/kde/lval-exceptions-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/kde/lval-exceptions-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/kde/lval-exceptions-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,14 +3,14 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><del>-PASS function () { a = x; } threw exception ReferenceError: Can't find variable: x.
-PASS function () { x += "foo"; } threw exception ReferenceError: Can't find variable: x.
-PASS function () { b = a.x; } did not throw an exception
-PASS function () { b = a['x']; } did not throw an exception
-PASS function () { a['x'] += 'baz'; } did not throw an exception
</del><ins>+PASS function() { a = x; } threw exception ReferenceError: Can't find variable: x.
+PASS function() { x += "foo"; } threw exception ReferenceError: Can't find variable: x.
+PASS function() { b = a.x; } did not throw an exception
+PASS function() { b = a['x']; } did not throw an exception
+PASS function() { a['x'] += 'baz'; } did not throw an exception
</ins><span class="cx"> PASS a['x'] is "undefinedbaz"
</span><del>-PASS function () { b = a.y; } did not throw an exception
-PASS function () { a.y += 'glarch'; } did not throw an exception
</del><ins>+PASS function() { b = a.y; } did not throw an exception
+PASS function() { a.y += 'glarch'; } did not throw an exception
</ins><span class="cx"> PASS a['y'] is "undefinedglarch"
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsjsobjectliteralcomputedmethodsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/object-literal-computed-methods-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/object-literal-computed-methods-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/object-literal-computed-methods-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx"> PASS typeof o.foo is 'function'
</span><span class="cx"> PASS o.foo.length is 0
</span><span class="cx"> PASS o.foo.name is ''
</span><del>-PASS o.foo.toString() is 'function () { return 10; }'
</del><ins>+FAIL o.foo.toString() should be function () { return 10; }. Was () { return 10; }.
</ins><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').value is o.foo
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').enumerable is true
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').configurable is true
</span><span class="lines">@@ -18,7 +18,7 @@
</span><span class="cx"> PASS typeof o.add is 'function'
</span><span class="cx"> PASS o.add.length is 2
</span><span class="cx"> PASS o.add.name is ''
</span><del>-PASS o.add.toString() is 'function (x, y) { return x + y; }'
</del><ins>+FAIL o.add.toString() should be function (x, y) { return x + y; }. Was (x, y) { return x + y; }.
</ins><span class="cx"> PASS o = { [ (function() { return 'method'; })() ](x, y) { return x + y; } }; did not throw exception.
</span><span class="cx"> PASS o.method(142, -10) is 132
</span><span class="cx"> PASS o = { [10*10]() { return 100; } }; did not throw exception.
</span></span></pre></div>
<a id="trunkLayoutTestsjsobjectliteralmethodsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/object-literal-methods-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/object-literal-methods-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/object-literal-methods-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx"> PASS typeof o.foo is 'function'
</span><span class="cx"> PASS o.foo.length is 0
</span><span class="cx"> PASS o.foo.name is 'foo'
</span><del>-PASS o.foo.toString() is 'function foo() { return 10; }'
</del><ins>+FAIL o.foo.toString() should be function foo() { return 10; }. Was () { return 10; }.
</ins><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').value is o.foo
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').enumerable is true
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(o, 'foo').configurable is true
</span><span class="lines">@@ -18,7 +18,7 @@
</span><span class="cx"> PASS typeof o.add is 'function'
</span><span class="cx"> PASS o.add.length is 2
</span><span class="cx"> PASS o.add.name is 'add'
</span><del>-PASS o.add.toString() is 'function add(x, y) { return x + y; }'
</del><ins>+FAIL o.add.toString() should be function add(x, y) { return x + y; }. Was (x, y) { return x + y; }.
</ins><span class="cx"> PASS o = { 'add'(a, b, c) { return a + b + c; } }; did not throw exception.
</span><span class="cx"> PASS o.add(1, 2, 3) is 6
</span><span class="cx"> PASS o = { 'a(d)d'(a, b, c) { return a + b + c; } }; did not throw exception.
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsdfgredundantloadofcapturedvariableprovenconstantjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -18,8 +18,8 @@
</span><span class="cx"> for (var i = 0; i < 100; ++i) {
</span><span class="cx"> var expected;
</span><span class="cx"> if (i % 2)
</span><del>- expected = "\"function () { return x; }\"";
</del><ins>+ expected = "\"function() { return x; }\"";
</ins><span class="cx"> else
</span><del>- expected = "\"function () { return 32; },function () { return 32; }\"";
</del><ins>+ expected = "\"function() { return 32; },function() { return 32; }\"";
</ins><span class="cx"> shouldBe("\"\" + foo(o, i % 2)", expected);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsdfgresolveglobalspecificdictionaryjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/script-tests/dfg-resolve-global-specific-dictionary.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/dfg-resolve-global-specific-dictionary.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/script-tests/dfg-resolve-global-specific-dictionary.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx">
</span><span class="cx"> x = function() { };
</span><span class="cx">
</span><del>-var expected = "\"function () { }\"";
</del><ins>+var expected = "\"function() { }\"";
</ins><span class="cx">
</span><span class="cx"> for (var i = 0; i < 1000; ++i) {
</span><span class="cx"> eval("i" + i + " = " + i);
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsfunctiontoStringsemicoloninsertionjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/script-tests/function-toString-semicolon-insertion.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/function-toString-semicolon-insertion.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/js/script-tests/function-toString-semicolon-insertion.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-description(
-"This test checks that functions re-string-ify in a way that is syntactically " +
-"compatible with concatenation."
-);
-
-shouldBe("(function(){return}).toString()", "'function () {return;}'");
-shouldBe("(function(){return }).toString()", "'function () {return; }'");
-shouldBe("(function(){return" + "\n" + "}).toString()", "'function () {return;" + "\\n" + "}'");
-shouldBe("(function(){}).toString()", "'function () {}'");
-shouldBe("(function(){ }).toString()", "'function () { }'");
</del></span></pre></div>
<a id="trunkLayoutTestsplatformmachttptestsmediamediasourcemediasourcesourcebuffermodeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/platform/mac/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> PASS Test setting a removed SourceBuffer's mode
</span><span class="cx"> PASS Test setting SourceBuffer.mode while still updating
</span><span class="cx"> PASS Test setting SourceBuffer.mode triggers parent MediaSource 'ended' to 'open' transition.
</span><del>-FAIL Test setting SourceBuffer.mode and SourceBuffer.timestampOffset while parsing media segment. assert_throws: Setting valid sourceBuffer.mode while still parsing media segment threw InvalidStateError. function "function () { sourceBuffer.mode = 'segments'; }" did not throw(stack: assert@http://127.0.0.1:8000/w3c/resources/testharness.js:2061:73
</del><ins>+FAIL Test setting SourceBuffer.mode and SourceBuffer.timestampOffset while parsing media segment. assert_throws: Setting valid sourceBuffer.mode while still parsing media segment threw InvalidStateError. function "function() { sourceBuffer.mode = 'segments'; }" did not throw(stack: assert@http://127.0.0.1:8000/w3c/resources/testharness.js:2061:73
</ins><span class="cx"> assert_throws@http://127.0.0.1:8000/w3c/resources/testharness.js:947:19
</span><span class="cx"> http://127.0.0.1:8000/media/media-source/mediasource-sourcebuffer-mode.html:114:32
</span><span class="cx"> handleWaitCallback_@http://127.0.0.1:8000/media/media-source/mediasource-util.js:97:17
</span></span></pre></div>
<a id="trunkLayoutTestsstoragedomstoragelocalstoragestringconversionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/domstorage/localstorage/string-conversion-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/domstorage/localstorage/string-conversion-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/storage/domstorage/localstorage/string-conversion-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,13 +3,13 @@
</span><span class="cx"> Testing implicit setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx"> Testing explicit setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx"> Testing index setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsstoragedomstoragesessionstoragestringconversionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/storage/domstorage/sessionstorage/string-conversion-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -3,13 +3,13 @@
</span><span class="cx"> Testing implicit setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx"> Testing explicit setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx"> Testing index setters
</span><span class="cx"> Type/value for null is string/null
</span><span class="cx"> Type/value for 0 is string/0
</span><del>-Type/value for function(){} is string/function () {}
</del><ins>+Type/value for function(){} is string/function(){}
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsuserscriptswindowonerrorforisolatedworld1expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-1-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-1-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-1-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -2,13 +2,13 @@
</span><span class="cx">
</span><span class="cx"> Main world window.onerror: Error: Error in main world inline script. at window-onerror-for-isolated-world-1.html:55
</span><span class="cx"> Main world error event listener: Error: Error in main world inline script. at window-onerror-for-isolated-world-1.html:55
</span><del>-Main world window.onerror: Error: Error in user script inline script. at undefined:11
-Main world error event listener: Error: Error in user script inline script. at undefined:11
</del><ins>+Main world window.onerror: Error: Error in user script inline script. at undefined:12
+Main world error event listener: Error: Error in user script inline script. at undefined:12
</ins><span class="cx"> Main world window.onerror: Error: Error in main world load handler. at window-onerror-for-isolated-world-1.html:51
</span><span class="cx"> Main world error event listener: Error: Error in main world load handler. at window-onerror-for-isolated-world-1.html:51
</span><del>-Main world window.onerror: Error: Error in user script load handler. at undefined:7
-Main world error event listener: Error: Error in user script load handler. at undefined:7
</del><ins>+Main world window.onerror: Error: Error in user script load handler. at undefined:8
+Main world error event listener: Error: Error in user script load handler. at undefined:8
</ins><span class="cx"> Main world window.onerror: Error: Error in main world setTimeout callback. at window-onerror-for-isolated-world-1.html:49
</span><span class="cx"> Main world error event listener: Error: Error in main world setTimeout callback. at window-onerror-for-isolated-world-1.html:49
</span><del>-Main world window.onerror: Error: Error in user script setTimeout callback. at undefined:5
-Main world error event listener: Error: Error in user script setTimeout callback. at undefined:5
</del><ins>+Main world window.onerror: Error: Error in user script setTimeout callback. at undefined:6
+Main world error event listener: Error: Error in user script setTimeout callback. at undefined:6
</ins></span></pre></div>
<a id="trunkLayoutTestsuserscriptswindowonerrorforisolatedworld2expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-2-expected.txt (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-2-expected.txt        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/LayoutTests/userscripts/window-onerror-for-isolated-world-2-expected.txt        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,13 +1,13 @@
</span><span class="cx"> CONSOLE MESSAGE: line 30: Error: Error in main world inline script.
</span><span class="cx"> Test that window.onerror and "error" event listeners from isolated world are invoked for uncaught exceptions in user scripts running in isolate worlds as well as for exceptions in the main world.Bug 8519.
</span><span class="cx">
</span><del>-user script window.onerror: Error: Error in user script inline script. at undefined:31
-user script error event listener: Error: Error in user script inline script. at undefined:31
</del><ins>+user script window.onerror: Error: Error in user script inline script. at undefined:33
+user script error event listener: Error: Error in user script inline script. at undefined:33
</ins><span class="cx"> user script window.onerror: Error: Error in main world load handler. at window-onerror-for-isolated-world-2.html:27
</span><span class="cx"> user script error event listener: Error: Error in main world load handler. at window-onerror-for-isolated-world-2.html:27
</span><del>-user script window.onerror: Error: Error in user script load handler. at undefined:28
-user script error event listener: Error: Error in user script load handler. at undefined:28
</del><ins>+user script window.onerror: Error: Error in user script load handler. at undefined:30
+user script error event listener: Error: Error in user script load handler. at undefined:30
</ins><span class="cx"> user script window.onerror: Error: Error in main world setTimeout callback. at window-onerror-for-isolated-world-2.html:25
</span><span class="cx"> user script error event listener: Error: Error in main world setTimeout callback. at window-onerror-for-isolated-world-2.html:25
</span><del>-user script window.onerror: Error: Error in user script setTimeout callback. at undefined:26
-user script error event listener: Error: Error in user script setTimeout callback. at undefined:26
</del><ins>+user script window.onerror: Error: Error in user script setTimeout callback. at undefined:28
+user script error event listener: Error: Error in user script setTimeout callback. at undefined:28
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIteststestapic"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/tests/testapi.c (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/tests/testapi.c        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/API/tests/testapi.c        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -84,11 +84,13 @@
</span><span class="cx"> size_t jsSize = JSStringGetMaximumUTF8CStringSize(valueAsString);
</span><span class="cx"> char* jsBuffer = (char*)malloc(jsSize);
</span><span class="cx"> JSStringGetUTF8CString(valueAsString, jsBuffer, jsSize);
</span><del>-
</del><ins>+
</ins><span class="cx"> unsigned i;
</span><span class="cx"> for (i = 0; jsBuffer[i]; i++) {
</span><span class="cx"> if (jsBuffer[i] != expectedValue[i]) {
</span><span class="cx"> fprintf(stderr, "assertEqualsAsUTF8String failed at character %d: %c(%d) != %c(%d)\n", i, jsBuffer[i], jsBuffer[i], expectedValue[i], expectedValue[i]);
</span><ins>+ fprintf(stderr, "value: %s\n", jsBuffer);
+ fprintf(stderr, "expectedValue: %s\n", expectedValue);
</ins><span class="cx"> failed = 1;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -1590,7 +1592,7 @@
</span><span class="cx"> ASSERT(!JSObjectMakeFunction(context, NULL, 0, NULL, functionBody, NULL, 1, &exception));
</span><span class="cx"> ASSERT(JSValueIsObject(context, exception));
</span><span class="cx"> v = JSObjectGetProperty(context, JSValueToObject(context, exception, NULL), line, NULL);
</span><del>- assertEqualsAsNumber(v, 1);
</del><ins>+ assertEqualsAsNumber(v, 2);
</ins><span class="cx"> JSStringRelease(functionBody);
</span><span class="cx"> JSStringRelease(line);
</span><span class="cx">
</span><span class="lines">@@ -1600,7 +1602,7 @@
</span><span class="cx"> ASSERT(!JSObjectMakeFunction(context, NULL, 0, NULL, functionBody, NULL, -42, &exception));
</span><span class="cx"> ASSERT(JSValueIsObject(context, exception));
</span><span class="cx"> v = JSObjectGetProperty(context, JSValueToObject(context, exception, NULL), line, NULL);
</span><del>- assertEqualsAsNumber(v, 1);
</del><ins>+ assertEqualsAsNumber(v, 2);
</ins><span class="cx"> JSStringRelease(functionBody);
</span><span class="cx"> JSStringRelease(line);
</span><span class="cx">
</span><span class="lines">@@ -1610,7 +1612,7 @@
</span><span class="cx"> ASSERT(!JSObjectMakeFunction(context, NULL, 0, NULL, functionBody, NULL, 1, &exception));
</span><span class="cx"> ASSERT(JSValueIsObject(context, exception));
</span><span class="cx"> v = JSObjectGetProperty(context, JSValueToObject(context, exception, NULL), line, NULL);
</span><del>- assertEqualsAsNumber(v, 2);
</del><ins>+ assertEqualsAsNumber(v, 3);
</ins><span class="cx"> JSStringRelease(functionBody);
</span><span class="cx"> JSStringRelease(line);
</span><span class="cx">
</span><span class="lines">@@ -1644,7 +1646,7 @@
</span><span class="cx"> JSStringRelease(functionBody);
</span><span class="cx">
</span><span class="cx"> string = JSValueToStringCopy(context, function, NULL);
</span><del>- assertEqualsAsUTF8String(JSValueMakeString(context, string), "function foo(foo) { return foo;\n}");
</del><ins>+ assertEqualsAsUTF8String(JSValueMakeString(context, string), "function foo(foo) {\nreturn foo;\n}");
</ins><span class="cx"> JSStringRelease(string);
</span><span class="cx">
</span><span class="cx"> JSStringRef print = JSStringCreateWithUTF8CString("print");
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,3 +1,84 @@
</span><ins>+2015-03-18 Geoffrey Garen <ggaren@apple.com>
+
+ Function.prototype.toString should not decompile the AST
+ https://bugs.webkit.org/show_bug.cgi?id=142853
+
+ Reviewed by Sam Weinig.
+
+ To recover the function parameter string, Function.prototype.toString
+ decompiles the function parameters from the AST. This is bad for a few
+ reasons:
+
+ (1) It requires us to keep pieces of the AST live forever. This is an
+ awkward design and a waste of memory.
+
+ (2) It doesn't match Firefox or Chrome (because it changes whitespace
+ and ES6 destructuring expressions).
+
+ (3) It doesn't scale to ES6 default argument parameters, which require
+ arbitrarily complex decompilation.
+
+ (4) It can counterfeit all the line numbers in a function (because
+ whitespace can include newlines).
+
+ (5) It's expensive, and we've seen cases where websites invoke
+ Function.prototype.toString a lot by accident.
+
+ The fix is to do what we do for the rest of the function: Just quote the
+ original source text.
+
+ Since this change inevitably changes some function stringification, I
+ took the opportunity to make our stringification match Firefox's and
+ Chrome's.
+
+ * API/tests/testapi.c:
+ (assertEqualsAsUTF8String): Be more informative when this fails.
+
+ (main): Updated to match new stringification rules.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::paramString): Deleted. Yay!
+ * bytecode/UnlinkedCodeBlock.h:
+
+ * parser/Nodes.h:
+ (JSC::StatementNode::isFuncDeclNode): New helper for constructing
+ anonymous functions.
+
+ * parser/SourceCode.h:
+ (JSC::SourceCode::SourceCode): Allow zero because WebCore wants it.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Updated for use
+ of function declaration over function expression.
+
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::paramString): Deleted. Yay!
+ * runtime/Executable.h:
+ (JSC::FunctionExecutable::parameterCount):
+
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunctionSkippingEvalEnabledCheck): Added a newline after
+ the opening brace to match Firefox and Chrome, and a space after the comma
+ to match Firefox and WebKit coding style. Added the function name to
+ the text of the function so it would look right when stringify-ing. Switched
+ from parentheses to braces to produce a function declaration instead of
+ a function expression because we are required to exclude the function's
+ name from its scope, and that's what a function declaration does.
+
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString): Removed an old workaround because the
+ library it worked around doesn't really exist anymore, and the behavior
+ doesn't match Firefox or Chrome. Use type profiling offsets instead of
+ function body offsets because we want to include the function name and
+ the parameter string, rather than stitching them in manually by
+ decompiling the AST.
+
+ (JSC::insertSemicolonIfNeeded): Deleted.
+
+ * tests/mozilla/js1_2/function/tostring-1.js:
+ * tests/mozilla/js1_5/Scope/regress-185485.js:
+ (with.g): Updated these test results for formatting changes.
+
</ins><span class="cx"> 2015-03-20 Joseph Pecoraro <pecoraro@apple.com>
</span><span class="cx">
</span><span class="cx"> SyntaxChecker assertion is trapped with computed property name and getter
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -200,18 +200,6 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-String UnlinkedFunctionExecutable::paramString() const
-{
- FunctionParameters& parameters = *m_parameters;
- StringBuilder builder;
- for (size_t pos = 0; pos < parameters.size(); ++pos) {
- if (!builder.isEmpty())
- builder.appendLiteral(", ");
- parameters.at(pos)->toString(builder);
- }
- return builder.toString();
-}
-
</del><span class="cx"> UnlinkedCodeBlock::UnlinkedCodeBlock(VM* vm, Structure* structure, CodeType codeType, const ExecutableInfo& info)
</span><span class="cx"> : Base(*vm, structure)
</span><span class="cx"> , m_numVars(0)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -131,8 +131,6 @@
</span><span class="cx"> unsigned typeProfilingStartOffset() const { return m_typeProfilingStartOffset; }
</span><span class="cx"> unsigned typeProfilingEndOffset() const { return m_typeProfilingEndOffset; }
</span><span class="cx">
</span><del>- String paramString() const;
-
</del><span class="cx"> UnlinkedFunctionCodeBlock* codeBlockFor(
</span><span class="cx"> VM&, const SourceCode&, CodeSpecializationKind, DebuggerMode, ProfilerMode,
</span><span class="cx"> ParserError&);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1852,7 +1852,7 @@
</span><span class="cx"> return m_statements ? m_statements->lastStatement() : 0;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-inline StatementNode* BlockNode::singleStatement() const
</del><ins>+StatementNode* BlockNode::singleStatement() const
</ins><span class="cx"> {
</span><span class="cx"> return m_statements ? m_statements->singleStatement() : 0;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -196,6 +196,7 @@
</span><span class="cx"> virtual bool isBreak() const { return false; }
</span><span class="cx"> virtual bool isContinue() const { return false; }
</span><span class="cx"> virtual bool isBlock() const { return false; }
</span><ins>+ virtual bool isFuncDeclNode() const { return false; }
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> StatementNode* m_next;
</span><span class="lines">@@ -1769,6 +1770,7 @@
</span><span class="cx"> public:
</span><span class="cx"> FuncDeclNode(const JSTokenLocation&, const Identifier&, FunctionBodyNode*, const SourceCode&, ParameterNode* = 0);
</span><span class="cx">
</span><ins>+ virtual bool isFuncDeclNode() const override { return true; }
</ins><span class="cx"> FunctionBodyNode* body() { return m_body; }
</span><span class="cx">
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceCode.h (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceCode.h        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/parser/SourceCode.h        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -63,8 +63,8 @@
</span><span class="cx"> : m_provider(provider)
</span><span class="cx"> , m_startChar(0)
</span><span class="cx"> , m_endChar(m_provider->source().length())
</span><del>- , m_firstLine(std::max(firstLine, 1))
- , m_startColumn(std::max(startColumn, 1))
</del><ins>+ , m_firstLine(std::max(firstLine, 0))
+ , m_startColumn(std::max(startColumn, 0))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -72,8 +72,8 @@
</span><span class="cx"> : m_provider(provider)
</span><span class="cx"> , m_startChar(start)
</span><span class="cx"> , m_endChar(end)
</span><del>- , m_firstLine(std::max(firstLine, 1))
- , m_startColumn(std::max(startColumn, 1))
</del><ins>+ , m_firstLine(std::max(firstLine, 0))
+ , m_startColumn(std::max(startColumn, 0))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -130,6 +130,7 @@
</span><span class="cx"> return getGlobalCodeBlock<UnlinkedEvalCodeBlock>(vm, executable, source, builtinMode, strictMode, debuggerMode, profilerMode, error);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+// FIXME: There's no need to add the function's name to the key here. It's already in the source code.
</ins><span class="cx"> UnlinkedFunctionExecutable* CodeCache::getFunctionExecutableFromGlobalCode(VM& vm, const Identifier& name, const SourceCode& source, ParserError& error)
</span><span class="cx"> {
</span><span class="cx"> SourceCodeKey key = SourceCodeKey(
</span><span class="lines">@@ -150,20 +151,25 @@
</span><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- // This function assumes an input string that would result in a single anonymous function expression.
- StatementNode* exprStatement = program->singleStatement();
- RELEASE_ASSERT(exprStatement);
- RELEASE_ASSERT(exprStatement->isExprStatement());
- ExpressionNode* funcExpr = static_cast<ExprStatementNode*>(exprStatement)->expr();
- RELEASE_ASSERT(funcExpr);
- RELEASE_ASSERT(funcExpr->isFuncExprNode());
- FunctionBodyNode* body = static_cast<FuncExprNode*>(funcExpr)->body();
- RELEASE_ASSERT(!program->hasCapturedVariables());
</del><ins>+ // This function assumes an input string that would result in a single function declaration.
+ StatementNode* statement = program->singleStatement();
+ ASSERT(statement);
+ ASSERT(statement->isBlock());
+ if (!statement || !statement->isBlock())
+ return nullptr;
+
+ StatementNode* funcDecl = static_cast<BlockNode*>(statement)->singleStatement();
+ ASSERT(funcDecl);
+ ASSERT(funcDecl->isFuncDeclNode());
+ if (!funcDecl || !funcDecl->isFuncDeclNode())
+ return nullptr;
+
+ FunctionBodyNode* body = static_cast<FuncDeclNode*>(funcDecl)->body();
+ ASSERT(body);
+ if (!body)
+ return nullptr;
</ins><span class="cx">
</span><span class="cx"> body->setEndPosition(positionBeforeLastNewline);
</span><del>- RELEASE_ASSERT(body);
- RELEASE_ASSERT(body->ident().isNull());
-
</del><span class="cx"> UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&vm, source, body, UnlinkedNormalFunction);
</span><span class="cx"> functionExecutable->m_nameValue.set(vm, functionExecutable, jsString(&vm, name.string()));
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -615,11 +615,6 @@
</span><span class="cx"> return unlinkedExecutable->link(exec.vm(), source);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-String FunctionExecutable::paramString() const
-{
- return m_unlinkedExecutable->paramString();
-}
-
</del><span class="cx"> void ExecutableBase::dump(PrintStream& out) const
</span><span class="cx"> {
</span><span class="cx"> ExecutableBase* realThis = const_cast<ExecutableBase*>(this);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.h (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.h        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/runtime/Executable.h        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -625,7 +625,6 @@
</span><span class="cx"> const Identifier& inferredName() { return m_unlinkedExecutable->inferredName(); }
</span><span class="cx"> JSString* nameValue() const { return m_unlinkedExecutable->nameValue(); }
</span><span class="cx"> size_t parameterCount() const { return m_unlinkedExecutable->parameterCount(); } // Excluding 'this'!
</span><del>- String paramString() const;
</del><span class="cx"> SymbolTable* symbolTable(CodeSpecializationKind);
</span><span class="cx">
</span><span class="cx"> void clearCodeIfNotCompiling();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -88,25 +88,26 @@
</span><span class="cx">
</span><span class="cx"> JSObject* constructFunctionSkippingEvalEnabledCheck(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, const Identifier& functionName, const String& sourceURL, const TextPosition& position)
</span><span class="cx"> {
</span><del>- // Functions need to have a space following the opening { due to for web compatibility
- // see https://bugs.webkit.org/show_bug.cgi?id=24350
- // We also need \n before the closing } to handle // comments at the end of the last line
</del><ins>+ // How we stringify functions is sometimes important for web compatibility.
+ // See https://bugs.webkit.org/show_bug.cgi?id=24350.
</ins><span class="cx"> String program;
</span><span class="cx"> if (args.isEmpty())
</span><del>- program = ASCIILiteral("(function() { \n})");
</del><ins>+ program = makeString("{function ", functionName.string(), "() {\n\n}}");
</ins><span class="cx"> else if (args.size() == 1)
</span><del>- program = makeString("(function() { ", args.at(0).toString(exec)->value(exec), "\n})");
</del><ins>+ program = makeString("{function ", functionName.string(), "() {\n", args.at(0).toString(exec)->value(exec), "\n}}");
</ins><span class="cx"> else {
</span><span class="cx"> StringBuilder builder;
</span><del>- builder.appendLiteral("(function(");
</del><ins>+ builder.appendLiteral("{function ");
+ builder.append(functionName.string());
+ builder.append("(");
</ins><span class="cx"> builder.append(args.at(0).toString(exec)->value(exec));
</span><span class="cx"> for (size_t i = 1; i < args.size() - 1; i++) {
</span><del>- builder.append(',');
</del><ins>+ builder.append(", ");
</ins><span class="cx"> builder.append(args.at(i).toString(exec)->value(exec));
</span><span class="cx"> }
</span><del>- builder.appendLiteral(") { ");
</del><ins>+ builder.appendLiteral(") {\n");
</ins><span class="cx"> builder.append(args.at(args.size() - 1).toString(exec)->value(exec));
</span><del>- builder.appendLiteral("\n})");
</del><ins>+ builder.appendLiteral("\n}}");
</ins><span class="cx"> program = builder.toString();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/runtime/FunctionPrototype.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -79,24 +79,6 @@
</span><span class="cx"> return CallTypeHost;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-// Functions
-
-// Compatibility hack for the Optimost JavaScript library. (See <rdar://problem/6595040>.)
-static inline void insertSemicolonIfNeeded(String& functionBody)
-{
- ASSERT(functionBody[0] == '{');
- ASSERT(functionBody[functionBody.length() - 1] == '}');
-
- for (size_t i = functionBody.length() - 2; i > 0; --i) {
- UChar ch = functionBody[i];
- if (!Lexer<UChar>::isWhiteSpace(ch) && !Lexer<UChar>::isLineTerminator(ch)) {
- if (ch != ';' && ch != '}')
- functionBody = makeString(functionBody.substringSharingImpl(0, i + 1), ';', functionBody.substringSharingImpl(i + 1, functionBody.length() - (i + 1)));
- return;
- }
- }
-}
-
</del><span class="cx"> EncodedJSValue JSC_HOST_CALL functionProtoFuncToString(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx"> JSValue thisValue = exec->thisValue();
</span><span class="lines">@@ -104,10 +86,12 @@
</span><span class="cx"> JSFunction* function = jsCast<JSFunction*>(thisValue);
</span><span class="cx"> if (function->isHostOrBuiltinFunction())
</span><span class="cx"> return JSValue::encode(jsMakeNontrivialString(exec, "function ", function->name(exec), "() {\n [native code]\n}"));
</span><ins>+
</ins><span class="cx"> FunctionExecutable* executable = function->jsExecutable();
</span><del>- String sourceString = executable->source().toString();
- insertSemicolonIfNeeded(sourceString);
- return JSValue::encode(jsMakeNontrivialString(exec, "function ", function->name(exec), "(", executable->paramString(), ") ", sourceString));
</del><ins>+ String source = executable->source().provider()->getRange(
+ executable->typeProfilingStartOffset(),
+ executable->typeProfilingEndOffset() + 1); // Type profiling end offset is the character before the '}'.
+ return JSValue::encode(jsMakeNontrivialString(exec, source));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (thisValue.inherits(InternalFunction::info())) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsmozillajs1_2functiontostring1js"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/mozilla/js1_2/function/tostring-1.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/mozilla/js1_2/function/tostring-1.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/tests/mozilla/js1_2/function/tostring-1.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">
</span><span class="cx"> t5 = new TestFunction( "anonymous", "", tab+"return \"hello!\";" );
</span><span class="cx">
</span><del>- var f = new Function( "return \"hello!\"");
</del><ins>+ var f = new Function( "return \"hello!\";");
</ins><span class="cx">
</span><span class="cx"> testcases[tc++] = new TestCase( SECTION,
</span><span class="cx"> "stub.toString()",
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsmozillajs1_5Scoperegress185485js"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/mozilla/js1_5/Scope/regress-185485.js (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/mozilla/js1_5/Scope/regress-185485.js        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/JavaScriptCore/tests/mozilla/js1_5/Scope/regress-185485.js        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx"> */
</span><span class="cx"> with (x)
</span><span class="cx"> {
</span><del>- var g = function() {}
</del><ins>+ var g = function () {}
</ins><span class="cx"> }
</span><span class="cx"> status = inSection(5);
</span><span class="cx"> actual = x.g.toString();
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/WebCore/ChangeLog        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2015-03-19 Geoffrey Garen <ggaren@apple.com>
+
+ Function.prototype.toString should not decompile the AST
+ https://bugs.webkit.org/show_bug.cgi?id=142853
+
+ Reviewed by Sam Weinig.
+
+ * bindings/js/JSLazyEventListener.cpp:
+ (WebCore::JSLazyEventListener::initializeJSFunction): Adjust the line
+ number of attribute event listeners to account for the leading newline
+ now added by JavaScriptCore.
+
+ This solution is not perfect, but there are a lot of pre-existing problems
+ with line and column reporting for attribute event listeners, and this
+ preserves existing behavior with reasonable reliability.
+
</ins><span class="cx"> 2015-03-20 Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> Progress towards CMake on Mac.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSLazyEventListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp (181809 => 181810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp        2015-03-20 19:14:00 UTC (rev 181809)
+++ trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp        2015-03-20 20:12:10 UTC (rev 181810)
</span><span class="lines">@@ -103,7 +103,16 @@
</span><span class="cx"> args.append(jsNontrivialString(exec, m_eventParameterName));
</span><span class="cx"> args.append(jsStringWithCache(exec, m_code));
</span><span class="cx">
</span><del>- JSObject* jsFunction = constructFunctionSkippingEvalEnabledCheck(exec, exec->lexicalGlobalObject(), args, Identifier(exec, m_functionName), m_sourceURL, m_position); // FIXME: is globalExec ok?
</del><ins>+ // Move our text position backward one line. Creating an anonymous function
+ // will add a line for a function declaration, but we want our line number
+ // to match up with where the attribute was declared.
+ TextPosition position(
+ OrdinalNumber::fromOneBasedInt(
+ m_position.m_line.oneBasedInt() - 1), m_position.m_column);
+ JSObject* jsFunction = constructFunctionSkippingEvalEnabledCheck(
+ exec, exec->lexicalGlobalObject(), args, Identifier(exec, m_functionName),
+ m_sourceURL, position);
+
</ins><span class="cx"> if (exec->hadException()) {
</span><span class="cx"> reportCurrentException(exec);
</span><span class="cx"> exec->clearException();
</span></span></pre>
</div>
</div>
</body>
</html>