• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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