Changeset 249337 in webkit
- Timestamp:
- Aug 30, 2019 11:53:26 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r249319 r249337 1 2019-08-30 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Generate new.target register only when it is used 4 https://bugs.webkit.org/show_bug.cgi?id=201335 5 6 Reviewed by Mark Lam. 7 8 * stress/ensure-new-register-allocated.js: Added. 9 (shouldBe): 10 (basic): 11 (arrow): 12 (Base): 13 (Derived): 14 (evaluate): 15 1 16 2019-08-30 Yusuke Suzuki <ysuzuki@apple.com> 2 17 -
trunk/Source/JavaScriptCore/ChangeLog
r249319 r249337 1 2019-08-30 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Generate new.target register only when it is used 4 https://bugs.webkit.org/show_bug.cgi?id=201335 5 6 Reviewed by Mark Lam. 7 8 Since bytecode generator knows whether new.target register can be used, we should emit and use new.target register 9 only when it is actually required. 10 11 * bytecompiler/BytecodeGenerator.cpp: 12 (JSC::BytecodeGenerator::BytecodeGenerator): 13 * bytecompiler/BytecodeGenerator.h: 14 (JSC::BytecodeGenerator::newTarget): 15 * parser/Nodes.h: 16 (JSC::ScopeNode::needsNewTargetRegisterForThisScope const): 17 1 18 2019-08-30 Yusuke Suzuki <ysuzuki@apple.com> 2 19 -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r249175 r249337 668 668 669 669 670 m_newTargetRegister = addVar(); 670 if (functionNode->needsNewTargetRegisterForThisScope() || isNewTargetUsedInInnerArrowFunction() || codeBlock->usesEval()) 671 m_newTargetRegister = addVar(); 672 671 673 switch (parseMode) { 672 674 case SourceParseMode::GeneratorWrapperFunctionMode: … … 726 728 case SourceParseMode::GeneratorBodyMode: { 727 729 // |this| is already filled correctly before here. 728 emitLoad(m_newTargetRegister, jsUndefined()); 730 if (m_newTargetRegister) 731 emitLoad(m_newTargetRegister, jsUndefined()); 729 732 break; 730 733 } … … 733 736 if (SourceParseMode::ArrowFunctionMode != parseMode) { 734 737 if (isConstructor()) { 735 move(m_newTargetRegister, &m_thisRegister); 738 if (m_newTargetRegister) 739 move(m_newTargetRegister, &m_thisRegister); 736 740 if (constructorKind() == ConstructorKind::Extends) { 737 741 moveEmptyValue(&m_thisRegister); … … 773 777 emitLoadThisFromArrowFunctionLexicalEnvironment(); 774 778 775 if (m_scopeNode-> usesNewTarget() || m_scopeNode->usesSuperCall())779 if (m_scopeNode->needsNewTargetRegisterForThisScope()) 776 780 emitLoadNewTargetFromArrowFunctionLexicalEnvironment(); 777 781 } … … 830 834 emitLoadThisFromArrowFunctionLexicalEnvironment(); 831 835 832 if (m_scopeNode-> usesNewTarget() || m_scopeNode->usesSuperCall())836 if (m_scopeNode->needsNewTargetRegisterForThisScope()) 833 837 emitLoadNewTargetFromArrowFunctionLexicalEnvironment(); 834 838 } … … 900 904 codeBlock->adoptFunctionHoistingCandidates(WTFMove(hoistedFunctions)); 901 905 902 if (evalNode-> usesSuperCall() || evalNode->usesNewTarget())906 if (evalNode->needsNewTargetRegisterForThisScope()) 903 907 m_newTargetRegister = addVar(); 904 908 … … 906 910 emitLoadThisFromArrowFunctionLexicalEnvironment(); 907 911 908 if (evalNode-> usesSuperCall() || evalNode->usesNewTarget())912 if (evalNode->needsNewTargetRegisterForThisScope()) 909 913 emitLoadNewTargetFromArrowFunctionLexicalEnvironment(); 910 914 -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r249175 r249337 424 424 RegisterID* newTarget() 425 425 { 426 ASSERT(m_newTargetRegister); 426 427 return m_newTargetRegister; 427 428 } -
trunk/Source/JavaScriptCore/parser/Nodes.h
r249117 r249337 1800 1800 bool hasSloppyModeHoistedFunction(UniquedStringImpl* uid) const { return m_sloppyModeHoistedFunctions.contains(uid); } 1801 1801 1802 bool needsNewTargetRegisterForThisScope() const 1803 { 1804 return usesSuperCall() || usesNewTarget(); 1805 } 1806 1802 1807 VariableEnvironment& varDeclarations() { return m_varDeclarations; } 1803 1808
Note: See TracChangeset
for help on using the changeset viewer.