<!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>[186959] 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/186959">186959</a></dd>
<dt>Author</dt> <dd>saambarati1@gmail.com</dd>
<dt>Date</dt> <dd>2015-07-17 11:48:30 -0700 (Fri, 17 Jul 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Function parameters should be parsed in the same parser arena as the function body
https://bugs.webkit.org/show_bug.cgi?id=145995

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

This patch changes how functions are parsed in JSC. A function's
parameters are now parsed in the same arena as the function itself.
This allows us to arena allocate all destructuring AST nodes and
the FunctionParameters node. This will help make implementing ES6
default parameter values sane.

A source code that represents a function now includes the text of the function's 
parameters. The starting offset is at the opening parenthesis of the parameter
list or at the starting character of the identifier for arrow functions that
have single arguments and don't start with parenthesis.

For example:

&quot;function (param1, param2) { ... }&quot;
                           ^
                           | This offset used to be the starting offset of a function's SourceCode
          ^
          | This is the new starting offset for a function's SourceCode.

This requires us to change how some offsets are calculated
and also requires us to report some different line numbers for internal
metrics that use a SourceCode's starting line and column numbers.

This patch also does a bit of cleanup with regards to how
functions are parsed in general (especially arrow functions).
It removes some unnecessary #ifdefs and the likes for arrow
to make things clearer and more deliberate.

* API/JSScriptRef.cpp:
(parseScript):
* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::createExecutableInternal):
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::generateFunctionCodeBlock):
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
(JSC::UnlinkedFunctionExecutable::visitChildren):
(JSC::UnlinkedFunctionExecutable::parameterCount): Deleted.
* bytecode/UnlinkedCodeBlock.h:
* bytecompiler/NodesCodegen.cpp:
(JSC::DestructuringAssignmentNode::emitBytecode):
(JSC::assignDefaultValueIfUndefined):
(JSC::ArrayPatternNode::collectBoundIdentifiers):
(JSC::DestructuringPatternNode::~DestructuringPatternNode): Deleted.
* parser/ASTBuilder.h:
(JSC::ASTBuilder::createClassExpr):
(JSC::ASTBuilder::createFunctionExpr):
(JSC::ASTBuilder::createFunctionBody):
(JSC::ASTBuilder::createArrowFunctionExpr):
(JSC::ASTBuilder::createGetterOrSetterProperty):
(JSC::ASTBuilder::createElementList):
(JSC::ASTBuilder::createFormalParameterList):
(JSC::ASTBuilder::appendParameter):
(JSC::ASTBuilder::createClause):
(JSC::ASTBuilder::createClauseList):
(JSC::ASTBuilder::createFuncDeclStatement):
(JSC::ASTBuilder::createForInLoop):
(JSC::ASTBuilder::createForOfLoop):
(JSC::ASTBuilder::isResolve):
(JSC::ASTBuilder::createDestructuringAssignment):
(JSC::ASTBuilder::createArrayPattern):
(JSC::ASTBuilder::appendArrayPatternSkipEntry):
(JSC::ASTBuilder::appendArrayPatternEntry):
(JSC::ASTBuilder::appendArrayPatternRestEntry):
(JSC::ASTBuilder::finishArrayPattern):
(JSC::ASTBuilder::createObjectPattern):
(JSC::ASTBuilder::appendObjectPatternEntry):
(JSC::ASTBuilder::createBindingLocation):
(JSC::ASTBuilder::setEndOffset):
* parser/Lexer.cpp:
(JSC::Lexer&lt;T&gt;::Lexer):
(JSC::Lexer&lt;T&gt;::nextTokenIsColon):
(JSC::Lexer&lt;T&gt;::setTokenPosition):
(JSC::Lexer&lt;T&gt;::lex):
(JSC::Lexer&lt;T&gt;::clear):
* parser/Lexer.h:
(JSC::Lexer::setIsReparsingFunction):
(JSC::Lexer::isReparsingFunction):
(JSC::Lexer::lineNumber):
(JSC::Lexer::setIsReparsing): Deleted.
(JSC::Lexer::isReparsing): Deleted.
* parser/NodeConstructors.h:
(JSC::TryNode::TryNode):
(JSC::FunctionParameters::FunctionParameters):
(JSC::FuncExprNode::FuncExprNode):
(JSC::FuncDeclNode::FuncDeclNode):
(JSC::ArrayPatternNode::ArrayPatternNode):
(JSC::ObjectPatternNode::ObjectPatternNode):
(JSC::BindingNode::BindingNode):
(JSC::DestructuringAssignmentNode::DestructuringAssignmentNode):
(JSC::ParameterNode::ParameterNode): Deleted.
(JSC::ArrayPatternNode::create): Deleted.
(JSC::ObjectPatternNode::create): Deleted.
(JSC::BindingNode::create): Deleted.
* parser/Nodes.cpp:
(JSC::ProgramNode::ProgramNode):
(JSC::EvalNode::EvalNode):
(JSC::FunctionBodyNode::FunctionBodyNode):
(JSC::FunctionBodyNode::finishParsing):
(JSC::FunctionNode::FunctionNode):
(JSC::FunctionNode::finishParsing):
(JSC::FunctionParameters::create): Deleted.
(JSC::FunctionParameters::FunctionParameters): Deleted.
(JSC::FunctionParameters::~FunctionParameters): Deleted.
* parser/Nodes.h:
(JSC::ProgramNode::startColumn):
(JSC::ProgramNode::endColumn):
(JSC::EvalNode::startColumn):
(JSC::EvalNode::endColumn):
(JSC::FunctionParameters::size):
(JSC::FunctionParameters::at):
(JSC::FunctionParameters::append):
(JSC::FuncExprNode::body):
(JSC::DestructuringPatternNode::~DestructuringPatternNode):
(JSC::DestructuringPatternNode::isBindingNode):
(JSC::DestructuringPatternNode::emitDirectBinding):
(JSC::ArrayPatternNode::appendIndex):
(JSC::ObjectPatternNode::appendEntry):
(JSC::BindingNode::boundProperty):
(JSC::BindingNode::divotStart):
(JSC::BindingNode::divotEnd):
(JSC::DestructuringAssignmentNode::bindings):
(JSC::FuncDeclNode::body):
(JSC::ParameterNode::pattern): Deleted.
(JSC::ParameterNode::nextParam): Deleted.
(JSC::FunctionParameters::patterns): Deleted.
* parser/Parser.cpp:
(JSC::Parser&lt;LexerType&gt;::Parser):
(JSC::Parser&lt;LexerType&gt;::~Parser):
(JSC::Parser&lt;LexerType&gt;::parseInner):
(JSC::Parser&lt;LexerType&gt;::allowAutomaticSemicolon):
(JSC::Parser&lt;LexerType&gt;::parseSourceElements):
(JSC::Parser&lt;LexerType&gt;::createBindingPattern):
(JSC::Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBodySourceElements):
(JSC::Parser&lt;LexerType&gt;::tryParseDestructuringPatternExpression):
(JSC::Parser&lt;LexerType&gt;::parseSwitchClauses):
(JSC::Parser&lt;LexerType&gt;::parseSwitchDefaultClause):
(JSC::Parser&lt;LexerType&gt;::parseBlockStatement):
(JSC::Parser&lt;LexerType&gt;::parseStatement):
(JSC::Parser&lt;LexerType&gt;::parseFormalParameters):
(JSC::Parser&lt;LexerType&gt;::parseFunctionBody):
(JSC::stringForFunctionMode):
(JSC::Parser&lt;LexerType&gt;::parseFunctionParameters):
(JSC::Parser&lt;LexerType&gt;::parseFunctionInfo):
(JSC::Parser&lt;LexerType&gt;::parseFunctionDeclaration):
(JSC::Parser&lt;LexerType&gt;::parseClass):
(JSC::Parser&lt;LexerType&gt;::parsePrimaryExpression):
(JSC::Parser&lt;LexerType&gt;::parseMemberExpression):
(JSC::Parser&lt;LexerType&gt;::parseArrowFunctionExpression):
(JSC::operatorString):
(JSC::Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBody): Deleted.
* parser/Parser.h:
(JSC::Parser::positionBeforeLastNewline):
(JSC::Parser::locationBeforeLastToken):
(JSC::Parser::findCachedFunctionInfo):
(JSC::Parser::isofToken):
(JSC::Parser::isEndOfArrowFunction):
(JSC::Parser::isArrowFunctionParamters):
(JSC::Parser::tokenStart):
(JSC::Parser::isLETMaskedAsIDENT):
(JSC::Parser::autoSemiColon):
(JSC::Parser::setEndOfStatement):
(JSC::Parser::canRecurse):
(JSC::Parser&lt;LexerType&gt;::parse):
(JSC::parse):
* parser/ParserFunctionInfo.h:
* parser/ParserModes.h:
(JSC::functionNameIsInScope):
* parser/SourceCode.h:
(JSC::makeSource):
(JSC::SourceCode::subExpression):
(JSC::SourceCode::subArrowExpression): Deleted.
* parser/SourceProviderCache.h:
(JSC::SourceProviderCache::get):
* parser/SourceProviderCacheItem.h:
(JSC::SourceProviderCacheItem::endFunctionToken):
(JSC::SourceProviderCacheItem::usedVariables):
(JSC::SourceProviderCacheItem::writtenVariables):
(JSC::SourceProviderCacheItem::SourceProviderCacheItem):
* parser/SyntaxChecker.h:
(JSC::SyntaxChecker::SyntaxChecker):
(JSC::SyntaxChecker::createClassExpr):
(JSC::SyntaxChecker::createFunctionExpr):
(JSC::SyntaxChecker::createFunctionBody):
(JSC::SyntaxChecker::createArrowFunctionExpr):
(JSC::SyntaxChecker::setFunctionNameStart):
(JSC::SyntaxChecker::createArguments):
(JSC::SyntaxChecker::createPropertyList):
(JSC::SyntaxChecker::createElementList):
(JSC::SyntaxChecker::createFormalParameterList):
(JSC::SyntaxChecker::appendParameter):
(JSC::SyntaxChecker::createClause):
(JSC::SyntaxChecker::createClauseList):
* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):
* runtime/Completion.cpp:
(JSC::checkSyntax):
* runtime/Executable.cpp:
(JSC::ProgramExecutable::checkSyntax):
* tests/controlFlowProfiler/conditional-expression.js:
(testConditionalFunctionCall):

LayoutTests:

