Changeset 196323 in webkit
- Timestamp:
- Feb 9, 2016, 12:18:31 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 added
- 2 edited
-
ChangeLog (modified) (2 diffs)
-
bytecompiler/NodesCodegen.cpp (modified) (1 diff)
-
tests/stress/spread-in-tail.js (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r196308 r196323 1 2016-02-09 Filip Pizlo <fpizlo@apple.com> 2 3 Spread expressions are not fair game for direct binding 4 https://bugs.webkit.org/show_bug.cgi?id=154042 5 rdar://problem/24291413 6 7 Reviewed by Saam Barati. 8 9 Prior to this change we crashed on this: 10 11 var [x] = [...y]; 12 13 Because NodesCodegen thinks that this is a direct binding. It's not, because we cannot 14 directly generate bytecode for "...y". This is a unique property of spread expressions, so 15 its sufficient to just bail out of direct binding if we see a spread expression. That's what 16 this patch does. 17 18 * bytecompiler/NodesCodegen.cpp: 19 (JSC::ArrayPatternNode::emitDirectBinding): 20 * tests/stress/spread-in-tail.js: Added. 21 (foo): 22 (catch): 23 1 24 2016-02-09 Commit Queue <commit-queue@webkit.org> 2 25 … … 39 62 runtimeTypeForValue should protect against seeing TDZ value 40 63 https://bugs.webkit.org/show_bug.cgi?id=154023 64 rdar://problem/24291413 41 65 42 66 Reviewed by Michael Saboff. -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r196276 r196323 3432 3432 { 3433 3433 if (!rhs->isSimpleArray()) 3434 return 0; 3434 return nullptr; 3435 3436 ElementNode* elementNodes = static_cast<ArrayNode*>(rhs)->elements(); 3437 Vector<ExpressionNode*> elements; 3438 for (; elementNodes; elementNodes = elementNodes->next()) { 3439 ExpressionNode* value = elementNodes->value(); 3440 if (value->isSpreadExpression()) 3441 return nullptr; 3442 elements.append(value); 3443 } 3435 3444 3436 3445 RefPtr<RegisterID> resultRegister; 3437 3446 if (dst && dst != generator.ignoredResult()) 3438 3447 resultRegister = generator.emitNewArray(generator.newTemporary(), 0, 0); 3439 ElementNode* elementNodes = static_cast<ArrayNode*>(rhs)->elements();3440 Vector<ExpressionNode*> elements;3441 for (; elementNodes; elementNodes = elementNodes->next())3442 elements.append(elementNodes->value());3443 3448 if (m_targetPatterns.size() != elements.size()) 3444 return 0;3449 return nullptr; 3445 3450 Vector<RefPtr<RegisterID>> registers; 3446 3451 registers.reserveCapacity(m_targetPatterns.size());
Note:
See TracChangeset
for help on using the changeset viewer.