| Index: src/builtins.cc
|
| diff --git a/src/builtins.cc b/src/builtins.cc
|
| index 35671d2c4c813c5adccd36ca989e9f101e6cb092..45cd26a0ec533d5de82cde41f55853b75cb66dd1 100644
|
| --- a/src/builtins.cc
|
| +++ b/src/builtins.cc
|
| @@ -3498,28 +3498,70 @@ BUILTIN(HandleApiCallConstruct) {
|
| }
|
|
|
|
|
| -Handle<Code> Builtins::CallFunction(ConvertReceiverMode mode) {
|
| - switch (mode) {
|
| - case ConvertReceiverMode::kNullOrUndefined:
|
| - return CallFunction_ReceiverIsNullOrUndefined();
|
| - case ConvertReceiverMode::kNotNullOrUndefined:
|
| - return CallFunction_ReceiverIsNotNullOrUndefined();
|
| - case ConvertReceiverMode::kAny:
|
| - return CallFunction_ReceiverIsAny();
|
| +Handle<Code> Builtins::CallFunction(ConvertReceiverMode mode,
|
| + TailCallMode tail_call_mode) {
|
| + switch (tail_call_mode) {
|
| + case TailCallMode::kDisallow:
|
| + switch (mode) {
|
| + case ConvertReceiverMode::kNullOrUndefined:
|
| + return CallFunction_ReceiverIsNullOrUndefined();
|
| + case ConvertReceiverMode::kNotNullOrUndefined:
|
| + return CallFunction_ReceiverIsNotNullOrUndefined();
|
| + case ConvertReceiverMode::kAny:
|
| + return CallFunction_ReceiverIsAny();
|
| + }
|
| + break;
|
| + case TailCallMode::kAllow:
|
| + switch (mode) {
|
| + case ConvertReceiverMode::kNullOrUndefined:
|
| + return TailCallFunction_ReceiverIsNullOrUndefined();
|
| + case ConvertReceiverMode::kNotNullOrUndefined:
|
| + return TailCallFunction_ReceiverIsNotNullOrUndefined();
|
| + case ConvertReceiverMode::kAny:
|
| + return TailCallFunction_ReceiverIsAny();
|
| + }
|
| + break;
|
| }
|
| UNREACHABLE();
|
| return Handle<Code>::null();
|
| }
|
|
|
|
|
| -Handle<Code> Builtins::Call(ConvertReceiverMode mode) {
|
| - switch (mode) {
|
| - case ConvertReceiverMode::kNullOrUndefined:
|
| - return Call_ReceiverIsNullOrUndefined();
|
| - case ConvertReceiverMode::kNotNullOrUndefined:
|
| - return Call_ReceiverIsNotNullOrUndefined();
|
| - case ConvertReceiverMode::kAny:
|
| - return Call_ReceiverIsAny();
|
| +Handle<Code> Builtins::Call(ConvertReceiverMode mode,
|
| + TailCallMode tail_call_mode) {
|
| + switch (tail_call_mode) {
|
| + case TailCallMode::kDisallow:
|
| + switch (mode) {
|
| + case ConvertReceiverMode::kNullOrUndefined:
|
| + return Call_ReceiverIsNullOrUndefined();
|
| + case ConvertReceiverMode::kNotNullOrUndefined:
|
| + return Call_ReceiverIsNotNullOrUndefined();
|
| + case ConvertReceiverMode::kAny:
|
| + return Call_ReceiverIsAny();
|
| + }
|
| + break;
|
| + case TailCallMode::kAllow:
|
| + switch (mode) {
|
| + case ConvertReceiverMode::kNullOrUndefined:
|
| + return TailCall_ReceiverIsNullOrUndefined();
|
| + case ConvertReceiverMode::kNotNullOrUndefined:
|
| + return TailCall_ReceiverIsNotNullOrUndefined();
|
| + case ConvertReceiverMode::kAny:
|
| + return TailCall_ReceiverIsAny();
|
| + }
|
| + break;
|
| + }
|
| + UNREACHABLE();
|
| + return Handle<Code>::null();
|
| +}
|
| +
|
| +
|
| +Handle<Code> Builtins::CallBoundFunction(TailCallMode tail_call_mode) {
|
| + switch (tail_call_mode) {
|
| + case TailCallMode::kDisallow:
|
| + return CallBoundFunction();
|
| + case TailCallMode::kAllow:
|
| + return TailCallBoundFunction();
|
| }
|
| UNREACHABLE();
|
| return Handle<Code>::null();
|
|
|