1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "ecmascript/compiler/call_signature.h"
17 namespace panda::ecmascript::kungfu {
18 #ifndef NDEBUG
DEF_CALL_SIGNATURE(FooAOT)19 DEF_CALL_SIGNATURE(FooAOT)
20 {
21 // 7 : 7 input parameters
22 CallSignature fooAot("FooAOT", 0, 8,
23 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
24 *callSign = fooAot;
25 std::array<VariableType, 8> params = { // 8 : 8 input parameters
26 VariableType::NATIVE_POINTER(),
27 VariableType::JS_ANY(), // lexenv
28 VariableType::INT64(),
29 VariableType::JS_ANY(), // calltarget
30 VariableType::JS_ANY(), // newTarget
31 VariableType::JS_ANY(), // thisTarget
32 VariableType::JS_ANY(), // a
33 VariableType::JS_ANY(), // b
34 };
35 callSign->SetParameters(params.data());
36 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
37 }
38
DEF_CALL_SIGNATURE(Foo1AOT)39 DEF_CALL_SIGNATURE(Foo1AOT)
40 {
41 // 7 : 7 input parameters
42 CallSignature foo1Aot("Foo1AOT", 0, 8,
43 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
44 *callSign = foo1Aot;
45 std::array<VariableType, 8> params = { // 8 : 8 input parameters
46 VariableType::NATIVE_POINTER(),
47 VariableType::JS_ANY(), // lexenv
48 VariableType::INT64(),
49 VariableType::JS_ANY(), // calltarget
50 VariableType::JS_ANY(), // newTarget
51 VariableType::JS_ANY(), // thisTarget
52 VariableType::JS_ANY(), // a
53 VariableType::JS_ANY(), // b
54 };
55 callSign->SetParameters(params.data());
56 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
57 }
58
DEF_CALL_SIGNATURE(Foo2AOT)59 DEF_CALL_SIGNATURE(Foo2AOT)
60 {
61 // 7 : 7 input parameters
62 CallSignature foo2Aot("Foo2AOT", 0, 8,
63 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
64 *callSign = foo2Aot;
65 std::array<VariableType, 8> params = { // 8 : 8 input parameters
66 VariableType::NATIVE_POINTER(),
67 VariableType::JS_ANY(), // lexenv
68 VariableType::INT64(),
69 VariableType::JS_ANY(), // calltarget
70 VariableType::JS_ANY(), // newTarget
71 VariableType::JS_ANY(), // thisTarget
72 VariableType::JS_ANY(), // a
73 VariableType::JS_ANY(), // b
74 };
75 callSign->SetParameters(params.data());
76 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
77 }
78
DEF_CALL_SIGNATURE(FooNativeAOT)79 DEF_CALL_SIGNATURE(FooNativeAOT)
80 {
81 // 7 : 7 input parameters
82 CallSignature foo2Aot("FooNativeAOT", 0, 8,
83 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
84 *callSign = foo2Aot;
85 std::array<VariableType, 8> params = { // 8 : 8 input parameters
86 VariableType::NATIVE_POINTER(),
87 VariableType::JS_ANY(), // lexenv
88 VariableType::INT64(),
89 VariableType::JS_ANY(), // calltarget
90 VariableType::JS_ANY(), // newTarget
91 VariableType::JS_ANY(), // thisTarget
92 VariableType::JS_ANY(), // a
93 VariableType::JS_ANY(), // b
94 };
95 callSign->SetParameters(params.data());
96 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
97 }
98
DEF_CALL_SIGNATURE(FooBoundAOT)99 DEF_CALL_SIGNATURE(FooBoundAOT)
100 {
101 // 7 : 7 input parameters
102 CallSignature foo2Aot("FooBoundAOT", 0, 8,
103 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
104 *callSign = foo2Aot;
105 std::array<VariableType, 8> params = { // 8 : 8 input parameters
106 VariableType::NATIVE_POINTER(),
107 VariableType::JS_ANY(), // lexenv
108 VariableType::INT64(),
109 VariableType::JS_ANY(), // calltarget
110 VariableType::JS_ANY(), // newTarget
111 VariableType::JS_ANY(), // thisTarget
112 VariableType::JS_ANY(), // a
113 VariableType::JS_ANY(), // b
114 };
115 callSign->SetParameters(params.data());
116 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
117 }
118
DEF_CALL_SIGNATURE(Bar1AOT)119 DEF_CALL_SIGNATURE(Bar1AOT)
120 {
121 // 8 : 8 input parameters
122 CallSignature barAot("Bar1AOT", 0, 9,
123 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
124 *callSign = barAot;
125 std::array<VariableType, 9> params = { // 9 : 9 input parameters
126 VariableType::NATIVE_POINTER(),
127 VariableType::JS_ANY(), // lexenv
128 VariableType::INT64(),
129 VariableType::JS_ANY(), // calltarget
130 VariableType::JS_ANY(), // newTarget
131 VariableType::JS_ANY(), // thisTarget
132 VariableType::JS_ANY(), // a
133 VariableType::JS_ANY(), // b
134 VariableType::JS_ANY(), // c
135 };
136 callSign->SetParameters(params.data());
137 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
138 }
139
DEF_CALL_SIGNATURE(BarAOT)140 DEF_CALL_SIGNATURE(BarAOT)
141 {
142 // 7 : 7 input parameters
143 CallSignature barAot("BarAOT", 0, 8,
144 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
145 *callSign = barAot;
146 std::array<VariableType, 8> params = { // 8 : 8 input parameters
147 VariableType::NATIVE_POINTER(),
148 VariableType::JS_ANY(), // lexEnv
149 VariableType::INT64(),
150 VariableType::JS_ANY(), // calltarget
151 VariableType::JS_ANY(), // newTarget
152 VariableType::JS_ANY(), // thisTarget
153 VariableType::JS_ANY(), // a
154 VariableType::JS_ANY(), // b
155 };
156 callSign->SetParameters(params.data());
157 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
158 }
159
DEF_CALL_SIGNATURE(FooProxyAOT)160 DEF_CALL_SIGNATURE(FooProxyAOT)
161 {
162 // 8 : 8 input parameters
163 CallSignature fooProxyAot("FooProxyAOT", 0, 8,
164 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
165 *callSign = fooProxyAot;
166 std::array<VariableType, 8> params = { // 8 : 8 input parameters
167 VariableType::NATIVE_POINTER(),
168 VariableType::JS_ANY(), // lexEnv
169 VariableType::INT64(),
170 VariableType::JS_ANY(), // calltarget
171 VariableType::JS_ANY(), // newTarget
172 VariableType::JS_ANY(), // thisTarget
173 VariableType::JS_ANY(), // a
174 VariableType::JS_ANY(), // b
175 };
176 callSign->SetParameters(params.data());
177 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
178 }
179
DEF_CALL_SIGNATURE(FooProxy2AOT)180 DEF_CALL_SIGNATURE(FooProxy2AOT)
181 {
182 // 8 : 8 input parameters
183 CallSignature FooProxy2AOT("FooProxy2AOT", 0, 8,
184 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
185 *callSign = FooProxy2AOT;
186 std::array<VariableType, 8> params = { // 8 : 8 input parameters
187 VariableType::NATIVE_POINTER(),
188 VariableType::JS_ANY(), // lexEnv
189 VariableType::INT64(),
190 VariableType::JS_ANY(), // calltarget
191 VariableType::JS_ANY(), // newTarget
192 VariableType::JS_ANY(), // thisTarget
193 VariableType::JS_ANY(), // a
194 VariableType::JS_ANY(), // b
195 };
196 callSign->SetParameters(params.data());
197 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
198 }
199
DEF_CALL_SIGNATURE(Bar2AOT)200 DEF_CALL_SIGNATURE(Bar2AOT)
201 {
202 // 7 : 7 input parameters
203 CallSignature bar2Aot("Bar2AOT", 0, 6,
204 ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
205 *callSign = bar2Aot;
206 std::array<VariableType, 6> params = { // 6 : 6 input parameters
207 VariableType::NATIVE_POINTER(),
208 VariableType::JS_ANY(), // lexenv
209 VariableType::INT64(),
210 VariableType::JS_ANY(), // calltarget
211 VariableType::JS_ANY(), // newTarget
212 VariableType::JS_ANY(), // thisTarget
213 };
214 callSign->SetParameters(params.data());
215 callSign->SetVariadicArgs(true);
216 callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
217 }
218
DEF_CALL_SIGNATURE(TestAbsoluteAddressRelocation)219 DEF_CALL_SIGNATURE(TestAbsoluteAddressRelocation)
220 {
221 // 1 : 1 input parameters
222 CallSignature TestAbsoluteAddressRelocation("TestAbsoluteAddressRelocation", 0, 1,
223 ArgumentsOrder::DEFAULT_ORDER, VariableType::INT64()); // undefined or hole
224 *callSign = TestAbsoluteAddressRelocation;
225 // 1 : 1 input parameters
226 std::array<VariableType, 1> params = {
227 VariableType::INT64(),
228 };
229 callSign->SetParameters(params.data());
230 }
231
232 #endif
233 } // namespace panda::ecmascript::kungfu