Changeset 189336 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Sep 3, 2015, 8:05:46 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r189279 r189336 714 714 } 715 715 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 716 RegisterID* ret = generator.emitCall (returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());716 RegisterID* ret = generator.emitCallInTailPosition(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 717 717 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 718 718 return ret; … … 734 734 // This passes NoExpectedFunction because we expect that if the function is in a 735 735 // local variable, then it's not one of our built-in constructors. 736 RegisterID* ret = generator.emitCall (returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());736 RegisterID* ret = generator.emitCallInTailPosition(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 737 737 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 738 738 return ret; … … 750 750 generator.emitGetFromScope(func.get(), callArguments.thisRegister(), var, ThrowIfNotFound); 751 751 generator.emitTDZCheckIfNecessary(var, func.get(), nullptr); 752 RegisterID* ret = generator.emitCall (returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd());752 RegisterID* ret = generator.emitCallInTailPosition(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd()); 753 753 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 754 754 return ret; … … 818 818 else 819 819 generator.emitMove(callArguments.thisRegister(), base.get()); 820 RegisterID* ret = generator.emitCall (returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());820 RegisterID* ret = generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 821 821 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 822 822 return ret; … … 837 837 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 838 838 generator.emitGetById(function.get(), baseIsSuper ? emitSuperBaseForCallee(generator) : callArguments.thisRegister(), m_ident); 839 RegisterID* ret = generator.emitCall (returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());839 RegisterID* ret = generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 840 840 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 841 841 return ret; … … 866 866 generator.emitExpressionInfo(spread->divot(), spread->divotStart(), spread->divotEnd()); 867 867 RefPtr<RegisterID> thisRegister = generator.emitGetByVal(generator.newTemporary(), argumentsRegister.get(), generator.emitLoad(0, jsNumber(0))); 868 generator.emitCallVarargs (returnValue.get(), base.get(), thisRegister.get(), argumentsRegister.get(), generator.newTemporary(), 1, profileHookRegister.get(), divot(), divotStart(), divotEnd());868 generator.emitCallVarargsInTailPosition(returnValue.get(), base.get(), thisRegister.get(), argumentsRegister.get(), generator.newTemporary(), 1, profileHookRegister.get(), divot(), divotStart(), divotEnd()); 869 869 } else if (m_args->m_listNode && m_args->m_listNode->m_expr) { 870 870 ArgumentListNode* oldList = m_args->m_listNode; … … 874 874 CallArguments callArguments(generator, m_args); 875 875 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 876 generator.emitCall (returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());876 generator.emitCallInTailPosition(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 877 877 m_args->m_listNode = oldList; 878 878 } else { … … 880 880 CallArguments callArguments(generator, m_args); 881 881 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 882 generator.emitCall (returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());882 generator.emitCallInTailPosition(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 883 883 } 884 884 } … … 889 889 CallArguments callArguments(generator, m_args); 890 890 generator.emitMove(callArguments.thisRegister(), base.get()); 891 generator.emitCall (returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());891 generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 892 892 } 893 893 generator.emitLabel(end.get()); … … 952 952 }; 953 953 generator.emitEnumeration(this, spread->expression(), extractor); 954 generator.emitCallVarargs (returnValue.get(), realFunction.get(), thisRegister.get(), argumentsRegister.get(), generator.newTemporary(), 0, profileHookRegister.get(), divot(), divotStart(), divotEnd());954 generator.emitCallVarargsInTailPosition(returnValue.get(), realFunction.get(), thisRegister.get(), argumentsRegister.get(), generator.newTemporary(), 0, profileHookRegister.get(), divot(), divotStart(), divotEnd()); 955 955 } else if (m_args->m_listNode->m_next) { 956 956 ASSERT(m_args->m_listNode->m_next->m_expr->isSimpleArray()); … … 960 960 CallArguments callArguments(generator, m_args); 961 961 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 962 generator.emitCall (returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());962 generator.emitCallInTailPosition(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 963 963 } else { 964 964 m_args->m_listNode = m_args->m_listNode->m_next; … … 966 966 CallArguments callArguments(generator, m_args); 967 967 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 968 generator.emitCall (returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());968 generator.emitCallInTailPosition(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 969 969 } 970 970 m_args->m_listNode = oldList; … … 973 973 CallArguments callArguments(generator, m_args); 974 974 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 975 generator.emitCall (returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());975 generator.emitCallInTailPosition(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 976 976 } 977 977 } else { … … 991 991 generator.emitNode(args->m_expr); 992 992 993 generator.emitCallVarargs (returnValue.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), 0, profileHookRegister.get(), divot(), divotStart(), divotEnd());993 generator.emitCallVarargsInTailPosition(returnValue.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), 0, profileHookRegister.get(), divot(), divotStart(), divotEnd()); 994 994 } 995 995 if (emitCallCheck) { … … 998 998 CallArguments callArguments(generator, m_args); 999 999 generator.emitMove(callArguments.thisRegister(), base.get()); 1000 generator.emitCall (returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd());1000 generator.emitCallInTailPosition(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 1001 1001 generator.emitLabel(end.get()); 1002 1002 } … … 1633 1633 else 1634 1634 generator.emitJumpIfTrue(temp.get(), target.get()); 1635 generator.emitNode (temp.get(), m_expr2);1635 generator.emitNodeInTailPosition(temp.get(), m_expr2); 1636 1636 generator.emitLabel(target.get()); 1637 1637 … … 1664 1664 1665 1665 generator.emitProfileControlFlow(m_expr1->startOffset()); 1666 generator.emitNode (newDst.get(), m_expr1);1666 generator.emitNodeInTailPosition(newDst.get(), m_expr1); 1667 1667 generator.emitJump(afterElse.get()); 1668 1668 1669 1669 generator.emitLabel(beforeElse.get()); 1670 1670 generator.emitProfileControlFlow(m_expr1->endOffset() + 1); 1671 generator.emitNode (newDst.get(), m_expr2);1671 generator.emitNodeInTailPosition(newDst.get(), m_expr2); 1672 1672 1673 1673 generator.emitLabel(afterElse.get()); … … 1928 1928 for (; node && node->next(); node = node->next()) 1929 1929 generator.emitNode(generator.ignoredResult(), node->m_expr); 1930 return generator.emitNode (dst, node->m_expr);1930 return generator.emitNodeInTailPosition(dst, node->m_expr); 1931 1931 } 1932 1932 … … 1942 1942 { 1943 1943 for (StatementNode* statement = m_head; statement; statement = statement->next()) 1944 generator.emitNode (dst, statement);1944 generator.emitNodeInTailPosition(dst, statement); 1945 1945 } 1946 1946 … … 2096 2096 2097 2097 if (!didFoldIfBlock) { 2098 generator.emitNode (dst, m_ifBlock);2098 generator.emitNodeInTailPosition(dst, m_ifBlock); 2099 2099 if (m_elseBlock) 2100 2100 generator.emitJump(afterElse.get()); … … 2105 2105 if (m_elseBlock) { 2106 2106 generator.emitProfileControlFlow(m_ifBlock->endOffset() + (m_ifBlock->isBlock() ? 1 : 0)); 2107 generator.emitNode (dst, m_elseBlock);2107 generator.emitNodeInTailPosition(dst, m_elseBlock); 2108 2108 } 2109 2109 … … 2124 2124 generator.emitDebugHook(WillExecuteStatement, lastLine(), startOffset(), lineStartOffset()); 2125 2125 2126 generator.emitNode (dst, m_statement);2126 generator.emitNodeInTailPosition(dst, m_statement); 2127 2127 2128 2128 generator.emitLabel(scope->continueTarget()); … … 2147 2147 2148 2148 generator.emitProfileControlFlow(m_statement->startOffset()); 2149 generator.emitNode (dst, m_statement);2149 generator.emitNodeInTailPosition(dst, m_statement); 2150 2150 2151 2151 generator.emitLabel(scope->continueTarget()); … … 2181 2181 generator.emitProfileControlFlow(m_statement->startOffset()); 2182 2182 2183 generator.emitNode (dst, m_statement);2183 generator.emitNodeInTailPosition(dst, m_statement); 2184 2184 2185 2185 generator.emitLabel(scope->continueTarget()); … … 2558 2558 dst = 0; 2559 2559 2560 RefPtr<RegisterID> returnRegister = m_value ? generator.emitNode (dst, m_value) : generator.emitLoad(dst, jsUndefined());2560 RefPtr<RegisterID> returnRegister = m_value ? generator.emitNodeInTailPosition(dst, m_value) : generator.emitLoad(dst, jsUndefined()); 2561 2561 generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, divotStart(), divotEnd()); 2562 2562 if (generator.isInFinallyBlock()) { … … 2583 2583 generator.emitExpressionInfo(m_divot, m_divot - m_expressionLength, m_divot); 2584 2584 generator.emitPushWithScope(scope.get()); 2585 generator.emitNode (dst, m_statement);2585 generator.emitNodeInTailPosition(dst, m_statement); 2586 2586 generator.emitPopWithScope(); 2587 2587 } … … 2836 2836 generator.emitPushCatchScope(m_thrownValueIdent, thrownValueRegister.get(), m_catchEnvironment); 2837 2837 generator.emitProfileControlFlow(m_tryBlock->endOffset() + 1); 2838 generator.emitNode(dst, m_catchBlock); 2838 if (m_finallyBlock) 2839 generator.emitNode(dst, m_catchBlock); 2840 else 2841 generator.emitNodeInTailPosition(dst, m_catchBlock); 2839 2842 generator.emitPopCatchScope(m_catchEnvironment); 2840 2843 generator.emitLabel(catchEndLabel.get()); … … 2852 2855 // Normal path: run the finally code, and jump to the end. 2853 2856 generator.emitProfileControlFlow(finallyStartOffset); 2854 generator.emitNode (dst, m_finallyBlock);2857 generator.emitNodeInTailPosition(dst, m_finallyBlock); 2855 2858 generator.emitProfileControlFlow(m_finallyBlock->endOffset() + 1); 2856 2859 generator.emitJump(finallyEndLabel.get()); … … 2861 2864 generator.popTryAndEmitCatch(tryData, exceptionRegister.get(), thrownValueRegister.get(), preFinallyLabel.get(), HandlerType::Finally); 2862 2865 generator.emitProfileControlFlow(finallyStartOffset); 2863 generator.emitNode (dst, m_finallyBlock);2866 generator.emitNodeInTailPosition(dst, m_finallyBlock); 2864 2867 generator.emitThrow(exceptionRegister.get()); 2865 2868
Note:
See TracChangeset
for help on using the changeset viewer.