<!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>[168114] tags/Safari-538.33</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/168114">168114</a></dd>
<dt>Author</dt> <dd>matthew_hanson@apple.com</dd>
<dt>Date</dt> <dd>2014-05-01 12:23:29 -0700 (Thu, 01 May 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Rollout <a href="http://trac.webkit.org/projects/webkit/changeset/167964">r167964</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#tagsSafari53833LayoutTestsChangeLog">tags/Safari-538.33/LayoutTests/ChangeLog</a></li>
<li><a href="#tagsSafari53833LayoutTestsjsdestructuringassignmentexpectedtxt">tags/Safari-538.33/LayoutTests/js/destructuring-assignment-expected.txt</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreChangeLog">tags/Safari-538.33/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCorebytecodeUnlinkedCodeBlockh">tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserASTBuilderh">tags/Safari-538.33/Source/JavaScriptCore/parser/ASTBuilder.h</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserNodesh">tags/Safari-538.33/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserParsercpp">tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.cpp</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserParserh">tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.h</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserSourceCodeh">tags/Safari-538.33/Source/JavaScriptCore/parser/SourceCode.h</a></li>
<li><a href="#tagsSafari53833SourceJavaScriptCoreparserSyntaxCheckerh">tags/Safari-538.33/Source/JavaScriptCore/parser/SyntaxChecker.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="tagsSafari53833LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/LayoutTests/ChangeLog (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/LayoutTests/ChangeLog        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/LayoutTests/ChangeLog        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -1,5 +1,9 @@
</span><span class="cx"> 2014-05-01 Matthew Hanson <matthew_hanson@apple.com>
</span><span class="cx">
</span><ins>+ Rollout r167964.
+
+2014-05-01 Matthew Hanson <matthew_hanson@apple.com>
+
</ins><span class="cx"> Rollout r167889.
</span><span class="cx">
</span><span class="cx"> 2014-04-28 Mark Hahnenberg <mhahnenberg@apple.com>
</span></span></pre></div>
<a id="tagsSafari53833LayoutTestsjsdestructuringassignmentexpectedtxt"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/LayoutTests/js/destructuring-assignment-expected.txt (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/LayoutTests/js/destructuring-assignment-expected.txt        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/LayoutTests/js/destructuring-assignment-expected.txt        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx"> PASS var {a,b}={a:'1',b:'2'}; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})({a:'1',b:'2'}) is '12'
</span><del>-PASS (function ({a,b}) { return a+b;})({a:'1',b:'2'}) is '12'
</del><ins>+PASS (function ({a:a,b:b}) { return a+b;})({a:'1',b:'2'}) is '12'
</ins><span class="cx"> PASS ({a,b}={a:'1',b:'2'}); var r=a+b; r is '12'
</span><span class="cx"> PASS var {c:a,d:b}={c:'1',d:'2'}; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({c:a,d:b}) { return a+b;})
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> PASS var {true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}={true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}; var r=a+b+c+d+e+f+g+h; r is 'abcdefgh'
</span><span class="cx"> Function as String: (function({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})
</span><span class="cx"> PASS (function({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</span><del>-PASS (function ({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</del><ins>+PASS (function ({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,"foo bar":h}) { return a+b+c+d+e+f+g+h;})({true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}) is 'abcdefgh'
</ins><span class="cx"> PASS ({true:a,false:b,undefined:c,null:d,in:e,for:f,1.5:g,'foo bar':h}={true:'a',false:'b',undefined:'c',null:'d',in:'e',for:'f',1.5:'g','foo bar':'h'}); var r=a+b+c+d+e+f+g+h; r is 'abcdefgh'
</span><span class="cx"> PASS var [{c:a,d:b}]=[{c:'1',d:'2'}]; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function([{c:a,d:b}]) { return a+b;})
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> PASS var {a,b}=anArray; var r=a+b; r is '34'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})(anArray) is '34'
</span><del>-PASS (function ({a,b}) { return a+b;})(anArray) is '34'
</del><ins>+PASS (function ({a:a,b:b}) { return a+b;})(anArray) is '34'
</ins><span class="cx"> PASS ({a,b}=anArray); var r=a+b; r is '34'
</span><span class="cx"> PASS var {a:a,b:b}=anArray; var r=a+b; r is '34'
</span><span class="cx"> Function as String: (function({a:a,b:b}) { return a+b;})
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> PASS var {a,b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a,b}) { return a+b;})
</span><span class="cx"> PASS (function({a,b}) { return a+b;})(anObject) is '12'
</span><del>-PASS (function ({a,b}) { return a+b;})(anObject) is '12'
</del><ins>+PASS (function ({a:a,b:b}) { return a+b;})(anObject) is '12'
</ins><span class="cx"> PASS ({a,b}=anObject); var r=a+b; r is '12'
</span><span class="cx"> PASS var {a:a,b:b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({a:a,b:b}) { return a+b;})
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx"> PASS var {'a':a,'b':b}=anObject; var r=a+b; r is '12'
</span><span class="cx"> Function as String: (function({'a':a,'b':b}) { return a+b;})
</span><span class="cx"> PASS (function({'a':a,'b':b}) { return a+b;})(anObject) is '12'
</span><del>-PASS (function ({'a':a,'b':b}) { return a+b;})(anObject) is '12'
</del><ins>+PASS (function ({"a":a,"b":b}) { return a+b;})(anObject) is '12'
</ins><span class="cx"> PASS ({'a':a,'b':b}=anObject); var r=a+b; r is '12'
</span><span class="cx"> PASS a+b is '1122'
</span><span class="cx"> PASS a+b is '2211'
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/ChangeLog (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/ChangeLog        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/ChangeLog        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -1,5 +1,9 @@
</span><span class="cx"> 2014-05-01 Matthew Hanson <matthew_hanson@apple.com>
</span><span class="cx">
</span><ins>+ Rollout 167964.
+
+2014-05-01 Matthew Hanson <matthew_hanson@apple.com>
+
</ins><span class="cx"> Rollout r167889.
</span><span class="cx">
</span><span class="cx"> 2014-04-28 Mark Hahnenberg <mhahnenberg@apple.com>
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -51,15 +51,8 @@
</span><span class="cx">
</span><span class="cx"> static UnlinkedFunctionCodeBlock* generateFunctionCodeBlock(VM& vm, UnlinkedFunctionExecutable* executable, const SourceCode& source, CodeSpecializationKind kind, DebuggerMode debuggerMode, ProfilerMode profilerMode, UnlinkedFunctionKind functionKind, ParserError& error)
</span><span class="cx"> {
</span><del>- RefPtr<FunctionParameters> parameters = executable->parameters(&vm);
- if (!parameters) {
- error = ParserError(ParserError::StackOverflow);
- error.m_line = source.firstLine();
- return 0;
- }
</del><ins>+ RefPtr<FunctionBodyNode> body = parse<FunctionBodyNode>(&vm, source, executable->parameters(), executable->name(), executable->toStrictness(), JSParseFunctionCode, error);
</ins><span class="cx">
</span><del>- RefPtr<FunctionBodyNode> body = parse<FunctionBodyNode>(&vm, source, parameters.get(), executable->name(), executable->toStrictness(), JSParseFunctionCode, error);
-
</del><span class="cx"> if (!body) {
</span><span class="cx"> ASSERT(error.m_type != ParserError::ErrorNone);
</span><span class="cx"> return 0;
</span><span class="lines">@@ -67,7 +60,7 @@
</span><span class="cx">
</span><span class="cx"> if (executable->forceUsesArguments())
</span><span class="cx"> body->setUsesArguments();
</span><del>- body->finishParsing(parameters.get(), executable->name(), executable->functionMode());
</del><ins>+ body->finishParsing(executable->parameters(), executable->name(), executable->functionMode());
</ins><span class="cx"> executable->recordParse(body->features(), body->hasCapturedVariables());
</span><span class="cx">
</span><span class="cx"> UnlinkedFunctionCodeBlock* result = UnlinkedFunctionCodeBlock::create(&vm, FunctionCode, ExecutableInfo(body->needsActivation(), body->usesEval(), body->isStrictMode(), kind == CodeForConstruct, functionKind == UnlinkedBuiltinFunction));
</span><span class="lines">@@ -99,7 +92,7 @@
</span><span class="cx"> , m_isBuiltinFunction(kind == UnlinkedBuiltinFunction)
</span><span class="cx"> , m_name(node->ident())
</span><span class="cx"> , m_inferredName(node->inferredName())
</span><del>- , m_parameterCount(node->parameterCount())
</del><ins>+ , m_parameters(node->parameters())
</ins><span class="cx"> , m_firstLineOffset(node->firstLine() - source.firstLine())
</span><span class="cx"> , m_lineCount(node->lastLine() - node->firstLine())
</span><span class="cx"> , m_unlinkedFunctionNameStart(node->functionNameStart() - source.startOffset())
</span><span class="lines">@@ -112,6 +105,11 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+size_t UnlinkedFunctionExecutable::parameterCount() const
+{
+ return m_parameters->size();
+}
+
</ins><span class="cx"> void UnlinkedFunctionExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
</span><span class="cx"> {
</span><span class="cx"> UnlinkedFunctionExecutable* thisObject = jsCast<UnlinkedFunctionExecutable*>(cell);
</span><span class="lines">@@ -124,7 +122,6 @@
</span><span class="cx"> visitor.append(&thisObject->m_nameValue);
</span><span class="cx"> visitor.append(&thisObject->m_symbolTableForCall);
</span><span class="cx"> visitor.append(&thisObject->m_symbolTableForConstruct);
</span><del>- visitor.append(&thisObject->m_parameterString);
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& source, size_t lineOffset)
</span><span class="lines">@@ -187,32 +184,18 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void UnlinkedFunctionExecutable::finishCreation(VM& vm, const SourceCode& source, FunctionBodyNode* node)
-{
- Base::finishCreation(vm);
- m_nameValue.set(vm, this, jsString(&vm, name().string()));
- // We make an isolated copy of the parameter string as we don't want to keep the
- // full source string alive.
- String parameterString = source.provider()->getRange(node->parametersStartOffset(), node->parametersEndOffset()).isolatedCopy();
- m_parameterString.set(vm, this, jsString(&vm, parameterString));
-}
-
</del><span class="cx"> String UnlinkedFunctionExecutable::paramString() const
</span><span class="cx"> {
</span><del>- return m_parameterString->tryGetValue();
</del><ins>+ FunctionParameters& parameters = *m_parameters;
+ StringBuilder builder;
+ for (size_t pos = 0; pos < parameters.size(); ++pos) {
+ if (!builder.isEmpty())
+ builder.appendLiteral(", ");
+ parameters.at(pos)->toString(builder);
+ }
+ return builder.toString();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<FunctionParameters> UnlinkedFunctionExecutable::parameters(VM* vm)
-{
- if (!m_parameterCount)
- return FunctionParameters::create(nullptr);
-
- SourceCode parameterSource = makeSource(m_parameterString->tryGetValue());
- RefPtr<FunctionParameters> parameters = parseParameters(vm, parameterSource, toStrictness());
- ASSERT(!parameters || parameters->size() == m_parameterCount);
- return parameters;
-}
-
</del><span class="cx"> UnlinkedCodeBlock::UnlinkedCodeBlock(VM* vm, Structure* structure, CodeType codeType, const ExecutableInfo& info)
</span><span class="cx"> : Base(*vm, structure)
</span><span class="cx"> , m_numVars(0)
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> static UnlinkedFunctionExecutable* create(VM* vm, const SourceCode& source, FunctionBodyNode* node, bool isFromGlobalCode, UnlinkedFunctionKind unlinkedFunctionKind)
</span><span class="cx"> {
</span><span class="cx"> UnlinkedFunctionExecutable* instance = new (NotNull, allocateCell<UnlinkedFunctionExecutable>(vm->heap)) UnlinkedFunctionExecutable(vm, vm->unlinkedFunctionExecutableStructure.get(), source, node, isFromGlobalCode, unlinkedFunctionKind);
</span><del>- instance->finishCreation(*vm, source, node);
</del><ins>+ instance->finishCreation(*vm);
</ins><span class="cx"> return instance;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -106,7 +106,7 @@
</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 { return m_parameterCount; }
</del><ins>+ size_t parameterCount() const;
</ins><span class="cx"> bool isInStrictContext() const { return m_isInStrictContext; }
</span><span class="cx"> FunctionMode functionMode() const { return m_functionMode; }
</span><span class="cx"> JSParserStrictness toStrictness() const
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> m_codeBlockForConstruct.clear();
</span><span class="cx"> }
</span><span class="cx">
</span><del>- RefPtr<FunctionParameters> parameters(VM*);
</del><ins>+ FunctionParameters* parameters() { return m_parameters.get(); }
</ins><span class="cx">
</span><span class="cx"> void recordParse(CodeFeatures features, bool hasCapturedVariables)
</span><span class="cx"> {
</span><span class="lines">@@ -163,7 +163,6 @@
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> UnlinkedFunctionExecutable(VM*, Structure*, const SourceCode&, FunctionBodyNode*, bool isFromGlobalCode, UnlinkedFunctionKind);
</span><del>-
</del><span class="cx"> WriteBarrier<UnlinkedFunctionCodeBlock> m_codeBlockForCall;
</span><span class="cx"> WriteBarrier<UnlinkedFunctionCodeBlock> m_codeBlockForConstruct;
</span><span class="cx">
</span><span class="lines">@@ -177,10 +176,9 @@
</span><span class="cx"> Identifier m_name;
</span><span class="cx"> Identifier m_inferredName;
</span><span class="cx"> WriteBarrier<JSString> m_nameValue;
</span><del>- WriteBarrier<JSString> m_parameterString;
</del><span class="cx"> WriteBarrier<SymbolTable> m_symbolTableForCall;
</span><span class="cx"> WriteBarrier<SymbolTable> m_symbolTableForConstruct;
</span><del>- unsigned m_parameterCount;
</del><ins>+ RefPtr<FunctionParameters> m_parameters;
</ins><span class="cx"> unsigned m_firstLineOffset;
</span><span class="cx"> unsigned m_lineCount;
</span><span class="cx"> unsigned m_unlinkedFunctionNameStart;
</span><span class="lines">@@ -194,7 +192,11 @@
</span><span class="cx"> FunctionMode m_functionMode;
</span><span class="cx">
</span><span class="cx"> protected:
</span><del>- void finishCreation(VM&, const SourceCode&, FunctionBodyNode*);
</del><ins>+ void finishCreation(VM& vm)
+ {
+ Base::finishCreation(vm);
+ m_nameValue.set(vm, this, jsString(&vm, name().string()));
+ }
</ins><span class="cx">
</span><span class="cx"> static void visitChildren(JSCell*, SlotVisitor&);
</span><span class="cx">
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserASTBuilderh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/ASTBuilder.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/ASTBuilder.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/ASTBuilder.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> Operator m_op;
</span><span class="cx"> };
</span><span class="cx"> public:
</span><del>- ASTBuilder(VM* vm, const SourceCode* sourceCode)
</del><ins>+ ASTBuilder(VM* vm, SourceCode* sourceCode)
</ins><span class="cx"> : m_vm(vm)
</span><span class="cx"> , m_sourceCode(sourceCode)
</span><span class="cx"> , m_scope(vm)
</span><span class="lines">@@ -289,11 +289,6 @@
</span><span class="cx"> return FunctionBodyNode::create(m_vm, startLocation, endLocation, startColumn, endColumn, inStrictContext);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void setFunctionBodyParameters(FunctionBodyNode* body, const JSTokenLocation& openParen, const JSTokenLocation& closeParen)
- {
- body->setParameterLocation(openParen, closeParen);
- }
-
</del><span class="cx"> void setFunctionNameStart(FunctionBodyNode* body, int functionNameStart)
</span><span class="cx"> {
</span><span class="cx"> body->setFunctionNameStart(functionNameStart);
</span><span class="lines">@@ -727,7 +722,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> VM* m_vm;
</span><del>- const SourceCode* m_sourceCode;
</del><ins>+ SourceCode* m_sourceCode;
</ins><span class="cx"> Scope m_scope;
</span><span class="cx"> Vector<BinaryOperand, 10, UnsafeVectorOverflow> m_binaryOperandStack;
</span><span class="cx"> Vector<AssignmentInfo, 10, UnsafeVectorOverflow> m_assignmentInfoStack;
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/Nodes.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/Nodes.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/Nodes.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -1535,8 +1535,6 @@
</span><span class="cx">
</span><span class="cx"> FunctionParameters* parameters() const { return m_parameters.get(); }
</span><span class="cx"> size_t parameterCount() const { return m_parameters->size(); }
</span><del>- int parametersStartOffset() const { return m_parametersStart.endOffset; }
- int parametersEndOffset() const { return m_parametersEnd.startOffset; }
</del><span class="cx">
</span><span class="cx"> virtual void emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
</span><span class="cx">
</span><span class="lines">@@ -1559,11 +1557,6 @@
</span><span class="cx">
</span><span class="cx"> static const bool scopeIsFunction = true;
</span><span class="cx">
</span><del>- void setParameterLocation(const JSTokenLocation& openParen, const JSTokenLocation& closeParen)
- {
- m_parametersStart = openParen;
- m_parametersEnd = closeParen;
- }
</del><span class="cx"> private:
</span><span class="cx"> FunctionBodyNode(VM*, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, bool inStrictContext);
</span><span class="cx"> FunctionBodyNode(VM*, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, SourceElements*, VarStack*, FunctionStack*, IdentifierSet&, const SourceCode&, CodeFeatures, int numConstants);
</span><span class="lines">@@ -1572,8 +1565,6 @@
</span><span class="cx"> Identifier m_inferredName;
</span><span class="cx"> FunctionMode m_functionMode;
</span><span class="cx"> RefPtr<FunctionParameters> m_parameters;
</span><del>- JSTokenLocation m_parametersStart;
- JSTokenLocation m_parametersEnd;
</del><span class="cx"> int m_functionNameStart;
</span><span class="cx"> unsigned m_startColumn;
</span><span class="cx"> unsigned m_endColumn;
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.cpp (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.cpp        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.cpp        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -1248,7 +1248,6 @@
</span><span class="cx"> failDueToUnexpectedToken();
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><del>- JSTokenLocation openParen = tokenLocation();
</del><span class="cx"> if (!consume(OPENPAREN)) {
</span><span class="cx"> semanticFailureDueToKeyword(stringForFunctionMode(mode), " name");
</span><span class="cx"> failWithMessage("Expected an opening '(' before a ", stringForFunctionMode(mode), "'s parameter list");
</span><span class="lines">@@ -1257,7 +1256,6 @@
</span><span class="cx"> parameters = parseFormalParameters(context);
</span><span class="cx"> failIfFalse(parameters, "Cannot parse parameters for this ", stringForFunctionMode(mode));
</span><span class="cx"> }
</span><del>- JSTokenLocation endParen = m_token.m_location;
</del><span class="cx"> consumeOrFail(CLOSEPAREN, "Expected a ')' or a ',' after a parameter declaration");
</span><span class="cx"> matchOrFail(OPENBRACE, "Expected an opening '{' at the start of a ", stringForFunctionMode(mode), " body");
</span><span class="cx">
</span><span class="lines">@@ -1283,7 +1281,7 @@
</span><span class="cx"> endLocation.startOffset - endLocation.lineStartOffset;
</span><span class="cx">
</span><span class="cx"> body = context.createFunctionBody(startLocation, endLocation, bodyStartColumn, bodyEndColumn, cachedInfo->strictMode);
</span><del>- context.setFunctionBodyParameters(body, openParen, endParen);
</del><ins>+
</ins><span class="cx"> functionScope->restoreFromSourceProviderCache(cachedInfo);
</span><span class="cx"> failIfFalse(popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo), "Parser error");
</span><span class="cx">
</span><span class="lines">@@ -1303,7 +1301,6 @@
</span><span class="cx"> body = parseFunctionBody(context);
</span><span class="cx"> restoreState(oldState);
</span><span class="cx"> failIfFalse(body, "Cannot parse the body of this ", stringForFunctionMode(mode));
</span><del>- context.setFunctionBodyParameters(body, openParen, endParen);
</del><span class="cx"> if (functionScope->strictMode() && name) {
</span><span class="cx"> RELEASE_ASSERT(mode == FunctionMode);
</span><span class="cx"> semanticFailIfTrue(m_vm->propertyNames->arguments == *name, "'", name->impl(), "' is not a valid function name in strict mode");
</span><span class="lines">@@ -2407,25 +2404,6 @@
</span><span class="cx"> out.print("Unexpected token '", getToken(), "'");
</span><span class="cx"> }
</span><span class="cx">
</span><del>-PassRefPtr<FunctionParameters> parseParameters(VM* vm, const SourceCode& source, JSParserStrictness strictness)
-{
- SamplingRegion samplingRegion("Parsing parameters");
- ParameterNode* parameters = 0;
- ASSERT(!source.provider()->source().isNull());
- if (source.provider()->source().is8Bit()) {
- Parser<Lexer<LChar>> parser(vm, source, 0, Identifier(), strictness, JSParseFunctionCode);
- ASTBuilder builder(vm, &source);
- parameters = parser.parseFormalParameters(builder);
- } else {
- Parser<Lexer<UChar>> parser(vm, source, 0, Identifier(), strictness, JSParseFunctionCode);
- ASTBuilder builder(vm, &source);
- parameters = parser.parseFormalParameters(builder);
- }
- if (!parameters)
- return nullptr;
- return FunctionParameters::create(parameters);
-}
-
</del><span class="cx"> // Instantiate the two flavors of Parser we need instead of putting most of this file in Parser.h
</span><span class="cx"> template class Parser<Lexer<LChar>>;
</span><span class="cx"> template class Parser<Lexer<UChar>>;
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/Parser.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -409,7 +409,6 @@
</span><span class="cx"> class Parser {
</span><span class="cx"> WTF_MAKE_NONCOPYABLE(Parser);
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><del>- friend PassRefPtr<FunctionParameters> parseParameters(VM*, const SourceCode&, JSParserStrictness);
</del><span class="cx">
</span><span class="cx"> public:
</span><span class="cx"> Parser(VM*, const SourceCode&, FunctionParameters*, const Identifier&, JSParserStrictness, JSParserMode);
</span><span class="lines">@@ -973,7 +972,6 @@
</span><span class="cx"> }
</span><span class="cx"> return result.release();
</span><span class="cx"> }
</span><del>- RELEASE_ASSERT(strictness != JSParseBuiltin);
</del><span class="cx"> Parser<Lexer<UChar>> parser(vm, source, parameters, name, strictness, parserMode);
</span><span class="cx"> RefPtr<ParsedNode> result = parser.parse<ParsedNode>(error);
</span><span class="cx"> if (positionBeforeLastNewline)
</span><span class="lines">@@ -981,7 +979,5 @@
</span><span class="cx"> return result.release();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-PassRefPtr<FunctionParameters> parseParameters(VM*, const SourceCode&, JSParserStrictness);
-
</del><span class="cx"> } // namespace
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserSourceCodeh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/SourceCode.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/SourceCode.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/SourceCode.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> int endOffset() const { return m_endChar; }
</span><span class="cx"> int length() const { return m_endChar - m_startChar; }
</span><span class="cx">
</span><del>- SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn) const;
</del><ins>+ SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> RefPtr<SourceProvider> m_provider;
</span><span class="lines">@@ -118,7 +118,7 @@
</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>- inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn) const
</del><ins>+ inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(provider()->source()[openBrace] == '{');
</span><span class="cx"> ASSERT(provider()->source()[closeBrace] == '}');
</span></span></pre></div>
<a id="tagsSafari53833SourceJavaScriptCoreparserSyntaxCheckerh"></a>
<div class="modfile"><h4>Modified: tags/Safari-538.33/Source/JavaScriptCore/parser/SyntaxChecker.h (168113 => 168114)</h4>
<pre class="diff"><span>
<span class="info">--- tags/Safari-538.33/Source/JavaScriptCore/parser/SyntaxChecker.h        2014-05-01 19:10:56 UTC (rev 168113)
+++ tags/Safari-538.33/Source/JavaScriptCore/parser/SyntaxChecker.h        2014-05-01 19:23:29 UTC (rev 168114)
</span><span class="lines">@@ -160,7 +160,6 @@
</span><span class="cx"> ExpressionType createAssignResolve(const JSTokenLocation&, const Identifier&, ExpressionType, int, int, int) { return AssignmentExpr; }
</span><span class="cx"> ExpressionType createFunctionExpr(const JSTokenLocation&, const Identifier*, int, int, int, int, int, int, int) { return FunctionExpr; }
</span><span class="cx"> int createFunctionBody(const JSTokenLocation&, const JSTokenLocation&, int, int, bool) { return FunctionBodyResult; }
</span><del>- void setFunctionBodyParameters(int, const JSTokenLocation&, const JSTokenLocation&) { }
</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></pre>
</div>
</div>
</body>
</html>