<!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>[192661] trunk/Source/JavaScriptCore</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/192661">192661</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-11-19 14:54:46 -0800 (Thu, 19 Nov 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>[JSC] Fix AssignmentElement parsing
https://bugs.webkit.org/show_bug.cgi?id=151026
Patch by Caitlin Potter <caitp@igalia.com> on 2015-11-19
Reviewed by Geoffrey Garen.
When parsing an AssignmentPattern, any LeftHandSideExpression which
is a valid assignment target is acceptable.
Additionally, this change minimizes the amount of time spent
re-parsing ObjectLiteral and ArrayLiterals, by parsing as an
Expression first (the common case), and re-parsing only if the
result is a valid ObjectLiteral or ArrayLiteral followed by an `=`,
or if an error specifically indicates that the expression could
have been parsed as an AssignmentPattern.
* bytecompiler/NodesCodegen.cpp:
(JSC::AssignmentElementNode::collectBoundIdentifiers):
(JSC::AssignmentElementNode::bindValue):
(JSC::AssignmentElementNode::toString):
* parser/ASTBuilder.h:
(JSC::ASTBuilder::isAssignmentLocation):
(JSC::ASTBuilder::isObjectLiteral):
(JSC::ASTBuilder::isArrayLiteral):
(JSC::ASTBuilder::isObjectOrArrayLiteral):
(JSC::ASTBuilder::createAssignmentElement):
* parser/NodeConstructors.h:
(JSC::AssignmentElementNode::AssignmentElementNode):
* parser/Nodes.h:
(JSC::ExpressionNode::isObjectLiteral):
(JSC::ExpressionNode::isArrayLiteral):
(JSC::AssignmentElementNode::assignmentTarget):
(JSC::AssignmentElementNode::divotStart):
(JSC::AssignmentElementNode::divotEnd):
* parser/Parser.cpp:
(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::createAssignmentElement):
(JSC::Parser<LexerType>::parseBindingOrAssignmentElement):
(JSC::Parser<LexerType>::parseAssignmentElement):
(JSC::Parser<LexerType>::parseDestructuringPattern):
(JSC::Parser<LexerType>::parseAssignmentExpression):
(JSC::Parser<LexerType>::parseProperty):
* parser/Parser.h:
(JSC::Parser::ExpressionErrorClassifier::ExpressionErrorClassifier):
(JSC::Parser::ExpressionErrorClassifier::~ExpressionErrorClassifier):
(JSC::Parser::ExpressionErrorClassifier::classifyExpressionError):
(JSC::Parser::ExpressionErrorClassifier::indicatesPossiblePattern):
(JSC::Parser::classifyExpressionError):
* parser/SyntaxChecker.h:
(JSC::SyntaxChecker::operatorStackPop):
* tests/es6.yaml:
* tests/es6/destructuring_assignment_non_simple_target.js: Added.
(test.):
(test):
* tests/es6/destructuring_initializer_scoping.js: Added.
(test.tester):
* tests/stress/destructuring-assignment-syntax.js: Added.
(testSyntax):
(testSyntaxError):
* tests/stress/rest-elements.js:
(shouldThrow): Deleted.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</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="#trunkSourceJavaScriptCoreparserNodeConstructorsh">trunk/Source/JavaScriptCore/parser/NodeConstructors.h</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="#trunkSourceJavaScriptCoreparserSyntaxCheckerh">trunk/Source/JavaScriptCore/parser/SyntaxChecker.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6yaml">trunk/Source/JavaScriptCore/tests/es6.yaml</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressrestelementsjs">trunk/Source/JavaScriptCore/tests/stress/rest-elements.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoretestses6destructuring_assignment_non_simple_targetjs">trunk/Source/JavaScriptCore/tests/es6/destructuring_assignment_non_simple_target.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestses6destructuring_initializer_scopingjs">trunk/Source/JavaScriptCore/tests/es6/destructuring_initializer_scoping.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressdestructuringassignmentsyntaxjs">trunk/Source/JavaScriptCore/tests/stress/destructuring-assignment-syntax.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstressregress151324js">trunk/Source/JavaScriptCore/tests/stress/regress-151324.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -1,3 +1,66 @@
</span><ins>+2015-11-19 Caitlin Potter <caitp@igalia.com>
+
+ [JSC] Fix AssignmentElement parsing
+ https://bugs.webkit.org/show_bug.cgi?id=151026
+
+ Reviewed by Geoffrey Garen.
+
+ When parsing an AssignmentPattern, any LeftHandSideExpression which
+ is a valid assignment target is acceptable.
+
+ Additionally, this change minimizes the amount of time spent
+ re-parsing ObjectLiteral and ArrayLiterals, by parsing as an
+ Expression first (the common case), and re-parsing only if the
+ result is a valid ObjectLiteral or ArrayLiteral followed by an `=`,
+ or if an error specifically indicates that the expression could
+ have been parsed as an AssignmentPattern.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::AssignmentElementNode::collectBoundIdentifiers):
+ (JSC::AssignmentElementNode::bindValue):
+ (JSC::AssignmentElementNode::toString):
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::isAssignmentLocation):
+ (JSC::ASTBuilder::isObjectLiteral):
+ (JSC::ASTBuilder::isArrayLiteral):
+ (JSC::ASTBuilder::isObjectOrArrayLiteral):
+ (JSC::ASTBuilder::createAssignmentElement):
+ * parser/NodeConstructors.h:
+ (JSC::AssignmentElementNode::AssignmentElementNode):
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::isObjectLiteral):
+ (JSC::ExpressionNode::isArrayLiteral):
+ (JSC::AssignmentElementNode::assignmentTarget):
+ (JSC::AssignmentElementNode::divotStart):
+ (JSC::AssignmentElementNode::divotEnd):
+ * parser/Parser.cpp:
+ (JSC::Parser<LexerType>::Parser):
+ (JSC::Parser<LexerType>::createAssignmentElement):
+ (JSC::Parser<LexerType>::parseBindingOrAssignmentElement):
+ (JSC::Parser<LexerType>::parseAssignmentElement):
+ (JSC::Parser<LexerType>::parseDestructuringPattern):
+ (JSC::Parser<LexerType>::parseAssignmentExpression):
+ (JSC::Parser<LexerType>::parseProperty):
+ * parser/Parser.h:
+ (JSC::Parser::ExpressionErrorClassifier::ExpressionErrorClassifier):
+ (JSC::Parser::ExpressionErrorClassifier::~ExpressionErrorClassifier):
+ (JSC::Parser::ExpressionErrorClassifier::classifyExpressionError):
+ (JSC::Parser::ExpressionErrorClassifier::indicatesPossiblePattern):
+ (JSC::Parser::classifyExpressionError):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::operatorStackPop):
+ * tests/es6.yaml:
+ * tests/es6/destructuring_assignment_non_simple_target.js: Added.
+ (test.):
+ (test):
+ * tests/es6/destructuring_initializer_scoping.js: Added.
+ (test.tester):
+ * tests/stress/destructuring-assignment-syntax.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ * tests/stress/rest-elements.js:
+ (shouldThrow): Deleted.
+
</ins><span class="cx"> 2015-11-19 Filip Pizlo <fpizlo@apple.com>
</span><span class="cx">
</span><span class="cx"> FTL->B3 lowering should support integer comparisons with the opcode abstracted and a few other things
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -3397,7 +3397,65 @@
</span><span class="cx"> {
</span><span class="cx"> identifiers.append(m_boundProperty);
</span><span class="cx"> }
</span><del>-
</del><ins>+
+void AssignmentElementNode::collectBoundIdentifiers(Vector<Identifier>&) const
+{
+}
+
+void AssignmentElementNode::bindValue(BytecodeGenerator& generator, RegisterID* value) const
+{
+ if (m_assignmentTarget->isResolveNode()) {
+ ResolveNode* lhs = static_cast<ResolveNode*>(m_assignmentTarget);
+ Variable var = generator.variable(lhs->identifier());
+ bool isReadOnly = var.isReadOnly();
+ if (RegisterID* local = var.local()) {
+ generator.emitTDZCheckIfNecessary(var, local, nullptr);
+
+ if (isReadOnly)
+ generator.emitReadOnlyExceptionIfNeeded(var);
+ else {
+ generator.invalidateForInContextForLocal(local);
+ generator.moveToDestinationIfNeeded(local, value);
+ generator.emitProfileType(local, divotStart(), divotEnd());
+ }
+ return;
+ }
+ if (generator.isStrictMode())
+ generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
+ RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, var);
+ generator.emitTDZCheckIfNecessary(var, nullptr, scope.get());
+ if (isReadOnly) {
+ bool threwException = generator.emitReadOnlyExceptionIfNeeded(var);
+ if (threwException)
+ return;
+ }
+ generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
+ if (!isReadOnly) {
+ generator.emitPutToScope(scope.get(), var, value, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound, NotInitialization);
+ generator.emitProfileType(value, var, divotStart(), divotEnd());
+ }
+ } else if (m_assignmentTarget->isDotAccessorNode()) {
+ DotAccessorNode* lhs = static_cast<DotAccessorNode*>(m_assignmentTarget);
+ RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(lhs->base(), true, false);
+ generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
+ generator.emitPutById(base.get(), lhs->identifier(), value);
+ generator.emitProfileType(value, divotStart(), divotEnd());
+ } else if (m_assignmentTarget->isBracketAccessorNode()) {
+ BracketAccessorNode* lhs = static_cast<BracketAccessorNode*>(m_assignmentTarget);
+ RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(lhs->base(), true, false);
+ RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(lhs->subscript(), true, false);
+ generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
+ generator.emitPutByVal(base.get(), property.get(), value);
+ generator.emitProfileType(value, divotStart(), divotEnd());
+ }
+}
+
+void AssignmentElementNode::toString(StringBuilder& builder) const
+{
+ if (m_assignmentTarget->isResolveNode())
+ builder.append(static_cast<ResolveNode*>(m_assignmentTarget)->identifier().string());
+}
+
</ins><span class="cx"> RegisterID* SpreadExpressionNode::emitBytecode(BytecodeGenerator&, RegisterID*)
</span><span class="cx"> {
</span><span class="cx"> RELEASE_ASSERT_NOT_REACHED();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserASTBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/ASTBuilder.h (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/ASTBuilder.h        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -121,6 +121,7 @@
</span><span class="cx"> typedef ArrayPatternNode* ArrayPattern;
</span><span class="cx"> typedef ObjectPatternNode* ObjectPattern;
</span><span class="cx"> typedef BindingNode* BindingPattern;
</span><ins>+ typedef AssignmentElementNode* AssignmentElement;
</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">@@ -524,6 +525,26 @@
</span><span class="cx"> return pattern->isBindingNode();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ bool isAssignmentLocation(const Expression& pattern)
+ {
+ return pattern->isAssignmentLocation();
+ }
+
+ bool isObjectLiteral(const Expression& node)
+ {
+ return node->isObjectLiteral();
+ }
+
+ bool isArrayLiteral(const Expression& node)
+ {
+ return node->isArrayLiteral();
+ }
+
+ bool isObjectOrArrayLiteral(const Expression& node)
+ {
+ return isObjectLiteral(node) || isArrayLiteral(node);
+ }
+
</ins><span class="cx"> StatementNode* createEmptyStatement(const JSTokenLocation& location) { return new (m_parserArena) EmptyStatementNode(location); }
</span><span class="cx">
</span><span class="cx"> StatementNode* createDeclarationStatement(const JSTokenLocation& location, ExpressionNode* expr, int start, int end)
</span><span class="lines">@@ -836,6 +857,11 @@
</span><span class="cx"> return new (m_parserArena) BindingNode(boundProperty, start, end, context);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ AssignmentElement createAssignmentElement(const Expression& assignmentTarget, const JSTextPosition& start, const JSTextPosition& end)
+ {
+ return new (m_parserArena) AssignmentElementNode(assignmentTarget, start, end);
+ }
+
</ins><span class="cx"> void setEndOffset(Node* node, int offset)
</span><span class="cx"> {
</span><span class="cx"> node->setEndOffset(offset);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodeConstructorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/NodeConstructors.h (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/NodeConstructors.h        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/NodeConstructors.h        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -1020,7 +1020,15 @@
</span><span class="cx"> , m_bindingContext(context)
</span><span class="cx"> {
</span><span class="cx"> }
</span><del>-
</del><ins>+
+ inline AssignmentElementNode::AssignmentElementNode(ExpressionNode* assignmentTarget, const JSTextPosition& start, const JSTextPosition& end)
+ : DestructuringPatternNode()
+ , m_divotStart(start)
+ , m_divotEnd(end)
+ , m_assignmentTarget(assignmentTarget)
+ {
+ }
+
</ins><span class="cx"> inline DestructuringAssignmentNode::DestructuringAssignmentNode(const JSTokenLocation& location, DestructuringPatternNode* bindings, ExpressionNode* initializer)
</span><span class="cx"> : ExpressionNode(location)
</span><span class="cx"> , m_bindings(bindings)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -153,6 +153,8 @@
</span><span class="cx">
</span><span class="cx"> virtual bool isNumber() const { return false; }
</span><span class="cx"> virtual bool isString() const { return false; }
</span><ins>+ virtual bool isObjectLiteral() const { return false; }
+ virtual bool isArrayLiteral() const { return false; }
</ins><span class="cx"> virtual bool isNull() const { return false; }
</span><span class="cx"> virtual bool isPure(BytecodeGenerator&) const { return false; }
</span><span class="cx"> virtual bool isConstant() const { return false; }
</span><span class="lines">@@ -592,6 +594,8 @@
</span><span class="cx"> ArrayNode(const JSTokenLocation&, ElementNode*);
</span><span class="cx"> ArrayNode(const JSTokenLocation&, int elision, ElementNode*);
</span><span class="cx">
</span><ins>+ virtual bool isArrayLiteral() const override { return true; }
+
</ins><span class="cx"> ArgumentListNode* toArgumentList(ParserArena&, int, int) const;
</span><span class="cx">
</span><span class="cx"> ElementNode* elements() const { ASSERT(isSimpleArray()); return m_element; }
</span><span class="lines">@@ -647,6 +651,7 @@
</span><span class="cx"> public:
</span><span class="cx"> ObjectLiteralNode(const JSTokenLocation&);
</span><span class="cx"> ObjectLiteralNode(const JSTokenLocation&, PropertyListNode*);
</span><ins>+ virtual bool isObjectLiteral() const override { return true; }
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
</span><span class="lines">@@ -2048,6 +2053,24 @@
</span><span class="cx"> AssignmentContext m_bindingContext;
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+ class AssignmentElementNode : public DestructuringPatternNode {
+ public:
+ AssignmentElementNode(ExpressionNode* assignmentTarget, const JSTextPosition& start, const JSTextPosition& end);
+ const ExpressionNode* assignmentTarget() { return m_assignmentTarget; }
+
+ const JSTextPosition& divotStart() const { return m_divotStart; }
+ const JSTextPosition& divotEnd() const { return m_divotEnd; }
+
+ private:
+ virtual void collectBoundIdentifiers(Vector<Identifier>&) const override;
+ virtual void bindValue(BytecodeGenerator&, RegisterID*) const override;
+ virtual void toString(StringBuilder&) const override;
+
+ JSTextPosition m_divotStart;
+ JSTextPosition m_divotEnd;
+ ExpressionNode* m_assignmentTarget;
+ };
+
</ins><span class="cx"> class DestructuringAssignmentNode : public ExpressionNode {
</span><span class="cx"> public:
</span><span class="cx"> DestructuringAssignmentNode(const JSTokenLocation&, DestructuringPatternNode*, ExpressionNode*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> #define semanticFailIfTrue(cond, ...) do { if (cond) internalFailWithMessage(false, __VA_ARGS__); } while (0)
</span><span class="cx"> #define semanticFailIfFalse(cond, ...) do { if (!(cond)) internalFailWithMessage(false, __VA_ARGS__); } while (0)
</span><span class="cx"> #define regexFail(failure) do { setErrorMessage(failure); return 0; } while (0)
</span><ins>+#define restoreSavePointAndFail(savePoint, message) do { restoreSavePointWithError(savePoint, message); return 0; } while (0)
</ins><span class="cx"> #define failDueToUnexpectedToken() do {\
</span><span class="cx"> logError(true);\
</span><span class="cx"> return 0;\
</span><span class="lines">@@ -219,6 +220,7 @@
</span><span class="cx"> m_token.m_location.endOffset = source.startOffset();
</span><span class="cx"> m_token.m_location.lineStartOffset = source.startOffset();
</span><span class="cx"> m_functionCache = vm->addSourceProviderCache(source.provider());
</span><ins>+ m_expressionErrorClassifier = nullptr;
</ins><span class="cx">
</span><span class="cx"> ScopeRef scope = pushScope();
</span><span class="cx"> scope->setSourceParseMode(parseMode);
</span><span class="lines">@@ -712,6 +714,12 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><ins>+template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern Parser<LexerType>::createAssignmentElement(TreeBuilder& context, TreeExpression& assignmentTarget, const JSTextPosition& startPosition, const JSTextPosition& endPosition)
+{
+ return context.createAssignmentElement(assignmentTarget, startPosition, endPosition);
+}
+
+template <typename LexerType>
</ins><span class="cx"> template <class TreeBuilder> TreeSourceElements Parser<LexerType>::parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder& context)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!match(OPENBRACE));
</span><span class="lines">@@ -747,6 +755,34 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template <typename LexerType>
</span><ins>+template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseBindingOrAssignmentElement(TreeBuilder& context, DestructuringKind kind, ExportType exportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth)
+{
+ if (kind == DestructureToExpressions)
+ return parseAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth);
+ return parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth);
+}
+
+template <typename LexerType>
+template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseAssignmentElement(TreeBuilder& context, DestructuringKind kind, ExportType exportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth)
+{
+ SavePoint savePoint = createSavePoint();
+ TreeDestructuringPattern assignmentTarget = 0;
+
+ if (match(OPENBRACE) || match(OPENBRACKET))
+ assignmentTarget = parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth);
+ if (!assignmentTarget || match(DOT) || match(OPENBRACKET) || match(OPENPAREN) || match(TEMPLATE)) {
+ restoreSavePoint(savePoint);
+ JSTextPosition startPosition = tokenStartPosition();
+ auto element = parseMemberExpression(context);
+
+ semanticFailIfFalse(element && context.isAssignmentLocation(element), "Invalid destructuring assignment target");
+
+ return createAssignmentElement(context, element, startPosition, lastTokenEndPosition());
+ }
+ return assignmentTarget;
+}
+
+template <typename LexerType>
</ins><span class="cx"> template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDestructuringPattern(TreeBuilder& context, DestructuringKind kind, ExportType exportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth)
</span><span class="cx"> {
</span><span class="cx"> failIfStackOverflow();
</span><span class="lines">@@ -776,7 +812,7 @@
</span><span class="cx"> if (UNLIKELY(match(DOTDOTDOT))) {
</span><span class="cx"> JSTokenLocation location = m_token.m_location;
</span><span class="cx"> next();
</span><del>- auto innerPattern = parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</del><ins>+ auto innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</ins><span class="cx"> if (kind == DestructureToExpressions && !innerPattern)
</span><span class="cx"> return 0;
</span><span class="cx"> failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
</span><span class="lines">@@ -789,7 +825,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSTokenLocation location = m_token.m_location;
</span><del>- auto innerPattern = parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</del><ins>+ auto innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</ins><span class="cx"> if (kind == DestructureToExpressions && !innerPattern)
</span><span class="cx"> return 0;
</span><span class="cx"> failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
</span><span class="lines">@@ -797,8 +833,6 @@
</span><span class="cx"> context.appendArrayPatternEntry(arrayPattern, location, innerPattern, defaultValue);
</span><span class="cx"> } while (consume(COMMA));
</span><span class="cx">
</span><del>- if (kind == DestructureToExpressions && !match(CLOSEBRACKET))
- return 0;
</del><span class="cx"> consumeOrFail(CLOSEBRACKET, restElementWasFound ? "Expected a closing ']' following a rest element destructuring pattern" : "Expected either a closing ']' or a ',' following an element destructuring pattern");
</span><span class="cx"> context.finishArrayPattern(arrayPattern, divotStart, divotStart, lastTokenEndPosition());
</span><span class="cx"> pattern = arrayPattern;
</span><span class="lines">@@ -826,7 +860,7 @@
</span><span class="cx"> JSToken identifierToken = m_token;
</span><span class="cx"> next();
</span><span class="cx"> if (consume(COLON))
</span><del>- innerPattern = parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</del><ins>+ innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</ins><span class="cx"> else
</span><span class="cx"> innerPattern = createBindingPattern(context, kind, exportType, *propertyName, identifierToken, bindingContext, duplicateIdentifier);
</span><span class="cx"> } else {
</span><span class="lines">@@ -859,7 +893,7 @@
</span><span class="cx">
</span><span class="cx"> failWithMessage("Expected a ':' prior to a named destructuring property");
</span><span class="cx"> }
</span><del>- innerPattern = parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</del><ins>+ innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
</ins><span class="cx"> }
</span><span class="cx"> if (kind == DestructureToExpressions && !innerPattern)
</span><span class="cx"> return 0;
</span><span class="lines">@@ -2670,16 +2704,9 @@
</span><span class="cx"> JSTokenLocation location(tokenLocation());
</span><span class="cx"> int initialAssignmentCount = m_assignmentCount;
</span><span class="cx"> int initialNonLHSCount = m_nonLHSCount;
</span><del>- if (match(OPENBRACE) || match(OPENBRACKET)) {
- SavePoint savePoint = createSavePoint();
- auto pattern = tryParseDestructuringPatternExpression(context, AssignmentContext::AssignmentExpression);
- if (pattern && consume(EQUAL)) {
- auto rhs = parseAssignmentExpression(context);
- if (rhs)
- return context.createDestructuringAssignment(location, pattern, rhs);
- }
- restoreSavePoint(savePoint);
- }
</del><ins>+ bool maybeAssignmentPattern = match(OPENBRACE) || match(OPENBRACKET);
+ SavePoint savePoint = createSavePoint();
+ ExpressionErrorClassifier classifier(this);
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(ES6_GENERATORS)
</span><span class="cx"> if (match(YIELD))
</span><span class="lines">@@ -2692,6 +2719,25 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> TreeExpression lhs = parseConditionalExpression(context);
</span><ins>+
+ if (!lhs && (!maybeAssignmentPattern || !classifier.indicatesPossiblePattern()))
+ propagateError();
+
+ if (maybeAssignmentPattern && (!lhs || (context.isObjectOrArrayLiteral(lhs) && match(EQUAL)))) {
+ String expressionError = m_errorMessage;
+ SavePoint expressionErrorLocation = createSavePointForError();
+ restoreSavePoint(savePoint);
+ auto pattern = tryParseDestructuringPatternExpression(context, AssignmentContext::AssignmentExpression);
+ if (classifier.indicatesPossiblePattern() && (!pattern || !match(EQUAL)))
+ restoreSavePointAndFail(expressionErrorLocation, expressionError);
+ failIfFalse(pattern, "Cannot parse assignment pattern");
+ consumeOrFail(EQUAL, "Expected '=' following assignment pattern");
+ auto rhs = parseAssignmentExpression(context);
+ if (!rhs)
+ propagateError();
+ return context.createDestructuringAssignment(location, pattern, rhs);
+ }
+
</ins><span class="cx"> failIfFalse(lhs, "Cannot parse expression");
</span><span class="cx"> if (initialNonLHSCount != m_nonLHSCount) {
</span><span class="cx"> if (m_token.m_type >= EQUAL && m_token.m_type <= OREQUAL)
</span><span class="lines">@@ -2911,6 +2957,9 @@
</span><span class="cx"> return context.createProperty(ident, node, static_cast<PropertyNode::Type>(PropertyNode::Constant | PropertyNode::Shorthand), PropertyNode::KnownDirect, complete);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ if (match(EQUAL)) // CoverInitializedName is exclusive to BindingPattern and AssignmentPattern
+ classifyExpressionError(ErrorIndicatesPattern);
+
</ins><span class="cx"> PropertyNode::Type type;
</span><span class="cx"> if (*ident == m_vm->propertyNames->get)
</span><span class="cx"> type = PropertyNode::Getter;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -717,6 +717,45 @@
</span><span class="cx"> Parser* m_parser;
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+ enum ExpressionErrorClass {
+ ErrorIndicatesNothing,
+ ErrorIndicatesPattern
+ };
+
+ struct ExpressionErrorClassifier {
+ ExpressionErrorClassifier(Parser* parser)
+ : m_class(ErrorIndicatesNothing)
+ , m_previous(parser->m_expressionErrorClassifier)
+ , m_parser(parser)
+ {
+ m_parser->m_expressionErrorClassifier = this;
+ }
+
+ ~ExpressionErrorClassifier()
+ {
+ m_parser->m_expressionErrorClassifier = m_previous;
+ }
+
+ void classifyExpressionError(ExpressionErrorClass classification)
+ {
+ if (m_class != ErrorIndicatesNothing)
+ return;
+ m_class = classification;
+ }
+ bool indicatesPossiblePattern() const { return m_class == ErrorIndicatesPattern; }
+
+ private:
+ ExpressionErrorClass m_class;
+ ExpressionErrorClassifier* m_previous;
+ Parser* m_parser;
+ };
+
+ ALWAYS_INLINE void classifyExpressionError(ExpressionErrorClass classification)
+ {
+ if (m_expressionErrorClassifier)
+ m_expressionErrorClassifier->classifyExpressionError(classification);
+ }
+
</ins><span class="cx"> ALWAYS_INLINE DestructuringKind destructuringKindFromDeclarationType(DeclarationType type)
</span><span class="cx"> {
</span><span class="cx"> switch (type) {
</span><span class="lines">@@ -1139,6 +1178,9 @@
</span><span class="cx"> template <class TreeBuilder> TreeSourceElements parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder&);
</span><span class="cx"> template <class TreeBuilder> TreeExpression parseArrowFunctionExpression(TreeBuilder&);
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createBindingPattern(TreeBuilder&, DestructuringKind, ExportType, const Identifier&, JSToken, AssignmentContext, const Identifier** duplicateIdentifier);
</span><ins>+ template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createAssignmentElement(TreeBuilder&, TreeExpression&, const JSTextPosition&, const JSTextPosition&);
+ template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseBindingOrAssignmentElement(TreeBuilder& context, DestructuringKind, ExportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth);
+ template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseAssignmentElement(TreeBuilder& context, DestructuringKind, ExportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth);
</ins><span class="cx"> template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseDestructuringPattern(TreeBuilder&, DestructuringKind, ExportType, const Identifier** duplicateIdentifier = nullptr, bool* hasDestructuringPattern = nullptr, AssignmentContext = AssignmentContext::DeclarationStatement, int depth = 0);
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern tryParseDestructuringPatternExpression(TreeBuilder&, AssignmentContext);
</span><span class="cx"> template <class TreeBuilder> NEVER_INLINE TreeExpression parseDefaultValueForDestructuringPattern(TreeBuilder&);
</span><span class="lines">@@ -1201,9 +1243,8 @@
</span><span class="cx"> unsigned oldLineNumber;
</span><span class="cx"> };
</span><span class="cx">
</span><del>- ALWAYS_INLINE SavePoint createSavePoint()
</del><ins>+ ALWAYS_INLINE SavePoint createSavePointForError()
</ins><span class="cx"> {
</span><del>- ASSERT(!hasError());
</del><span class="cx"> SavePoint result;
</span><span class="cx"> result.startOffset = m_token.m_location.startOffset;
</span><span class="cx"> result.oldLineStartOffset = m_token.m_location.lineStartOffset;
</span><span class="lines">@@ -1212,15 +1253,26 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- ALWAYS_INLINE void restoreSavePoint(const SavePoint& savePoint)
</del><ins>+ ALWAYS_INLINE SavePoint createSavePoint()
</ins><span class="cx"> {
</span><del>- m_errorMessage = String();
</del><ins>+ ASSERT(!hasError());
+ return createSavePointForError();
+ }
+
+ ALWAYS_INLINE void restoreSavePointWithError(const SavePoint& savePoint, const String& message)
+ {
+ m_errorMessage = message;
</ins><span class="cx"> m_lexer->setOffset(savePoint.startOffset, savePoint.oldLineStartOffset);
</span><span class="cx"> next();
</span><span class="cx"> m_lexer->setLastLineNumber(savePoint.oldLastLineNumber);
</span><span class="cx"> m_lexer->setLineNumber(savePoint.oldLineNumber);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ ALWAYS_INLINE void restoreSavePoint(const SavePoint& savePoint)
+ {
+ restoreSavePointWithError(savePoint, String());
+ }
+
</ins><span class="cx"> enum class FunctionParsePhase { Parameters, Body };
</span><span class="cx"> struct ParserState {
</span><span class="cx"> int assignmentCount;
</span><span class="lines">@@ -1276,6 +1328,7 @@
</span><span class="cx"> Vector<RefPtr<UniquedStringImpl>> m_closedVariables;
</span><span class="cx"> CodeFeatures m_features;
</span><span class="cx"> int m_numConstants;
</span><ins>+ ExpressionErrorClassifier* m_expressionErrorClassifier;
</ins><span class="cx">
</span><span class="cx"> struct DepthManager {
</span><span class="cx"> DepthManager(int* depth)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSyntaxCheckerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SyntaxChecker.h (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/parser/SyntaxChecker.h        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -346,12 +346,36 @@
</span><span class="cx"> {
</span><span class="cx"> return BindingDestructuring;
</span><span class="cx"> }
</span><ins>+ DestructuringPattern createAssignmentElement(const Expression&, const JSTextPosition&, const JSTextPosition&)
+ {
+ return BindingDestructuring;
+ }
</ins><span class="cx">
</span><span class="cx"> bool isBindingNode(DestructuringPattern pattern)
</span><span class="cx"> {
</span><span class="cx"> return pattern == BindingDestructuring;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ bool isAssignmentLocation(ExpressionType type)
+ {
+ return type == ResolveExpr || type == DotExpr || type == BracketExpr;
+ }
+
+ bool isObjectLiteral(ExpressionType type)
+ {
+ return type == ObjectLiteralExpr;
+ }
+
+ bool isArrayLiteral(ExpressionType type)
+ {
+ return type == ArrayLiteralExpr;
+ }
+
+ bool isObjectOrArrayLiteral(ExpressionType type)
+ {
+ return isObjectLiteral(type) || isArrayLiteral(type);
+ }
+
</ins><span class="cx"> void setEndOffset(int, int) { }
</span><span class="cx"> int endOffset(int) { return 0; }
</span><span class="cx"> void setStartOffset(int, int) { }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6destructuring_assignment_non_simple_targetjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/es6/destructuring_assignment_non_simple_target.js (0 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/destructuring_assignment_non_simple_target.js         (rev 0)
+++ trunk/Source/JavaScriptCore/tests/es6/destructuring_assignment_non_simple_target.js        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+function test() {
+ var msg = {};
+ ({
+ name: msg.name,
+ "parameters": [msg.callback, ...msg["parameters"]],
+ 0: msg[0]
+ } = {
+ name: "test",
+ parameters: [function cb() { return "test"; }, "a", "b", "c"],
+ "0": NaN
+ });
+ return msg.name === "test" && msg[0] !== msg[0] && msg.callback() === "test" && (msg.parameters + "") === "a,b,c";
+}
+
+if (!test())
+ throw new Error("Test failed");
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6destructuring_initializer_scopingjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/es6/destructuring_initializer_scoping.js (0 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6/destructuring_initializer_scoping.js         (rev 0)
+++ trunk/Source/JavaScriptCore/tests/es6/destructuring_initializer_scoping.js        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+var outer = [];
+function test() {
+ var a = {};
+ var defaultObj = {
+ name: "default",
+ length: 3,
+ 0: "a",
+ 1: "b",
+ 2: "c",
+ [Symbol.iterator]: Array.prototype[Symbol.iterator]
+ };
+ function tester({ name } = { name: a.name } = [outer[0], ...outer[1]] = defaultObj) { return name; }
+ return tester() === "default" && a.name === "default" && (outer + "") === "a,b,c";
+}
+
+if (!test())
+ throw new Error("Test failed");
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestses6yaml"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/es6.yaml (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/es6.yaml        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/tests/es6.yaml        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -214,6 +214,10 @@
</span><span class="cx"> cmd: runES6 :normal
</span><span class="cx"> - path: es6/destructuring_with_strings.js
</span><span class="cx"> cmd: runES6 :normal
</span><ins>+- path: es6/destructuring_assignment_non_simple_target.js
+ cmd: runES6 :normal
+- path: es6/destructuring_initializer_scoping.js
+ cmd: runES6 :normal
</ins><span class="cx"> - path: es6/for..of_loops_with_arrays.js
</span><span class="cx"> cmd: runES6 :normal
</span><span class="cx"> - path: es6/for..of_loops_with_astral_plane_strings.js
</span><span class="lines">@@ -747,7 +751,7 @@
</span><span class="cx"> - path: es6/destructuring_iterator_closing.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/destructuring_nested_rest.js
</span><del>- cmd: runES6 :fail
</del><ins>+ cmd: runES6 :normal
</ins><span class="cx"> - path: es6/destructuring_with_generator_instances.js
</span><span class="cx"> cmd: runES6 :fail
</span><span class="cx"> - path: es6/destructuring_with_generic_iterables.js
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressdestructuringassignmentsyntaxjs"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/stress/destructuring-assignment-syntax.js (0 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/destructuring-assignment-syntax.js         (rev 0)
+++ trunk/Source/JavaScriptCore/tests/stress/destructuring-assignment-syntax.js        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntax("({ a: this.a } = {})");
+testSyntax("({ a: this['a'] } = {})");
+testSyntax("({ a: this[\"a\"] } = {})");
+testSyntax("[this.a ] = []");
+testSyntax("[this['a']] = []");
+testSyntax("[this[0]] = []");
+testSyntax("[...this[0]] = []");
+testSyntax("[...[function f() {}.prop]] = []");
+testSyntax("[...[{prop: 1}.prop]] = []");
+testSyntax("[...[this[0], ...this[1]]] = []");
+testSyntax("({ a: obj.a } = {})");
+testSyntax("({ a: obj['a'] } = {})");
+testSyntax("({ a: obj[\"a\"] } = {})");
+testSyntax("({ a: function() {}['prop'] } = {})");
+testSyntax("({ a: {prop: 1}.prop } = {})");
+testSyntax("[obj.a ] = []");
+testSyntax("[obj['a']] = []");
+testSyntax("[obj[0]] = []");
+testSyntax("[function(){}.prop] = []");
+testSyntax("[{prop: 1}.prop] = []");
+
+
+testSyntaxError("[...c = 1] = []", "SyntaxError: Unexpected token '='. Expected a closing ']' following a rest element destructuring pattern.");
+testSyntaxError("[...c, d] = []", "SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern.");
+testSyntaxError("[this] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[th\\u{69}s] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[function() {}] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("['string'] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[123] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[true] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[tru\\u0065] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[false] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[f\\u0061lse] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[null] = []", "SyntaxError: Invalid destructuring assignment target.");
+testSyntaxError("[n\\u{75}ll] = []", "SyntaxError: Invalid destructuring assignment target.");
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressregress151324js"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/tests/stress/regress-151324.js (0 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/regress-151324.js         (rev 0)
+++ trunk/Source/JavaScriptCore/tests/stress/regress-151324.js        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -0,0 +1,1699 @@
</span><ins>+load('./resources/standalone-pre.js');
+
+shouldThrow(`InspectorFrontendAPI.dispatchMessageAsync({
+ "method":"Timeline.eventRecorded",
+ "params":{
+ "record":{
+ "startTime":0.4574042089516297,
+ "data":{
+
+ },
+ "children":[
+ {
+ "startTime":0.45765518594998866,
+ "frameId":"0.1",
+ "data":{
+ "type":"unload"
+ },
+ "children":[
+ {
+ "startTime":0.45767247199546546,
+ "frameId":"0.1",
+ "data":{
+ "type":"unload"
+ },
+ "children":[
+ {
+ "startTime":0.4577469859505072,
+ "frameId":"0.1",
+ "data":{
+ "scriptName":"http://bogojoker.com/shell/js/jquery.js",
+ "scriptLine":25,
+ "profile":{
+ "rootNodes":[
+ {
+ "id":10666325,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4600456530461088,
+ "endTime":0.5723258559592068,
+ "totalTime":0.11228020291309804
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11278,
+ "children":[
+ {
+ "id":9047718,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4602741169510409,
+ "endTime":0.5723157339962199,
+ "totalTime":0.11204161704517901
+ },
+ "functionName":"handle",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":1710,
+ "children":[
+ {
+ "id":4202292,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46182347903959453,
+ "endTime":0.46567703399341553,
+ "totalTime":0.0038535549538210034
+ },
+ "functionName":"fix",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":2250,
+ "children":[
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4640483419643715,
+ "endTime":0.46420134196523577,
+ "totalTime":0.00015300000086426735
+ },
+ "functionName":"split"
+ }
+ ]
+ },
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46569668501615524,
+ "endTime":0.4657133989967406,
+ "totalTime":0.000016713980585336685
+ },
+ "functionName":"split"
+ },
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4657505040522665,
+ "endTime":0.4665822129463777,
+ "totalTime":0.0008317088941112161
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":10326340,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4666974269784987,
+ "endTime":0.5723000540165231,
+ "totalTime":0.10560262703802437
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5202,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46711588103789836,
+ "endTime":0.47081808699294925,
+ "totalTime":0.0037022059550508857
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4674249020172283,
+ "endTime":0.4708091530483216,
+ "totalTime":0.0033842510310932994
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283,
+ "children":[
+ {
+ "id":4233234,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4688438760349527,
+ "endTime":0.46978856704663485,
+ "totalTime":0.0009446910116821527
+ },
+ "functionName":"isFunction",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":18,
+ "columnNumber":1024,
+ "children":[
+ {
+ "id":10491348,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46960152103565633,
+ "endTime":0.4696109419455752,
+ "totalTime":0.0000094209099188447
+ },
+ "functionName":"valueOf"
+ },
+ {
+ "id":16692393,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46964985702652484,
+ "endTime":0.46968269103672355,
+ "totalTime":0.00003283401019871235
+ },
+ "functionName":"toString"
+ },
+ {
+ "id":2722971,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.46969330694992095,
+ "endTime":0.4697769519407302,
+ "totalTime":0.0000836449908092618
+ },
+ "functionName":"test"
+ }
+ ]
+ },
+ {
+ "id":11418222,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4698098510270938,
+ "endTime":0.47037055995315313,
+ "totalTime":0.0005607089260593057
+ },
+ "functionName":"makeArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1405
+ },
+ {
+ "id":4289586,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47038226504810154,
+ "endTime":0.47079936298541725,
+ "totalTime":0.00041709793731570244
+ },
+ "functionName":"setArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":427,
+ "children":[
+ {
+ "id":10262917,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47075928503181785,
+ "endTime":0.4707893270533532,
+ "totalTime":0.00003004202153533697
+ },
+ "functionName":"push"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":488105,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47083144600037485,
+ "endTime":0.4769594370154664,
+ "totalTime":0.006127991015091538
+ },
+ "functionName":"unbind",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5372,
+ "children":[
+ {
+ "id":16235438,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.471148986951448,
+ "endTime":0.47694955894257873,
+ "totalTime":0.00580057199113071
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":515,
+ "children":[
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47142826195340604,
+ "endTime":0.47693974093999714,
+ "totalTime":0.005511478986591101
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":9497284,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4730144899804145,
+ "endTime":0.4769267829833552,
+ "totalTime":0.003912293002940714
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5407,
+ "children":[
+ {
+ "id":10024927,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4732826850377023,
+ "endTime":0.47690031595993787,
+ "totalTime":0.0036176309222355485
+ },
+ "functionName":"remove",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11923,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47489556402433664,
+ "endTime":0.4749327319441363,
+ "totalTime":0.00003716791979968548
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47496555594261736,
+ "endTime":0.47498407296370715,
+ "totalTime":0.00001851702108979225
+ },
+ "functionName":"split"
+ },
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47499843896366656,
+ "endTime":0.4768601800315082,
+ "totalTime":0.001861741067841649
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":11810108,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47504206001758575,
+ "endTime":0.47683112300001085,
+ "totalTime":0.0017890629824250937
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":12273,
+ "children":[
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4764995139557868,
+ "endTime":0.4765173509949818,
+ "totalTime":0.000017837039195001125
+ },
+ "functionName":"split"
+ },
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4766902349656448,
+ "endTime":0.47672319202683866,
+ "totalTime":0.00003295706119388342
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":13528547,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4767302969703451,
+ "endTime":0.47679690702352673,
+ "totalTime":0.00006661005318164825
+ },
+ "functionName":"removeEventListener"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":11938226,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4769882570253685,
+ "endTime":0.5722886399598792,
+ "totalTime":0.09530038293451071
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":27,
+ "columnNumber":1877,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4773472750093788,
+ "endTime":0.4885393399745226,
+ "totalTime":0.0111920649651438
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47737314202822745,
+ "endTime":0.48852962302044034,
+ "totalTime":0.011156480992212892
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283,
+ "children":[
+ {
+ "id":12623361,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47739895700942725,
+ "endTime":0.477487865020521,
+ "totalTime":0.0000889080110937357
+ },
+ "functionName":"exec"
+ },
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47750373696908355,
+ "endTime":0.47760105098132044,
+ "totalTime":0.00009731401223689318
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47752914403099567,
+ "endTime":0.4775912419427186,
+ "totalTime":0.00006209791172295809
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283
+ }
+ ]
+ },
+ {
+ "id":6695340,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47761483397334814,
+ "endTime":0.48851928603835404,
+ "totalTime":0.010904452065005898
+ },
+ "functionName":"find",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":2421,
+ "children":[
+ {
+ "id":16700220,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.47815056005492806,
+ "endTime":0.48736846703104675,
+ "totalTime":0.009217906976118684
+ },
+ "functionName":"map",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":426,
+ "children":[
+ {
+ "id":6556246,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4788244169903919,
+ "endTime":0.48721889895386994,
+ "totalTime":0.008394481963478029
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":2466,
+ "children":[
+ {
+ "id":10111157,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4791237829485908,
+ "endTime":0.4872086669784039,
+ "totalTime":0.00808488402981311
+ },
+ "functionName":"find",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":6583,
+ "children":[
+ {
+ "id":4146357,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4843939649872482,
+ "endTime":0.48479653301183134,
+ "totalTime":0.0004025680245831609
+ },
+ "functionName":"trim",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1336,
+ "children":[
+ {
+ "id":14946989,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4847100869519636,
+ "endTime":0.48478551500011235,
+ "totalTime":0.00007542804814875126
+ },
+ "functionName":"replace"
+ }
+ ]
+ },
+ {
+ "id":12623361,
+ "callInfo":{
+ "callCount":4,
+ "startTime":0.48481361102312803,
+ "endTime":0.4851868849946186,
+ "totalTime":0.00029874895699322224
+ },
+ "functionName":"exec"
+ },
+ {
+ "id":15678801,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48498469195328653,
+ "endTime":0.4849950469797477,
+ "totalTime":0.000010355026461184025
+ },
+ "functionName":"indexOf"
+ },
+ {
+ "id":14946989,
+ "callInfo":{
+ "callCount":2,
+ "startTime":0.4852056399686262,
+ "endTime":0.48676540004089475,
+ "totalTime":0.00006531213875859976
+ },
+ "functionName":"replace"
+ },
+ {
+ "id":8888104,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4853037269786,
+ "endTime":0.4853140809573233,
+ "totalTime":0.000010353978723287582
+ },
+ "functionName":"toLowerCase"
+ },
+ {
+ "id":15667683,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48533563304226846,
+ "endTime":0.4853546470403671,
+ "totalTime":0.000019013998098671436
+ },
+ "functionName":"getElementsByTagName"
+ },
+ {
+ "id":13439957,
+ "callInfo":{
+ "callCount":2,
+ "startTime":0.4853657509665936,
+ "endTime":0.4871977570001036,
+ "totalTime":0.0017730630934238434
+ },
+ "functionName":"merge",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":24,
+ "columnNumber":168
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":10650488,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.487244653981179,
+ "endTime":0.48735911201220006,
+ "totalTime":0.00011445803102105856
+ },
+ "functionName":"concat"
+ }
+ ]
+ },
+ {
+ "id":2722971,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.487386625027284,
+ "endTime":0.48743854300118983,
+ "totalTime":0.00005191797390580177
+ },
+ "functionName":"test"
+ },
+ {
+ "id":15678801,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4874507150379941,
+ "endTime":0.4874597470043227,
+ "totalTime":0.00000903196632862091
+ },
+ "functionName":"indexOf"
+ },
+ {
+ "id":8643473,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4874700449872762,
+ "endTime":0.48850960296113044,
+ "totalTime":0.0010395579738542438
+ },
+ "functionName":"pushStack",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":347,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4877791110193357,
+ "endTime":0.48846802301704884,
+ "totalTime":0.0006889119977131486
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48780164995696396,
+ "endTime":0.4884582340018824,
+ "totalTime":0.0006565840449184179
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283,
+ "children":[
+ {
+ "id":4233234,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4878246319713071,
+ "endTime":0.48785160097759217,
+ "totalTime":0.000026969006285071373
+ },
+ "functionName":"isFunction",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":18,
+ "columnNumber":1024
+ },
+ {
+ "id":11418222,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4878640250535682,
+ "endTime":0.48823340400122106,
+ "totalTime":0.0003693789476528764
+ },
+ "functionName":"makeArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1405
+ },
+ {
+ "id":4289586,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48824399698060006,
+ "endTime":0.4884476319421083,
+ "totalTime":0.00020363496150821447
+ },
+ "functionName":"setArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":427,
+ "children":[
+ {
+ "id":10262917,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48826338397338986,
+ "endTime":0.4884373639943078,
+ "totalTime":0.00017398002091795206
+ },
+ "functionName":"push"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":13091494,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48855383903719485,
+ "endTime":0.5076191630214453,
+ "totalTime":0.019065323984250426
+ },
+ "functionName":"add",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":14,
+ "columnNumber":250,
+ "children":[
+ {
+ "id":9004706,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4890042010229081,
+ "endTime":0.48967376397922635,
+ "totalTime":0.0006695629563182592
+ },
+ "functionName":"get",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":266,
+ "children":[
+ {
+ "id":11418222,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48931563401129097,
+ "endTime":0.48966451501473784,
+ "totalTime":0.000348881003446877
+ },
+ "functionName":"makeArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1405
+ }
+ ]
+ },
+ {
+ "id":11418222,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4896885330090299,
+ "endTime":0.48971870401874185,
+ "totalTime":0.000030171009711921215
+ },
+ "functionName":"makeArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1405
+ },
+ {
+ "id":13439957,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.48972829105332494,
+ "endTime":0.4897498949430883,
+ "totalTime":0.000021603889763355255
+ },
+ "functionName":"merge",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":24,
+ "columnNumber":168
+ },
+ {
+ "id":2759216,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.4897593869827688,
+ "endTime":0.506864722003229,
+ "totalTime":0.01710533502046019
+ },
+ "functionName":"unique",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":72,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":212,
+ "startTime":0.49046733195427805,
+ "endTime":0.506835420965217,
+ "totalTime":0.009655389352701604
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":10262917,
+ "callInfo":{
+ "callCount":212,
+ "startTime":0.49055562098510563,
+ "endTime":0.5068554510362446,
+ "totalTime":0.001536340918391943
+ },
+ "functionName":"push"
+ }
+ ]
+ },
+ {
+ "id":8643473,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5068748430348933,
+ "endTime":0.5076102019520476,
+ "totalTime":0.0007353589171543717
+ },
+ "functionName":"pushStack",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":347,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5068993769818917,
+ "endTime":0.5075981400441378,
+ "totalTime":0.0006987630622461438
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5069203609600663,
+ "endTime":0.5075888170395046,
+ "totalTime":0.0006684560794383287
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283,
+ "children":[
+ {
+ "id":4233234,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5069418509956449,
+ "endTime":0.5069665010087192,
+ "totalTime":0.00002465001307427883
+ },
+ "functionName":"isFunction",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":18,
+ "columnNumber":1024
+ },
+ {
+ "id":11418222,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5069789109984413,
+ "endTime":0.5073867529863492,
+ "totalTime":0.0004078419879078865
+ },
+ "functionName":"makeArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":23,
+ "columnNumber":1405
+ },
+ {
+ "id":4289586,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5073979030130431,
+ "endTime":0.5075787319801748,
+ "totalTime":0.0001808289671316743
+ },
+ "functionName":"setArray",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":427,
+ "children":[
+ {
+ "id":10262917,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5074169930303469,
+ "endTime":0.5075692009413615,
+ "totalTime":0.00015220791101455688
+ },
+ "functionName":"push"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":488105,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5076321549713612,
+ "endTime":0.57227890600916,
+ "totalTime":0.06464675103779882
+ },
+ "functionName":"unbind",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5372,
+ "children":[
+ {
+ "id":16235438,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5076667669927701,
+ "endTime":0.572270018979907,
+ "totalTime":0.0646032519871369
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":515,
+ "children":[
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":1,
+ "startTime":0.5076878629624844,
+ "endTime":0.5722610909724608,
+ "totalTime":0.06457322800997645
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":9497284,
+ "callInfo":{
+ "callCount":212,
+ "startTime":0.5077157670166343,
+ "endTime":0.5722492639906704,
+ "totalTime":0.06122412241529673
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5407,
+ "children":[
+ {
+ "id":10024927,
+ "callInfo":{
+ "callCount":212,
+ "startTime":0.5077362669399008,
+ "endTime":0.5722395799821243,
+ "totalTime":0.05579547712113708
+ },
+ "functionName":"remove",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11923,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":230,
+ "startTime":0.5077663060510531,
+ "endTime":0.5719964860472828,
+ "totalTime":0.005681783542968333
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":10024927,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5098302339902148,
+ "endTime":0.5719179699663073,
+ "totalTime":0.03613383590709418
+ },
+ "functionName":"remove",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11923,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":50,
+ "startTime":0.509867444052361,
+ "endTime":0.571639965986833,
+ "totalTime":0.0010316309053450823
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":7559434,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5099190620239824,
+ "endTime":0.5713644659845158,
+ "totalTime":0.00018110312521457672
+ },
+ "functionName":"charAt"
+ },
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5099465129896998,
+ "endTime":0.5713880989933386,
+ "totalTime":0.000504822819493711
+ },
+ "functionName":"split"
+ },
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5099760990124196,
+ "endTime":0.5715895700268447,
+ "totalTime":0.02507637918461114
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":11810108,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5100070700282231,
+ "endTime":0.5715776670258492,
+ "totalTime":0.023956994991749525
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":12273,
+ "children":[
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":32,
+ "startTime":0.5100298100151122,
+ "endTime":0.5714387450134382,
+ "totalTime":0.0003970271209254861
+ },
+ "functionName":"split"
+ },
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":6,
+ "startTime":0.5101313069462776,
+ "endTime":0.5715348520316184,
+ "totalTime":0.0001477630576118827
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":13528547,
+ "callInfo":{
+ "callCount":6,
+ "startTime":0.5101638509659097,
+ "endTime":0.571557622984983,
+ "totalTime":0.0001082209637388587
+ },
+ "functionName":"removeEventListener"
+ },
+ {
+ "id":1932713,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5170135640073568,
+ "endTime":0.5636187120107934,
+ "totalTime":0.007674403954297304
+ },
+ "functionName":"teardown",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":4267,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5173674599500373,
+ "endTime":0.5631630329880863,
+ "totalTime":0.0007915140595287085
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5173888490535319,
+ "endTime":0.5631537339650095,
+ "totalTime":0.000419716932810843
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283
+ }
+ ]
+ },
+ {
+ "id":488105,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5174522290471941,
+ "endTime":0.5636094439541921,
+ "totalTime":0.006016437197104096
+ },
+ "functionName":"unbind",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5372,
+ "children":[
+ {
+ "id":16235438,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5174769869772717,
+ "endTime":0.5636000350350514,
+ "totalTime":0.0056232352508232
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":515,
+ "children":[
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5174947320483625,
+ "endTime":0.5635905610397458,
+ "totalTime":0.005255497177131474
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":9497284,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5175209649605677,
+ "endTime":0.5635784750338644,
+ "totalTime":0.004808090161532164
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5407,
+ "children":[
+ {
+ "id":10024927,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5175394839607179,
+ "endTime":0.5635684269946069,
+ "totalTime":0.004470365238375962
+ },
+ "functionName":"remove",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11923,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5175549449631944,
+ "endTime":0.5632668699836358,
+ "totalTime":0.00022441917099058628
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":7559434,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5176310209790245,
+ "endTime":0.5632796649588272,
+ "totalTime":0.00007680489215999842
+ },
+ "functionName":"charAt"
+ },
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5177862700074911,
+ "endTime":0.5633019669912755,
+ "totalTime":0.00018701096996665
+ },
+ "functionName":"split"
+ },
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5178207469871268,
+ "endTime":0.5635312650119886,
+ "totalTime":0.0027500687865540385
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":11810108,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5178566400427371,
+ "endTime":0.5635183999547735,
+ "totalTime":0.0022494520526379347
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":12273,
+ "children":[
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5178755599772558,
+ "endTime":0.5633663949556649,
+ "totalTime":0.00015613273717463017
+ },
+ "functionName":"split"
+ },
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5179461860097945,
+ "endTime":0.5634484669426456,
+ "totalTime":0.00030205503571778536
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":13528547,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.517973372945562,
+ "endTime":0.5634730849415064,
+ "totalTime":0.0002499391557648778
+ },
+ "functionName":"removeEventListener"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":7516897,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5184197369962931,
+ "endTime":0.564691312960349,
+ "totalTime":0.009912022738717496
+ },
+ "functionName":"teardown",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":4700,
+ "children":[
+ {
+ "id":11633846,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5188653949880973,
+ "endTime":0.5640319919912145,
+ "totalTime":0.0007843798957765102
+ },
+ "functionName":"$",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":93,
+ "children":[
+ {
+ "id":11974810,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5188895519822836,
+ "endTime":0.5640219210181385,
+ "totalTime":0.0004164050333201885
+ },
+ "functionName":"init",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":11,
+ "columnNumber":283
+ }
+ ]
+ },
+ {
+ "id":488105,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5189610470551997,
+ "endTime":0.5646812729537487,
+ "totalTime":0.008086794055998325
+ },
+ "functionName":"unbind",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5372,
+ "children":[
+ {
+ "id":16235438,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5189879050012678,
+ "endTime":0.5646517019486055,
+ "totalTime":0.0076663600048050284
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":12,
+ "columnNumber":515,
+ "children":[
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5190068449592218,
+ "endTime":0.5646408109460026,
+ "totalTime":0.007320980075746775
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":9497284,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5190380819840357,
+ "endTime":0.5646168040111661,
+ "totalTime":0.004754591034725308
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":26,
+ "columnNumber":5407,
+ "children":[
+ {
+ "id":10024927,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5190725360298529,
+ "endTime":0.5646060470025986,
+ "totalTime":0.004371779155917466
+ },
+ "functionName":"remove",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":11923,
+ "children":[
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5190910790115595,
+ "endTime":0.5642198349814862,
+ "totalTime":0.00029840413480997086
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":7559434,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5191326700150967,
+ "endTime":0.5642341560451314,
+ "totalTime":0.00007180299144238234
+ },
+ "functionName":"charAt"
+ },
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5191488530253991,
+ "endTime":0.5642752950079739,
+ "totalTime":0.0001995321363210678
+ },
+ "functionName":"split"
+ },
+ {
+ "id":15419017,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5191799569875002,
+ "endTime":0.5645474110497162,
+ "totalTime":0.002659469028003514
+ },
+ "functionName":"each",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":841,
+ "children":[
+ {
+ "id":11810108,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5192120099673048,
+ "endTime":0.5645325899822637,
+ "totalTime":0.0021874881349503994
+ },
+ "functionName":"(anonymous function)",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":25,
+ "columnNumber":12273,
+ "children":[
+ {
+ "id":10521023,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5192305189557374,
+ "endTime":0.5643490799702704,
+ "totalTime":0.0002011689357459545
+ },
+ "functionName":"split"
+ },
+ {
+ "id":14911479,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5193049629451707,
+ "endTime":0.5644499149639159,
+ "totalTime":0.0002809580182656646
+ },
+ "functionName":"data",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":244
+ },
+ {
+ "id":13528547,
+ "callInfo":{
+ "callCount":13,
+ "startTime":0.5193320829421282,
+ "endTime":0.5644753449596465,
+ "totalTime":0.0002735854359343648
+ },
+ "functionName":"removeEventListener"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":1551406,
+ "callInfo":{
+ "callCount":36,
+ "startTime":0.5103220000164583,
+ "endTime":0.5719092530198395,
+ "totalTime":0.004639018443413079
+ },
+ "functionName":"removeData",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":501,
+ "children":[
+ {
+ "id":1551406,
+ "callInfo":{
+ "callCount":17,
+ "startTime":0.5113199719926342,
+ "endTime":0.5719003339763731,
+ "totalTime":0.0006783058634027839
+ },
+ "functionName":"removeData",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":501
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":1551406,
+ "callInfo":{
+ "callCount":36,
+ "startTime":0.511483859969303,
+ "endTime":0.5722305719973519,
+ "totalTime":0.0023077416699379683
+ },
+ "functionName":"removeData",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":501,
+ "children":[
+ {
+ "id":1551406,
+ "callInfo":{
+ "callCount":17,
+ "startTime":0.5115306000225246,
+ "endTime":0.5721727140480652,
+ "totalTime":0.0009444230236113071
+ },
+ "functionName":"removeData",
+ "url":"http://bogojoker.com/shell/js/jquery.js",
+ "lineNumber":19,
+ "columnNumber":501
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "children":[
+
+ ],
+ "endTime":0.5747030830243602,
+ "type":"FunctionCall"
+ }
+ ],
+ "endTime":0.5747211320558563,
+ "type":"EventDispatch"
+ }
+ ],
+ "endTime":0.5747311169980094,
+ "type":"EventDispatch"
+ },
+ {
+ "startTime":0.5919318459928036,
+ "frameId":"0.1",
+ "data":{
+
+ },
+ "children":[
+
+ ],
+ "endTime":0.5923666310263798,
+ "type":"RecalculateStyles"
+ },
+ {
+ "startTime":0.6193571890471503,
+ "frameId":"0.1",
+ "data":{
+
+ },
+ "children":[
+
+ ],
+ "endTime":0.6194131550146267,
+ "type":"RecalculateStyles"
+ },
+ {
+ "startTime":0.6195009789662436,
+ "data":{
+
+ },
+ "frameId":"0.1",
+ "type":"ScheduleStyleRecalculation"
+ }
+ ],
+ "endTime":0.6323551860405132,
+ "type":"RenderingFrame"
+ }
+ }
+})`, `new ReferenceError("Can't find variable: InspectorFrontendAPI")`);
+
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressrestelementsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tests/stress/rest-elements.js (192660 => 192661)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/rest-elements.js        2015-11-19 22:29:21 UTC (rev 192660)
+++ trunk/Source/JavaScriptCore/tests/stress/rest-elements.js        2015-11-19 22:54:46 UTC (rev 192661)
</span><span class="lines">@@ -109,22 +109,12 @@
</span><span class="cx"> testSyntaxError(String.raw`(function ([a, ...[b, c]]) { })`, String.raw`SyntaxError: Unexpected token ']'. Expected identifier for a rest element destructuring pattern.`);
</span><span class="cx"> testSyntaxError(String.raw`(function ([a, ...{ b, c }]) { })`, String.raw`SyntaxError: Unexpected token ']'. Expected identifier for a rest element destructuring pattern.`);
</span><span class="cx">
</span><del>-shouldThrow(function () {
- [a, ...b, c] = 20;
-}, "ReferenceError: Left side of assignment is not a reference.");
</del><span class="cx">
</span><del>-shouldThrow(function () {
- [a, ...b,] = 20
-}, "ReferenceError: Left side of assignment is not a reference.");
</del><ins>+testSyntaxError(String.raw`[a, ...b, c] = 20`, String.raw`SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern.`);
+testSyntaxError(String.raw`[a, ...b,] = 20`, String.raw`SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern.`);
+testSyntaxError(String.raw`[a, ...b,,] = 20`, String.raw`SyntaxError: Unexpected token ','. Expected a closing ']' following a rest element destructuring pattern.`);
+testSyntaxError(String.raw`[a, ...b = 20] = 20`, String.raw`SyntaxError: Unexpected token '='. Expected a closing ']' following a rest element destructuring pattern.`);
</ins><span class="cx">
</span><del>-shouldThrow(function () {
- [a, ...b,,] = 20
-}, "ReferenceError: Left side of assignment is not a reference.");
-
-shouldThrow(function () {
- [a, ...b = 20] = 20
-}, "ReferenceError: Left side of assignment is not a reference.");
-
</del><span class="cx"> (function () {
</span><span class="cx"> var a, b, c;
</span><span class="cx"> [a, b, ...[...c]] = "Cocoa";
</span></span></pre>
</div>
</div>
</body>
</html>