* fast/profiler/anonymous-event-handler-expected.txt:
* fast/profiler/anonymous-function-called-from-different-contexts-expected.txt:
* fast/profiler/anonymous-function-calls-built-in-functions-expected.txt:
* fast/profiler/anonymous-function-calls-eval-expected.txt:
* fast/profiler/anonymous-functions-with-display-names-expected.txt:
* fast/profiler/apply-expected.txt:
* fast/profiler/built-in-function-calls-anonymous-expected.txt:
* fast/profiler/built-in-function-calls-user-defined-function-expected.txt:
* fast/profiler/call-expected.txt:
* fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt:
* fast/profiler/compare-multiple-profiles-expected.txt:
* fast/profiler/constructor-expected.txt:
* fast/profiler/dead-time-expected.txt:
* fast/profiler/document-dot-write-expected.txt:
* fast/profiler/event-handler-expected.txt:
* fast/profiler/execution-context-and-eval-on-same-line-expected.txt:
* fast/profiler/inline-event-handler-expected.txt:
* fast/profiler/many-calls-in-the-same-scope-expected.txt:
* fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt:
* fast/profiler/multiple-and-different-scoped-function-calls-expected.txt:
* fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt:
* fast/profiler/multiple-frames-expected.txt:
* fast/profiler/named-functions-with-display-names-expected.txt:
* fast/profiler/nested-anonymous-functon-expected.txt:
* fast/profiler/nested-start-and-stop-profiler-expected.txt:
* fast/profiler/one-execution-context-expected.txt:
* fast/profiler/profile-calls-in-included-file-expected.txt:
* fast/profiler/profile-with-no-title-expected.txt:
* fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt:
* fast/profiler/profiling-from-a-nested-location-expected.txt:
* fast/profiler/simple-event-call-expected.txt:
* fast/profiler/simple-no-level-change-expected.txt:
* fast/profiler/start-and-stop-profiler-multiple-times-expected.txt:
* fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt:
* fast/profiler/stop-profiling-after-setTimeout-expected.txt:
* fast/profiler/stop-then-function-call-expected.txt:
* fast/profiler/two-execution-contexts-expected.txt:
* fast/profiler/user-defined-function-calls-built-in-functions-expected.txt:
* fast/profiler/window-dot-eval-expected.txt:
* js/dom/script-start-end-locations-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastprofileranonymouseventhandlerexpectedtxt">trunk/LayoutTests/fast/profiler/anonymous-event-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileranonymousfunctioncalledfromdifferentcontextsexpectedtxt">trunk/LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileranonymousfunctioncallsbuiltinfunctionsexpectedtxt">trunk/LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileranonymousfunctioncallsevalexpectedtxt">trunk/LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileranonymousfunctionswithdisplaynamesexpectedtxt">trunk/LayoutTests/fast/profiler/anonymous-functions-with-display-names-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerapplyexpectedtxt">trunk/LayoutTests/fast/profiler/apply-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerbuiltinfunctioncallsanonymousexpectedtxt">trunk/LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerbuiltinfunctioncallsuserdefinedfunctionexpectedtxt">trunk/LayoutTests/fast/profiler/built-in-function-calls-user-defined-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilercallexpectedtxt">trunk/LayoutTests/fast/profiler/call-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilercallingthefunctionthatstartedtheprofilerfromanotherscopeexpectedtxt">trunk/LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilercomparemultipleprofilesexpectedtxt">trunk/LayoutTests/fast/profiler/compare-multiple-profiles-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerconstructorexpectedtxt">trunk/LayoutTests/fast/profiler/constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerdeadtimeexpectedtxt">trunk/LayoutTests/fast/profiler/dead-time-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerdocumentdotwriteexpectedtxt">trunk/LayoutTests/fast/profiler/document-dot-write-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilereventhandlerexpectedtxt">trunk/LayoutTests/fast/profiler/event-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerexecutioncontextandevalonsamelineexpectedtxt">trunk/LayoutTests/fast/profiler/execution-context-and-eval-on-same-line-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerinlineeventhandlerexpectedtxt">trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilermanycallsinthesamescopeexpectedtxt">trunk/LayoutTests/fast/profiler/many-calls-in-the-same-scope-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilermultipleanddifferentscopedanonymousfunctioncallsexpectedtxt">trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilermultipleanddifferentscopedfunctioncallsexpectedtxt">trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilermultipleanonymousfunctionscalledfromthesamefunctionexpectedtxt">trunk/LayoutTests/fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilermultipleframesexpectedtxt">trunk/LayoutTests/fast/profiler/multiple-frames-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilernamedfunctionswithdisplaynamesexpectedtxt">trunk/LayoutTests/fast/profiler/named-functions-with-display-names-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilernestedanonymousfunctonexpectedtxt">trunk/LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilernestedstartandstopprofilerexpectedtxt">trunk/LayoutTests/fast/profiler/nested-start-and-stop-profiler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileroneexecutioncontextexpectedtxt">trunk/LayoutTests/fast/profiler/one-execution-context-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerprofilecallsinincludedfileexpectedtxt">trunk/LayoutTests/fast/profiler/profile-calls-in-included-file-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerprofilewithnotitleexpectedtxt">trunk/LayoutTests/fast/profiler/profile-with-no-title-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerprofilingfromanestedlocationbutstopprofilingoutsidethenestingexpectedtxt">trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerprofilingfromanestedlocationexpectedtxt">trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilersimpleeventcallexpectedtxt">trunk/LayoutTests/fast/profiler/simple-event-call-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilersimplenolevelchangeexpectedtxt">trunk/LayoutTests/fast/profiler/simple-no-level-change-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerstartandstopprofilermultipletimesexpectedtxt">trunk/LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerstartandstopprofilinginthesamefunctionexpectedtxt">trunk/LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerstopprofilingaftersetTimeoutexpectedtxt">trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerstopthenfunctioncallexpectedtxt">trunk/LayoutTests/fast/profiler/stop-then-function-call-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilertwoexecutioncontextsexpectedtxt">trunk/LayoutTests/fast/profiler/two-execution-contexts-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofileruserdefinedfunctioncallsbuiltinfunctionsexpectedtxt">trunk/LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastprofilerwindowdotevalexpectedtxt">trunk/LayoutTests/fast/profiler/window-dot-eval-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomscriptstartendlocationsexpectedtxt">trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSScriptRefcpp">trunk/Source/JavaScriptCore/API/JSScriptRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp">trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp</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="#trunkSourceJavaScriptCoreparserASTBuilderh">trunk/Source/JavaScriptCore/parser/ASTBuilder.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexercpp">trunk/Source/JavaScriptCore/parser/Lexer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexerh">trunk/Source/JavaScriptCore/parser/Lexer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodeConstructorsh">trunk/Source/JavaScriptCore/parser/NodeConstructors.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodescpp">trunk/Source/JavaScriptCore/parser/Nodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesh">trunk/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParsercpp">trunk/Source/JavaScriptCore/parser/Parser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserh">trunk/Source/JavaScriptCore/parser/Parser.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserFunctionInfoh">trunk/Source/JavaScriptCore/parser/ParserFunctionInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserModesh">trunk/Source/JavaScriptCore/parser/ParserModes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceCodeh">trunk/Source/JavaScriptCore/parser/SourceCode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceProviderCacheh">trunk/Source/JavaScriptCore/parser/SourceProviderCache.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceProviderCacheItemh">trunk/Source/JavaScriptCore/parser/SourceProviderCacheItem.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSyntaxCheckerh">trunk/Source/JavaScriptCore/parser/SyntaxChecker.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCompletioncpp">trunk/Source/JavaScriptCore/runtime/Completion.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutablecpp">trunk/Source/JavaScriptCore/runtime/Executable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretestscontrolFlowProfilerconditionalexpressionjs">trunk/Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/ChangeLog        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2015-07-17  Saam barati  &lt;saambarati1@gmail.com&gt;
+
+        Function parameters should be parsed in the same parser arena as the function body
+        https://bugs.webkit.org/show_bug.cgi?id=145995
+
+        Reviewed by Yusuke Suzuki.
+
+        * fast/profiler/anonymous-event-handler-expected.txt:
+        * fast/profiler/anonymous-function-called-from-different-contexts-expected.txt:
+        * fast/profiler/anonymous-function-calls-built-in-functions-expected.txt:
+        * fast/profiler/anonymous-function-calls-eval-expected.txt:
+        * fast/profiler/anonymous-functions-with-display-names-expected.txt:
+        * fast/profiler/apply-expected.txt:
+        * fast/profiler/built-in-function-calls-anonymous-expected.txt:
+        * fast/profiler/built-in-function-calls-user-defined-function-expected.txt:
+        * fast/profiler/call-expected.txt:
+        * fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt:
+        * fast/profiler/compare-multiple-profiles-expected.txt:
+        * fast/profiler/constructor-expected.txt:
+        * fast/profiler/dead-time-expected.txt:
+        * fast/profiler/document-dot-write-expected.txt:
+        * fast/profiler/event-handler-expected.txt:
+        * fast/profiler/execution-context-and-eval-on-same-line-expected.txt:
+        * fast/profiler/inline-event-handler-expected.txt:
+        * fast/profiler/many-calls-in-the-same-scope-expected.txt:
+        * fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt:
+        * fast/profiler/multiple-and-different-scoped-function-calls-expected.txt:
+        * fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt:
+        * fast/profiler/multiple-frames-expected.txt:
+        * fast/profiler/named-functions-with-display-names-expected.txt:
+        * fast/profiler/nested-anonymous-functon-expected.txt:
+        * fast/profiler/nested-start-and-stop-profiler-expected.txt:
+        * fast/profiler/one-execution-context-expected.txt:
+        * fast/profiler/profile-calls-in-included-file-expected.txt:
+        * fast/profiler/profile-with-no-title-expected.txt:
+        * fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt:
+        * fast/profiler/profiling-from-a-nested-location-expected.txt:
+        * fast/profiler/simple-event-call-expected.txt:
+        * fast/profiler/simple-no-level-change-expected.txt:
+        * fast/profiler/start-and-stop-profiler-multiple-times-expected.txt:
+        * fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt:
+        * fast/profiler/stop-profiling-after-setTimeout-expected.txt:
+        * fast/profiler/stop-then-function-call-expected.txt:
+        * fast/profiler/two-execution-contexts-expected.txt:
+        * fast/profiler/user-defined-function-calls-built-in-functions-expected.txt:
+        * fast/profiler/window-dot-eval-expected.txt:
+        * js/dom/script-start-end-locations-expected.txt:
+
</ins><span class="cx"> 2015-07-17  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Content Extensions] CSS-display-none rules are not working properly
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileranonymouseventhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/anonymous-event-handler-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/anonymous-event-handler-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/anonymous-event-handler-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,15 +4,15 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Anonymous event handler
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest anonymous-event-handler.html (line 11:1)
</del><ins>+   startTest anonymous-event-handler.html (line 10:19)
</ins><span class="cx">       getElementById (no file) (line 0:0)
</span><span class="cx">       click (no file) (line 0:0)
</span><del>-         onclick anonymous-event-handler.html (line 15:54)
-            insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+         onclick anonymous-event-handler.html (line 15:51)
+            insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                createElement (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileranonymousfunctioncalledfromdifferentcontextsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/anonymous-function-called-from-different-contexts-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,21 +4,21 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Same anonymous function called from different contexts
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest anonymous-function-called-from-different-contexts.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest anonymous-function-called-from-different-contexts.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><span class="cx">       eval (no file) (line 0:0)
</span><span class="cx">          (program) (no file) (line 1:1)
</span><del>-            anonymousFunction profiler-test-JS-resources.js (line 29:37)
-               insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+            anonymousFunction profiler-test-JS-resources.js (line 29:34)
+               insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                   createElement (no file) (line 0:0)
</span><span class="cx">                   createTextNode (no file) (line 0:0)
</span><span class="cx">                   appendChild (no file) (line 0:0)
</span><span class="cx">                   getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileranonymousfunctioncallsbuiltinfunctionsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/anonymous-function-calls-built-in-functions-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,13 +4,13 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Anonymous function calls built-in functions
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest anonymous-function-calls-built-in-functions.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest anonymous-function-calls-built-in-functions.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileranonymousfunctioncallsevalexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,15 +4,15 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Anonymous function calles eval
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest anonymous-function-calls-eval.html (line 11:1)
-      variableThatPointsToAnAnonymousFunction anonymous-function-calls-eval.html (line 14:62)
</del><ins>+   startTest anonymous-function-calls-eval.html (line 10:19)
+      variableThatPointsToAnAnonymousFunction anonymous-function-calls-eval.html (line 14:59)
</ins><span class="cx">          eval (no file) (line 0:0)
</span><span class="cx">             (program) (no file) (line 1:1)
</span><del>-               insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+               insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                   createElement (no file) (line 0:0)
</span><span class="cx">                   createTextNode (no file) (line 0:0)
</span><span class="cx">                   appendChild (no file) (line 0:0)
</span><span class="cx">                   getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileranonymousfunctionswithdisplaynamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/anonymous-functions-with-display-names-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/anonymous-functions-with-display-names-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/anonymous-functions-with-display-names-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,13 +4,13 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Anonymous functions with display names
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest anonymous-functions-with-display-names.html (line 23:1)
-      anonymousFunctionGenerator anonymous-functions-with-display-names.html (line 11:1)
-      0 iterations function anonymous-functions-with-display-names.html (line 13:5)
-      1 iterations function anonymous-functions-with-display-names.html (line 13:5)
-      2 iterations function anonymous-functions-with-display-names.html (line 13:5)
-      20 iterations function anonymous-functions-with-display-names.html (line 13:5)
-      1000 iterations function anonymous-functions-with-display-names.html (line 13:5)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest anonymous-functions-with-display-names.html (line 22:19)
+      anonymousFunctionGenerator anonymous-functions-with-display-names.html (line 10:36)
+      0 iterations function anonymous-functions-with-display-names.html (line 12:59)
+      1 iterations function anonymous-functions-with-display-names.html (line 12:59)
+      2 iterations function anonymous-functions-with-display-names.html (line 12:59)
+      20 iterations function anonymous-functions-with-display-names.html (line 12:59)
+      1000 iterations function anonymous-functions-with-display-names.html (line 12:59)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerapplyexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/apply-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/apply-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/apply-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,9 +4,9 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Using the apply() method
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest apply.html (line 11:1)
-      fakeObject apply.html (line 18:1)
-         fakeInteriorFunction apply.html (line 24:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest apply.html (line 10:19)
+      fakeObject apply.html (line 17:21)
+         fakeInteriorFunction apply.html (line 23:30)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerbuiltinfunctioncallsanonymousexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Built-in function calls an anonymous function
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest built-in-function-calls-anonymous.html (line 11:1)
</del><ins>+   startTest built-in-function-calls-anonymous.html (line 10:19)
</ins><span class="cx">       Array (no file) (line 0:0)
</span><span class="cx">       map (no file) (line 0:0)
</span><span class="cx">          Object (no file) (line 0:0)
</span><span class="lines">@@ -12,8 +12,8 @@
</span><span class="cx">             toInteger (no file) (line 0:0)
</span><span class="cx">                Number (no file) (line 0:0)
</span><span class="cx">                (anonymous function) (no file) (line 0:0)
</span><del>-         myFunction built-in-function-calls-anonymous.html (line 14:45)
-            arrayOperatorFunction profiler-test-JS-resources.js (line 25:46)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+         myFunction built-in-function-calls-anonymous.html (line 14:30)
+            arrayOperatorFunction profiler-test-JS-resources.js (line 25:31)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerbuiltinfunctioncallsuserdefinedfunctionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/built-in-function-calls-user-defined-function-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/built-in-function-calls-user-defined-function-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/built-in-function-calls-user-defined-function-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Built-in function calls a user defined function
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest built-in-function-calls-user-defined-function.html (line 11:1)
</del><ins>+   startTest built-in-function-calls-user-defined-function.html (line 10:19)
</ins><span class="cx">       Array (no file) (line 0:0)
</span><span class="cx">       map (no file) (line 0:0)
</span><span class="cx">          Object (no file) (line 0:0)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">             toInteger (no file) (line 0:0)
</span><span class="cx">                Number (no file) (line 0:0)
</span><span class="cx">                (anonymous function) (no file) (line 0:0)
</span><del>-         arrayOperatorFunction profiler-test-JS-resources.js (line 25:46)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+         arrayOperatorFunction profiler-test-JS-resources.js (line 25:31)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilercallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/call-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/call-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/call-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,9 +4,9 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Using the call() method
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest call.html (line 11:1)
-      fakeObject call.html (line 20:1)
-         fakeInteriorFunction call.html (line 26:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest call.html (line 10:19)
+      fakeObject call.html (line 19:21)
+         fakeInteriorFunction call.html (line 25:30)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilercallingthefunctionthatstartedtheprofilerfromanotherscopeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/calling-the-function-that-started-the-profiler-from-another-scope-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,9 +4,9 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Calling the same function where the profile started from another function
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   indirection calling-the-function-that-started-the-profiler-from-another-scope.html (line 18:1)
-      functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 24:1)
-   functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 24:1)
-   endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   indirection calling-the-function-that-started-the-profiler-from-another-scope.html (line 17:21)
+      functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 23:47)
+   functionWichStartsAndStopsTheProfiler calling-the-function-that-started-the-profiler-from-another-scope.html (line 23:47)
+   endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilercomparemultipleprofilesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/compare-multiple-profiles-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/compare-multiple-profiles-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/compare-multiple-profiles-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,14 +4,14 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Test
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest compare-multiple-profiles.html (line 23:1)
-      test compare-multiple-profiles.html (line 11:20)
-         test2 compare-multiple-profiles.html (line 17:21)
</del><ins>+   startTest compare-multiple-profiles.html (line 22:19)
+      test compare-multiple-profiles.html (line 11:14)
+         test2 compare-multiple-profiles.html (line 17:15)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Test
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest compare-multiple-profiles.html (line 23:1)
-      test compare-multiple-profiles.html (line 11:20)
-         test2 compare-multiple-profiles.html (line 17:21)
</del><ins>+   startTest compare-multiple-profiles.html (line 22:19)
+      test compare-multiple-profiles.html (line 11:14)
+         test2 compare-multiple-profiles.html (line 17:15)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerconstructorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/constructor-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/constructor-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/constructor-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,9 +4,9 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Using a constructor.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest constructor.html (line 11:1)
-      fakeObject constructor.html (line 20:1)
</del><ins>+   startTest constructor.html (line 10:19)
+      fakeObject constructor.html (line 19:21)
</ins><span class="cx">          Array (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</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 (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/dead-time-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/dead-time-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,10 +4,10 @@
</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:52)
-      startTest dead-time.html (line 13:1)
</del><ins>+   onload dead-time.html (line 21:44)
+      startTest dead-time.html (line 12:19)
</ins><span class="cx">          setTimeout (no file) (line 0:0)
</span><span class="cx">    (program) dead-time.html (line 1:1)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerdocumentdotwriteexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/document-dot-write-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/document-dot-write-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/document-dot-write-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -1,8 +1,8 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Call Document.write()
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest document-dot-write.html (line 11:1)
</del><ins>+   startTest document-dot-write.html (line 10:19)
</ins><span class="cx">       write (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilereventhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/event-handler-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/event-handler-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/event-handler-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,15 +4,15 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Event handler
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest event-handler.html (line 11:1)
</del><ins>+   startTest event-handler.html (line 10:19)
</ins><span class="cx">       getElementById (no file) (line 0:0)
</span><span class="cx">       addEventListener (no file) (line 0:0)
</span><span class="cx">       click (no file) (line 0:0)
</span><del>-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerexecutioncontextandevalonsamelineexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/execution-context-and-eval-on-same-line-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/execution-context-and-eval-on-same-line-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/execution-context-and-eval-on-same-line-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,13 +4,13 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Two Execution Contexts on the same line
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest execution-context-and-eval-on-same-line.html (line 11:1)
-      evalFunction (no file) (line 1:25)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest execution-context-and-eval-on-same-line.html (line 10:19)
+      evalFunction (no file) (line 1:22)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerinlineeventhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/inline-event-handler-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,17 +4,17 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Inline event handler
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest inline-event-handler.html (line 11:1)
</del><ins>+   startTest inline-event-handler.html (line 10:19)
</ins><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:135)
-            eventListener inline-event-handler.html (line 17:26)
-               anonymousFunction profiler-test-JS-resources.js (line 29:37)
-                  insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+         onclick inline-event-handler.html (line 31:127)
+            eventListener inline-event-handler.html (line 17:23)
+               anonymousFunction profiler-test-JS-resources.js (line 29:34)
+                  insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                      createElement (no file) (line 0:0)
</span><span class="cx">                      createTextNode (no file) (line 0:0)
</span><span class="cx">                      appendChild (no file) (line 0:0)
</span><span class="cx">                      getElementById (no file) (line 0:0)
</span><del>-               endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+               endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilermanycallsinthesamescopeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/many-calls-in-the-same-scope-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/many-calls-in-the-same-scope-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/many-calls-in-the-same-scope-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,33 +4,33 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Many Calls In The Same Scope
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest many-calls-in-the-same-scope.html (line 11:1)
-      insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest many-calls-in-the-same-scope.html (line 10:19)
+      insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">          createElement (no file) (line 0:0)
</span><span class="cx">          createTextNode (no file) (line 0:0)
</span><span class="cx">          appendChild (no file) (line 0:0)
</span><span class="cx">          getElementById (no file) (line 0:0)
</span><del>-      insertGivenText profiler-test-JS-resources.js (line 9:32)
</del><ins>+      insertGivenText profiler-test-JS-resources.js (line 9:25)
</ins><span class="cx">          createElement (no file) (line 0:0)
</span><span class="cx">          createTextNode (no file) (line 0:0)
</span><span class="cx">          appendChild (no file) (line 0:0)
</span><span class="cx">          getElementById (no file) (line 0:0)
</span><del>-      arrayOperatorFunction profiler-test-JS-resources.js (line 25:46)
-      intermediaryFunction profiler-test-JS-resources.js (line 33:1)
-         anonymousFunction profiler-test-JS-resources.js (line 29:37)
-            insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+      arrayOperatorFunction profiler-test-JS-resources.js (line 25:31)
+      intermediaryFunction profiler-test-JS-resources.js (line 32:30)
+         anonymousFunction profiler-test-JS-resources.js (line 29:34)
+            insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                createElement (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                getElementById (no file) (line 0:0)
</span><del>-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      end many-calls-in-the-same-scope.html (line 27:1)
-      endT many-calls-in-the-same-scope.html (line 32:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      end many-calls-in-the-same-scope.html (line 26:13)
+      endT many-calls-in-the-same-scope.html (line 31:14)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilermultipleanddifferentscopedanonymousfunctioncallsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-anonymous-function-calls-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,20 +4,20 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Multiple and different scoped calls to the same anonymous function
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest multiple-and-different-scoped-anonymous-function-calls.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest multiple-and-different-scoped-anonymous-function-calls.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      intermediaryFunction profiler-test-JS-resources.js (line 33:1)
-         anonymousFunction profiler-test-JS-resources.js (line 29:37)
-            insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+      intermediaryFunction profiler-test-JS-resources.js (line 32:30)
+         anonymousFunction profiler-test-JS-resources.js (line 29:34)
+            insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                createElement (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilermultipleanddifferentscopedfunctioncallsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/multiple-and-different-scoped-function-calls-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,19 +4,19 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Multiple and different scoped calls to the same function
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest multiple-and-different-scoped-function-calls.html (line 11:1)
-      insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest multiple-and-different-scoped-function-calls.html (line 10:19)
+      insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">          createElement (no file) (line 0:0)
</span><span class="cx">          createTextNode (no file) (line 0:0)
</span><span class="cx">          appendChild (no file) (line 0:0)
</span><span class="cx">          getElementById (no file) (line 0:0)
</span><del>-      intermediaryFunction profiler-test-JS-resources.js (line 33:1)
-         anonymousFunction profiler-test-JS-resources.js (line 29:37)
-            insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+      intermediaryFunction profiler-test-JS-resources.js (line 32:30)
+         anonymousFunction profiler-test-JS-resources.js (line 29:34)
+            insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                createElement (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilermultipleanonymousfunctionscalledfromthesamefunctionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/multiple-anonymous-functions-called-from-the-same-function-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,19 +4,19 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Multiple calls to different anonymous functions
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest multiple-anonymous-functions-called-from-the-same-function.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest multiple-anonymous-functions-called-from-the-same-function.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      anotherAnonymousFunction profiler-test-JS-resources.js (line 30:44)
-         insertGivenText profiler-test-JS-resources.js (line 9:32)
</del><ins>+      anotherAnonymousFunction profiler-test-JS-resources.js (line 30:41)
+         insertGivenText profiler-test-JS-resources.js (line 9:25)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilermultipleframesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/multiple-frames-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/multiple-frames-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/multiple-frames-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,15 +4,15 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Other window executing JavaScript
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest multiple-frames.html (line 11:1)
</del><ins>+   startTest multiple-frames.html (line 10:19)
</ins><span class="cx">       getElementById (no file) (line 0:0)
</span><del>-      functionInOtherFrame other-frame.html (line 4:33)
-         functionInParentFrame multiple-frames.html (line 21:34)
-      insertGivenText profiler-test-JS-resources.js (line 9:32)
</del><ins>+      functionInOtherFrame other-frame.html (line 4:30)
+         functionInParentFrame multiple-frames.html (line 21:31)
+      insertGivenText profiler-test-JS-resources.js (line 9:25)
</ins><span class="cx">          createElement (no file) (line 0:0)
</span><span class="cx">          createTextNode (no file) (line 0:0)
</span><span class="cx">          appendChild (no file) (line 0:0)
</span><span class="cx">          getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilernamedfunctionswithdisplaynamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/named-functions-with-display-names-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/named-functions-with-display-names-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/named-functions-with-display-names-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,13 +4,13 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Named functions with display names
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest named-functions-with-display-names.html (line 54:1)
-      0 iterations function named-functions-with-display-names.html (line 11:1)
-      1 iteration function named-functions-with-display-names.html (line 18:1)
-      2 iterations function named-functions-with-display-names.html (line 25:1)
-      20 iterations function named-functions-with-display-names.html (line 32:1)
-      1000 iterations function named-functions-with-display-names.html (line 39:1)
-      bogusDisplayNameFunction named-functions-with-display-names.html (line 47:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest named-functions-with-display-names.html (line 53:19)
+      0 iterations function named-functions-with-display-names.html (line 10:19)
+      1 iteration function named-functions-with-display-names.html (line 17:19)
+      2 iterations function named-functions-with-display-names.html (line 24:19)
+      20 iterations function named-functions-with-display-names.html (line 31:20)
+      1000 iterations function named-functions-with-display-names.html (line 38:22)
+      bogusDisplayNameFunction named-functions-with-display-names.html (line 46:34)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilernestedanonymousfunctonexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,14 +4,14 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Nested anonymous functions called
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-anonymous-functon.html (line 11:1)
-      AnonymousFunctionWichCallsAnAnonymousFunction nested-anonymous-functon.html (line 14:68)
-         anonymousFunction profiler-test-JS-resources.js (line 29:37)
-            insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest nested-anonymous-functon.html (line 10:19)
+      AnonymousFunctionWichCallsAnAnonymousFunction nested-anonymous-functon.html (line 14:65)
+         anonymousFunction profiler-test-JS-resources.js (line 29:34)
+            insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">                createElement (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilernestedstartandstopprofilerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/nested-start-and-stop-profiler-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/nested-start-and-stop-profiler-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/nested-start-and-stop-profiler-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,35 +4,35 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the third time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the third time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the second time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx">          profileEnd (no file) (line 0:0)
</span><del>-         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 63:1)
</del><ins>+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62:38)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><del>-            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                replace (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                children (no file) (line 0:0)
</span><del>-               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                   replace (no file) (line 0:0)
</span><span class="cx">                   createTextNode (no file) (line 0:0)
</span><span class="cx">                   appendChild (no file) (line 0:0)
</span><span class="cx">                   children (no file) (line 0:0)
</span><del>-                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                      replace (no file) (line 0:0)
</span><span class="cx">                      createTextNode (no file) (line 0:0)
</span><span class="cx">                      appendChild (no file) (line 0:0)
</span><span class="lines">@@ -43,29 +43,29 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the third time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the second time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx">          profileEnd (no file) (line 0:0)
</span><del>-         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 63:1)
</del><ins>+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62:38)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><del>-            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                replace (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                children (no file) (line 0:0)
</span><del>-               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                   replace (no file) (line 0:0)
</span><span class="cx">                   createTextNode (no file) (line 0:0)
</span><span class="cx">                   appendChild (no file) (line 0:0)
</span><span class="cx">                   children (no file) (line 0:0)
</span><del>-                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                      replace (no file) (line 0:0)
</span><span class="cx">                      createTextNode (no file) (line 0:0)
</span><span class="cx">                      appendChild (no file) (line 0:0)
</span><span class="lines">@@ -75,49 +75,49 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the first time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest nested-start-and-stop-profiler.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest nested-start-and-stop-profiler.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx">          profileEnd (no file) (line 0:0)
</span><del>-         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 63:1)
</del><ins>+         printProfilesDataWithoutTime profiler-test-JS-resources.js (line 62:38)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><del>-            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+            printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                replace (no file) (line 0:0)
</span><span class="cx">                createTextNode (no file) (line 0:0)
</span><span class="cx">                appendChild (no file) (line 0:0)
</span><span class="cx">                children (no file) (line 0:0)
</span><del>-               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+               printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                   replace (no file) (line 0:0)
</span><span class="cx">                   createTextNode (no file) (line 0:0)
</span><span class="cx">                   appendChild (no file) (line 0:0)
</span><span class="cx">                   children (no file) (line 0:0)
</span><del>-                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                  printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                      replace (no file) (line 0:0)
</span><span class="cx">                      createTextNode (no file) (line 0:0)
</span><span class="cx">                      appendChild (no file) (line 0:0)
</span><span class="cx">                      children (no file) (line 0:0)
</span><del>-                     printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                     printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                         replace (no file) (line 0:0)
</span><span class="cx">                         createTextNode (no file) (line 0:0)
</span><span class="cx">                         appendChild (no file) (line 0:0)
</span><span class="cx">                         children (no file) (line 0:0)
</span><del>-                        printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                        printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                            replace (no file) (line 0:0)
</span><span class="cx">                            createTextNode (no file) (line 0:0)
</span><span class="cx">                            appendChild (no file) (line 0:0)
</span><span class="cx">                            children (no file) (line 0:0)
</span><del>-                           printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                           printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                               replace (no file) (line 0:0)
</span><span class="cx">                               createTextNode (no file) (line 0:0)
</span><span class="cx">                               appendChild (no file) (line 0:0)
</span><span class="cx">                               children (no file) (line 0:0)
</span><del>-                              printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                              printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                                  replace (no file) (line 0:0)
</span><span class="cx">                                  createTextNode (no file) (line 0:0)
</span><span class="cx">                                  appendChild (no file) (line 0:0)
</span><span class="cx">                                  children (no file) (line 0:0)
</span><del>-                                 printProfileNodeWithoutTime profiler-test-JS-resources.js (line 78:1)
</del><ins>+                                 printProfileNodeWithoutTime profiler-test-JS-resources.js (line 77:37)
</ins><span class="cx">                                     replace (no file) (line 0:0)
</span><span class="cx">                                     createTextNode (no file) (line 0:0)
</span><span class="cx">                                     appendChild (no file) (line 0:0)
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileroneexecutioncontextexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/one-execution-context-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/one-execution-context-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/one-execution-context-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: One Execution Context
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest one-execution-context.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest one-execution-context.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerprofilecallsinincludedfileexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/profile-calls-in-included-file-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/profile-calls-in-included-file-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/profile-calls-in-included-file-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Profile call in included file
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startProfile profiler-test-JS-resources.js (line 43:1)
-   endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startProfile profiler-test-JS-resources.js (line 42:22)
+   endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerprofilewithnotitleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/profile-with-no-title-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/profile-with-no-title-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/profile-with-no-title-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: 
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest profile-with-no-title.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest profile-with-no-title.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerprofilingfromanestedlocationbutstopprofilingoutsidethenestingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Profiling From A Nested Location But Stop Profiling Outside The Nesting
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   functionWichStartsTheProfiler profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html (line 17:1)
-   endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   functionWichStartsTheProfiler profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html (line 16:39)
+   endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerprofilingfromanestedlocationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/profiling-from-a-nested-location-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Profiling From A Nested Location
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   functionWichStartsAndStopsTheProfiler profiling-from-a-nested-location.html (line 16:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   functionWichStartsAndStopsTheProfiler profiling-from-a-nested-location.html (line 15:47)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilersimpleeventcallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/simple-event-call-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/simple-event-call-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/simple-event-call-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: A simple profile test where an event happens.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest simple-event-call.html (line 11:1)
-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+   startTest simple-event-call.html (line 10:19)
+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilersimplenolevelchangeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/simple-no-level-change-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/simple-no-level-change-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/simple-no-level-change-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: A simple profile test where no scope chagnes
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   functionWichStartsAndStopsTheProfiler simple-no-level-change.html (line 16:1)
</del><ins>+   functionWichStartsAndStopsTheProfiler simple-no-level-change.html (line 15:47)
</ins><span class="cx">       getElementById (no file) (line 0:0)
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerstartandstopprofilermultipletimesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/start-and-stop-profiler-multiple-times-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,70 +4,70 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the first time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the first time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the second time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the first time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the second time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> Profile title: Start the profiler the third time.
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiler-multiple-times.html (line 11:1)
-      anonymousFunction profiler-test-JS-resources.js (line 29:37)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest start-and-stop-profiler-multiple-times.html (line 10:19)
+      anonymousFunction profiler-test-JS-resources.js (line 29:34)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerstartandstopprofilinginthesamefunctionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/start-and-stop-profiling-in-the-same-function-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Profiling From A Nested Location
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest start-and-stop-profiling-in-the-same-function.html (line 11:1)
-      functionWichStopsTheProfiler start-and-stop-profiling-in-the-same-function.html (line 18:1)
</del><ins>+   startTest start-and-stop-profiling-in-the-same-function.html (line 10:19)
+      functionWichStopsTheProfiler start-and-stop-profiling-in-the-same-function.html (line 17:38)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerstopprofilingaftersetTimeoutexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/stop-profiling-after-setTimeout-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,10 +4,10 @@
</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:52)
-      startTest stop-profiling-after-setTimeout.html (line 13:1)
</del><ins>+   onload stop-profiling-after-setTimeout.html (line 21:44)
+      startTest stop-profiling-after-setTimeout.html (line 12:19)
</ins><span class="cx">          setTimeout (no file) (line 0:0)
</span><span class="cx">    (program) stop-profiling-after-setTimeout.html (line 1:1)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerstopthenfunctioncallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/stop-then-function-call-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/stop-then-function-call-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/stop-then-function-call-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -5,6 +5,6 @@
</span><span class="cx"> Profile title: Test
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><span class="cx">    (program) (no file) (line 1:16)
</span><del>-      test stop-then-function-call.html (line 11:20)
</del><ins>+      test stop-then-function-call.html (line 11:14)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilertwoexecutioncontextsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/two-execution-contexts-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/two-execution-contexts-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/two-execution-contexts-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,8 +4,8 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Two Execution Contexts
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest two-execution-contexts.html (line 11:1)
-      intermediaryFunction two-execution-contexts.html (line 18:1)
-         testEnd two-execution-contexts.html (line 33:20)
</del><ins>+   startTest two-execution-contexts.html (line 10:19)
+      intermediaryFunction two-execution-contexts.html (line 17:30)
+         testEnd two-execution-contexts.html (line 33:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofileruserdefinedfunctioncallsbuiltinfunctionsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/user-defined-function-calls-built-in-functions-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -6,11 +6,11 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: User defined function calles built-in functions
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest user-defined-function-calls-built-in-functions.html (line 11:1)
</del><ins>+   startTest user-defined-function-calls-built-in-functions.html (line 10:19)
</ins><span class="cx">       createElement (no file) (line 0:0)
</span><span class="cx">       createTextNode (no file) (line 0:0)
</span><span class="cx">       appendChild (no file) (line 0:0)
</span><span class="cx">       getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastprofilerwindowdotevalexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/profiler/window-dot-eval-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/profiler/window-dot-eval-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/fast/profiler/window-dot-eval-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -4,13 +4,13 @@
</span><span class="cx"> 
</span><span class="cx"> Profile title: Call window.eval()
</span><span class="cx"> Thread_1 (no file) (line 0:0)
</span><del>-   startTest window-dot-eval.html (line 11:1)
-      evalFunction (no file) (line 1:25)
-         insertNewText profiler-test-JS-resources.js (line 17:26)
</del><ins>+   startTest window-dot-eval.html (line 10:19)
+      evalFunction (no file) (line 1:22)
+         insertNewText profiler-test-JS-resources.js (line 17:23)
</ins><span class="cx">             createElement (no file) (line 0:0)
</span><span class="cx">             createTextNode (no file) (line 0:0)
</span><span class="cx">             appendChild (no file) (line 0:0)
</span><span class="cx">             getElementById (no file) (line 0:0)
</span><del>-      endTest profiler-test-JS-resources.js (line 1:20)
</del><ins>+      endTest profiler-test-JS-resources.js (line 1:17)
</ins><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomscriptstartendlocationsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/LayoutTests/js/dom/script-start-end-locations-expected.txt        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -5,273 +5,273 @@
</span><span class="cx"> program { 23:68 - 23:109 }
</span><span class="cx"> program { 25:9 - 26:1 }
</span><span class="cx"> program { 27:13 - 28:1 }
</span><del>-function &quot;hf1&quot; { 30:24 - 30:38 }
-function &quot;hf2&quot; { 31:28 - 31:42 }
-function &quot;hf3&quot; { 32:32 - 32:46 }
-function &quot;hf4&quot; { 34:24 - 36:9 }
-function &quot;hf5&quot; { 37:28 - 39:9 }
-function &quot;hf6&quot; { 40:32 - 42:9 }
-function &quot;hf7&quot; { 45:16 - 47:5 }
-function &quot;hf8&quot; { 49:35 - 49:45 }
-function &quot;hf9&quot; { 49:97 - 49:107 }
</del><ins>+function &quot;hf1&quot; { 30:21 - 30:38 }
+function &quot;hf2&quot; { 31:25 - 31:42 }
+function &quot;hf3&quot; { 32:29 - 32:46 }
+function &quot;hf4&quot; { 34:21 - 36:9 }
+function &quot;hf5&quot; { 37:25 - 39:9 }
+function &quot;hf6&quot; { 40:29 - 42:9 }
+function &quot;hf7&quot; { 45:13 - 47:5 }
+function &quot;hf8&quot; { 49:32 - 49:45 }
+function &quot;hf9&quot; { 49:94 - 49:107 }
</ins><span class="cx"> 
</span><span class="cx"> program { 1:1 - 474:1 }
</span><span class="cx"> 
</span><span class="cx">   On first line:
</span><del>-function &quot;f0&quot; { 1:115 - 1:266 }
-function &quot;f0a&quot; { 1:142 - 1:257 }
-function &quot;f0b&quot; { 1:170 - 1:248 }
</del><ins>+function &quot;f0&quot; { 1:112 - 1:266 }
+function &quot;f0a&quot; { 1:139 - 1:257 }
+function &quot;f0b&quot; { 1:167 - 1:248 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;x0&quot; { 1:298 - 1:476 }
-function &quot;x0a&quot; { 1:330 - 1:466 }
-function &quot;x0b&quot; { 1:364 - 1:456 }
</del><ins>+function &quot;x0&quot; { 1:292 - 1:476 }
+function &quot;x0a&quot; { 1:327 - 1:466 }
+function &quot;x0b&quot; { 1:361 - 1:456 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Functions Declarations in a function:
</span><del>-function &quot;f1&quot; { 9:22 - 9:113 }
</del><ins>+function &quot;f1&quot; { 9:16 - 9:113 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;f2&quot; { 12:22 - 16:5 }
-function &quot;f2a&quot; { 14:24 - 14:116 }
</del><ins>+function &quot;f2&quot; { 12:16 - 16:5 }
+function &quot;f2a&quot; { 14:21 - 14:116 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;f3&quot; { 19:22 - 31:5 }
-function &quot;f3a&quot; { 21:24 - 29:9 }
-function &quot;f3b&quot; { 23:28 - 27:13 }
</del><ins>+function &quot;f3&quot; { 19:16 - 31:5 }
+function &quot;f3a&quot; { 21:21 - 29:9 }
+function &quot;f3b&quot; { 23:25 - 27:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;f4&quot; { 34:22 - 34:71 }
-function &quot;f4a&quot; { 34:49 - 34:50 }
-function &quot;f5&quot; { 36:22 - 36:151 }
-function &quot;f5a&quot; { 36:49 - 36:141 }
</del><ins>+function &quot;f4&quot; { 34:16 - 34:71 }
+function &quot;f4a&quot; { 34:46 - 34:50 }
+function &quot;f5&quot; { 36:16 - 36:151 }
+function &quot;f5a&quot; { 36:46 - 36:141 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;f6&quot; { 38:22 - 38:189 }
-function &quot;f6a&quot; { 38:49 - 38:179 }
-function &quot;f6b&quot; { 38:77 - 38:169 }
</del><ins>+function &quot;f6&quot; { 38:16 - 38:189 }
+function &quot;f6a&quot; { 38:46 - 38:179 }
+function &quot;f6b&quot; { 38:74 - 38:169 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Indented Functions Declarations in a function:
</span><del>-function &quot;fi1&quot; { 43:27 - 43:119 }
</del><ins>+function &quot;fi1&quot; { 43:21 - 43:119 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;fi2&quot; { 46:27 - 50:9 }
-function &quot;fi2a&quot; { 48:29 - 48:122 }
</del><ins>+function &quot;fi2&quot; { 46:21 - 50:9 }
+function &quot;fi2a&quot; { 48:26 - 48:122 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;fi3&quot; { 53:27 - 65:9 }
-function &quot;fi3a&quot; { 55:29 - 63:13 }
-function &quot;fi3b&quot; { 57:33 - 61:17 }
</del><ins>+function &quot;fi3&quot; { 53:21 - 65:9 }
+function &quot;fi3a&quot; { 55:26 - 63:13 }
+function &quot;fi3b&quot; { 57:30 - 61:17 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;fi4&quot; { 68:27 - 68:80 }
-function &quot;fi4a&quot; { 68:56 - 68:57 }
-function &quot;fi5&quot; { 70:27 - 70:160 }
-function &quot;fi5a&quot; { 70:56 - 70:149 }
</del><ins>+function &quot;fi4&quot; { 68:21 - 68:80 }
+function &quot;fi4a&quot; { 68:53 - 68:57 }
+function &quot;fi5&quot; { 70:21 - 70:160 }
+function &quot;fi5a&quot; { 70:53 - 70:149 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;fi6&quot; { 72:27 - 72:201 }
-function &quot;fi6a&quot; { 72:56 - 72:190 }
-function &quot;fi6b&quot; { 72:86 - 72:179 }
</del><ins>+function &quot;fi6&quot; { 72:21 - 72:201 }
+function &quot;fi6a&quot; { 72:53 - 72:190 }
+function &quot;fi6b&quot; { 72:83 - 72:179 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Functions Expressions in a function:
</span><del>-function &quot;x1&quot; { 77:28 - 77:119 }
</del><ins>+function &quot;x1&quot; { 77:22 - 77:119 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;x2&quot; { 80:28 - 84:5 }
-function &quot;x2a&quot; { 82:30 - 82:122 }
</del><ins>+function &quot;x2&quot; { 80:22 - 84:5 }
+function &quot;x2a&quot; { 82:27 - 82:122 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;x3&quot; { 87:28 - 99:5 }
-function &quot;x3a&quot; { 89:30 - 97:9 }
-function &quot;x3b&quot; { 91:34 - 95:13 }
</del><ins>+function &quot;x3&quot; { 87:22 - 99:5 }
+function &quot;x3a&quot; { 89:27 - 97:9 }
+function &quot;x3b&quot; { 91:31 - 95:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;x4&quot; { 102:28 - 102:83 }
-function &quot;x4a&quot; { 102:61 - 102:62 }
-function &quot;x5&quot; { 104:28 - 104:163 }
-function &quot;x5a&quot; { 104:61 - 104:153 }
</del><ins>+function &quot;x4&quot; { 102:22 - 102:83 }
+function &quot;x4a&quot; { 102:58 - 102:62 }
+function &quot;x5&quot; { 104:22 - 104:163 }
+function &quot;x5a&quot; { 104:58 - 104:153 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;x6&quot; { 106:28 - 106:207 }
-function &quot;x6a&quot; { 106:61 - 106:197 }
-function &quot;x6b&quot; { 106:95 - 106:187 }
</del><ins>+function &quot;x6&quot; { 106:22 - 106:207 }
+function &quot;x6a&quot; { 106:58 - 106:197 }
+function &quot;x6b&quot; { 106:92 - 106:187 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Indented Functions Expressions in a function:
</span><del>-function &quot;xi1&quot; { 111:33 - 111:125 }
</del><ins>+function &quot;xi1&quot; { 111:27 - 111:125 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;xi2&quot; { 114:33 - 118:9 }
-function &quot;xi2a&quot; { 116:35 - 116:128 }
</del><ins>+function &quot;xi2&quot; { 114:27 - 118:9 }
+function &quot;xi2a&quot; { 116:32 - 116:128 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;xi3&quot; { 121:33 - 133:9 }
-function &quot;xi3a&quot; { 123:35 - 131:13 }
-function &quot;xi3b&quot; { 125:39 - 129:17 }
</del><ins>+function &quot;xi3&quot; { 121:27 - 133:9 }
+function &quot;xi3a&quot; { 123:32 - 131:13 }
+function &quot;xi3b&quot; { 125:36 - 129:17 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;xi4&quot; { 136:33 - 136:92 }
-function &quot;xi4a&quot; { 136:68 - 136:69 }
-function &quot;xi5&quot; { 138:33 - 138:172 }
-function &quot;xi5a&quot; { 138:68 - 138:161 }
</del><ins>+function &quot;xi4&quot; { 136:27 - 136:92 }
+function &quot;xi4a&quot; { 136:65 - 136:69 }
+function &quot;xi5&quot; { 138:27 - 138:172 }
+function &quot;xi5a&quot; { 138:65 - 138:161 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;xi6&quot; { 140:33 - 140:219 }
-function &quot;xi6a&quot; { 140:68 - 140:208 }
-function &quot;xi6b&quot; { 140:104 - 140:197 }
</del><ins>+function &quot;xi6&quot; { 140:27 - 140:219 }
+function &quot;xi6a&quot; { 140:65 - 140:208 }
+function &quot;xi6b&quot; { 140:101 - 140:197 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Anonymous Function Declaration in a function:
</span><del>-function &quot;&quot; { 146:58 - 151:5 }
</del><ins>+function &quot;&quot; { 146:52 - 151:5 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Global eval:
</span><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Global Functions Declarations:
</span><del>-function &quot;gf1&quot; { 161:19 - 161:111 }
</del><ins>+function &quot;gf1&quot; { 161:13 - 161:111 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gf2&quot; { 164:19 - 168:1 }
-function &quot;gf2a&quot; { 166:21 - 166:114 }
</del><ins>+function &quot;gf2&quot; { 164:13 - 168:1 }
+function &quot;gf2a&quot; { 166:18 - 166:114 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gf3&quot; { 171:19 - 183:1 }
-function &quot;gf3a&quot; { 173:21 - 181:5 }
-function &quot;gf3b&quot; { 175:25 - 179:9 }
</del><ins>+function &quot;gf3&quot; { 171:13 - 183:1 }
+function &quot;gf3a&quot; { 173:18 - 181:5 }
+function &quot;gf3b&quot; { 175:22 - 179:9 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gf4&quot; { 186:19 - 186:72 }
-function &quot;gf4a&quot; { 186:48 - 186:49 }
-function &quot;gf5&quot; { 188:19 - 188:152 }
-function &quot;gf5a&quot; { 188:48 - 188:141 }
</del><ins>+function &quot;gf4&quot; { 186:13 - 186:72 }
+function &quot;gf4a&quot; { 186:45 - 186:49 }
+function &quot;gf5&quot; { 188:13 - 188:152 }
+function &quot;gf5a&quot; { 188:45 - 188:141 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gf6&quot; { 190:19 - 190:193 }
-function &quot;gf6a&quot; { 190:48 - 190:182 }
-function &quot;gf6b&quot; { 190:78 - 190:171 }
</del><ins>+function &quot;gf6&quot; { 190:13 - 190:193 }
+function &quot;gf6a&quot; { 190:45 - 190:182 }
+function &quot;gf6b&quot; { 190:75 - 190:171 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Indented Global Functions Declarations:
</span><del>-function &quot;gfi1&quot; { 195:24 - 195:117 }
</del><ins>+function &quot;gfi1&quot; { 195:18 - 195:117 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gfi2&quot; { 198:24 - 202:5 }
-function &quot;gfi2a&quot; { 200:26 - 200:120 }
</del><ins>+function &quot;gfi2&quot; { 198:18 - 202:5 }
+function &quot;gfi2a&quot; { 200:23 - 200:120 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gfi3&quot; { 205:24 - 217:5 }
-function &quot;gfi3a&quot; { 207:26 - 215:9 }
-function &quot;gfi3b&quot; { 209:30 - 213:13 }
</del><ins>+function &quot;gfi3&quot; { 205:18 - 217:5 }
+function &quot;gfi3a&quot; { 207:23 - 215:9 }
+function &quot;gfi3b&quot; { 209:27 - 213:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gfi4&quot; { 220:24 - 220:81 }
-function &quot;gfi4a&quot; { 220:55 - 220:56 }
-function &quot;gfi5&quot; { 222:24 - 222:161 }
-function &quot;gfi5a&quot; { 222:55 - 222:149 }
</del><ins>+function &quot;gfi4&quot; { 220:18 - 220:81 }
+function &quot;gfi4a&quot; { 220:52 - 220:56 }
+function &quot;gfi5&quot; { 222:18 - 222:161 }
+function &quot;gfi5a&quot; { 222:52 - 222:149 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gfi6&quot; { 224:24 - 224:205 }
-function &quot;gfi6a&quot; { 224:55 - 224:193 }
-function &quot;gfi6b&quot; { 224:87 - 224:181 }
</del><ins>+function &quot;gfi6&quot; { 224:18 - 224:205 }
+function &quot;gfi6a&quot; { 224:52 - 224:193 }
+function &quot;gfi6b&quot; { 224:84 - 224:181 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Global Functions Expressions:
</span><del>-function &quot;gx1&quot; { 229:25 - 229:117 }
</del><ins>+function &quot;gx1&quot; { 229:19 - 229:117 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gx2&quot; { 232:25 - 236:1 }
-function &quot;gx2a&quot; { 234:27 - 234:120 }
</del><ins>+function &quot;gx2&quot; { 232:19 - 236:1 }
+function &quot;gx2a&quot; { 234:24 - 234:120 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gx3&quot; { 239:25 - 251:1 }
-function &quot;gx3a&quot; { 241:27 - 249:5 }
-function &quot;gx3b&quot; { 243:31 - 247:9 }
</del><ins>+function &quot;gx3&quot; { 239:19 - 251:1 }
+function &quot;gx3a&quot; { 241:24 - 249:5 }
+function &quot;gx3b&quot; { 243:28 - 247:9 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gx4&quot; { 254:25 - 254:84 }
-function &quot;gx4a&quot; { 254:60 - 254:61 }
-function &quot;gx5&quot; { 256:25 - 256:164 }
-function &quot;gx5a&quot; { 256:60 - 256:153 }
</del><ins>+function &quot;gx4&quot; { 254:19 - 254:84 }
+function &quot;gx4a&quot; { 254:57 - 254:61 }
+function &quot;gx5&quot; { 256:19 - 256:164 }
+function &quot;gx5a&quot; { 256:57 - 256:153 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gx6&quot; { 258:25 - 258:211 }
-function &quot;gx6a&quot; { 258:60 - 258:200 }
-function &quot;gx6b&quot; { 258:96 - 258:189 }
</del><ins>+function &quot;gx6&quot; { 258:19 - 258:211 }
+function &quot;gx6a&quot; { 258:57 - 258:200 }
+function &quot;gx6b&quot; { 258:93 - 258:189 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Indented Functions Declarations:
</span><del>-function &quot;gxi1&quot; { 263:30 - 263:123 }
</del><ins>+function &quot;gxi1&quot; { 263:24 - 263:123 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gxi2&quot; { 266:30 - 270:5 }
-function &quot;gxi2a&quot; { 268:32 - 268:126 }
</del><ins>+function &quot;gxi2&quot; { 266:24 - 270:5 }
+function &quot;gxi2a&quot; { 268:29 - 268:126 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gxi3&quot; { 273:30 - 285:5 }
-function &quot;gxi3a&quot; { 275:32 - 283:9 }
-function &quot;gxi3b&quot; { 277:36 - 281:13 }
</del><ins>+function &quot;gxi3&quot; { 273:24 - 285:5 }
+function &quot;gxi3a&quot; { 275:29 - 283:9 }
+function &quot;gxi3b&quot; { 277:33 - 281:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gxi4&quot; { 288:30 - 288:93 }
-function &quot;gxi4a&quot; { 288:67 - 288:68 }
-function &quot;gxi5&quot; { 290:30 - 290:173 }
-function &quot;gxi5a&quot; { 290:67 - 290:161 }
</del><ins>+function &quot;gxi4&quot; { 288:24 - 288:93 }
+function &quot;gxi4a&quot; { 288:64 - 288:68 }
+function &quot;gxi5&quot; { 290:24 - 290:173 }
+function &quot;gxi5a&quot; { 290:64 - 290:161 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;gxi6&quot; { 292:30 - 292:223 }
-function &quot;gxi6a&quot; { 292:67 - 292:211 }
-function &quot;gxi6b&quot; { 292:105 - 292:199 }
</del><ins>+function &quot;gxi6&quot; { 292:24 - 292:223 }
+function &quot;gxi6a&quot; { 292:64 - 292:211 }
+function &quot;gxi6b&quot; { 292:102 - 292:199 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Anonymous Global Function Declarations:
</span><del>-function &quot;&quot; { 299:56 - 304:1 }
</del><ins>+function &quot;&quot; { 299:50 - 304:1 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Function Declarations in an eval:
</span><span class="cx"> eval { 1:1 - 16:7 }
</span><del>-function &quot;ef1&quot; { 3:20 - 14:5 }
-function &quot;ef1a&quot; { 5:25 - 12:9 }
-function &quot;ef1b&quot; { 7:29 - 10:13 }
</del><ins>+function &quot;ef1&quot; { 3:17 - 14:5 }
+function &quot;ef1a&quot; { 5:22 - 12:9 }
+function &quot;ef1b&quot; { 7:26 - 10:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 1:225 }
</span><del>-function &quot;ef2&quot; { 1:59 - 1:217 }
-function &quot;ef2a&quot; { 1:88 - 1:207 }
-function &quot;ef2b&quot; { 1:118 - 1:197 }
</del><ins>+function &quot;ef2&quot; { 1:56 - 1:217 }
+function &quot;ef2a&quot; { 1:85 - 1:207 }
+function &quot;ef2b&quot; { 1:115 - 1:197 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 17:8 }
</span><del>-function &quot;efi1&quot; { 4:21 - 15:5 }
-function &quot;efi1a&quot; { 6:26 - 13:9 }
-function &quot;efi1b&quot; { 8:30 - 11:13 }
</del><ins>+function &quot;efi1&quot; { 4:18 - 15:5 }
+function &quot;efi1a&quot; { 6:23 - 13:9 }
+function &quot;efi1b&quot; { 8:27 - 11:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 1:234 }
</span><del>-function &quot;efi2&quot; { 1:60 - 1:225 }
-function &quot;efi2a&quot; { 1:91 - 1:214 }
-function &quot;efi2b&quot; { 1:123 - 1:203 }
</del><ins>+function &quot;efi2&quot; { 1:57 - 1:225 }
+function &quot;efi2a&quot; { 1:88 - 1:214 }
+function &quot;efi2b&quot; { 1:120 - 1:203 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   Function Expressions in an eval:
</span><span class="cx"> eval { 1:1 - 16:7 }
</span><del>-function &quot;ex1&quot; { 3:26 - 14:5 }
-function &quot;ex1a&quot; { 5:31 - 12:9 }
-function &quot;ex1b&quot; { 7:35 - 10:13 }
</del><ins>+function &quot;ex1&quot; { 3:23 - 14:5 }
+function &quot;ex1a&quot; { 5:28 - 12:9 }
+function &quot;ex1b&quot; { 7:32 - 10:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 1:246 }
</span><del>-function &quot;ex2&quot; { 1:65 - 1:237 }
-function &quot;ex2a&quot; { 1:100 - 1:226 }
-function &quot;ex2b&quot; { 1:136 - 1:215 }
</del><ins>+function &quot;ex2&quot; { 1:62 - 1:237 }
+function &quot;ex2a&quot; { 1:97 - 1:226 }
+function &quot;ex2b&quot; { 1:133 - 1:215 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 17:8 }
</span><del>-function &quot;exi1&quot; { 4:27 - 15:5 }
-function &quot;exi1a&quot; { 6:32 - 13:9 }
-function &quot;exi1b&quot; { 8:36 - 11:13 }
</del><ins>+function &quot;exi1&quot; { 4:24 - 15:5 }
+function &quot;exi1a&quot; { 6:29 - 13:9 }
+function &quot;exi1b&quot; { 8:33 - 11:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> eval { 1:1 - 1:255 }
</span><del>-function &quot;exi2&quot; { 1:66 - 1:245 }
-function &quot;exi2a&quot; { 1:103 - 1:233 }
-function &quot;exi2b&quot; { 1:141 - 1:221 }
</del><ins>+function &quot;exi2&quot; { 1:63 - 1:245 }
+function &quot;exi2a&quot; { 1:100 - 1:233 }
+function &quot;exi2b&quot; { 1:138 - 1:221 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><span class="cx"> 
</span><span class="cx">   new Function Object:
</span><del>-function &quot;anonymous&quot; { 1:27 - 2:228 }
-function &quot;nf1a&quot; { 2:60 - 2:219 }
-function &quot;nf1b&quot; { 2:90 - 2:209 }
-function &quot;nf1c&quot; { 2:120 - 2:199 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 2:228 }
+function &quot;nf1a&quot; { 2:57 - 2:219 }
+function &quot;nf1b&quot; { 2:87 - 2:209 }
+function &quot;nf1c&quot; { 2:117 - 2:199 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;anonymous&quot; { 1:27 - 18:8 }
-function &quot;nf2a&quot; { 5:21 - 16:5 }
-function &quot;nf2b&quot; { 7:25 - 14:9 }
-function &quot;nf2c&quot; { 9:29 - 12:13 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 18:8 }
+function &quot;nf2a&quot; { 5:18 - 16:5 }
+function &quot;nf2b&quot; { 7:22 - 14:9 }
+function &quot;nf2c&quot; { 9:26 - 12:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;anonymous&quot; { 1:27 - 2:228 }
-function &quot;nf1a&quot; { 2:60 - 2:219 }
-function &quot;nf1b&quot; { 2:90 - 2:209 }
-function &quot;nf1c&quot; { 2:120 - 2:199 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 2:228 }
+function &quot;nf1a&quot; { 2:57 - 2:219 }
+function &quot;nf1b&quot; { 2:87 - 2:209 }
+function &quot;nf1c&quot; { 2:117 - 2:199 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;anonymous&quot; { 1:27 - 2:237 }
-function &quot;nfi1a&quot; { 2:61 - 2:227 }
-function &quot;nfi1b&quot; { 2:93 - 2:216 }
-function &quot;nfi1c&quot; { 2:125 - 2:205 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 2:237 }
+function &quot;nfi1a&quot; { 2:58 - 2:227 }
+function &quot;nfi1b&quot; { 2:90 - 2:216 }
+function &quot;nfi1c&quot; { 2:122 - 2:205 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;anonymous&quot; { 1:27 - 18:8 }
-function &quot;nf2a&quot; { 5:21 - 16:5 }
-function &quot;nf2b&quot; { 7:25 - 14:9 }
-function &quot;nf2c&quot; { 9:29 - 12:13 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 18:8 }
+function &quot;nf2a&quot; { 5:18 - 16:5 }
+function &quot;nf2b&quot; { 7:22 - 14:9 }
+function &quot;nf2c&quot; { 9:26 - 12:13 }
</ins><span class="cx"> eval { 1:1 - 1:56 }
</span><del>-function &quot;anonymous&quot; { 1:27 - 18:9 }
-function &quot;nfi2a&quot; { 5:22 - 16:5 }
-function &quot;nfi2b&quot; { 7:26 - 14:9 }
-function &quot;nfi2c&quot; { 9:30 - 12:13 }
</del><ins>+function &quot;anonymous&quot; { 1:20 - 18:9 }
+function &quot;nfi2a&quot; { 5:19 - 16:5 }
+function &quot;nfi2b&quot; { 7:23 - 14:9 }
+function &quot;nfi2c&quot; { 9:27 - 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="trunkSourceJavaScriptCoreAPIJSScriptRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSScriptRef.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> static bool parseScript(VM* vm, const SourceCode&amp; source, ParserError&amp; error)
</span><span class="cx"> {
</span><span class="cx">     return !!JSC::parse&lt;JSC::ProgramNode&gt;(
</span><del>-        vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</del><ins>+        vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</ins><span class="cx">         JSParserStrictMode::NotStrict, JSParserCodeType::Program, 
</span><span class="cx">         error);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -1,3 +1,212 @@
</span><ins>+2015-07-17  Saam barati  &lt;saambarati1@gmail.com&gt;
+
+        Function parameters should be parsed in the same parser arena as the function body
+        https://bugs.webkit.org/show_bug.cgi?id=145995
+
+        Reviewed by Yusuke Suzuki.
+
+        This patch changes how functions are parsed in JSC. A function's
+        parameters are now parsed in the same arena as the function itself.
+        This allows us to arena allocate all destructuring AST nodes and
+        the FunctionParameters node. This will help make implementing ES6
+        default parameter values sane.
+
+        A source code that represents a function now includes the text of the function's 
+        parameters. The starting offset is at the opening parenthesis of the parameter
+        list or at the starting character of the identifier for arrow functions that
+        have single arguments and don't start with parenthesis.
+
+        For example:
+
+        &quot;function (param1, param2) { ... }&quot;
+                                   ^
+                                   | This offset used to be the starting offset of a function's SourceCode
+                  ^
+                  | This is the new starting offset for a function's SourceCode.
+
+        This requires us to change how some offsets are calculated
+        and also requires us to report some different line numbers for internal
+        metrics that use a SourceCode's starting line and column numbers.
+
+        This patch also does a bit of cleanup with regards to how
+        functions are parsed in general (especially arrow functions).
+        It removes some unnecessary #ifdefs and the likes for arrow
+        to make things clearer and more deliberate.
+
+        * API/JSScriptRef.cpp:
+        (parseScript):
+        * builtins/BuiltinExecutables.cpp:
+        (JSC::BuiltinExecutables::createExecutableInternal):
+        * bytecode/UnlinkedCodeBlock.cpp:
+        (JSC::generateFunctionCodeBlock):
+        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+        (JSC::UnlinkedFunctionExecutable::visitChildren):
+        (JSC::UnlinkedFunctionExecutable::parameterCount): Deleted.
+        * bytecode/UnlinkedCodeBlock.h:
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::DestructuringAssignmentNode::emitBytecode):
+        (JSC::assignDefaultValueIfUndefined):
+        (JSC::ArrayPatternNode::collectBoundIdentifiers):
+        (JSC::DestructuringPatternNode::~DestructuringPatternNode): Deleted.
+        * parser/ASTBuilder.h:
+        (JSC::ASTBuilder::createClassExpr):
+        (JSC::ASTBuilder::createFunctionExpr):
+        (JSC::ASTBuilder::createFunctionBody):
+        (JSC::ASTBuilder::createArrowFunctionExpr):
+        (JSC::ASTBuilder::createGetterOrSetterProperty):
+        (JSC::ASTBuilder::createElementList):
+        (JSC::ASTBuilder::createFormalParameterList):
+        (JSC::ASTBuilder::appendParameter):
+        (JSC::ASTBuilder::createClause):
+        (JSC::ASTBuilder::createClauseList):
+        (JSC::ASTBuilder::createFuncDeclStatement):
+        (JSC::ASTBuilder::createForInLoop):
+        (JSC::ASTBuilder::createForOfLoop):
+        (JSC::ASTBuilder::isResolve):
+        (JSC::ASTBuilder::createDestructuringAssignment):
+        (JSC::ASTBuilder::createArrayPattern):
+        (JSC::ASTBuilder::appendArrayPatternSkipEntry):
+        (JSC::ASTBuilder::appendArrayPatternEntry):
+        (JSC::ASTBuilder::appendArrayPatternRestEntry):
+        (JSC::ASTBuilder::finishArrayPattern):
+        (JSC::ASTBuilder::createObjectPattern):
+        (JSC::ASTBuilder::appendObjectPatternEntry):
+        (JSC::ASTBuilder::createBindingLocation):
+        (JSC::ASTBuilder::setEndOffset):
+        * parser/Lexer.cpp:
+        (JSC::Lexer&lt;T&gt;::Lexer):
+        (JSC::Lexer&lt;T&gt;::nextTokenIsColon):
+        (JSC::Lexer&lt;T&gt;::setTokenPosition):
+        (JSC::Lexer&lt;T&gt;::lex):
+        (JSC::Lexer&lt;T&gt;::clear):
+        * parser/Lexer.h:
+        (JSC::Lexer::setIsReparsingFunction):
+        (JSC::Lexer::isReparsingFunction):
+        (JSC::Lexer::lineNumber):
+        (JSC::Lexer::setIsReparsing): Deleted.
+        (JSC::Lexer::isReparsing): Deleted.
+        * parser/NodeConstructors.h:
+        (JSC::TryNode::TryNode):
+        (JSC::FunctionParameters::FunctionParameters):
+        (JSC::FuncExprNode::FuncExprNode):
+        (JSC::FuncDeclNode::FuncDeclNode):
+        (JSC::ArrayPatternNode::ArrayPatternNode):
+        (JSC::ObjectPatternNode::ObjectPatternNode):
+        (JSC::BindingNode::BindingNode):
+        (JSC::DestructuringAssignmentNode::DestructuringAssignmentNode):
+        (JSC::ParameterNode::ParameterNode): Deleted.
+        (JSC::ArrayPatternNode::create): Deleted.
+        (JSC::ObjectPatternNode::create): Deleted.
+        (JSC::BindingNode::create): Deleted.
+        * parser/Nodes.cpp:
+        (JSC::ProgramNode::ProgramNode):
+        (JSC::EvalNode::EvalNode):
+        (JSC::FunctionBodyNode::FunctionBodyNode):
+        (JSC::FunctionBodyNode::finishParsing):
+        (JSC::FunctionNode::FunctionNode):
+        (JSC::FunctionNode::finishParsing):
+        (JSC::FunctionParameters::create): Deleted.
+        (JSC::FunctionParameters::FunctionParameters): Deleted.
+        (JSC::FunctionParameters::~FunctionParameters): Deleted.
+        * parser/Nodes.h:
+        (JSC::ProgramNode::startColumn):
+        (JSC::ProgramNode::endColumn):
+        (JSC::EvalNode::startColumn):
+        (JSC::EvalNode::endColumn):
+        (JSC::FunctionParameters::size):
+        (JSC::FunctionParameters::at):
+        (JSC::FunctionParameters::append):
+        (JSC::FuncExprNode::body):
+        (JSC::DestructuringPatternNode::~DestructuringPatternNode):
+        (JSC::DestructuringPatternNode::isBindingNode):
+        (JSC::DestructuringPatternNode::emitDirectBinding):
+        (JSC::ArrayPatternNode::appendIndex):
+        (JSC::ObjectPatternNode::appendEntry):
+        (JSC::BindingNode::boundProperty):
+        (JSC::BindingNode::divotStart):
+        (JSC::BindingNode::divotEnd):
+        (JSC::DestructuringAssignmentNode::bindings):
+        (JSC::FuncDeclNode::body):
+        (JSC::ParameterNode::pattern): Deleted.
+        (JSC::ParameterNode::nextParam): Deleted.
+        (JSC::FunctionParameters::patterns): Deleted.
+        * parser/Parser.cpp:
+        (JSC::Parser&lt;LexerType&gt;::Parser):
+        (JSC::Parser&lt;LexerType&gt;::~Parser):
+        (JSC::Parser&lt;LexerType&gt;::parseInner):
+        (JSC::Parser&lt;LexerType&gt;::allowAutomaticSemicolon):
+        (JSC::Parser&lt;LexerType&gt;::parseSourceElements):
+        (JSC::Parser&lt;LexerType&gt;::createBindingPattern):
+        (JSC::Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBodySourceElements):
+        (JSC::Parser&lt;LexerType&gt;::tryParseDestructuringPatternExpression):
+        (JSC::Parser&lt;LexerType&gt;::parseSwitchClauses):
+        (JSC::Parser&lt;LexerType&gt;::parseSwitchDefaultClause):
+        (JSC::Parser&lt;LexerType&gt;::parseBlockStatement):
+        (JSC::Parser&lt;LexerType&gt;::parseStatement):
+        (JSC::Parser&lt;LexerType&gt;::parseFormalParameters):
+        (JSC::Parser&lt;LexerType&gt;::parseFunctionBody):
+        (JSC::stringForFunctionMode):
+        (JSC::Parser&lt;LexerType&gt;::parseFunctionParameters):
+        (JSC::Parser&lt;LexerType&gt;::parseFunctionInfo):
+        (JSC::Parser&lt;LexerType&gt;::parseFunctionDeclaration):
+        (JSC::Parser&lt;LexerType&gt;::parseClass):
+        (JSC::Parser&lt;LexerType&gt;::parsePrimaryExpression):
+        (JSC::Parser&lt;LexerType&gt;::parseMemberExpression):
+        (JSC::Parser&lt;LexerType&gt;::parseArrowFunctionExpression):
+        (JSC::operatorString):
+        (JSC::Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBody): Deleted.
+        * parser/Parser.h:
+        (JSC::Parser::positionBeforeLastNewline):
+        (JSC::Parser::locationBeforeLastToken):
+        (JSC::Parser::findCachedFunctionInfo):
+        (JSC::Parser::isofToken):
+        (JSC::Parser::isEndOfArrowFunction):
+        (JSC::Parser::isArrowFunctionParamters):
+        (JSC::Parser::tokenStart):
+        (JSC::Parser::isLETMaskedAsIDENT):
+        (JSC::Parser::autoSemiColon):
+        (JSC::Parser::setEndOfStatement):
+        (JSC::Parser::canRecurse):
+        (JSC::Parser&lt;LexerType&gt;::parse):
+        (JSC::parse):
+        * parser/ParserFunctionInfo.h:
+        * parser/ParserModes.h:
+        (JSC::functionNameIsInScope):
+        * parser/SourceCode.h:
+        (JSC::makeSource):
+        (JSC::SourceCode::subExpression):
+        (JSC::SourceCode::subArrowExpression): Deleted.
+        * parser/SourceProviderCache.h:
+        (JSC::SourceProviderCache::get):
+        * parser/SourceProviderCacheItem.h:
+        (JSC::SourceProviderCacheItem::endFunctionToken):
+        (JSC::SourceProviderCacheItem::usedVariables):
+        (JSC::SourceProviderCacheItem::writtenVariables):
+        (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
+        * parser/SyntaxChecker.h:
+        (JSC::SyntaxChecker::SyntaxChecker):
+        (JSC::SyntaxChecker::createClassExpr):
+        (JSC::SyntaxChecker::createFunctionExpr):
+        (JSC::SyntaxChecker::createFunctionBody):
+        (JSC::SyntaxChecker::createArrowFunctionExpr):
+        (JSC::SyntaxChecker::setFunctionNameStart):
+        (JSC::SyntaxChecker::createArguments):
+        (JSC::SyntaxChecker::createPropertyList):
+        (JSC::SyntaxChecker::createElementList):
+        (JSC::SyntaxChecker::createFormalParameterList):
+        (JSC::SyntaxChecker::appendParameter):
+        (JSC::SyntaxChecker::createClause):
+        (JSC::SyntaxChecker::createClauseList):
+        * runtime/CodeCache.cpp:
+        (JSC::CodeCache::getGlobalCodeBlock):
+        (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+        * runtime/Completion.cpp:
+        (JSC::checkSyntax):
+        * runtime/Executable.cpp:
+        (JSC::ProgramExecutable::checkSyntax):
+        * tests/controlFlowProfiler/conditional-expression.js:
+        (testConditionalFunctionCall):
+
</ins><span class="cx"> 2015-07-16  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, fix build for newer LLVMs.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -69,10 +69,9 @@
</span><span class="cx">     UnlinkedFunctionKind kind = isParsingDefaultConstructor ? UnlinkedNormalFunction : UnlinkedBuiltinFunction;
</span><span class="cx">     RefPtr&lt;SourceProvider&gt; sourceOverride = isParsingDefaultConstructor ? source.provider() : nullptr;
</span><span class="cx">     std::unique_ptr&lt;ProgramNode&gt; program = parse&lt;ProgramNode&gt;(
</span><del>-        &amp;m_vm, source, 0, Identifier(), builtinMode, 
-        JSParserStrictMode::NotStrict, 
-        JSParserCodeType::Program,
-        error, &amp;positionBeforeLastNewline, constructorKind);
</del><ins>+        &amp;m_vm, source, Identifier(), builtinMode, 
+        JSParserStrictMode::NotStrict, JSParserCodeType::Program, error, 
+        &amp;positionBeforeLastNewline, FunctionParseMode::NotAFunctionMode, constructorKind);
</ins><span class="cx"> 
</span><span class="cx">     if (!program) {
</span><span class="cx">         dataLog(&quot;Fatal error compiling builtin function '&quot;, name.string(), &quot;': &quot;, error.message());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -60,15 +60,15 @@
</span><span class="cx">     JSParserBuiltinMode builtinMode = executable-&gt;isBuiltinFunction() ? JSParserBuiltinMode::Builtin : JSParserBuiltinMode::NotBuiltin;
</span><span class="cx">     JSParserStrictMode strictMode = executable-&gt;isInStrictContext() ? JSParserStrictMode::Strict : JSParserStrictMode::NotStrict;
</span><span class="cx">     std::unique_ptr&lt;FunctionNode&gt; function = parse&lt;FunctionNode&gt;(
</span><del>-        &amp;vm, source, executable-&gt;parameters(), executable-&gt;name(), builtinMode,
-        strictMode, JSParserCodeType::Function, error, 0);
</del><ins>+        &amp;vm, source, executable-&gt;name(), builtinMode, strictMode, 
+        JSParserCodeType::Function, error, nullptr, executable-&gt;parseMode());
</ins><span class="cx"> 
</span><span class="cx">     if (!function) {
</span><span class="cx">         ASSERT(error.isValid());
</span><span class="cx">         return nullptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    function-&gt;finishParsing(executable-&gt;parameters(), executable-&gt;name(), executable-&gt;functionMode());
</del><ins>+    function-&gt;finishParsing(executable-&gt;name(), executable-&gt;functionMode());
</ins><span class="cx">     executable-&gt;recordParse(function-&gt;features(), function-&gt;hasCapturedVariables());
</span><span class="cx">     
</span><span class="cx">     UnlinkedFunctionCodeBlock* result = UnlinkedFunctionCodeBlock::create(&amp;vm, FunctionCode,
</span><span class="lines">@@ -84,7 +84,6 @@
</span><span class="cx">     : Base(*vm, structure)
</span><span class="cx">     , m_name(node-&gt;ident())
</span><span class="cx">     , m_inferredName(node-&gt;inferredName())
</span><del>-    , m_parameters(node-&gt;parameters())
</del><span class="cx">     , m_sourceOverride(WTF::move(sourceOverride))
</span><span class="cx">     , m_firstLineOffset(node-&gt;firstLine() - source.firstLine())
</span><span class="cx">     , m_lineCount(node-&gt;lastLine() - node-&gt;firstLine())
</span><span class="lines">@@ -96,6 +95,8 @@
</span><span class="cx">     , m_parametersStartOffset(node-&gt;parametersStart())
</span><span class="cx">     , m_typeProfilingStartOffset(node-&gt;functionKeywordStart())
</span><span class="cx">     , m_typeProfilingEndOffset(node-&gt;startStartOffset() + node-&gt;source().length() - 1)
</span><ins>+    , m_parameterCount(node-&gt;parameterCount())
+    , m_parseMode(node-&gt;parseMode())
</ins><span class="cx">     , m_features(0)
</span><span class="cx">     , m_isInStrictContext(node-&gt;isInStrictContext())
</span><span class="cx">     , m_hasCapturedVariables(false)
</span><span class="lines">@@ -107,11 +108,6 @@
</span><span class="cx">     m_parentScopeTDZVariables.swap(parentScopeTDZVariables);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-size_t UnlinkedFunctionExecutable::parameterCount() const
-{
-    return m_parameters-&gt;size();
-}
-
</del><span class="cx"> void UnlinkedFunctionExecutable::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
</span><span class="cx"> {
</span><span class="cx">     UnlinkedFunctionExecutable* thisObject = jsCast&lt;UnlinkedFunctionExecutable*&gt;(cell);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx"> class Debugger;
</span><span class="cx"> class FunctionBodyNode;
</span><span class="cx"> class FunctionExecutable;
</span><del>-class FunctionParameters;
</del><span class="cx"> class JSScope;
</span><span class="cx"> class ParserError;
</span><span class="cx"> class ScriptExecutable;
</span><span class="lines">@@ -123,7 +122,8 @@
</span><span class="cx">     {
</span><span class="cx">         return (kind == CodeForCall) ? m_symbolTableForCall.get() : m_symbolTableForConstruct.get();
</span><span class="cx">     }
</span><del>-    size_t parameterCount() const;
</del><ins>+    unsigned parameterCount() const { return m_parameterCount; };
+    FunctionParseMode parseMode() const { return m_parseMode; };
</ins><span class="cx">     bool isInStrictContext() const { return m_isInStrictContext; }
</span><span class="cx">     FunctionMode functionMode() const { return static_cast&lt;FunctionMode&gt;(m_functionMode); }
</span><span class="cx">     ConstructorKind constructorKind() const { return static_cast&lt;ConstructorKind&gt;(m_constructorKind); }
</span><span class="lines">@@ -155,8 +155,6 @@
</span><span class="cx">         m_codeBlockForConstruct.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    FunctionParameters* parameters() { return m_parameters.get(); }
-
</del><span class="cx">     void recordParse(CodeFeatures features, bool hasCapturedVariables)
</span><span class="cx">     {
</span><span class="cx">         m_features = features;
</span><span class="lines">@@ -183,7 +181,6 @@
</span><span class="cx">     WriteBarrier&lt;JSString&gt; m_nameValue;
</span><span class="cx">     WriteBarrier&lt;SymbolTable&gt; m_symbolTableForCall;
</span><span class="cx">     WriteBarrier&lt;SymbolTable&gt; m_symbolTableForConstruct;
</span><del>-    RefPtr&lt;FunctionParameters&gt; m_parameters;
</del><span class="cx">     RefPtr&lt;SourceProvider&gt; m_sourceOverride;
</span><span class="cx">     VariableEnvironment m_parentScopeTDZVariables;
</span><span class="cx">     unsigned m_firstLineOffset;
</span><span class="lines">@@ -196,6 +193,8 @@
</span><span class="cx">     unsigned m_parametersStartOffset;
</span><span class="cx">     unsigned m_typeProfilingStartOffset;
</span><span class="cx">     unsigned m_typeProfilingEndOffset;
</span><ins>+    unsigned m_parameterCount;
+    FunctionParseMode m_parseMode;
</ins><span class="cx"> 
</span><span class="cx">     CodeFeatures m_features;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -3189,10 +3189,6 @@
</span><span class="cx">     return generator.moveToDestinationIfNeeded(dst, initializer.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-DestructuringPatternNode::~DestructuringPatternNode()
-{
-}
-
</del><span class="cx"> static void assignDefaultValueIfUndefined(BytecodeGenerator&amp; generator, RegisterID* maybeUndefined, ExpressionNode* defaultValue)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(defaultValue);
</span><span class="lines">@@ -3350,7 +3346,7 @@
</span><span class="cx"> void ArrayPatternNode::collectBoundIdentifiers(Vector&lt;Identifier&gt;&amp; identifiers) const
</span><span class="cx"> {
</span><span class="cx">     for (size_t i = 0; i &lt; m_targetPatterns.size(); i++) {
</span><del>-        if (DestructuringPatternNode* node = m_targetPatterns[i].pattern.get())
</del><ins>+        if (DestructuringPatternNode* node = m_targetPatterns[i].pattern)
</ins><span class="cx">             node-&gt;collectBoundIdentifiers(identifiers);
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserASTBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ASTBuilder.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -94,8 +94,6 @@
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    typedef SyntaxChecker FunctionBodyBuilder;
-
</del><span class="cx">     typedef ExpressionNode* Expression;
</span><span class="cx">     typedef JSC::SourceElements* SourceElements;
</span><span class="cx">     typedef ArgumentsNode* Arguments;
</span><span class="lines">@@ -110,7 +108,7 @@
</span><span class="cx">     typedef TemplateStringListNode* TemplateStringList;
</span><span class="cx">     typedef TemplateLiteralNode* TemplateLiteral;
</span><span class="cx"> #endif
</span><del>-    typedef ParameterNode* FormalParameterList;
</del><ins>+    typedef FunctionParameters* FormalParameterList;
</ins><span class="cx">     typedef FunctionBodyNode* FunctionBody;
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span><span class="cx">     typedef ClassExprNode* ClassExpression;
</span><span class="lines">@@ -120,10 +118,10 @@
</span><span class="cx">     typedef CaseClauseNode* Clause;
</span><span class="cx">     typedef ConstDeclNode* ConstDeclList;
</span><span class="cx">     typedef std::pair&lt;ExpressionNode*, BinaryOpInfo&gt; BinaryOperand;
</span><del>-    typedef RefPtr&lt;DestructuringPatternNode&gt; DestructuringPattern;
-    typedef RefPtr&lt;ArrayPatternNode&gt; ArrayPattern;
-    typedef RefPtr&lt;ObjectPatternNode&gt; ObjectPattern;
-    typedef RefPtr&lt;BindingNode&gt; BindingPattern;
</del><ins>+    typedef DestructuringPatternNode* DestructuringPattern;
+    typedef ArrayPatternNode* ArrayPattern;
+    typedef ObjectPatternNode* ObjectPattern;
+    typedef BindingNode* BindingPattern;
</ins><span class="cx">     static const bool CreatesAST = true;
</span><span class="cx">     static const bool NeedsFreeVariableInfo = true;
</span><span class="cx">     static const bool CanUseFunctionCache = true;
</span><span class="lines">@@ -344,11 +342,11 @@
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    ExpressionNode* createFunctionExpr(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; info)
</del><ins>+    ExpressionNode* createFunctionExpr(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo)
</ins><span class="cx">     {
</span><del>-        FuncExprNode* result = new (m_parserArena) FuncExprNode(location, *info.name, info.body,
-            m_sourceCode-&gt;subExpression(info.startFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn), info.parameters);
-        info.body-&gt;setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset);
</del><ins>+        FuncExprNode* result = new (m_parserArena) FuncExprNode(location, *functionInfo.name, functionInfo.body,
+            m_sourceCode-&gt;subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn));
+        functionInfo.body-&gt;setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -356,45 +354,41 @@
</span><span class="cx">         const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, 
</span><span class="cx">         unsigned startColumn, unsigned endColumn, int functionKeywordStart, 
</span><span class="cx">         int functionNameStart, int parametersStart, bool inStrictContext, 
</span><del>-        ConstructorKind constructorKind)
</del><ins>+        ConstructorKind constructorKind, unsigned parameterCount, FunctionParseMode mode)
</ins><span class="cx">     {
</span><span class="cx">         return new (m_parserArena) FunctionBodyNode(
</span><span class="cx">             m_parserArena, startLocation, endLocation, startColumn, endColumn, 
</span><span class="cx">             functionKeywordStart, functionNameStart, parametersStart, 
</span><del>-            inStrictContext, constructorKind);
</del><ins>+            inStrictContext, constructorKind, parameterCount, mode);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    ExpressionNode* createArrowFunctionExpr(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; info)
</del><ins>+    ExpressionNode* createArrowFunctionExpr(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo)
</ins><span class="cx">     {
</span><del>-        SourceCode source = info.functionBodyType == ArrowFunctionBodyExpression
-            ? m_sourceCode-&gt;subArrowExpression(info.arrowFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn)
-            : m_sourceCode-&gt;subExpression(info.startFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn);
</del><ins>+        SourceCode source = m_sourceCode-&gt;subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn);
</ins><span class="cx"> 
</span><del>-        FuncExprNode* result = new (m_parserArena) FuncExprNode(location, *info.name, info.body, source, info.parameters);
-        info.body-&gt;setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset);
</del><ins>+        FuncExprNode* result = new (m_parserArena) FuncExprNode(location, *functionInfo.name, functionInfo.body, source);
+        functionInfo.body-&gt;setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     NEVER_INLINE PropertyNode* createGetterOrSetterProperty(const JSTokenLocation&amp; location, PropertyNode::Type type, bool,
</span><del>-        const Identifier* name, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; info, SuperBinding superBinding)
</del><ins>+        const Identifier* name, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo, SuperBinding superBinding)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(name);
</span><del>-        info.body-&gt;setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset);
-        info.body-&gt;setInferredName(*name);
-        SourceCode source = m_sourceCode-&gt;subExpression(info.startFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn);
-        FuncExprNode* funcExpr = new (m_parserArena) FuncExprNode(location, m_vm-&gt;propertyNames-&gt;nullIdentifier, info.body, source, info.parameters);
</del><ins>+        functionInfo.body-&gt;setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);
+        functionInfo.body-&gt;setInferredName(*name);
+        SourceCode source = m_sourceCode-&gt;subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn);
+        FuncExprNode* funcExpr = new (m_parserArena) FuncExprNode(location, m_vm-&gt;propertyNames-&gt;nullIdentifier, functionInfo.body, source);
</ins><span class="cx">         return new (m_parserArena) PropertyNode(*name, funcExpr, type, PropertyNode::Unknown, superBinding);
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     NEVER_INLINE PropertyNode* createGetterOrSetterProperty(VM* vm, ParserArena&amp; parserArena, const JSTokenLocation&amp; location, PropertyNode::Type type, bool,
</span><del>-        double name, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; info, SuperBinding superBinding)
</del><ins>+        double name, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo, SuperBinding superBinding)
</ins><span class="cx">     {
</span><del>-        info.body-&gt;setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset);
</del><ins>+        functionInfo.body-&gt;setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);
</ins><span class="cx">         const Identifier&amp; ident = parserArena.identifierArena().makeNumericIdentifier(vm, name);
</span><del>-        SourceCode source = m_sourceCode-&gt;subExpression(info.startFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn);
-        FuncExprNode* funcExpr = new (m_parserArena) FuncExprNode(location, vm-&gt;propertyNames-&gt;nullIdentifier, info.body, source, info.parameters);
</del><ins>+        SourceCode source = m_sourceCode-&gt;subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn);
+        FuncExprNode* funcExpr = new (m_parserArena) FuncExprNode(location, vm-&gt;propertyNames-&gt;nullIdentifier, functionInfo.body, source);
</ins><span class="cx">         return new (m_parserArena) PropertyNode(ident, funcExpr, type, PropertyNode::Unknown, superBinding);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -420,21 +414,21 @@
</span><span class="cx">     ElementNode* createElementList(int elisions, ExpressionNode* expr) { return new (m_parserArena) ElementNode(elisions, expr); }
</span><span class="cx">     ElementNode* createElementList(ElementNode* elems, int elisions, ExpressionNode* expr) { return new (m_parserArena) ElementNode(elems, elisions, expr); }
</span><span class="cx"> 
</span><del>-    ParameterNode* createFormalParameterList(DestructuringPattern pattern) { return new (m_parserArena) ParameterNode(pattern); }
-    ParameterNode* createFormalParameterList(ParameterNode* list, DestructuringPattern pattern) { return new (m_parserArena) ParameterNode(list, pattern); }
</del><ins>+    FormalParameterList createFormalParameterList() { return new (m_parserArena) FunctionParameters(); }
+    void appendParameter(FormalParameterList list, DestructuringPattern pattern) { list-&gt;append(pattern); }
</ins><span class="cx"> 
</span><span class="cx">     CaseClauseNode* createClause(ExpressionNode* expr, JSC::SourceElements* statements) { return new (m_parserArena) CaseClauseNode(expr, statements); }
</span><span class="cx">     ClauseListNode* createClauseList(CaseClauseNode* clause) { return new (m_parserArena) ClauseListNode(clause); }
</span><span class="cx">     ClauseListNode* createClauseList(ClauseListNode* tail, CaseClauseNode* clause) { return new (m_parserArena) ClauseListNode(tail, clause); }
</span><span class="cx"> 
</span><del>-    StatementNode* createFuncDeclStatement(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; info)
</del><ins>+    StatementNode* createFuncDeclStatement(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo)
</ins><span class="cx">     {
</span><del>-        FuncDeclNode* decl = new (m_parserArena) FuncDeclNode(location, *info.name, info.body,
-            m_sourceCode-&gt;subExpression(info.startFunctionOffset, info.endFunctionOffset, info.bodyStartLine, info.bodyStartColumn), info.parameters);
-        if (*info.name == m_vm-&gt;propertyNames-&gt;arguments)
</del><ins>+        FuncDeclNode* decl = new (m_parserArena) FuncDeclNode(location, *functionInfo.name, functionInfo.body,
+            m_sourceCode-&gt;subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn));
+        if (*functionInfo.name == m_vm-&gt;propertyNames-&gt;arguments)
</ins><span class="cx">             usesArguments();
</span><span class="cx">         m_scope.m_funcDeclarations.append(decl-&gt;body());
</span><del>-        info.body-&gt;setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset);
</del><ins>+        functionInfo.body-&gt;setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);
</ins><span class="cx">         return decl;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -486,9 +480,9 @@
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    StatementNode* createForInLoop(const JSTokenLocation&amp; location, PassRefPtr&lt;DestructuringPatternNode&gt; pattern, ExpressionNode* iter, StatementNode* statements, const JSTextPosition&amp; eStart, const JSTextPosition&amp; eDivot, const JSTextPosition&amp; eEnd, int start, int end, VariableEnvironment&amp; lexicalVariables)
</del><ins>+    StatementNode* createForInLoop(const JSTokenLocation&amp; location, DestructuringPatternNode* pattern, ExpressionNode* iter, StatementNode* statements, const JSTextPosition&amp; eStart, const JSTextPosition&amp; eDivot, const JSTextPosition&amp; eEnd, int start, int end, VariableEnvironment&amp; lexicalVariables)
</ins><span class="cx">     {
</span><del>-        auto lexpr = new (m_parserArena) DestructuringAssignmentNode(location, pattern.get(), 0);
</del><ins>+        auto lexpr = new (m_parserArena) DestructuringAssignmentNode(location, pattern, 0);
</ins><span class="cx">         return createForInLoop(location, lexpr, iter, statements, eStart, eDivot, eEnd, start, end, lexicalVariables);
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -500,9 +494,9 @@
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    StatementNode* createForOfLoop(const JSTokenLocation&amp; location, PassRefPtr&lt;DestructuringPatternNode&gt; pattern, ExpressionNode* iter, StatementNode* statements, const JSTextPosition&amp; eStart, const JSTextPosition&amp; eDivot, const JSTextPosition&amp; eEnd, int start, int end, VariableEnvironment&amp; lexicalVariables)
</del><ins>+    StatementNode* createForOfLoop(const JSTokenLocation&amp; location, DestructuringPatternNode* pattern, ExpressionNode* iter, StatementNode* statements, const JSTextPosition&amp; eStart, const JSTextPosition&amp; eDivot, const JSTextPosition&amp; eEnd, int start, int end, VariableEnvironment&amp; lexicalVariables)
</ins><span class="cx">     {
</span><del>-        auto lexpr = new (m_parserArena) DestructuringAssignmentNode(location, pattern.get(), 0);
</del><ins>+        auto lexpr = new (m_parserArena) DestructuringAssignmentNode(location, pattern, 0);
</ins><span class="cx">         return createForOfLoop(location, lexpr, iter, statements, eStart, eDivot, eEnd, start, end, lexicalVariables);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -745,14 +739,14 @@
</span><span class="cx"> 
</span><span class="cx">     bool isResolve(ExpressionNode* expr) const { return expr-&gt;isResolveNode(); }
</span><span class="cx"> 
</span><del>-    ExpressionNode* createDestructuringAssignment(const JSTokenLocation&amp; location, PassRefPtr&lt;DestructuringPatternNode&gt; pattern, ExpressionNode* initializer)
</del><ins>+    ExpressionNode* createDestructuringAssignment(const JSTokenLocation&amp; location, DestructuringPattern pattern, ExpressionNode* initializer)
</ins><span class="cx">     {
</span><del>-        return new (m_parserArena) DestructuringAssignmentNode(location, pattern.get(), initializer);
</del><ins>+        return new (m_parserArena) DestructuringAssignmentNode(location, pattern, initializer);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ArrayPattern createArrayPattern(const JSTokenLocation&amp;)
</span><span class="cx">     {
</span><del>-        return ArrayPatternNode::create();
</del><ins>+        return new (m_parserArena) ArrayPatternNode();
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void appendArrayPatternSkipEntry(ArrayPattern node, const JSTokenLocation&amp; location)
</span><span class="lines">@@ -762,32 +756,32 @@
</span><span class="cx"> 
</span><span class="cx">     void appendArrayPatternEntry(ArrayPattern node, const JSTokenLocation&amp; location, DestructuringPattern pattern, ExpressionNode* defaultValue)
</span><span class="cx">     {
</span><del>-        node-&gt;appendIndex(ArrayPatternNode::BindingType::Element, location, pattern.get(), defaultValue);
</del><ins>+        node-&gt;appendIndex(ArrayPatternNode::BindingType::Element, location, pattern, defaultValue);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void appendArrayPatternRestEntry(ArrayPattern node, const JSTokenLocation&amp; location, DestructuringPattern pattern)
</span><span class="cx">     {
</span><del>-        node-&gt;appendIndex(ArrayPatternNode::BindingType::RestElement, location, pattern.get(), nullptr);
</del><ins>+        node-&gt;appendIndex(ArrayPatternNode::BindingType::RestElement, location, pattern, nullptr);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void finishArrayPattern(ArrayPattern node, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotEnd)
</span><span class="cx">     {
</span><del>-        setExceptionLocation(node.get(), divotStart, divot, divotEnd);
</del><ins>+        setExceptionLocation(node, divotStart, divot, divotEnd);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ObjectPattern createObjectPattern(const JSTokenLocation&amp;)
</span><span class="cx">     {
</span><del>-        return ObjectPatternNode::create();
</del><ins>+        return new (m_parserArena) ObjectPatternNode();
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void appendObjectPatternEntry(ObjectPattern node, const JSTokenLocation&amp; location, bool wasString, const Identifier&amp; identifier, DestructuringPattern pattern, ExpressionNode* defaultValue)
</span><span class="cx">     {
</span><del>-        node-&gt;appendEntry(location, identifier, wasString, pattern.get(), defaultValue);
</del><ins>+        node-&gt;appendEntry(location, identifier, wasString, pattern, defaultValue);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     BindingPattern createBindingLocation(const JSTokenLocation&amp;, const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext context)
</span><span class="cx">     {
</span><del>-        return BindingNode::create(boundProperty, start, end, context);
</del><ins>+        return new (m_parserArena) BindingNode(boundProperty, start, end, context);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void setEndOffset(Node* node, int offset)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Lexer.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -494,7 +494,7 @@
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename T&gt;
</span><span class="cx"> Lexer&lt;T&gt;::Lexer(VM* vm, JSParserBuiltinMode builtinMode)
</span><del>-    : m_isReparsing(false)
</del><ins>+    : m_isReparsingFunction(false)
</ins><span class="cx">     , m_vm(vm)
</span><span class="cx">     , m_parsingBuiltinFunction(builtinMode == JSParserBuiltinMode::Builtin)
</span><span class="cx"> {
</span><span class="lines">@@ -1715,7 +1715,6 @@
</span><span class="cx">     return code &lt; m_codeEnd &amp;&amp; *code == ':';
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx"> template &lt;typename T&gt;
</span><span class="cx"> void Lexer&lt;T&gt;::setTokenPosition(JSToken* tokenRecord)
</span><span class="cx"> {
</span><span class="lines">@@ -1725,7 +1724,6 @@
</span><span class="cx">     tokenData-&gt;lineStartOffset = currentLineStartOffset();
</span><span class="cx">     ASSERT(tokenData-&gt;offset &gt;= tokenData-&gt;lineStartOffset);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> template &lt;typename T&gt;
</span><span class="cx"> JSTokenType Lexer&lt;T&gt;::lex(JSToken* tokenRecord, unsigned lexerFlags, bool strictMode)
</span><span class="lines">@@ -2411,7 +2409,7 @@
</span><span class="cx">     Vector&lt;UChar&gt; newBufferForRawTemplateString16;
</span><span class="cx">     m_bufferForRawTemplateString16.swap(newBufferForRawTemplateString16);
</span><span class="cx"> 
</span><del>-    m_isReparsing = false;
</del><ins>+    m_isReparsingFunction = false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Instantiate the two flavors of Lexer we need instead of putting most of this file in Lexer.h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Lexer.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -84,12 +84,10 @@
</span><span class="cx"> 
</span><span class="cx">     // Functions to set up parsing.
</span><span class="cx">     void setCode(const SourceCode&amp;, ParserArena*);
</span><del>-    void setIsReparsing() { m_isReparsing = true; }
-    bool isReparsing() const { return m_isReparsing; }
</del><ins>+    void setIsReparsingFunction() { m_isReparsingFunction = true; }
+    bool isReparsingFunction() const { return m_isReparsingFunction; }
</ins><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     void setTokenPosition(JSToken* tokenRecord);
</span><del>-#endif
</del><span class="cx">     JSTokenType lex(JSToken*, unsigned, bool strictMode);
</span><span class="cx">     bool nextTokenIsColon();
</span><span class="cx">     int lineNumber() const { return m_lineNumber; }
</span><span class="lines">@@ -224,7 +222,7 @@
</span><span class="cx">     const T* m_lineStart;
</span><span class="cx">     JSTextPosition m_positionBeforeLastNewline;
</span><span class="cx">     JSTokenLocation m_lastTockenLocation;
</span><del>-    bool m_isReparsing;
</del><ins>+    bool m_isReparsingFunction;
</ins><span class="cx">     bool m_atLineStart;
</span><span class="cx">     bool m_error;
</span><span class="cx">     String m_lexErrorMessage;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodeConstructorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/NodeConstructors.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/NodeConstructors.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/NodeConstructors.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -828,34 +828,22 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    inline ParameterNode::ParameterNode(PassRefPtr&lt;DestructuringPatternNode&gt; pattern)
-        : m_pattern(pattern)
-        , m_next(0)
</del><ins>+    inline FunctionParameters::FunctionParameters()
</ins><span class="cx">     {
</span><del>-        ASSERT(m_pattern);
</del><span class="cx">     }
</span><span class="cx"> 
</span><del>-    inline ParameterNode::ParameterNode(ParameterNode* previous, PassRefPtr&lt;DestructuringPatternNode&gt; pattern)
-        : m_pattern(pattern)
-        , m_next(0)
-    {
-        previous-&gt;m_next = this;
-        ASSERT(m_pattern);
-        ASSERT(previous-&gt;m_pattern);
-    }
-
-    inline FuncExprNode::FuncExprNode(const JSTokenLocation&amp; location, const Identifier&amp; ident, FunctionBodyNode* body, const SourceCode&amp; source, ParameterNode* parameter)
</del><ins>+    inline FuncExprNode::FuncExprNode(const JSTokenLocation&amp; location, const Identifier&amp; ident, FunctionBodyNode* body, const SourceCode&amp; source)
</ins><span class="cx">         : ExpressionNode(location)
</span><span class="cx">         , m_body(body)
</span><span class="cx">     {
</span><del>-        m_body-&gt;finishParsing(source, parameter, ident, FunctionExpression);
</del><ins>+        m_body-&gt;finishParsing(source, ident, FunctionExpression);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    inline FuncDeclNode::FuncDeclNode(const JSTokenLocation&amp; location, const Identifier&amp; ident, FunctionBodyNode* body, const SourceCode&amp; source, ParameterNode* parameter)
</del><ins>+    inline FuncDeclNode::FuncDeclNode(const JSTokenLocation&amp; location, const Identifier&amp; ident, FunctionBodyNode* body, const SourceCode&amp; source)
</ins><span class="cx">         : StatementNode(location)
</span><span class="cx">         , m_body(body)
</span><span class="cx">     {
</span><del>-        m_body-&gt;finishParsing(source, parameter, ident, FunctionDeclaration);
</del><ins>+        m_body-&gt;finishParsing(source, ident, FunctionDeclaration);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span><span class="lines">@@ -954,26 +942,11 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    inline Ref&lt;ArrayPatternNode&gt; ArrayPatternNode::create()
-    {
-        return adoptRef(*new ArrayPatternNode);
-    }
-    
</del><span class="cx">     inline ObjectPatternNode::ObjectPatternNode()
</span><span class="cx">         : DestructuringPatternNode()
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    inline Ref&lt;ObjectPatternNode&gt; ObjectPatternNode::create()
-    {
-        return adoptRef(*new ObjectPatternNode);
-    }
-
-    inline Ref&lt;BindingNode&gt; BindingNode::create(const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext context)
-    {
-        return adoptRef(*new BindingNode(boundProperty, start, end, context));
-    }
-    
</del><span class="cx">     inline BindingNode::BindingNode(const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext context)
</span><span class="cx">         : DestructuringPatternNode()
</span><span class="cx">         , m_divotStart(start)
</span><span class="lines">@@ -983,7 +956,7 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    inline DestructuringAssignmentNode::DestructuringAssignmentNode(const JSTokenLocation&amp; location, PassRefPtr&lt;DestructuringPatternNode&gt; bindings, ExpressionNode* initializer)
</del><ins>+    inline DestructuringAssignmentNode::DestructuringAssignmentNode(const JSTokenLocation&amp; location, DestructuringPatternNode* bindings, ExpressionNode* initializer)
</ins><span class="cx">         : ExpressionNode(location)
</span><span class="cx">         , m_bindings(bindings)
</span><span class="cx">         , m_initializer(initializer)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Nodes.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ ProgramNode -----------------------------
</span><span class="cx"> 
</span><del>-ProgramNode::ProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, const SourceCode&amp; source, CodeFeatures features, int numConstants)
</del><ins>+ProgramNode::ProgramNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, int numConstants)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, source, children, varEnvironment, funcStack, lexicalVariables, features, numConstants)
</span><span class="cx">     , m_startColumn(startColumn)
</span><span class="cx">     , m_endColumn(endColumn)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ EvalNode -----------------------------
</span><span class="cx"> 
</span><del>-EvalNode::EvalNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, const SourceCode&amp; source, CodeFeatures features, int numConstants)
</del><ins>+EvalNode::EvalNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, FunctionParameters*, const SourceCode&amp; source, CodeFeatures features, int numConstants)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, source, children, varEnvironment, funcStack, lexicalVariables, features, numConstants)
</span><span class="cx">     , m_endColumn(endColumn)
</span><span class="cx"> {
</span><span class="lines">@@ -139,39 +139,11 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ FunctionBodyNode -----------------------------
</span><span class="cx"> 
</span><del>-Ref&lt;FunctionParameters&gt; FunctionParameters::create(ParameterNode* firstParameter)
-{
-    unsigned parameterCount = 0;
-    for (ParameterNode* parameter = firstParameter; parameter; parameter = parameter-&gt;nextParam())
-        ++parameterCount;
-
-    size_t objectSize = sizeof(FunctionParameters) - sizeof(void*) + sizeof(DestructuringPatternNode*) * parameterCount;
-    void* slot = fastMalloc(objectSize);
-    return adoptRef(*new (slot) FunctionParameters(firstParameter, parameterCount));
-}
-
-FunctionParameters::FunctionParameters(ParameterNode* firstParameter, unsigned size)
-    : m_size(size)
-{
-    unsigned i = 0;
-    for (ParameterNode* parameter = firstParameter; parameter; parameter = parameter-&gt;nextParam()) {
-        auto pattern = parameter-&gt;pattern();
-        pattern-&gt;ref();
-        patterns()[i++] = pattern;
-    }
-}
-
-FunctionParameters::~FunctionParameters()
-{
-    for (unsigned i = 0; i &lt; m_size; ++i)
-        patterns()[i]-&gt;deref();
-}
-
</del><span class="cx"> FunctionBodyNode::FunctionBodyNode(
</span><span class="cx">     ParserArena&amp;, const JSTokenLocation&amp; startLocation, 
</span><span class="cx">     const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, 
</span><del>-    int functionKeywordStart, int functionNameStart, int parametersStart,
-    bool isInStrictContext, ConstructorKind constructorKind)
</del><ins>+    int functionKeywordStart, int functionNameStart, int parametersStart, bool isInStrictContext, 
+    ConstructorKind constructorKind, unsigned parameterCount, FunctionParseMode mode)
</ins><span class="cx">         : StatementNode(endLocation)
</span><span class="cx">         , m_startColumn(startColumn)
</span><span class="cx">         , m_endColumn(endColumn)
</span><span class="lines">@@ -179,16 +151,17 @@
</span><span class="cx">         , m_functionNameStart(functionNameStart)
</span><span class="cx">         , m_parametersStart(parametersStart)
</span><span class="cx">         , m_startStartOffset(startLocation.startOffset)
</span><ins>+        , m_parameterCount(parameterCount)
+        , m_parseMode(mode)
</ins><span class="cx">         , m_isInStrictContext(isInStrictContext)
</span><span class="cx">         , m_constructorKind(static_cast&lt;unsigned&gt;(constructorKind))
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_constructorKind == static_cast&lt;unsigned&gt;(constructorKind));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FunctionBodyNode::finishParsing(const SourceCode&amp; source, ParameterNode* firstParameter, const Identifier&amp; ident, enum FunctionMode functionMode)
</del><ins>+void FunctionBodyNode::finishParsing(const SourceCode&amp; source, const Identifier&amp; ident, enum FunctionMode functionMode)
</ins><span class="cx"> {
</span><span class="cx">     m_source = source;
</span><del>-    m_parameters = FunctionParameters::create(firstParameter);
</del><span class="cx">     m_ident = ident;
</span><span class="cx">     m_functionMode = functionMode;
</span><span class="cx"> }
</span><span class="lines">@@ -201,17 +174,17 @@
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ FunctionNode -----------------------------
</span><span class="cx"> 
</span><del>-FunctionNode::FunctionNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, const SourceCode&amp; sourceCode, CodeFeatures features, int numConstants)
</del><ins>+FunctionNode::FunctionNode(ParserArena&amp; parserArena, const JSTokenLocation&amp; startLocation, const JSTokenLocation&amp; endLocation, unsigned startColumn, unsigned endColumn, SourceElements* children, VariableEnvironment&amp; varEnvironment, FunctionStack&amp; funcStack, VariableEnvironment&amp; lexicalVariables, FunctionParameters* parameters, const SourceCode&amp; sourceCode, CodeFeatures features, int numConstants)
</ins><span class="cx">     : ScopeNode(parserArena, startLocation, endLocation, sourceCode, children, varEnvironment, funcStack, lexicalVariables, features, numConstants)
</span><ins>+    , m_parameters(parameters)
</ins><span class="cx">     , m_startColumn(startColumn)
</span><span class="cx">     , m_endColumn(endColumn)
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FunctionNode::finishParsing(PassRefPtr&lt;FunctionParameters&gt; parameters, const Identifier&amp; ident, enum FunctionMode functionMode)
</del><ins>+void FunctionNode::finishParsing(const Identifier&amp; ident, enum FunctionMode functionMode)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!source().isNull());
</span><del>-    m_parameters = parameters;
</del><span class="cx">     m_ident = ident;
</span><span class="cx">     m_functionMode = functionMode;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx">     class ArgumentListNode;
</span><span class="cx">     class BytecodeGenerator;
</span><span class="cx">     class FunctionBodyNode;
</span><ins>+    class FunctionParameters;
</ins><span class="cx">     class Label;
</span><span class="cx">     class PropertyListNode;
</span><span class="cx">     class ReadModifyResolveNode;
</span><span class="lines">@@ -1541,19 +1542,6 @@
</span><span class="cx">         StatementNode* m_finallyBlock;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    class ParameterNode : public ParserArenaDeletable {
-    public:
-        ParameterNode(PassRefPtr&lt;DestructuringPatternNode&gt;);
-        ParameterNode(ParameterNode*, PassRefPtr&lt;DestructuringPatternNode&gt;);
-
-        DestructuringPatternNode* pattern() const { return m_pattern.get(); }
-        ParameterNode* nextParam() const { return m_next; }
-
-    private:
-        RefPtr&lt;DestructuringPatternNode&gt; m_pattern;
-        ParameterNode* m_next;
-    };
-
</del><span class="cx">     class ScopeNode : public StatementNode, public ParserArenaRoot, public VariableEnvironmentNode {
</span><span class="cx">     public:
</span><span class="cx">         typedef DeclarationStacks::FunctionStack FunctionStack;
</span><span class="lines">@@ -1619,7 +1607,7 @@
</span><span class="cx"> 
</span><span class="cx">     class ProgramNode : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        ProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, const SourceCode&amp;, CodeFeatures, int numConstants);
</del><ins>+        ProgramNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, int numConstants);
</ins><span class="cx"> 
</span><span class="cx">         unsigned startColumn() const { return m_startColumn; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><span class="lines">@@ -1638,7 +1626,7 @@
</span><span class="cx"> 
</span><span class="cx">     class EvalNode : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        EvalNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, const SourceCode&amp;, CodeFeatures, int numConstants);
</del><ins>+        EvalNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, int numConstants);
</ins><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE unsigned startColumn() const { return 0; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><span class="lines">@@ -1651,23 +1639,16 @@
</span><span class="cx">         unsigned m_endColumn;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    class FunctionParameters : public RefCounted&lt;FunctionParameters&gt; {
-        WTF_MAKE_FAST_ALLOCATED;
-        WTF_MAKE_NONCOPYABLE(FunctionParameters);
</del><ins>+    class FunctionParameters : public ParserArenaDeletable {
</ins><span class="cx">     public:
</span><del>-        static Ref&lt;FunctionParameters&gt; create(ParameterNode*);
-        ~FunctionParameters();
</del><ins>+        FunctionParameters();
+        ALWAYS_INLINE unsigned size() const { return m_patterns.size(); }
+        ALWAYS_INLINE DestructuringPatternNode* at(unsigned index) { return m_patterns[index]; }
+        ALWAYS_INLINE void append(DestructuringPatternNode* pattern) { ASSERT(pattern); m_patterns.append(pattern); }
</ins><span class="cx"> 
</span><del>-        unsigned size() const { return m_size; }
-        DestructuringPatternNode* at(unsigned index) { ASSERT(index &lt; m_size); return patterns()[index]; }
-
</del><span class="cx">     private:
</span><del>-        FunctionParameters(ParameterNode*, unsigned size);
</del><span class="cx"> 
</span><del>-        DestructuringPatternNode** patterns() { return &amp;m_storage; }
-
-        unsigned m_size;
-        DestructuringPatternNode* m_storage;
</del><ins>+        Vector&lt;DestructuringPatternNode*, 3&gt; m_patterns;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class FunctionBodyNode final : public StatementNode, public ParserArenaDeletable {
</span><span class="lines">@@ -1678,13 +1659,11 @@
</span><span class="cx">             ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, 
</span><span class="cx">             unsigned startColumn, unsigned endColumn, int functionKeywordStart, 
</span><span class="cx">             int functionNameStart, int parametersStart, bool isInStrictContext, 
</span><del>-            ConstructorKind);
</del><ins>+            ConstructorKind, unsigned, FunctionParseMode);
</ins><span class="cx"> 
</span><del>-        FunctionParameters* parameters() const { return m_parameters.get(); }
-
</del><span class="cx">         virtual void emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
</span><span class="cx"> 
</span><del>-        void finishParsing(const SourceCode&amp;, ParameterNode*, const Identifier&amp;, FunctionMode);
</del><ins>+        void finishParsing(const SourceCode&amp;, const Identifier&amp;, FunctionMode);
</ins><span class="cx">         
</span><span class="cx">         void overrideName(const Identifier&amp; ident) { m_ident = ident; }
</span><span class="cx">         const Identifier&amp; ident() { return m_ident; }
</span><span class="lines">@@ -1698,6 +1677,8 @@
</span><span class="cx">         int parametersStart() const { return m_parametersStart; }
</span><span class="cx">         unsigned startColumn() const { return m_startColumn; }
</span><span class="cx">         unsigned endColumn() const { return m_endColumn; }
</span><ins>+        unsigned parameterCount() const { return m_parameterCount; }
+        FunctionParseMode parseMode() const { return m_parseMode; }
</ins><span class="cx"> 
</span><span class="cx">         void setEndPosition(JSTextPosition);
</span><span class="cx"> 
</span><span class="lines">@@ -1711,7 +1692,6 @@
</span><span class="cx">         Identifier m_ident;
</span><span class="cx">         Identifier m_inferredName;
</span><span class="cx">         FunctionMode m_functionMode;
</span><del>-        RefPtr&lt;FunctionParameters&gt; m_parameters;
</del><span class="cx">         unsigned m_startColumn;
</span><span class="cx">         unsigned m_endColumn;
</span><span class="cx">         int m_functionKeywordStart;
</span><span class="lines">@@ -1719,19 +1699,21 @@
</span><span class="cx">         int m_parametersStart;
</span><span class="cx">         SourceCode m_source;
</span><span class="cx">         int m_startStartOffset;
</span><ins>+        unsigned m_parameterCount;
+        FunctionParseMode m_parseMode;
</ins><span class="cx">         unsigned m_isInStrictContext : 1;
</span><span class="cx">         unsigned m_constructorKind : 2;
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class FunctionNode final : public ScopeNode {
</span><span class="cx">     public:
</span><del>-        FunctionNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, const SourceCode&amp;, CodeFeatures, int numConstants);
</del><ins>+        FunctionNode(ParserArena&amp;, const JSTokenLocation&amp; start, const JSTokenLocation&amp; end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&amp;, FunctionStack&amp;, VariableEnvironment&amp;, FunctionParameters*, const SourceCode&amp;, CodeFeatures, int numConstants);
</ins><span class="cx"> 
</span><del>-        FunctionParameters* parameters() const { return m_parameters.get(); }
</del><ins>+        FunctionParameters* parameters() const { return m_parameters; }
</ins><span class="cx"> 
</span><span class="cx">         virtual void emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
</span><span class="cx"> 
</span><del>-        void finishParsing(PassRefPtr&lt;FunctionParameters&gt;, const Identifier&amp;, FunctionMode);
</del><ins>+        void finishParsing(const Identifier&amp;, FunctionMode);
</ins><span class="cx">         
</span><span class="cx">         const Identifier&amp; ident() { return m_ident; }
</span><span class="cx"> 
</span><span class="lines">@@ -1745,14 +1727,14 @@
</span><span class="cx">     private:
</span><span class="cx">         Identifier m_ident;
</span><span class="cx">         FunctionMode m_functionMode;
</span><del>-        RefPtr&lt;FunctionParameters&gt; m_parameters;
</del><ins>+        FunctionParameters* m_parameters;
</ins><span class="cx">         unsigned m_startColumn;
</span><span class="cx">         unsigned m_endColumn;
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class FuncExprNode : public ExpressionNode {
</span><span class="cx">     public:
</span><del>-        FuncExprNode(const JSTokenLocation&amp;, const Identifier&amp;, FunctionBodyNode*, const SourceCode&amp;, ParameterNode* = 0);
</del><ins>+        FuncExprNode(const JSTokenLocation&amp;, const Identifier&amp;, FunctionBodyNode*, const SourceCode&amp;);
</ins><span class="cx"> 
</span><span class="cx">         FunctionBodyNode* body() { return m_body; }
</span><span class="cx"> 
</span><span class="lines">@@ -1783,11 +1765,9 @@
</span><span class="cx">     };
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    class DestructuringPatternNode : public RefCounted&lt;DestructuringPatternNode&gt; {
-        WTF_MAKE_NONCOPYABLE(DestructuringPatternNode);
-        WTF_MAKE_FAST_ALLOCATED;
-
</del><ins>+    class DestructuringPatternNode : public ParserArenaDeletable {
</ins><span class="cx">     public:
</span><ins>+        virtual ~DestructuringPatternNode() { }
</ins><span class="cx">         virtual void collectBoundIdentifiers(Vector&lt;Identifier&gt;&amp;) const = 0;
</span><span class="cx">         virtual void bindValue(BytecodeGenerator&amp;, RegisterID* source) const = 0;
</span><span class="cx">         virtual void toString(StringBuilder&amp;) const = 0;
</span><span class="lines">@@ -1795,21 +1775,19 @@
</span><span class="cx">         virtual bool isBindingNode() const { return false; }
</span><span class="cx">         virtual RegisterID* emitDirectBinding(BytecodeGenerator&amp;, RegisterID*, ExpressionNode*) { return 0; }
</span><span class="cx">         
</span><del>-        virtual ~DestructuringPatternNode() = 0;
-        
</del><span class="cx">     protected:
</span><span class="cx">         DestructuringPatternNode();
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class ArrayPatternNode : public DestructuringPatternNode, public ThrowableExpressionData {
</span><span class="cx">     public:
</span><ins>+        ArrayPatternNode();
</ins><span class="cx">         enum class BindingType {
</span><span class="cx">             Elision,
</span><span class="cx">             Element,
</span><span class="cx">             RestElement
</span><span class="cx">         };
</span><span class="cx"> 
</span><del>-        static Ref&lt;ArrayPatternNode&gt; create();
</del><span class="cx">         void appendIndex(BindingType bindingType, const JSTokenLocation&amp;, DestructuringPatternNode* node, ExpressionNode* defaultValue)
</span><span class="cx">         {
</span><span class="cx">             m_targetPatterns.append({ bindingType, node, defaultValue });
</span><span class="lines">@@ -1818,10 +1796,9 @@
</span><span class="cx">     private:
</span><span class="cx">         struct Entry {
</span><span class="cx">             BindingType bindingType;
</span><del>-            RefPtr&lt;DestructuringPatternNode&gt; pattern;
</del><ins>+            DestructuringPatternNode* pattern;
</ins><span class="cx">             ExpressionNode* defaultValue;
</span><span class="cx">         };
</span><del>-        ArrayPatternNode();
</del><span class="cx">         virtual void collectBoundIdentifiers(Vector&lt;Identifier&gt;&amp;) const override;
</span><span class="cx">         virtual void bindValue(BytecodeGenerator&amp;, RegisterID*) const override;
</span><span class="cx">         virtual RegisterID* emitDirectBinding(BytecodeGenerator&amp;, RegisterID* dst, ExpressionNode*) override;
</span><span class="lines">@@ -1832,21 +1809,20 @@
</span><span class="cx">     
</span><span class="cx">     class ObjectPatternNode : public DestructuringPatternNode {
</span><span class="cx">     public:
</span><del>-        static Ref&lt;ObjectPatternNode&gt; create();
</del><ins>+        ObjectPatternNode();
</ins><span class="cx">         void appendEntry(const JSTokenLocation&amp;, const Identifier&amp; identifier, bool wasString, DestructuringPatternNode* pattern, ExpressionNode* defaultValue)
</span><span class="cx">         {
</span><span class="cx">             m_targetPatterns.append(Entry{ identifier, wasString, pattern, defaultValue });
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">     private:
</span><del>-        ObjectPatternNode();
</del><span class="cx">         virtual void collectBoundIdentifiers(Vector&lt;Identifier&gt;&amp;) const override;
</span><span class="cx">         virtual void bindValue(BytecodeGenerator&amp;, RegisterID*) const override;
</span><span class="cx">         virtual void toString(StringBuilder&amp;) const override;
</span><span class="cx">         struct Entry {
</span><span class="cx">             Identifier propertyName;
</span><span class="cx">             bool wasString;
</span><del>-            RefPtr&lt;DestructuringPatternNode&gt; pattern;
</del><ins>+            DestructuringPatternNode* pattern;
</ins><span class="cx">             ExpressionNode* defaultValue;
</span><span class="cx">         };
</span><span class="cx">         Vector&lt;Entry&gt; m_targetPatterns;
</span><span class="lines">@@ -1854,15 +1830,13 @@
</span><span class="cx"> 
</span><span class="cx">     class BindingNode : public DestructuringPatternNode {
</span><span class="cx">     public:
</span><del>-        static Ref&lt;BindingNode&gt; create(const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext);
</del><ins>+        BindingNode(const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext);
</ins><span class="cx">         const Identifier&amp; boundProperty() const { return m_boundProperty; }
</span><span class="cx"> 
</span><span class="cx">         const JSTextPosition&amp; divotStart() const { return m_divotStart; }
</span><span class="cx">         const JSTextPosition&amp; divotEnd() const { return m_divotEnd; }
</span><span class="cx">         
</span><span class="cx">     private:
</span><del>-        BindingNode(const Identifier&amp; boundProperty, const JSTextPosition&amp; start, const JSTextPosition&amp; end, AssignmentContext);
-
</del><span class="cx">         virtual void collectBoundIdentifiers(Vector&lt;Identifier&gt;&amp;) const override;
</span><span class="cx">         virtual void bindValue(BytecodeGenerator&amp;, RegisterID*) const override;
</span><span class="cx">         virtual void toString(StringBuilder&amp;) const override;
</span><span class="lines">@@ -1877,8 +1851,8 @@
</span><span class="cx"> 
</span><span class="cx">     class DestructuringAssignmentNode : public ExpressionNode, public ParserArenaDeletable {
</span><span class="cx">     public:
</span><del>-        DestructuringAssignmentNode(const JSTokenLocation&amp;, PassRefPtr&lt;DestructuringPatternNode&gt;, ExpressionNode*);
-        DestructuringPatternNode* bindings() { return m_bindings.get(); }
</del><ins>+        DestructuringAssignmentNode(const JSTokenLocation&amp;, DestructuringPatternNode*, ExpressionNode*);
+        DestructuringPatternNode* bindings() { return m_bindings; }
</ins><span class="cx">         
</span><span class="cx">         using ParserArenaDeletable::operator new;
</span><span class="cx"> 
</span><span class="lines">@@ -1887,13 +1861,13 @@
</span><span class="cx">         virtual bool isDestructuringNode() const override { return true; }
</span><span class="cx">         virtual RegisterID* emitBytecode(BytecodeGenerator&amp;, RegisterID* = 0) override;
</span><span class="cx"> 
</span><del>-        RefPtr&lt;DestructuringPatternNode&gt; m_bindings;
</del><ins>+        DestructuringPatternNode* m_bindings;
</ins><span class="cx">         ExpressionNode* m_initializer;
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     class FuncDeclNode : public StatementNode {
</span><span class="cx">     public:
</span><del>-        FuncDeclNode(const JSTokenLocation&amp;, const Identifier&amp;, FunctionBodyNode*, const SourceCode&amp;, ParameterNode* = 0);
</del><ins>+        FuncDeclNode(const JSTokenLocation&amp;, const Identifier&amp;, FunctionBodyNode*, const SourceCode&amp;);
</ins><span class="cx"> 
</span><span class="cx">         virtual bool isFuncDeclNode() const override { return true; }
</span><span class="cx">         FunctionBodyNode* body() { return m_body; }
</span><span class="lines">@@ -1989,11 +1963,6 @@
</span><span class="cx">         ConstDeclNode* tail;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    struct ParameterList {
-        ParameterNode* head;
-        ParameterNode* tail;
-    };
-
</del><span class="cx">     struct ClauseList {
</span><span class="cx">         ClauseListNode* head;
</span><span class="cx">         ClauseListNode* tail;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -191,8 +191,7 @@
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><span class="cx"> Parser&lt;LexerType&gt;::Parser(
</span><del>-    VM* vm, const SourceCode&amp; source, FunctionParameters* parameters, 
-    const Identifier&amp; name, JSParserBuiltinMode builtinMode, 
</del><ins>+    VM* vm, const SourceCode&amp; source, JSParserBuiltinMode builtinMode, 
</ins><span class="cx">     JSParserStrictMode strictMode, JSParserCodeType codeType, 
</span><span class="cx">     ConstructorKind defaultConstructorKind, ThisTDZMode thisTDZMode)
</span><span class="cx">     : m_vm(vm)
</span><span class="lines">@@ -223,30 +222,7 @@
</span><span class="cx">         scope-&gt;setIsFunction();
</span><span class="cx">     if (strictMode == JSParserStrictMode::Strict)
</span><span class="cx">         scope-&gt;setStrictMode();
</span><del>-    if (parameters) {
-        bool hadBindingParameters = false;
-        for (unsigned i = 0; i &lt; parameters-&gt;size(); i++) {
-            auto parameter = parameters-&gt;at(i);
-            if (!parameter-&gt;isBindingNode()) {
-                hadBindingParameters = true;
-                continue;
-            }
-            scope-&gt;declareParameter(&amp;static_cast&lt;BindingNode*&gt;(parameter)-&gt;boundProperty());
-        }
-        if (hadBindingParameters) {
-            Vector&lt;Identifier&gt; boundParameterNames;
-            for (unsigned i = 0; i &lt; parameters-&gt;size(); i++) {
-                auto parameter = parameters-&gt;at(i);
-                if (parameter-&gt;isBindingNode())
-                    continue;
-                parameter-&gt;collectBoundIdentifiers(boundParameterNames);
-            }
-            for (auto&amp; boundParameterName : boundParameterNames)
-                scope-&gt;declareVariable(&amp;boundParameterName);
-        }
-    }
-    if (!name.isNull())
-        scope-&gt;declareCallee(&amp;name);
</del><ins>+
</ins><span class="cx">     next();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -256,18 +232,56 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-String Parser&lt;LexerType&gt;::parseInner()
</del><ins>+String Parser&lt;LexerType&gt;::parseInner(const Identifier&amp; calleeName, FunctionParseMode parseMode)
</ins><span class="cx"> {
</span><span class="cx">     String parseError = String();
</span><span class="cx">     
</span><span class="cx">     ASTBuilder context(const_cast&lt;VM*&gt;(m_vm), m_parserArena, const_cast&lt;SourceCode*&gt;(m_source));
</span><del>-    if (m_lexer-&gt;isReparsing())
-        m_statementDepth--;
</del><span class="cx">     ScopeRef scope = currentScope();
</span><span class="cx">     scope-&gt;setIsLexicalScope();
</span><span class="cx"> 
</span><del>-    SourceElements* sourceElements = parseSourceElements(context, CheckForStrictMode, StandardFunctionParseType);
-    if (!sourceElements || !consume(EOFTOK)) {
</del><ins>+    bool isArrowFunctionBodyExpression = false;
+    if (m_lexer-&gt;isReparsingFunction()) {
+        ParserFunctionInfo&lt;ASTBuilder&gt; functionInfo;
+        parseFunctionParameters(context, parseMode, functionInfo);
+        m_parameters = functionInfo.parameters;
+
+#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
+        if (parseMode == ArrowFunctionMode &amp;&amp; !hasError()) {
+            // The only way we could have an error wile reparsing is if we run out of stack space.
+            RELEASE_ASSERT(match(ARROWFUNCTION));
+            next();
+            isArrowFunctionBodyExpression = !match(OPENBRACE);
+        }
+#endif
+    }
+
+    if (!calleeName.isNull())
+        scope-&gt;declareCallee(&amp;calleeName);
+
+    if (m_lexer-&gt;isReparsingFunction())
+        m_statementDepth--;
+
+    SourceElements* sourceElements = nullptr;
+    // The only way we can error this early is if we reparse a function and we run out of stack space.
+    if (!hasError()) {
+        if (isArrowFunctionBodyExpression)
+            sourceElements = parseArrowFunctionSingleExpressionBodySourceElements(context);
+        else
+            sourceElements = parseSourceElements(context, CheckForStrictMode);
+    }
+
+    bool validEnding;
+    if (isArrowFunctionBodyExpression) {
+        ASSERT(m_lexer-&gt;isReparsingFunction());
+        // When we reparse and stack overflow, we're not guaranteed a valid ending. If we don't run out of stack space,
+        // then of course this will always be valid because we already parsed for syntax errors. But we must
+        // be cautious in case we run out of stack space.
+        validEnding = isEndOfArrowFunction(); 
+    } else
+        validEnding = consume(EOFTOK);
+
+    if (!sourceElements || !validEnding) {
</ins><span class="cx">         if (hasError())
</span><span class="cx">             parseError = m_errorMessage;
</span><span class="cx">         else
</span><span class="lines">@@ -346,7 +360,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-template &lt;class TreeBuilder&gt; TreeSourceElements Parser&lt;LexerType&gt;::parseSourceElements(TreeBuilder&amp; context, SourceElementsMode mode, FunctionParseType functionParseType)
</del><ins>+template &lt;class TreeBuilder&gt; TreeSourceElements Parser&lt;LexerType&gt;::parseSourceElements(TreeBuilder&amp; context, SourceElementsMode mode)
</ins><span class="cx"> {
</span><span class="cx">     const unsigned lengthOfUseStrictLiteral = 12; // &quot;use strict&quot;.length
</span><span class="cx">     TreeSourceElements sourceElements = context.createSourceElements();
</span><span class="lines">@@ -356,22 +370,6 @@
</span><span class="cx">     auto savePoint = createSavePoint();
</span><span class="cx">     bool hasSetStrict = false;
</span><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    if (match(ARROWFUNCTION)) {
-        TreeStatement arrowfunctionStatement = parseArrowFunctionSingleExpressionBody(context, functionParseType);
-            
-        if (arrowfunctionStatement) {
-            context.setEndOffset(arrowfunctionStatement, m_lastTokenEndPosition.offset);
-            context.appendStatement(sourceElements, arrowfunctionStatement);
-        }
-        
-        propagateError();
-        return sourceElements;
-    }
-#else
-    UNUSED_PARAM(functionParseType);
-#endif
-    
</del><span class="cx">     while (TreeStatement statement = parseStatementListItem(context, directive, &amp;directiveLiteralLength)) {
</span><span class="cx">         if (mode == CheckForStrictMode &amp;&amp; !seenNonDirective) {
</span><span class="cx">             if (directive) {
</span><span class="lines">@@ -662,25 +660,14 @@
</span><span class="cx">     return context.createBindingLocation(token.m_location, name, token.m_startPosition, token.m_endPosition, bindingContext);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-template &lt;class TreeBuilder&gt; TreeStatement Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBody(TreeBuilder&amp; context, FunctionParseType parseType)
</del><ins>+template &lt;class TreeBuilder&gt; TreeSourceElements Parser&lt;LexerType&gt;::parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder&amp; context)
</ins><span class="cx"> {
</span><del>-    ASSERT(match(ARROWFUNCTION));
</del><ins>+    ASSERT(!match(OPENBRACE));
</ins><span class="cx"> 
</span><del>-    // When reparsing phase, parseType becomes StandardFunctionParseType even if the function is arrow function.
-    // This condition considers the following situations.
-    // (1): If we are in the reparsing phase, this arrow function is already parsed once, so there is no syntax error.
-    // (2): But if we are not in the reparsing phase, we should check this function is called in the context of the arrow function.
-    if (!m_lexer-&gt;isReparsing() &amp;&amp; parseType != ArrowFunctionParseType)
-        failDueToUnexpectedToken();
-    
</del><span class="cx">     JSTokenLocation location(tokenLocation());
</span><span class="cx">     JSTextPosition start = tokenStartPosition();
</span><del>-    JSTextPosition end = tokenEndPosition();
</del><span class="cx"> 
</span><del>-    next();
-
</del><span class="cx">     failIfStackOverflow();
</span><span class="cx">     TreeExpression expr = parseAssignmentExpression(context);
</span><span class="cx">     failIfFalse(expr, &quot;Cannot parse the arrow function expression&quot;);
</span><span class="lines">@@ -689,14 +676,18 @@
</span><span class="cx"> 
</span><span class="cx">     failIfFalse(isEndOfArrowFunction(), &quot;Expected a ';', ']', '}', ')', ',', line terminator or EOF following a arrow function statement&quot;);
</span><span class="cx"> 
</span><del>-    end = tokenEndPosition();
</del><ins>+    JSTextPosition end = tokenEndPosition();
</ins><span class="cx">     
</span><span class="cx">     if (!m_lexer-&gt;prevTerminator())
</span><span class="cx">         setEndOfStatement();
</span><span class="cx"> 
</span><del>-    return context.createReturnStatement(location, expr, start, end);
</del><ins>+    TreeSourceElements sourceElements = context.createSourceElements();
+    TreeStatement body = context.createReturnStatement(location, expr, start, end);
+    context.setEndOffset(body, m_lastTokenEndPosition.offset);
+    context.appendStatement(sourceElements, body);
+
+    return sourceElements;
</ins><span class="cx"> }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><span class="cx"> template &lt;class TreeBuilder&gt; TreeDestructuringPattern Parser&lt;LexerType&gt;::tryParseDestructuringPatternExpression(TreeBuilder&amp; context, AssignmentContext bindingContext)
</span><span class="lines">@@ -1229,7 +1220,7 @@
</span><span class="cx">     TreeExpression condition = parseExpression(context);
</span><span class="cx">     failIfFalse(condition, &quot;Cannot parse switch clause&quot;);
</span><span class="cx">     consumeOrFail(COLON, &quot;Expected a ':' after switch clause expression&quot;);
</span><del>-    TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode, StandardFunctionParseType);
</del><ins>+    TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode);
</ins><span class="cx">     failIfFalse(statements, &quot;Cannot parse the body of a switch clause&quot;);
</span><span class="cx">     TreeClause clause = context.createClause(condition, statements);
</span><span class="cx">     context.setStartOffset(clause, startOffset);
</span><span class="lines">@@ -1242,7 +1233,7 @@
</span><span class="cx">         TreeExpression condition = parseExpression(context);
</span><span class="cx">         failIfFalse(condition, &quot;Cannot parse switch case expression&quot;);
</span><span class="cx">         consumeOrFail(COLON, &quot;Expected a ':' after switch clause expression&quot;);
</span><del>-        TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode, StandardFunctionParseType);
</del><ins>+        TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode);
</ins><span class="cx">         failIfFalse(statements, &quot;Cannot parse the body of a switch clause&quot;);
</span><span class="cx">         clause = context.createClause(condition, statements);
</span><span class="cx">         context.setStartOffset(clause, startOffset);
</span><span class="lines">@@ -1259,7 +1250,7 @@
</span><span class="cx">     unsigned startOffset = tokenStart();
</span><span class="cx">     next();
</span><span class="cx">     consumeOrFail(COLON, &quot;Expected a ':' after switch default clause&quot;);
</span><del>-    TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode, StandardFunctionParseType);
</del><ins>+    TreeSourceElements statements = parseSourceElements(context, DontCheckForStrictMode);
</ins><span class="cx">     failIfFalse(statements, &quot;Cannot parse the body of a switch default clause&quot;);
</span><span class="cx">     TreeClause result = context.createClause(0, statements);
</span><span class="cx">     context.setStartOffset(result, startOffset);
</span><span class="lines">@@ -1358,7 +1349,7 @@
</span><span class="cx">             popScope(lexicalScope, TreeBuilder::NeedsFreeVariableInfo);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><del>-    TreeSourceElements subtree = parseSourceElements(context, DontCheckForStrictMode, StandardFunctionParseType);
</del><ins>+    TreeSourceElements subtree = parseSourceElements(context, DontCheckForStrictMode);
</ins><span class="cx">     failIfFalse(subtree, &quot;Cannot parse the body of the block statement&quot;);
</span><span class="cx">     matchOrFail(CLOSEBRACE, &quot;Expected a closing '}' at the end of a block statement&quot;);
</span><span class="cx">     int endOffset = m_token.m_data.offset;
</span><span class="lines">@@ -1466,46 +1457,43 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-template &lt;class TreeBuilder&gt; TreeFormalParameterList Parser&lt;LexerType&gt;::parseFormalParameters(TreeBuilder&amp; context)
</del><ins>+template &lt;class TreeBuilder&gt; bool Parser&lt;LexerType&gt;::parseFormalParameters(TreeBuilder&amp; context, TreeFormalParameterList list, unsigned&amp; parameterCount)
</ins><span class="cx"> {
</span><span class="cx">     auto parameter = parseDestructuringPattern(context, DestructureToParameters);
</span><span class="cx">     failIfFalse(parameter, &quot;Cannot parse parameter pattern&quot;);
</span><del>-    TreeFormalParameterList list = context.createFormalParameterList(parameter);
-    TreeFormalParameterList tail = list;
</del><ins>+    context.appendParameter(list, parameter);
+    parameterCount++;
</ins><span class="cx">     while (consume(COMMA)) {
</span><span class="cx">         parameter = parseDestructuringPattern(context, DestructureToParameters);
</span><span class="cx">         failIfFalse(parameter, &quot;Cannot parse parameter pattern&quot;);
</span><del>-        tail = context.createFormalParameterList(tail, parameter);
</del><ins>+        context.appendParameter(list, parameter);
+        parameterCount++;
</ins><span class="cx">     }
</span><del>-    return list;
</del><ins>+    return true;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><span class="cx"> template &lt;class TreeBuilder&gt; TreeFunctionBody Parser&lt;LexerType&gt;::parseFunctionBody(
</span><del>-    TreeBuilder&amp; context, int functionKeywordStart, int functionNameStart, 
-    int parametersStart, ConstructorKind constructorKind, FunctionParseType parseType)
</del><ins>+    TreeBuilder&amp; context, const JSTokenLocation&amp; startLocation, int startColumn, int functionKeywordStart, int functionNameStart, int parametersStart, 
+    ConstructorKind constructorKind, FunctionBodyType bodyType, unsigned parameterCount, FunctionParseMode parseMode)
</ins><span class="cx"> {
</span><del>-    JSTokenLocation startLocation(tokenLocation());
-    unsigned startColumn = tokenColumn();
-
-    if (parseType == StandardFunctionParseType) {
</del><ins>+    if (bodyType == StandardFunctionBodyBlock || bodyType == ArrowFunctionBodyBlock) {
</ins><span class="cx">         next();
</span><span class="cx">         if (match(CLOSEBRACE)) {
</span><span class="cx">             unsigned endColumn = tokenColumn();
</span><del>-            return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind);
</del><ins>+            return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, parameterCount, parseMode);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     DepthManager statementDepth(&amp;m_statementDepth);
</span><span class="cx">     m_statementDepth = 0;
</span><del>-    typename TreeBuilder::FunctionBodyBuilder bodyBuilder(const_cast&lt;VM*&gt;(m_vm), m_lexer.get());
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    failIfFalse(parseSourceElements(bodyBuilder, CheckForStrictMode, parseType), parseType == StandardFunctionParseType ? &quot;Cannot parse body of this function&quot; : &quot;Cannot parse body of this arrow function&quot;);
-#else
-    failIfFalse(parseSourceElements(bodyBuilder, CheckForStrictMode, StandardFunctionParseType), &quot;Cannot parse body of this function&quot;);
-#endif
</del><ins>+    SyntaxChecker syntaxChecker(const_cast&lt;VM*&gt;(m_vm), m_lexer.get());
+    if (bodyType == ArrowFunctionBodyExpression)
+        failIfFalse(parseArrowFunctionSingleExpressionBodySourceElements(syntaxChecker), &quot;Cannot parse body of this arrow function&quot;);
+    else
+        failIfFalse(parseSourceElements(syntaxChecker, CheckForStrictMode), bodyType == StandardFunctionBodyBlock ? &quot;Cannot parse body of this function&quot; : &quot;Cannot parse body of this arrow function&quot;);
</ins><span class="cx">     unsigned endColumn = tokenColumn();
</span><del>-    return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind);
</del><ins>+    return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind, parameterCount, parseMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static const char* stringForFunctionMode(FunctionParseMode mode)
</span><span class="lines">@@ -1515,24 +1503,28 @@
</span><span class="cx">         return &quot;getter&quot;;
</span><span class="cx">     case SetterMode:
</span><span class="cx">         return &quot;setter&quot;;
</span><del>-    case FunctionMode:
</del><ins>+    case NormalFunctionMode:
</ins><span class="cx">         return &quot;function&quot;;
</span><span class="cx">     case MethodMode:
</span><span class="cx">         return &quot;method&quot;;
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     case ArrowFunctionMode:
</span><span class="cx">         return &quot;arrow function&quot;;
</span><del>-#endif
</del><ins>+    case NotAFunctionMode:
+        RELEASE_ASSERT_NOT_REACHED();
+        return &quot;&quot;;
</ins><span class="cx">     }
</span><span class="cx">     RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template &lt;typename LexerType&gt; template &lt;class TreeBuilder&gt; int Parser&lt;LexerType&gt;::parseFunctionParameters(TreeBuilder&amp; context, FunctionParseMode mode, ParserFunctionInfo&lt;TreeBuilder&gt;&amp; info)
</del><ins>+template &lt;typename LexerType&gt; template &lt;class TreeBuilder&gt; int Parser&lt;LexerType&gt;::parseFunctionParameters(TreeBuilder&amp; context, FunctionParseMode mode, ParserFunctionInfo&lt;TreeBuilder&gt;&amp; functionInfo)
</ins><span class="cx"> {
</span><ins>+    RELEASE_ASSERT(mode != NotAFunctionMode);
</ins><span class="cx">     int parametersStart = m_token.m_location.startOffset;
</span><ins>+    TreeFormalParameterList parameterList = context.createFormalParameterList();
+    functionInfo.parameters = parameterList;
+    functionInfo.startOffset = parametersStart;
</ins><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     if (mode == ArrowFunctionMode) {
</span><span class="cx">         if (!match(IDENT) &amp;&amp; !match(OPENPAREN)) {
</span><span class="cx">             semanticFailureDueToKeyword(stringForFunctionMode(mode), &quot; name&quot;);
</span><span class="lines">@@ -1541,76 +1533,87 @@
</span><span class="cx">             if (match(OPENPAREN)) {
</span><span class="cx">                 next();
</span><span class="cx">                 
</span><del>-                if (!match(CLOSEPAREN)) {
-                    info.parameters = parseFormalParameters(context);
-                    failIfFalse(info.parameters, &quot;Cannot parse parameters for this &quot;, stringForFunctionMode(mode));
-                }
</del><ins>+                if (match(CLOSEPAREN))
+                    functionInfo.parameterCount = 0;
+                else
+                    failIfFalse(parseFormalParameters(context, parameterList, functionInfo.parameterCount), &quot;Cannot parse parameters for this &quot;, stringForFunctionMode(mode));
</ins><span class="cx">                 
</span><span class="cx">                 consumeOrFail(CLOSEPAREN, &quot;Expected a ')' or a ',' after a parameter declaration&quot;);
</span><span class="cx">             } else {
</span><ins>+                functionInfo.parameterCount = 1;
</ins><span class="cx">                 auto parameter = parseDestructuringPattern(context, DestructureToParameters);
</span><span class="cx">                 failIfFalse(parameter, &quot;Cannot parse parameter pattern&quot;);
</span><del>-                info.parameters = context.createFormalParameterList(parameter);
-                failIfFalse(info.parameters, &quot;Cannot parse parameters for this &quot;, stringForFunctionMode(mode));
</del><ins>+                context.appendParameter(parameterList, parameter);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><del>-        
</del><ins>+
</ins><span class="cx">         return parametersStart;
</span><span class="cx">     }
</span><del>-#endif
-    
</del><ins>+
</ins><span class="cx">     if (!consume(OPENPAREN)) {
</span><span class="cx">         semanticFailureDueToKeyword(stringForFunctionMode(mode), &quot; name&quot;);
</span><span class="cx">         failWithMessage(&quot;Expected an opening '(' before a &quot;, stringForFunctionMode(mode), &quot;'s parameter list&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (mode == GetterMode)
</del><ins>+    if (mode == GetterMode) {
</ins><span class="cx">         consumeOrFail(CLOSEPAREN, &quot;getter functions must have no parameters&quot;);
</span><del>-    else if (mode == SetterMode) {
</del><ins>+        functionInfo.parameterCount = 0;
+    } else if (mode == SetterMode) {
</ins><span class="cx">         failIfTrue(match(CLOSEPAREN), &quot;setter functions must have one parameter&quot;);
</span><span class="cx">         auto parameter = parseDestructuringPattern(context, DestructureToParameters);
</span><span class="cx">         failIfFalse(parameter, &quot;setter functions must have one parameter&quot;);
</span><del>-        info.parameters = context.createFormalParameterList(parameter);
</del><ins>+        context.appendParameter(parameterList, parameter);
+        functionInfo.parameterCount = 1;
</ins><span class="cx">         failIfTrue(match(COMMA), &quot;setter functions must have one parameter&quot;);
</span><span class="cx">         consumeOrFail(CLOSEPAREN, &quot;Expected a ')' after a parameter declaration&quot;);
</span><span class="cx">     } else {
</span><del>-        if (!match(CLOSEPAREN)) {
-            info.parameters = parseFormalParameters(context);
-            failIfFalse(info.parameters, &quot;Cannot parse parameters for this &quot;, stringForFunctionMode(mode));
-        }
</del><ins>+        if (match(CLOSEPAREN))
+            functionInfo.parameterCount = 0;
+        else
+            failIfFalse(parseFormalParameters(context, parameterList, functionInfo.parameterCount), &quot;Cannot parse parameters for this &quot;, stringForFunctionMode(mode));
</ins><span class="cx">         consumeOrFail(CLOSEPAREN, &quot;Expected a ')' or a ',' after a parameter declaration&quot;);
</span><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     return parametersStart;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><del>-template &lt;class TreeBuilder&gt; bool Parser&lt;LexerType&gt;::parseFunctionInfo(TreeBuilder&amp; context, FunctionRequirements requirements, FunctionParseMode mode, bool nameIsInContainingScope, ConstructorKind constructorKind, SuperBinding expectedSuperBinding, int functionKeywordStart, ParserFunctionInfo&lt;TreeBuilder&gt;&amp; info, FunctionParseType parseType)
</del><ins>+template &lt;class TreeBuilder&gt; bool Parser&lt;LexerType&gt;::parseFunctionInfo(TreeBuilder&amp; context, FunctionRequirements requirements, FunctionParseMode mode, bool nameIsInContainingScope, ConstructorKind constructorKind, SuperBinding expectedSuperBinding, int functionKeywordStart, ParserFunctionInfo&lt;TreeBuilder&gt;&amp; functionInfo, FunctionParseType parseType)
</ins><span class="cx"> {
</span><ins>+    RELEASE_ASSERT(mode != NotAFunctionMode);
+
</ins><span class="cx">     AutoPopScopeRef functionScope(this, pushScope());
</span><span class="cx">     functionScope-&gt;setIsFunction();
</span><span class="cx">     int functionNameStart = m_token.m_location.startOffset;
</span><span class="cx">     const Identifier* lastFunctionName = m_lastFunctionName;
</span><span class="cx">     m_lastFunctionName = nullptr;
</span><span class="cx">     int parametersStart;
</span><ins>+    JSTokenLocation startLocation;
+    int startColumn;
+    FunctionBodyType functionBodyType;
</ins><span class="cx">     
</span><span class="cx">     switch (parseType) {
</span><span class="cx">     case StandardFunctionParseType: {
</span><ins>+        RELEASE_ASSERT(mode != ArrowFunctionMode);
</ins><span class="cx">         if (match(IDENT) || isLETMaskedAsIDENT()) {
</span><del>-            info.name = m_token.m_data.ident;
-            m_lastFunctionName = info.name;
</del><ins>+            functionInfo.name = m_token.m_data.ident;
+            m_lastFunctionName = functionInfo.name;
</ins><span class="cx">             next();
</span><span class="cx">             if (!nameIsInContainingScope)
</span><del>-                failIfFalseIfStrict(functionScope-&gt;declareVariable(info.name), &quot;'&quot;, info.name-&gt;impl(), &quot;' is not a valid &quot;, stringForFunctionMode(mode), &quot; name in strict mode&quot;);
</del><ins>+                failIfFalseIfStrict(functionScope-&gt;declareVariable(functionInfo.name), &quot;'&quot;, functionInfo.name-&gt;impl(), &quot;' is not a valid &quot;, stringForFunctionMode(mode), &quot; name in strict mode&quot;);
</ins><span class="cx">         } else if (requirements == FunctionNeedsName) {
</span><del>-            if (match(OPENPAREN) &amp;&amp; mode == FunctionMode)
</del><ins>+            if (match(OPENPAREN) &amp;&amp; mode == NormalFunctionMode)
</ins><span class="cx">                 semanticFail(&quot;Function statements must have a name&quot;);
</span><span class="cx">             semanticFailureDueToKeyword(stringForFunctionMode(mode), &quot; name&quot;);
</span><span class="cx">             failDueToUnexpectedToken();
</span><span class="cx">             return false;
</span><span class="cx">         }
</span><del>-        
-        parametersStart = parseFunctionParameters(context, mode, info);
</del><ins>+
+        startLocation = tokenLocation();
+        functionInfo.startLine = tokenLine();
+        startColumn = tokenColumn();
+
+        parametersStart = parseFunctionParameters(context, mode, functionInfo);
</ins><span class="cx">         propagateError();
</span><span class="cx">         
</span><span class="cx">         matchOrFail(OPENBRACE, &quot;Expected an opening '{' at the start of a &quot;, stringForFunctionMode(mode), &quot; body&quot;);
</span><span class="lines">@@ -1622,14 +1625,20 @@
</span><span class="cx">             constructorKind = m_defaultConstructorKind;
</span><span class="cx">             expectedSuperBinding = m_defaultConstructorKind == ConstructorKind::Derived ? SuperBinding::Needed : SuperBinding::NotNeeded;
</span><span class="cx">         }
</span><ins>+
+        functionBodyType = StandardFunctionBodyBlock;
</ins><span class="cx">         
</span><del>-        info.startFunctionOffset = m_token.m_data.offset;
-        
</del><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> #if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</span><span class="cx">     case ArrowFunctionParseType: {
</span><del>-        parametersStart = parseFunctionParameters(context, ArrowFunctionMode, info);
</del><ins>+        RELEASE_ASSERT(mode == ArrowFunctionMode);
+
+        startLocation = tokenLocation();
+        functionInfo.startLine = tokenLine();
+        startColumn = tokenColumn();
+
+        parametersStart = parseFunctionParameters(context, mode, functionInfo);
</ins><span class="cx">         propagateError();
</span><span class="cx">         
</span><span class="cx">         matchOrFail(ARROWFUNCTION, &quot;Expected a '=&gt;' after arrow function parameter declaration&quot;);
</span><span class="lines">@@ -1639,30 +1648,25 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT(constructorKind == ConstructorKind::None);
</span><span class="cx">         
</span><del>-        info.arrowFunctionOffset = m_token.m_data.offset;
</del><span class="cx">         // Check if arrow body start with {. If it true it mean that arrow function is Fat arrow function
</span><span class="cx">         // and we need use common approach to parse function body
</span><del>-        SavePoint savePoint = createSavePoint();
-        
</del><span class="cx">         next();
</span><del>-        info.functionBodyType = match(OPENBRACE) ? ArrowFunctionBodyBlock : ArrowFunctionBodyExpression;
-        info.startFunctionOffset = (info.functionBodyType == ArrowFunctionBodyBlock) ? m_token.m_data.offset : info.arrowFunctionOffset;
</del><ins>+        functionBodyType = match(OPENBRACE) ? ArrowFunctionBodyBlock : ArrowFunctionBodyExpression;
</ins><span class="cx">         
</span><del>-        restoreSavePoint(savePoint);
-
</del><span class="cx">         break;
</span><span class="cx">     }
</span><ins>+#else
+    default:
+        RELEASE_ASSERT_NOT_REACHED();
</ins><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     bool isClassConstructor = constructorKind != ConstructorKind::None;
</span><span class="cx"> 
</span><del>-    info.bodyStartLine = tokenLine();
-    info.bodyStartColumn = m_token.m_data.offset - m_token.m_data.lineStartOffset;
-    JSTokenLocation startLocation(tokenLocation());
</del><ins>+    functionInfo.bodyStartColumn = startColumn;
</ins><span class="cx">     
</span><span class="cx">     // If we know about this function already, we can use the cached info and skip the parser to the end of the function.
</span><del>-    if (const SourceProviderCacheItem* cachedInfo = TreeBuilder::CanUseFunctionCache ? findCachedFunctionInfo(info.startFunctionOffset) : 0) {
</del><ins>+    if (const SourceProviderCacheItem* cachedInfo = TreeBuilder::CanUseFunctionCache ? findCachedFunctionInfo(functionInfo.startOffset) : 0) {
</ins><span class="cx">         // If we're in a strict context, the cached function info must say it was strict too.
</span><span class="cx">         ASSERT(!strictMode() || cachedInfo-&gt;strictMode);
</span><span class="cx">         JSTokenLocation endLocation;
</span><span class="lines">@@ -1671,17 +1675,17 @@
</span><span class="cx">         endLocation.startOffset = cachedInfo-&gt;lastTockenStartOffset;
</span><span class="cx">         endLocation.lineStartOffset = cachedInfo-&gt;lastTockenLineStartOffset;
</span><span class="cx"> 
</span><del>-        bool endColumnIsOnStartLine = (endLocation.line == info.bodyStartLine);
</del><ins>+        bool endColumnIsOnStartLine = (endLocation.line == functionInfo.startLine);
</ins><span class="cx">         ASSERT(endLocation.startOffset &gt;= endLocation.lineStartOffset);
</span><span class="cx">         unsigned bodyEndColumn = endColumnIsOnStartLine ?
</span><span class="cx">             endLocation.startOffset - m_token.m_data.lineStartOffset :
</span><span class="cx">             endLocation.startOffset - endLocation.lineStartOffset;
</span><span class="cx">         unsigned currentLineStartOffset = m_token.m_location.lineStartOffset;
</span><span class="cx"> 
</span><del>-        info.body = context.createFunctionBody(
-            startLocation, endLocation, info.bodyStartColumn, bodyEndColumn, 
</del><ins>+        functionInfo.body = context.createFunctionBody(
+            startLocation, endLocation, functionInfo.bodyStartColumn, bodyEndColumn, 
</ins><span class="cx">             functionKeywordStart, functionNameStart, parametersStart, 
</span><del>-            cachedInfo-&gt;strictMode, constructorKind);
</del><ins>+            cachedInfo-&gt;strictMode, constructorKind, cachedInfo-&gt;parameterCount, mode);
</ins><span class="cx">         
</span><span class="cx">         functionScope-&gt;restoreFromSourceProviderCache(cachedInfo);
</span><span class="cx">         popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo);
</span><span class="lines">@@ -1693,64 +1697,40 @@
</span><span class="cx"> 
</span><span class="cx">         m_lexer-&gt;setOffset(m_token.m_location.endOffset, m_token.m_location.lineStartOffset);
</span><span class="cx">         m_lexer-&gt;setLineNumber(m_token.m_location.line);
</span><del>-        info.endFunctionOffset = cachedInfo-&gt;endFunctionOffset;
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><ins>+        functionInfo.endOffset = cachedInfo-&gt;endFunctionOffset;
+
</ins><span class="cx">         if (parseType == ArrowFunctionParseType)
</span><del>-            info.functionBodyType = cachedInfo-&gt;isBodyArrowExpression ?  ArrowFunctionBodyExpression : ArrowFunctionBodyBlock;
</del><ins>+            functionBodyType = cachedInfo-&gt;isBodyArrowExpression ?  ArrowFunctionBodyExpression : ArrowFunctionBodyBlock;
</ins><span class="cx">         else
</span><del>-            info.functionBodyType = StandardFunctionBodyBlock;
</del><ins>+            functionBodyType = StandardFunctionBodyBlock;
</ins><span class="cx">         
</span><del>-        switch (info.functionBodyType) {
</del><ins>+        switch (functionBodyType) {
</ins><span class="cx">         case ArrowFunctionBodyExpression:
</span><span class="cx">             next();
</span><del>-            context.setEndOffset(info.body, m_lexer-&gt;currentOffset());
</del><ins>+            context.setEndOffset(functionInfo.body, m_lexer-&gt;currentOffset());
</ins><span class="cx">             break;
</span><span class="cx">         case ArrowFunctionBodyBlock:
</span><span class="cx">         case StandardFunctionBodyBlock:
</span><del>-            context.setEndOffset(info.body, m_lexer-&gt;currentOffset());
</del><ins>+            context.setEndOffset(functionInfo.body, m_lexer-&gt;currentOffset());
</ins><span class="cx">             next();
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-#else
-        context.setEndOffset(info.body, m_lexer-&gt;currentOffset());
-        next();
-#endif
-        info.bodyEndLine = m_lastTokenEndPosition.line;
</del><ins>+        functionInfo.endLine = m_lastTokenEndPosition.line;
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     m_lastFunctionName = lastFunctionName;
</span><span class="cx">     ParserState oldState = saveState();
</span><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    switch (info.functionBodyType) {
-    case ArrowFunctionBodyBlock: {
-        // Consume =&gt; in case of arrow function block e.g. x =&gt; { return x; }
-        next();
</del><ins>+    functionInfo.body = parseFunctionBody(context, startLocation, startColumn, functionKeywordStart, functionNameStart, parametersStart, constructorKind, functionBodyType, functionInfo.parameterCount, mode);
</ins><span class="cx">     
</span><del>-        info.bodyStartLine = tokenLine();
-        info.bodyStartColumn = m_token.m_data.offset - m_token.m_data.lineStartOffset;
-            
-        info.body = parseFunctionBody(context, functionKeywordStart, functionNameStart, parametersStart, constructorKind, StandardFunctionParseType);
-        break;
-    }
-    case StandardFunctionBodyBlock:
-    case ArrowFunctionBodyExpression : {
-        info.body = parseFunctionBody(context, functionKeywordStart, functionNameStart, parametersStart, constructorKind, parseType);
-        break;
-    }
-    }
-#else
-    info.body = parseFunctionBody(context, functionKeywordStart, functionNameStart, parametersStart, constructorKind, StandardFunctionParseType);
-#endif
-    
</del><span class="cx">     restoreState(oldState);
</span><del>-    failIfFalse(info.body, &quot;Cannot parse the body of this &quot;, stringForFunctionMode(mode));
-    context.setEndOffset(info.body, m_lexer-&gt;currentOffset());
-    if (functionScope-&gt;strictMode() &amp;&amp; info.name) {
-        RELEASE_ASSERT(mode == FunctionMode || mode == MethodMode);
-        semanticFailIfTrue(m_vm-&gt;propertyNames-&gt;arguments == *info.name, &quot;'&quot;, info.name-&gt;impl(), &quot;' is not a valid function name in strict mode&quot;);
-        semanticFailIfTrue(m_vm-&gt;propertyNames-&gt;eval == *info.name, &quot;'&quot;, info.name-&gt;impl(), &quot;' is not a valid function name in strict mode&quot;);
</del><ins>+    failIfFalse(functionInfo.body, &quot;Cannot parse the body of this &quot;, stringForFunctionMode(mode));
+    context.setEndOffset(functionInfo.body, m_lexer-&gt;currentOffset());
+    if (functionScope-&gt;strictMode() &amp;&amp; functionInfo.name) {
+        RELEASE_ASSERT(mode == NormalFunctionMode || mode == MethodMode);
+        semanticFailIfTrue(m_vm-&gt;propertyNames-&gt;arguments == *functionInfo.name, &quot;'&quot;, functionInfo.name-&gt;impl(), &quot;' is not a valid function name in strict mode&quot;);
+        semanticFailIfTrue(m_vm-&gt;propertyNames-&gt;eval == *functionInfo.name, &quot;'&quot;, functionInfo.name-&gt;impl(), &quot;' is not a valid function name in strict mode&quot;);
</ins><span class="cx">     }
</span><span class="cx">     if (functionScope-&gt;hasDirectSuper()) {
</span><span class="cx">         semanticFailIfTrue(!isClassConstructor, &quot;Cannot call super() outside of a class constructor&quot;);
</span><span class="lines">@@ -1760,56 +1740,48 @@
</span><span class="cx">         semanticFailIfTrue(expectedSuperBinding == SuperBinding::NotNeeded, &quot;super can only be used in a method of a derived class&quot;);
</span><span class="cx"> 
</span><span class="cx">     JSTokenLocation location = JSTokenLocation(m_token.m_location);
</span><del>-    info.endFunctionOffset = m_token.m_data.offset;
</del><ins>+    functionInfo.endOffset = m_token.m_data.offset;
</ins><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    if (info.functionBodyType == ArrowFunctionBodyExpression) {
</del><ins>+    if (functionBodyType == ArrowFunctionBodyExpression) {
</ins><span class="cx">         location = locationBeforeLastToken();
</span><del>-        info.endFunctionOffset = location.endOffset;
</del><ins>+        functionInfo.endOffset = location.endOffset;
</ins><span class="cx">     }
</span><del>-#endif
</del><span class="cx">     
</span><span class="cx">     // Cache the tokenizer state and the function scope the first time the function is parsed.
</span><span class="cx">     // Any future reparsing can then skip the function.
</span><span class="cx">     static const int minimumFunctionLengthToCache = 16;
</span><span class="cx">     std::unique_ptr&lt;SourceProviderCacheItem&gt; newInfo;
</span><del>-    int functionLength = info.endFunctionOffset - info.startFunctionOffset;
</del><ins>+    int functionLength = functionInfo.endOffset - functionInfo.startOffset;
</ins><span class="cx">     if (TreeBuilder::CanUseFunctionCache &amp;&amp; m_functionCache &amp;&amp; functionLength &gt; minimumFunctionLengthToCache) {
</span><span class="cx">         SourceProviderCacheItemCreationParameters parameters;
</span><del>-        parameters.endFunctionOffset = info.endFunctionOffset;
</del><ins>+        parameters.endFunctionOffset = functionInfo.endOffset;
</ins><span class="cx">         parameters.functionNameStart = functionNameStart;
</span><span class="cx">         parameters.lastTockenLine = location.line;
</span><span class="cx">         parameters.lastTockenStartOffset = location.startOffset;
</span><span class="cx">         parameters.lastTockenEndOffset = location.endOffset;
</span><span class="cx">         parameters.lastTockenLineStartOffset = location.lineStartOffset;
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-        if (info.functionBodyType == ArrowFunctionBodyExpression) {
</del><ins>+        parameters.parameterCount = functionInfo.parameterCount;
+        if (functionBodyType == ArrowFunctionBodyExpression) {
</ins><span class="cx">             parameters.isBodyArrowExpression = true;
</span><span class="cx">             parameters.tokenType = m_token.m_type;
</span><span class="cx">         }
</span><del>-#endif
</del><span class="cx">         functionScope-&gt;fillParametersForSourceProviderCache(parameters);
</span><span class="cx">         newInfo = SourceProviderCacheItem::create(parameters);
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo);
</span><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    if (info.functionBodyType == ArrowFunctionBodyExpression)
</del><ins>+    if (functionBodyType == ArrowFunctionBodyExpression)
</ins><span class="cx">         failIfFalse(isEndOfArrowFunction(), &quot;Expected the closing ';' ',' ']' ')' '}', line terminator or EOF after arrow function&quot;);
</span><span class="cx">     else {
</span><span class="cx">         matchOrFail(CLOSEBRACE, &quot;Expected a closing '}' after a &quot;, stringForFunctionMode(mode), &quot; body&quot;);
</span><span class="cx">         next();
</span><span class="cx">     }
</span><del>-#else
-    matchOrFail(CLOSEBRACE, &quot;Expected a closing '}' after a &quot;, stringForFunctionMode(mode), &quot; body&quot;);
-    next();
-#endif
</del><span class="cx">     
</span><span class="cx">     if (newInfo)
</span><del>-        m_functionCache-&gt;add(info.startFunctionOffset, WTF::move(newInfo));
</del><ins>+        m_functionCache-&gt;add(functionInfo.startOffset, WTF::move(newInfo));
</ins><span class="cx">     
</span><del>-    info.bodyEndLine = m_lastTokenEndPosition.line;
</del><ins>+    functionInfo.endLine = m_lastTokenEndPosition.line;
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1820,12 +1792,12 @@
</span><span class="cx">     JSTokenLocation location(tokenLocation());
</span><span class="cx">     unsigned functionKeywordStart = tokenStart();
</span><span class="cx">     next();
</span><del>-    ParserFunctionInfo&lt;TreeBuilder&gt; info;
-    failIfFalse((parseFunctionInfo(context, FunctionNeedsName, FunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded,
-        functionKeywordStart, info, StandardFunctionParseType)), &quot;Cannot parse this function&quot;);
-    failIfFalse(info.name, &quot;Function statements must have a name&quot;);
-    failIfFalseIfStrict(declareVariable(info.name), &quot;Cannot declare a function named '&quot;, info.name-&gt;impl(), &quot;' in strict mode&quot;);
-    return context.createFuncDeclStatement(location, info);
</del><ins>+    ParserFunctionInfo&lt;TreeBuilder&gt; functionInfo;
+    failIfFalse((parseFunctionInfo(context, FunctionNeedsName, NormalFunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded,
+        functionKeywordStart, functionInfo, StandardFunctionParseType)), &quot;Cannot parse this function&quot;);
+    failIfFalse(functionInfo.name, &quot;Function statements must have a name&quot;);
+    failIfFalseIfStrict(declareVariable(functionInfo.name), &quot;Cannot declare a function named '&quot;, functionInfo.name-&gt;impl(), &quot;' in strict mode&quot;);
+    return context.createFuncDeclStatement(location, functionInfo);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span><span class="lines">@@ -1939,7 +1911,7 @@
</span><span class="cx">         } else {
</span><span class="cx">             ParserFunctionInfo&lt;TreeBuilder&gt; methodInfo;
</span><span class="cx">             bool isConstructor = !isStaticMethod &amp;&amp; *ident == propertyNames.constructor;
</span><del>-            failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, isStaticMethod ? FunctionMode : MethodMode, false, isConstructor ? constructorKind : ConstructorKind::None, SuperBinding::Needed, methodStart, methodInfo, StandardFunctionParseType)), &quot;Cannot parse this method&quot;);
</del><ins>+            failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, isStaticMethod ? NormalFunctionMode : MethodMode, false, isConstructor ? constructorKind : ConstructorKind::None, SuperBinding::Needed, methodStart, methodInfo, StandardFunctionParseType)), &quot;Cannot parse this method&quot;);
</ins><span class="cx">             failIfFalse(ident &amp;&amp; declareVariable(ident), &quot;Cannot declare a method named '&quot;, methodInfo.name-&gt;impl(), &quot;'&quot;);
</span><span class="cx">             methodInfo.name = isConstructor ? className : ident;
</span><span class="cx"> 
</span><span class="lines">@@ -2757,7 +2729,7 @@
</span><span class="cx">         next();
</span><span class="cx">         ParserFunctionInfo&lt;TreeBuilder&gt; info;
</span><span class="cx">         info.name = &amp;m_vm-&gt;propertyNames-&gt;nullIdentifier;
</span><del>-        failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, false, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, StandardFunctionParseType)), &quot;Cannot parse function expression&quot;);
</del><ins>+        failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, NormalFunctionMode, false, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, StandardFunctionParseType)), &quot;Cannot parse function expression&quot;);
</ins><span class="cx">         return context.createFunctionExpr(location, info);
</span><span class="cx">     }
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span><span class="lines">@@ -3002,7 +2974,6 @@
</span><span class="cx">     return base;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx"> template &lt;typename LexerType&gt;
</span><span class="cx"> template &lt;class TreeBuilder&gt; TreeExpression Parser&lt;LexerType&gt;::parseArrowFunctionExpression(TreeBuilder&amp; context)
</span><span class="cx"> {
</span><span class="lines">@@ -3012,11 +2983,10 @@
</span><span class="cx">     location = tokenLocation();
</span><span class="cx">     ParserFunctionInfo&lt;TreeBuilder&gt; info;
</span><span class="cx">     info.name = &amp;m_vm-&gt;propertyNames-&gt;nullIdentifier;
</span><del>-    failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, ArrowFunctionParseType)), &quot;Cannot parse arrow function expression&quot;);
</del><ins>+    failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, ArrowFunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, ArrowFunctionParseType)), &quot;Cannot parse arrow function expression&quot;);
</ins><span class="cx"> 
</span><span class="cx">     return context.createArrowFunctionExpr(location, info);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> static const char* operatorString(bool prefix, unsigned tok)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -81,21 +81,9 @@
</span><span class="cx"> COMPILE_ASSERT(LastUntaggedToken &lt; 64, LessThan64UntaggedTokens);
</span><span class="cx"> 
</span><span class="cx"> enum SourceElementsMode { CheckForStrictMode, DontCheckForStrictMode };
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx"> enum FunctionParseType { StandardFunctionParseType, ArrowFunctionParseType };
</span><del>-#else
-enum FunctionParseType { StandardFunctionParseType};
-#endif
</del><ins>+enum FunctionBodyType { ArrowFunctionBodyExpression, ArrowFunctionBodyBlock, StandardFunctionBodyBlock };
</ins><span class="cx"> enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName };
</span><del>-enum FunctionParseMode {
-    FunctionMode,
-    GetterMode,
-    SetterMode,
-    MethodMode,
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    ArrowFunctionMode
-#endif
-};
</del><span class="cx"> enum DestructuringKind {
</span><span class="cx">     DestructureToVariables,
</span><span class="cx">     DestructureToLexicalVariables,
</span><span class="lines">@@ -537,13 +525,12 @@
</span><span class="cx"> 
</span><span class="cx"> public:
</span><span class="cx">     Parser(
</span><del>-        VM*, const SourceCode&amp;, FunctionParameters*, const Identifier&amp;, 
-        JSParserBuiltinMode, JSParserStrictMode, JSParserCodeType,
</del><ins>+        VM*, const SourceCode&amp;, JSParserBuiltinMode, JSParserStrictMode, JSParserCodeType, 
</ins><span class="cx">         ConstructorKind defaultConstructorKind = ConstructorKind::None, ThisTDZMode = ThisTDZMode::CheckIfNeeded);
</span><span class="cx">     ~Parser();
</span><span class="cx"> 
</span><span class="cx">     template &lt;class ParsedNode&gt;
</span><del>-    std::unique_ptr&lt;ParsedNode&gt; parse(ParserError&amp;);
</del><ins>+    std::unique_ptr&lt;ParsedNode&gt; parse(ParserError&amp;, const Identifier&amp;, FunctionParseMode);
</ins><span class="cx"> 
</span><span class="cx">     JSTextPosition positionBeforeLastNewline() const { return m_lexer-&gt;positionBeforeLastNewline(); }
</span><span class="cx">     JSTokenLocation locationBeforeLastToken() const { return m_lexer-&gt;lastTokenLocation(); }
</span><span class="lines">@@ -739,7 +726,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     Parser();
</span><del>-    String parseInner();
</del><ins>+    String parseInner(const Identifier&amp;, FunctionParseMode);
</ins><span class="cx"> 
</span><span class="cx">     void didFinishParsing(SourceElements*, DeclarationStacks::FunctionStack&amp;, VariableEnvironment&amp;, CodeFeatures, int, const Vector&lt;RefPtr&lt;UniquedStringImpl&gt;&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -796,7 +783,6 @@
</span><span class="cx">         return m_token.m_type == IDENT &amp;&amp; *m_token.m_data.ident == m_vm-&gt;propertyNames-&gt;of;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     ALWAYS_INLINE bool isEndOfArrowFunction()
</span><span class="cx">     {
</span><span class="cx">         return match(SEMICOLON) || match(COMMA) || match(CLOSEPAREN) || match(CLOSEBRACE) || match(CLOSEBRACKET) || match(EOFTOK) || m_lexer-&gt;prevTerminator();
</span><span class="lines">@@ -804,6 +790,7 @@
</span><span class="cx">     
</span><span class="cx">     ALWAYS_INLINE bool isArrowFunctionParamters()
</span><span class="cx">     {
</span><ins>+#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</ins><span class="cx">         bool isArrowFunction = false;
</span><span class="cx">         
</span><span class="cx">         if (match(EOFTOK))
</span><span class="lines">@@ -834,8 +821,10 @@
</span><span class="cx">         restoreSavePoint(saveArrowFunctionPoint);
</span><span class="cx">         
</span><span class="cx">         return isArrowFunction;
</span><del>-    }
</del><ins>+#else
+        return false;
</ins><span class="cx"> #endif
</span><ins>+    }
</ins><span class="cx">     
</span><span class="cx">     ALWAYS_INLINE unsigned tokenStart()
</span><span class="cx">     {
</span><span class="lines">@@ -946,7 +935,7 @@
</span><span class="cx">         return match(LET) &amp;&amp; !strictMode();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    template &lt;class TreeBuilder&gt; TreeSourceElements parseSourceElements(TreeBuilder&amp;, SourceElementsMode, FunctionParseType);
</del><ins>+    template &lt;class TreeBuilder&gt; TreeSourceElements parseSourceElements(TreeBuilder&amp;, SourceElementsMode);
</ins><span class="cx">     template &lt;class TreeBuilder&gt; TreeStatement parseStatementListItem(TreeBuilder&amp;, const Identifier*&amp; directive, unsigned* directiveLiteralLength);
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeStatement parseStatement(TreeBuilder&amp;, const Identifier*&amp; directive, unsigned* directiveLiteralLength = 0);
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span><span class="lines">@@ -987,17 +976,13 @@
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeProperty parseProperty(TreeBuilder&amp;, bool strict);
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeExpression parsePropertyMethod(TreeBuilder&amp; context, const Identifier* methodName);
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeProperty parseGetterSetter(TreeBuilder&amp;, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, ConstructorKind = ConstructorKind::None, SuperBinding = SuperBinding::NotNeeded);
</span><del>-    template &lt;class TreeBuilder&gt; ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&amp;, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionParseType);
-    template &lt;class TreeBuilder&gt; ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&amp;);
</del><ins>+    template &lt;class TreeBuilder&gt; ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&amp;, const JSTokenLocation&amp;, int, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionBodyType, unsigned, FunctionParseMode);
+    template &lt;class TreeBuilder&gt; ALWAYS_INLINE bool parseFormalParameters(TreeBuilder&amp;, TreeFormalParameterList, unsigned&amp;);
</ins><span class="cx">     enum VarDeclarationListContext { ForLoopContext, VarDeclarationContext };
</span><span class="cx">     template &lt;class TreeBuilder&gt; TreeExpression parseVariableDeclarationList(TreeBuilder&amp;, int&amp; declarations, TreeDestructuringPattern&amp; lastPattern, TreeExpression&amp; lastInitializer, JSTextPosition&amp; identStart, JSTextPosition&amp; initStart, JSTextPosition&amp; initEnd, VarDeclarationListContext, DeclarationType);
</span><span class="cx">     template &lt;class TreeBuilder&gt; NEVER_INLINE TreeConstDeclList parseConstDeclarationList(TreeBuilder&amp;);
</span><del>-
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    template &lt;class TreeBuilder&gt; TreeStatement parseArrowFunctionSingleExpressionBody(TreeBuilder&amp;, FunctionParseType);
</del><ins>+    template &lt;class TreeBuilder&gt; TreeSourceElements parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder&amp;);
</ins><span class="cx">     template &lt;class TreeBuilder&gt; TreeExpression parseArrowFunctionExpression(TreeBuilder&amp;);
</span><del>-#endif
-
</del><span class="cx">     template &lt;class TreeBuilder&gt; NEVER_INLINE TreeDestructuringPattern createBindingPattern(TreeBuilder&amp;, DestructuringKind, const Identifier&amp;, int depth, JSToken, AssignmentContext);
</span><span class="cx">     template &lt;class TreeBuilder&gt; NEVER_INLINE TreeDestructuringPattern parseDestructuringPattern(TreeBuilder&amp;, DestructuringKind, AssignmentContext = AssignmentContext::DeclarationStatement, int depth = 0);
</span><span class="cx">     template &lt;class TreeBuilder&gt; NEVER_INLINE TreeDestructuringPattern tryParseDestructuringPatternExpression(TreeBuilder&amp;, AssignmentContext);
</span><span class="lines">@@ -1030,13 +1015,10 @@
</span><span class="cx">         return allowAutomaticSemicolon();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     void setEndOfStatement()
</span><span class="cx">     {
</span><span class="cx">         m_lexer-&gt;setTokenPosition(&amp;m_token);
</span><span class="cx">     }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     bool canRecurse()
</span><span class="cx">     {
</span><span class="lines">@@ -1108,6 +1090,7 @@
</span><span class="cx">     const SourceCode* m_source;
</span><span class="cx">     ParserArena m_parserArena;
</span><span class="cx">     std::unique_ptr&lt;LexerType&gt; m_lexer;
</span><ins>+    FunctionParameters* m_parameters { nullptr };
</ins><span class="cx">     
</span><span class="cx">     bool m_hasStackOverflow;
</span><span class="cx">     String m_errorMessage;
</span><span class="lines">@@ -1153,13 +1136,13 @@
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename LexerType&gt;
</span><span class="cx"> template &lt;class ParsedNode&gt;
</span><del>-std::unique_ptr&lt;ParsedNode&gt; Parser&lt;LexerType&gt;::parse(ParserError&amp; error)
</del><ins>+std::unique_ptr&lt;ParsedNode&gt; Parser&lt;LexerType&gt;::parse(ParserError&amp; error, const Identifier&amp; calleeName, FunctionParseMode parseMode)
</ins><span class="cx"> {
</span><span class="cx">     int errLine;
</span><span class="cx">     String errMsg;
</span><span class="cx"> 
</span><span class="cx">     if (ParsedNode::scopeIsFunction)
</span><del>-        m_lexer-&gt;setIsReparsing();
</del><ins>+        m_lexer-&gt;setIsReparsingFunction();
</ins><span class="cx"> 
</span><span class="cx">     m_sourceElements = 0;
</span><span class="cx"> 
</span><span class="lines">@@ -1170,7 +1153,7 @@
</span><span class="cx">     ASSERT(m_source-&gt;startColumn() &gt; 0);
</span><span class="cx">     unsigned startColumn = m_source-&gt;startColumn() - 1;
</span><span class="cx"> 
</span><del>-    String parseError = parseInner();
</del><ins>+    String parseError = parseInner(calleeName, parseMode);
</ins><span class="cx"> 
</span><span class="cx">     int lineNumber = m_lexer-&gt;lineNumber();
</span><span class="cx">     bool lexError = m_lexer-&gt;sawError();
</span><span class="lines">@@ -1200,6 +1183,7 @@
</span><span class="cx">                                     m_varDeclarations,
</span><span class="cx">                                     m_funcDeclarations,
</span><span class="cx">                                     currentScope()-&gt;finalizeLexicalEnvironment(),
</span><ins>+                                    m_parameters,
</ins><span class="cx">                                     *m_source,
</span><span class="cx">                                     m_features,
</span><span class="cx">                                     m_numConstants);
</span><span class="lines">@@ -1233,18 +1217,19 @@
</span><span class="cx"> 
</span><span class="cx"> template &lt;class ParsedNode&gt;
</span><span class="cx"> std::unique_ptr&lt;ParsedNode&gt; parse(
</span><del>-    VM* vm, const SourceCode&amp; source, FunctionParameters* parameters,
</del><ins>+    VM* vm, const SourceCode&amp; source,
</ins><span class="cx">     const Identifier&amp; name, JSParserBuiltinMode builtinMode,
</span><span class="cx">     JSParserStrictMode strictMode, JSParserCodeType codeType,
</span><del>-    ParserError&amp; error, JSTextPosition* positionBeforeLastNewline = 0,
-    ConstructorKind defaultConstructorKind = ConstructorKind::None, ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
</del><ins>+    ParserError&amp; error, JSTextPosition* positionBeforeLastNewline = nullptr,
+    FunctionParseMode parseMode = NotAFunctionMode, ConstructorKind defaultConstructorKind = ConstructorKind::None, 
+    ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
</ins><span class="cx"> {
</span><span class="cx">     SamplingRegion samplingRegion(&quot;Parsing&quot;);
</span><span class="cx"> 
</span><span class="cx">     ASSERT(!source.provider()-&gt;source().isNull());
</span><span class="cx">     if (source.provider()-&gt;source().is8Bit()) {
</span><del>-        Parser&lt;Lexer&lt;LChar&gt;&gt; parser(vm, source, parameters, name, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);
-        std::unique_ptr&lt;ParsedNode&gt; result = parser.parse&lt;ParsedNode&gt;(error);
</del><ins>+        Parser&lt;Lexer&lt;LChar&gt;&gt; parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);
+        std::unique_ptr&lt;ParsedNode&gt; result = parser.parse&lt;ParsedNode&gt;(error, name, parseMode);
</ins><span class="cx">         if (positionBeforeLastNewline)
</span><span class="cx">             *positionBeforeLastNewline = parser.positionBeforeLastNewline();
</span><span class="cx">         if (builtinMode == JSParserBuiltinMode::Builtin) {
</span><span class="lines">@@ -1256,8 +1241,8 @@
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, &quot;BuiltinExecutables::createDefaultConstructor should always use a 8-bit string&quot;);
</span><del>-    Parser&lt;Lexer&lt;UChar&gt;&gt; parser(vm, source, parameters, name, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);
-    std::unique_ptr&lt;ParsedNode&gt; result = parser.parse&lt;ParsedNode&gt;(error);
</del><ins>+    Parser&lt;Lexer&lt;UChar&gt;&gt; parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);
+    std::unique_ptr&lt;ParsedNode&gt; result = parser.parse&lt;ParsedNode&gt;(error, name, parseMode);
</ins><span class="cx">     if (positionBeforeLastNewline)
</span><span class="cx">         *positionBeforeLastNewline = parser.positionBeforeLastNewline();
</span><span class="cx">     return result;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserFunctionInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ParserFunctionInfo.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ParserFunctionInfo.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/ParserFunctionInfo.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -28,27 +28,17 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-enum FunctionBodyType { ArrowFunctionBodyExpression, ArrowFunctionBodyBlock, StandardFunctionBodyBlock };
-#endif
-
</del><span class="cx"> template &lt;class TreeBuilder&gt;
</span><span class="cx"> struct ParserFunctionInfo {
</span><span class="cx">     const Identifier* name = 0;
</span><span class="cx">     typename TreeBuilder::FormalParameterList parameters = 0;
</span><span class="cx">     typename TreeBuilder::FunctionBody body = 0;
</span><del>-    unsigned startFunctionOffset = 0;
-    unsigned endFunctionOffset = 0;
-    int bodyStartLine = 0;
-    int bodyEndLine = 0;
</del><ins>+    unsigned parameterCount = 0;
+    unsigned startOffset = 0;
+    unsigned endOffset = 0;
+    int startLine = 0;
+    int endLine = 0;
</ins><span class="cx">     unsigned bodyStartColumn = 0;
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    unsigned arrowFunctionOffset = 0;
-    unsigned arrowFunctionNextTockenEndOffset = 0;
-    bool isArrowFunction { false };
-    bool isEndByTerminator { false };
-    FunctionBodyType functionBodyType { StandardFunctionBodyBlock };
-#endif
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ES6_CLASS_SYNTAX)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserModesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ParserModes.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ParserModes.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/ParserModes.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -44,6 +44,15 @@
</span><span class="cx"> 
</span><span class="cx"> enum FunctionMode { FunctionExpression, FunctionDeclaration };
</span><span class="cx"> 
</span><ins>+enum FunctionParseMode {
+    NormalFunctionMode,
+    GetterMode,
+    SetterMode,
+    MethodMode,
+    NotAFunctionMode,
+    ArrowFunctionMode
+};
+
</ins><span class="cx"> inline bool functionNameIsInScope(const Identifier&amp; name, FunctionMode functionMode)
</span><span class="cx"> {
</span><span class="cx">     if (name.isNull())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceCode.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceCode.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/SourceCode.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -105,9 +105,6 @@
</span><span class="cx">         
</span><span class="cx">         SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn);
</span><span class="cx"> 
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-        SourceCode subArrowExpression(unsigned startArrowFunction, unsigned endArrowFunction, int firstLine, int startColumn);
-#endif
</del><span class="cx">     private:
</span><span class="cx">         RefPtr&lt;SourceProvider&gt; m_provider;
</span><span class="cx">         int m_startChar;
</span><span class="lines">@@ -121,20 +118,8 @@
</span><span class="cx">         return SourceCode(StringSourceProvider::create(source, url, startPosition), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
-    inline SourceCode SourceCode::subArrowExpression(unsigned startArrowFunction, unsigned endArrowFunction, int firstLine, int startColumn)
-    {
-        ASSERT(provider()-&gt;source()[startArrowFunction] == '=' &amp;&amp; provider()-&gt;source()[startArrowFunction + 1] == '&gt;');
-
-        startColumn += 1; // Convert to base 1.
-        return SourceCode(provider(), startArrowFunction, endArrowFunction, firstLine, startColumn);
-    }
-#endif
-
</del><span class="cx">     inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn)
</span><span class="cx">     {
</span><del>-        ASSERT(provider()-&gt;source()[openBrace] == '{');
-        ASSERT(provider()-&gt;source()[closeBrace] == '}');
</del><span class="cx">         startColumn += 1; // Convert to base 1.
</span><span class="cx">         return SourceCode(provider(), openBrace, closeBrace + 1, firstLine, startColumn);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceProviderCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceProviderCache.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceProviderCache.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/SourceProviderCache.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     const SourceProviderCacheItem* get(int sourcePosition) const { return m_map.get(sourcePosition); }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    HashMap&lt;int, std::unique_ptr&lt;SourceProviderCacheItem&gt;&gt; m_map;
</del><ins>+    HashMap&lt;int, std::unique_ptr&lt;SourceProviderCacheItem&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;&gt; m_map;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceProviderCacheItemh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceProviderCacheItem.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceProviderCacheItem.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/SourceProviderCacheItem.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -40,15 +40,14 @@
</span><span class="cx">     unsigned lastTockenEndOffset;
</span><span class="cx">     unsigned lastTockenLineStartOffset;
</span><span class="cx">     unsigned endFunctionOffset;
</span><ins>+    unsigned parameterCount;
</ins><span class="cx">     bool needsFullActivation;
</span><span class="cx">     bool usesEval;
</span><span class="cx">     bool strictMode;
</span><span class="cx">     Vector&lt;RefPtr&lt;UniquedStringImpl&gt;&gt; usedVariables;
</span><span class="cx">     Vector&lt;RefPtr&lt;UniquedStringImpl&gt;&gt; writtenVariables;
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     bool isBodyArrowExpression { false };
</span><span class="cx">     JSTokenType tokenType { CLOSEBRACE };
</span><del>-#endif
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(MSVC)
</span><span class="lines">@@ -65,11 +64,7 @@
</span><span class="cx">     JSToken endFunctionToken() const 
</span><span class="cx">     {
</span><span class="cx">         JSToken token;
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">         token.m_type = isBodyArrowExpression ? tokenType : CLOSEBRACE;
</span><del>-#else
-        token.m_type = CLOSEBRACE;
-#endif
</del><span class="cx">         token.m_data.offset = lastTockenStartOffset;
</span><span class="cx">         token.m_location.startOffset = lastTockenStartOffset;
</span><span class="cx">         token.m_location.endOffset = lastTockenEndOffset;
</span><span class="lines">@@ -87,6 +82,7 @@
</span><span class="cx">     unsigned lastTockenLine : 31;
</span><span class="cx">     unsigned lastTockenStartOffset : 31;
</span><span class="cx">     unsigned lastTockenEndOffset: 31;
</span><ins>+    unsigned parameterCount;
</ins><span class="cx">     
</span><span class="cx">     bool usesEval : 1;
</span><span class="cx"> 
</span><span class="lines">@@ -98,10 +94,8 @@
</span><span class="cx"> 
</span><span class="cx">     UniquedStringImpl** usedVariables() const { return const_cast&lt;UniquedStringImpl**&gt;(m_variables); }
</span><span class="cx">     UniquedStringImpl** writtenVariables() const { return const_cast&lt;UniquedStringImpl**&gt;(&amp;m_variables[usedVariablesCount]); }
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     bool isBodyArrowExpression;
</span><span class="cx">     JSTokenType tokenType;
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     SourceProviderCacheItem(const SourceProviderCacheItemCreationParameters&amp;);
</span><span class="lines">@@ -130,15 +124,14 @@
</span><span class="cx">     , lastTockenLine(parameters.lastTockenLine)
</span><span class="cx">     , lastTockenStartOffset(parameters.lastTockenStartOffset)
</span><span class="cx">     , lastTockenEndOffset(parameters.lastTockenEndOffset)
</span><ins>+    , parameterCount(parameters.parameterCount)
</ins><span class="cx">     , usesEval(parameters.usesEval)
</span><span class="cx">     , strictMode(parameters.strictMode)
</span><span class="cx">     , lastTockenLineStartOffset(parameters.lastTockenLineStartOffset)
</span><span class="cx">     , usedVariablesCount(parameters.usedVariables.size())
</span><span class="cx">     , writtenVariablesCount(parameters.writtenVariables.size())
</span><del>-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><span class="cx">     , isBodyArrowExpression(parameters.isBodyArrowExpression)
</span><span class="cx">     , tokenType(parameters.tokenType)
</span><del>-#endif
</del><span class="cx"> {
</span><span class="cx">     unsigned j = 0;
</span><span class="cx">     for (unsigned i = 0; i &lt; usedVariablesCount; ++i, ++j) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSyntaxCheckerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SyntaxChecker.h (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -69,7 +69,6 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    typedef SyntaxChecker FunctionBodyBuilder;
</del><span class="cx">     enum { NoneExpr = 0,
</span><span class="cx">         ResolveEvalExpr, ResolveExpr, IntegerExpr, DoubleExpr, StringExpr,
</span><span class="cx">         ThisExpr, NullExpr, BoolExpr, RegExpExpr, ObjectLiteralExpr,
</span><span class="lines">@@ -179,10 +178,8 @@
</span><span class="cx">     ClassExpression createClassExpr(const JSTokenLocation&amp;, const Identifier&amp;, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
</span><span class="cx"> #endif
</span><span class="cx">     ExpressionType createFunctionExpr(const JSTokenLocation&amp;, const ParserFunctionInfo&lt;SyntaxChecker&gt;&amp;) { return FunctionExpr; }
</span><del>-    int createFunctionBody(const JSTokenLocation&amp;, const JSTokenLocation&amp;, int, int, bool, int, int, int, ConstructorKind) { return FunctionBodyResult; }
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
</del><ins>+    int createFunctionBody(const JSTokenLocation&amp;, const JSTokenLocation&amp;, int, int, bool, int, int, int, ConstructorKind, unsigned, int) { return FunctionBodyResult; }
</ins><span class="cx">     ExpressionType createArrowFunctionExpr(const JSTokenLocation&amp;, const ParserFunctionInfo&lt;SyntaxChecker&gt;&amp;) { return FunctionExpr; }
</span><del>-#endif 
</del><span class="cx">     void setFunctionNameStart(int, int) { }
</span><span class="cx">     int createArguments() { return ArgumentsResult; }
</span><span class="cx">     int createArguments(int) { return ArgumentsResult; }
</span><span class="lines">@@ -221,8 +218,8 @@
</span><span class="cx">     int createPropertyList(const JSTokenLocation&amp;, Property, int) { return PropertyListResult; }
</span><span class="cx">     int createElementList(int, int) { return ElementsListResult; }
</span><span class="cx">     int createElementList(int, int, int) { return ElementsListResult; }
</span><del>-    int createFormalParameterList(DestructuringPattern) { return FormalParameterListResult; }
-    int createFormalParameterList(int, DestructuringPattern) { return FormalParameterListResult; }
</del><ins>+    int createFormalParameterList() { return FormalParameterListResult; }
+    void appendParameter(int, DestructuringPattern) { }
</ins><span class="cx">     int createClause(int, int) { return ClauseResult; }
</span><span class="cx">     int createClauseList(int) { return ClauseListResult; }
</span><span class="cx">     int createClauseList(int, int) { return ClauseListResult; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -94,8 +94,8 @@
</span><span class="cx"> 
</span><span class="cx">     typedef typename CacheTypes&lt;UnlinkedCodeBlockType&gt;::RootNode RootNode;
</span><span class="cx">     std::unique_ptr&lt;RootNode&gt; rootNode = parse&lt;RootNode&gt;(
</span><del>-        &amp;vm, source, 0, Identifier(), builtinMode, strictMode, 
-        JSParserCodeType::Program, error, 0, ConstructorKind::None, thisTDZMode);
</del><ins>+        &amp;vm, source, Identifier(), builtinMode, strictMode, 
+        JSParserCodeType::Program, error, nullptr, FunctionParseMode::NotAFunctionMode, ConstructorKind::None, thisTDZMode);
</ins><span class="cx">     if (!rootNode)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> 
</span><span class="cx">     JSTextPosition positionBeforeLastNewline;
</span><span class="cx">     std::unique_ptr&lt;ProgramNode&gt; program = parse&lt;ProgramNode&gt;(
</span><del>-        &amp;vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</del><ins>+        &amp;vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</ins><span class="cx">         JSParserStrictMode::NotStrict, JSParserCodeType::Program, 
</span><span class="cx">         error, &amp;positionBeforeLastNewline);
</span><span class="cx">     if (!program) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCompletioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Completion.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Completion.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/runtime/Completion.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     JSLockHolder lock(vm);
</span><span class="cx">     RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable());
</span><span class="cx">     return !!parse&lt;ProgramNode&gt;(
</span><del>-        &amp;vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</del><ins>+        &amp;vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</ins><span class="cx">         JSParserStrictMode::NotStrict, JSParserCodeType::Program, error);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.cpp (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/runtime/Executable.cpp        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -475,7 +475,7 @@
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="cx">     JSGlobalObject* lexicalGlobalObject = exec-&gt;lexicalGlobalObject();
</span><span class="cx">     std::unique_ptr&lt;ProgramNode&gt; programNode = parse&lt;ProgramNode&gt;(
</span><del>-        vm, m_source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</del><ins>+        vm, m_source, Identifier(), JSParserBuiltinMode::NotBuiltin, 
</ins><span class="cx">         JSParserStrictMode::NotStrict, JSParserCodeType::Program, error);
</span><span class="cx">     if (programNode)
</span><span class="cx">         return 0;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestscontrolFlowProfilerconditionalexpressionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js (186958 => 186959)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js        2015-07-17 18:46:13 UTC (rev 186958)
+++ trunk/Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js        2015-07-17 18:48:30 UTC (rev 186959)
</span><span class="lines">@@ -24,17 +24,17 @@
</span><span class="cx">         : bar()
</span><span class="cx"> }
</span><span class="cx"> testConditionalFunctionCall(false, false);
</span><del>-checkBasicBlock(testConditionalFunctionCall, &quot;x&quot;, ShouldHaveExecuted);
</del><ins>+checkBasicBlock(testConditionalFunctionCall, &quot;x ?&quot;, ShouldHaveExecuted);
</ins><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;? y&quot;, ShouldHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;bar&quot;, ShouldHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;: bar&quot;, ShouldHaveExecuted);
</span><del>-checkBasicBlock(testConditionalFunctionCall, &quot;y&quot;, ShouldNotHaveExecuted);
</del><ins>+checkBasicBlock(testConditionalFunctionCall, &quot;y ?&quot;, ShouldNotHaveExecuted);
</ins><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;? foo&quot;, ShouldNotHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;foo&quot;, ShouldNotHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;baz&quot;, ShouldNotHaveExecuted);
</span><span class="cx"> 
</span><span class="cx"> testConditionalFunctionCall(true, false);
</span><del>-checkBasicBlock(testConditionalFunctionCall, &quot;y&quot;, ShouldHaveExecuted);
</del><ins>+checkBasicBlock(testConditionalFunctionCall, &quot;y ?&quot;, ShouldHaveExecuted);
</ins><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;? foo&quot;, ShouldHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;: baz&quot;, ShouldHaveExecuted);
</span><span class="cx"> checkBasicBlock(testConditionalFunctionCall, &quot;baz&quot;, ShouldHaveExecuted);
</span></span></pre>
</div>
</div>

</body>
</html>