| Index: src/builtins.h
|
| diff --git a/src/builtins.h b/src/builtins.h
|
| index b9629d28d16713d099713b6a3cc8b192c57b2e9c..8ddadd6e75983ccbe2c599d2243d3655795cdfe3 100644
|
| --- a/src/builtins.h
|
| +++ b/src/builtins.h
|
| @@ -157,6 +157,11 @@ inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) {
|
| V(CallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \
|
| kNoExtraICState) \
|
| V(CallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \
|
| + V(TailCallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, \
|
| + kNoExtraICState) \
|
| + V(TailCallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \
|
| + kNoExtraICState) \
|
| + V(TailCallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \
|
| V(CallBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \
|
| V(Call_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, kNoExtraICState) \
|
| V(Call_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \
|
| @@ -339,6 +344,9 @@ class Builtins {
|
| // Convenience wrappers.
|
| Handle<Code> CallFunction(ConvertReceiverMode = ConvertReceiverMode::kAny);
|
| Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny);
|
| + Handle<Code> TailCallFunction(
|
| + ConvertReceiverMode = ConvertReceiverMode::kAny);
|
| + Handle<Code> TailCall(ConvertReceiverMode = ConvertReceiverMode::kAny);
|
|
|
| Code* builtin(Name name) {
|
| // Code::cast cannot be used here since we access builtins
|
| @@ -403,17 +411,35 @@ class Builtins {
|
|
|
| // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList)
|
| static void Generate_CallFunction(MacroAssembler* masm,
|
| - ConvertReceiverMode mode);
|
| + ConvertReceiverMode mode,
|
| + TailCallMode tail_call_mode);
|
| static void Generate_CallFunction_ReceiverIsNullOrUndefined(
|
| MacroAssembler* masm) {
|
| - Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined);
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined,
|
| + TailCallMode::kDisallow);
|
| }
|
| static void Generate_CallFunction_ReceiverIsNotNullOrUndefined(
|
| MacroAssembler* masm) {
|
| - Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined);
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined,
|
| + TailCallMode::kDisallow);
|
| }
|
| static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) {
|
| - Generate_CallFunction(masm, ConvertReceiverMode::kAny);
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kAny,
|
| + TailCallMode::kDisallow);
|
| + }
|
| + static void Generate_TailCallFunction_ReceiverIsNullOrUndefined(
|
| + MacroAssembler* masm) {
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined,
|
| + TailCallMode::kAllow);
|
| + }
|
| + static void Generate_TailCallFunction_ReceiverIsNotNullOrUndefined(
|
| + MacroAssembler* masm) {
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined,
|
| + TailCallMode::kAllow);
|
| + }
|
| + static void Generate_TailCallFunction_ReceiverIsAny(MacroAssembler* masm) {
|
| + Generate_CallFunction(masm, ConvertReceiverMode::kAny,
|
| + TailCallMode::kAllow);
|
| }
|
| // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList)
|
| static void Generate_CallBoundFunction(MacroAssembler* masm);
|
|
|