mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Implement TCO for try-catch-finally block
Signed-off-by: HyukWoo Park <hyukwoo.park@samsung.com>
This commit is contained in:
parent
e706ea6e4a
commit
4581040747
9 changed files with 191 additions and 39 deletions
|
|
@ -52,6 +52,9 @@ ByteCodeGenerateContext::ByteCodeGenerateContext(InterpretedCodeBlock* codeBlock
|
|||
, m_isHeadOfMemberExpression(false)
|
||||
, m_forInOfVarBinding(false)
|
||||
, m_isLeftBindingAffectedByRightExpression(false)
|
||||
#if defined(ENABLE_TCO)
|
||||
, m_tcoDisabled(false)
|
||||
#endif
|
||||
, m_registerStack(new std::vector<ByteCodeRegisterIndex>())
|
||||
, m_lexicallyDeclaredNames(new std::vector<std::pair<size_t, AtomicString>>())
|
||||
, m_positionToContinue(0)
|
||||
|
|
@ -60,7 +63,9 @@ ByteCodeGenerateContext::ByteCodeGenerateContext(InterpretedCodeBlock* codeBlock
|
|||
, m_lexicalBlockIndex(0)
|
||||
, m_classInfo()
|
||||
, m_numeralLiteralData(numeralLiteralData) // should be NumeralLiteralVector
|
||||
#if defined(ENABLE_TCO)
|
||||
, m_returnRegister(SIZE_MAX)
|
||||
#endif
|
||||
#ifdef ESCARGOT_DEBUGGER
|
||||
, m_breakpointContext(nullptr)
|
||||
#endif /* ESCARGOT_DEBUGGER */
|
||||
|
|
@ -615,6 +620,13 @@ void ByteCodeGenerator::relocateByteCode(ByteCodeBlock* block)
|
|||
ASSIGN_STACKINDEX_IF_NEEDED(cd->m_argumentsStartIndex, stackBase, stackBaseWillBe, stackVariableSize);
|
||||
break;
|
||||
}
|
||||
case TailRecursionInTryOpcode: {
|
||||
TailRecursionInTry* cd = (TailRecursionInTry*)currentCode;
|
||||
ASSIGN_STACKINDEX_IF_NEEDED(cd->m_calleeIndex, stackBase, stackBaseWillBe, stackVariableSize);
|
||||
ASSIGN_STACKINDEX_IF_NEEDED(cd->m_argumentsStartIndex, stackBase, stackBaseWillBe, stackVariableSize);
|
||||
ASSIGN_STACKINDEX_IF_NEEDED(cd->m_resultIndex, stackBase, stackBaseWillBe, stackVariableSize);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case CallComplexCaseOpcode: {
|
||||
CallComplexCase* cd = (CallComplexCase*)currentCode;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue