Line data Source code
1 : // Copyright 2016 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #include "src/builtins/builtins-utils.h"
6 : #include "src/builtins/builtins.h"
7 : #include "src/handles-inl.h"
8 : #include "src/isolate.h"
9 : #include "src/objects-inl.h"
10 :
11 : namespace v8 {
12 : namespace internal {
13 :
14 48020 : Handle<Code> Builtins::CallFunction(ConvertReceiverMode mode,
15 : TailCallMode tail_call_mode) {
16 48020 : switch (tail_call_mode) {
17 : case TailCallMode::kDisallow:
18 47668 : switch (mode) {
19 : case ConvertReceiverMode::kNullOrUndefined:
20 16194 : return CallFunction_ReceiverIsNullOrUndefined();
21 : case ConvertReceiverMode::kNotNullOrUndefined:
22 31259 : return CallFunction_ReceiverIsNotNullOrUndefined();
23 : case ConvertReceiverMode::kAny:
24 215 : return CallFunction_ReceiverIsAny();
25 : }
26 : break;
27 : case TailCallMode::kAllow:
28 352 : switch (mode) {
29 : case ConvertReceiverMode::kNullOrUndefined:
30 65 : return TailCallFunction_ReceiverIsNullOrUndefined();
31 : case ConvertReceiverMode::kNotNullOrUndefined:
32 184 : return TailCallFunction_ReceiverIsNotNullOrUndefined();
33 : case ConvertReceiverMode::kAny:
34 103 : return TailCallFunction_ReceiverIsAny();
35 : }
36 : break;
37 : }
38 0 : UNREACHABLE();
39 : return Handle<Code>::null();
40 : }
41 :
42 226749 : Handle<Code> Builtins::Call(ConvertReceiverMode mode,
43 : TailCallMode tail_call_mode) {
44 226749 : switch (tail_call_mode) {
45 : case TailCallMode::kDisallow:
46 226622 : switch (mode) {
47 : case ConvertReceiverMode::kNullOrUndefined:
48 42817 : return Call_ReceiverIsNullOrUndefined();
49 : case ConvertReceiverMode::kNotNullOrUndefined:
50 130918 : return Call_ReceiverIsNotNullOrUndefined();
51 : case ConvertReceiverMode::kAny:
52 52887 : return Call_ReceiverIsAny();
53 : }
54 : break;
55 : case TailCallMode::kAllow:
56 127 : switch (mode) {
57 : case ConvertReceiverMode::kNullOrUndefined:
58 47 : return TailCall_ReceiverIsNullOrUndefined();
59 : case ConvertReceiverMode::kNotNullOrUndefined:
60 20 : return TailCall_ReceiverIsNotNullOrUndefined();
61 : case ConvertReceiverMode::kAny:
62 60 : return TailCall_ReceiverIsAny();
63 : }
64 : break;
65 : }
66 0 : UNREACHABLE();
67 : return Handle<Code>::null();
68 : }
69 :
70 258 : Handle<Code> Builtins::CallBoundFunction(TailCallMode tail_call_mode) {
71 258 : switch (tail_call_mode) {
72 : case TailCallMode::kDisallow:
73 129 : return CallBoundFunction();
74 : case TailCallMode::kAllow:
75 129 : return TailCallBoundFunction();
76 : }
77 0 : UNREACHABLE();
78 : return Handle<Code>::null();
79 : }
80 :
81 : } // namespace internal
82 : } // namespace v8
|