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); |