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