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/interpreter/slow_runtime_stub.h"
17 
18 #include "ecmascript/interpreter/interpreter-inl.h"
19 #include "ecmascript/stubs/runtime_stubs-inl.h"
20 
21 namespace panda::ecmascript {
CallSpread(JSThread *thread, JSTaggedValue func, JSTaggedValue obj, JSTaggedValue array)22 JSTaggedValue SlowRuntimeStub::CallSpread(JSThread *thread, JSTaggedValue func, JSTaggedValue obj,
23                                           JSTaggedValue array)
24 {
25     INTERPRETER_TRACE(thread, CallSpread);
26     [[maybe_unused]] EcmaHandleScope handleScope(thread);
27 
28     JSHandle<JSTaggedValue> jsFunc(thread, func);
29     JSHandle<JSTaggedValue> jsArray(thread, array);
30     JSHandle<JSTaggedValue> taggedObj(thread, obj);
31     return RuntimeStubs::RuntimeCallSpread(thread, jsFunc, taggedObj, jsArray);
32 }
33 
Neg(JSThread *thread, JSTaggedValue value)34 JSTaggedValue SlowRuntimeStub::Neg(JSThread *thread, JSTaggedValue value)
35 {
36     INTERPRETER_TRACE(thread, Neg);
37     [[maybe_unused]] EcmaHandleScope handleScope(thread);
38 
39     JSHandle<JSTaggedValue> inputTag(thread, value);
40     return RuntimeStubs::RuntimeNeg(thread, inputTag);
41 }
42 
AsyncFunctionEnter(JSThread *thread)43 JSTaggedValue SlowRuntimeStub::AsyncFunctionEnter(JSThread *thread)
44 {
45     INTERPRETER_TRACE(thread, AsyncFunctionEnter);
46     [[maybe_unused]] EcmaHandleScope handleScope(thread);
47 
48     return RuntimeStubs::RuntimeAsyncFunctionEnter(thread);
49 }
50 
ToNumber(JSThread *thread, JSTaggedValue value)51 JSTaggedValue SlowRuntimeStub::ToNumber(JSThread *thread, JSTaggedValue value)
52 {
53     INTERPRETER_TRACE(thread, Tonumber);
54     [[maybe_unused]] EcmaHandleScope handleScope(thread);
55 
56     JSHandle<JSTaggedValue> number(thread, value);
57     // may return exception
58     return RuntimeStubs::RuntimeToNumber(thread, number);
59 }
60 
ToNumeric(JSThread *thread, JSTaggedValue value)61 JSTaggedValue SlowRuntimeStub::ToNumeric(JSThread *thread, JSTaggedValue value)
62 {
63     INTERPRETER_TRACE(thread, Tonumeric);
64     [[maybe_unused]] EcmaHandleScope handleScope(thread);
65 
66     JSHandle<JSTaggedValue> numeric(thread, value);
67     // may return exception
68     return RuntimeStubs::RuntimeToNumeric(thread, numeric);
69 }
70 
Not(JSThread *thread, JSTaggedValue value)71 JSTaggedValue SlowRuntimeStub::Not(JSThread *thread, JSTaggedValue value)
72 {
73     INTERPRETER_TRACE(thread, Not);
74     [[maybe_unused]] EcmaHandleScope handleScope(thread);
75 
76     JSHandle<JSTaggedValue> inputTag(thread, value);
77     return RuntimeStubs::RuntimeNot(thread, inputTag);
78 }
79 
Inc(JSThread *thread, JSTaggedValue value)80 JSTaggedValue SlowRuntimeStub::Inc(JSThread *thread, JSTaggedValue value)
81 {
82     INTERPRETER_TRACE(thread, Inc);
83     [[maybe_unused]] EcmaHandleScope handleScope(thread);
84 
85     JSHandle<JSTaggedValue> inputTag(thread, value);
86     return RuntimeStubs::RuntimeInc(thread, inputTag);
87 }
88 
Dec(JSThread *thread, JSTaggedValue value)89 JSTaggedValue SlowRuntimeStub::Dec(JSThread *thread, JSTaggedValue value)
90 {
91     INTERPRETER_TRACE(thread, Dec);
92     [[maybe_unused]] EcmaHandleScope handleScope(thread);
93 
94     JSHandle<JSTaggedValue> inputTag(thread, value);
95     return RuntimeStubs::RuntimeDec(thread, inputTag);
96 }
97 
Throw(JSThread *thread, JSTaggedValue value)98 void SlowRuntimeStub::Throw(JSThread *thread, JSTaggedValue value)
99 {
100     INTERPRETER_TRACE(thread, Throw);
101     RuntimeStubs::RuntimeThrow(thread, value);
102 }
103 
GetPropIterator(JSThread *thread, JSTaggedValue value)104 JSTaggedValue SlowRuntimeStub::GetPropIterator(JSThread *thread, JSTaggedValue value)
105 {
106     INTERPRETER_TRACE(thread, GetPropIterator);
107     [[maybe_unused]] EcmaHandleScope handleScope(thread);
108 
109     JSHandle<JSTaggedValue> objHandle(thread, value);
110     return RuntimeStubs::RuntimeGetPropIterator(thread, objHandle);
111 }
112 
ThrowConstAssignment(JSThread *thread, JSTaggedValue value)113 void SlowRuntimeStub::ThrowConstAssignment(JSThread *thread, JSTaggedValue value)
114 {
115     INTERPRETER_TRACE(thread, ThrowConstAssignment);
116     [[maybe_unused]] EcmaHandleScope handleScope(thread);
117 
118     JSHandle<EcmaString> name(thread, value.GetTaggedObject());
119     return RuntimeStubs::RuntimeThrowConstAssignment(thread, name);
120 }
121 
Add2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)122 JSTaggedValue SlowRuntimeStub::Add2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
123 {
124     INTERPRETER_TRACE(thread, Add2);
125     [[maybe_unused]] EcmaHandleScope handleScope(thread);
126 
127     JSHandle<JSTaggedValue> leftValue(thread, left);
128     JSHandle<JSTaggedValue> rightValue(thread, right);
129     return RuntimeStubs::RuntimeAdd2(thread, leftValue, rightValue);
130 }
131 
Sub2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)132 JSTaggedValue SlowRuntimeStub::Sub2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
133 {
134     INTERPRETER_TRACE(thread, Sub2);
135     [[maybe_unused]] EcmaHandleScope handleScope(thread);
136 
137     JSHandle<JSTaggedValue> leftTag(thread, left);
138     JSHandle<JSTaggedValue> rightTag(thread, right);
139     return RuntimeStubs::RuntimeSub2(thread, leftTag, rightTag);
140 }
141 
Mul2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)142 JSTaggedValue SlowRuntimeStub::Mul2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
143 {
144     INTERPRETER_TRACE(thread, Mul2);
145     [[maybe_unused]] EcmaHandleScope handleScope(thread);
146 
147     JSHandle<JSTaggedValue> leftTag(thread, left);
148     JSHandle<JSTaggedValue> rightTag(thread, right);
149     return RuntimeStubs::RuntimeMul2(thread, leftTag, rightTag);
150 }
151 
Div2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)152 JSTaggedValue SlowRuntimeStub::Div2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
153 {
154     INTERPRETER_TRACE(thread, Div2);
155     [[maybe_unused]] EcmaHandleScope handleScope(thread);
156 
157     JSHandle<JSTaggedValue> leftTag(thread, left);
158     JSHandle<JSTaggedValue> rightTag(thread, right);
159     return RuntimeStubs::RuntimeDiv2(thread, leftTag, rightTag);
160 }
161 
Mod2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)162 JSTaggedValue SlowRuntimeStub::Mod2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
163 {
164     INTERPRETER_TRACE(thread, Mod2);
165     [[maybe_unused]] EcmaHandleScope handleScope(thread);
166 
167     JSHandle<JSTaggedValue> leftTag(thread, left);
168     JSHandle<JSTaggedValue> rightTag(thread, right);
169     return RuntimeStubs::RuntimeMod2(thread, leftTag, rightTag);
170 }
171 
Eq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)172 JSTaggedValue SlowRuntimeStub::Eq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
173 {
174     INTERPRETER_TRACE(thread, Eq);
175     [[maybe_unused]] EcmaHandleScope handleScope(thread);
176 
177     JSHandle<JSTaggedValue> leftValue(thread, left);
178     JSHandle<JSTaggedValue> rightValue(thread, right);
179     return RuntimeStubs::RuntimeEq(thread, leftValue, rightValue);
180 }
181 
NotEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)182 JSTaggedValue SlowRuntimeStub::NotEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
183 {
184     INTERPRETER_TRACE(thread, NotEq);
185     [[maybe_unused]] EcmaHandleScope handleScope(thread);
186 
187     JSHandle<JSTaggedValue> leftValue(thread, left);
188     JSHandle<JSTaggedValue> rightValue(thread, right);
189     return RuntimeStubs::RuntimeNotEq(thread, leftValue, rightValue);
190 }
191 
Less(JSThread *thread, JSTaggedValue left, JSTaggedValue right)192 JSTaggedValue SlowRuntimeStub::Less(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
193 {
194     INTERPRETER_TRACE(thread, Less);
195     [[maybe_unused]] EcmaHandleScope handleScope(thread);
196 
197     JSHandle<JSTaggedValue> leftValue(thread, left);
198     JSHandle<JSTaggedValue> rightValue(thread, right);
199     return RuntimeStubs::RuntimeLess(thread, leftValue, rightValue);
200 }
201 
LessEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)202 JSTaggedValue SlowRuntimeStub::LessEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
203 {
204     INTERPRETER_TRACE(thread, LessEq);
205     [[maybe_unused]] EcmaHandleScope handleScope(thread);
206 
207     JSHandle<JSTaggedValue> leftValue(thread, left);
208     JSHandle<JSTaggedValue> rightValue(thread, right);
209     return RuntimeStubs::RuntimeLessEq(thread, leftValue, rightValue);
210 }
211 
Greater(JSThread *thread, JSTaggedValue left, JSTaggedValue right)212 JSTaggedValue SlowRuntimeStub::Greater(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
213 {
214     INTERPRETER_TRACE(thread, Greater);
215     [[maybe_unused]] EcmaHandleScope handleScope(thread);
216 
217     JSHandle<JSTaggedValue> leftValue(thread, left);
218     JSHandle<JSTaggedValue> rightValue(thread, right);
219     return RuntimeStubs::RuntimeGreater(thread, leftValue, rightValue);
220 }
221 
GreaterEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)222 JSTaggedValue SlowRuntimeStub::GreaterEq(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
223 {
224     INTERPRETER_TRACE(thread, GreaterEq);
225     [[maybe_unused]] EcmaHandleScope handleScope(thread);
226 
227     JSHandle<JSTaggedValue> leftValue(thread, left);
228     JSHandle<JSTaggedValue> rightValue(thread, right);
229     return RuntimeStubs::RuntimeGreaterEq(thread, leftValue, rightValue);
230 }
231 
Shl2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)232 JSTaggedValue SlowRuntimeStub::Shl2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
233 {
234     INTERPRETER_TRACE(thread, Shl2);
235     [[maybe_unused]] EcmaHandleScope handleScope(thread);
236 
237     JSHandle<JSTaggedValue> leftTag(thread, left);
238     JSHandle<JSTaggedValue> rightTag(thread, right);
239     return RuntimeStubs::RuntimeShl2(thread, leftTag, rightTag);
240 }
241 
Shr2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)242 JSTaggedValue SlowRuntimeStub::Shr2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
243 {
244     INTERPRETER_TRACE(thread, Shr2);
245     [[maybe_unused]] EcmaHandleScope handleScope(thread);
246 
247     JSHandle<JSTaggedValue> leftTag(thread, left);
248     JSHandle<JSTaggedValue> rightTag(thread, right);
249     return RuntimeStubs::RuntimeShr2(thread, leftTag, rightTag);
250 }
251 
Ashr2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)252 JSTaggedValue SlowRuntimeStub::Ashr2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
253 {
254     INTERPRETER_TRACE(thread, Ashr2);
255     [[maybe_unused]] EcmaHandleScope handleScope(thread);
256 
257     JSHandle<JSTaggedValue> leftTag(thread, left);
258     JSHandle<JSTaggedValue> rightTag(thread, right);
259     return RuntimeStubs::RuntimeAshr2(thread, leftTag, rightTag);
260 }
261 
And2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)262 JSTaggedValue SlowRuntimeStub::And2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
263 {
264     INTERPRETER_TRACE(thread, And2);
265     [[maybe_unused]] EcmaHandleScope handleScope(thread);
266     JSHandle<JSTaggedValue> leftTag(thread, left);
267     JSHandle<JSTaggedValue> rightTag(thread, right);
268     return RuntimeStubs::RuntimeAnd2(thread, leftTag, rightTag);
269 }
270 
Or2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)271 JSTaggedValue SlowRuntimeStub::Or2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
272 {
273     INTERPRETER_TRACE(thread, Or2);
274     [[maybe_unused]] EcmaHandleScope handleScope(thread);
275 
276     JSHandle<JSTaggedValue> leftTag(thread, left);
277     JSHandle<JSTaggedValue> rightTag(thread, right);
278     return RuntimeStubs::RuntimeOr2(thread, leftTag, rightTag);
279 }
280 
Xor2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)281 JSTaggedValue SlowRuntimeStub::Xor2(JSThread *thread, JSTaggedValue left, JSTaggedValue right)
282 {
283     INTERPRETER_TRACE(thread, Xor2);
284     [[maybe_unused]] EcmaHandleScope handleScope(thread);
285 
286     JSHandle<JSTaggedValue> leftTag(thread, left);
287     JSHandle<JSTaggedValue> rightTag(thread, right);
288     return RuntimeStubs::RuntimeXor2(thread, leftTag, rightTag);
289 }
290 
ToJSTaggedValueWithInt32(JSThread *thread, JSTaggedValue value)291 JSTaggedValue SlowRuntimeStub::ToJSTaggedValueWithInt32(JSThread *thread, JSTaggedValue value)
292 {
293     INTERPRETER_TRACE(thread, ToJSTaggedValueWithInt32);
294     [[maybe_unused]] EcmaHandleScope handleScope(thread);
295     JSHandle<JSTaggedValue> valueHandle(thread, value);
296     return RuntimeStubs::RuntimeToJSTaggedValueWithInt32(thread, valueHandle);
297 }
298 
ToJSTaggedValueWithUint32(JSThread *thread, JSTaggedValue value)299 JSTaggedValue SlowRuntimeStub::ToJSTaggedValueWithUint32(JSThread *thread, JSTaggedValue value)
300 {
301     INTERPRETER_TRACE(thread, ToJSTaggedValueWithUint32);
302     [[maybe_unused]] EcmaHandleScope handleScope(thread);
303     JSHandle<JSTaggedValue> valueHandle(thread, value);
304     return RuntimeStubs::RuntimeToJSTaggedValueWithUint32(thread, valueHandle);
305 }
306 
DelObjProp(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop)307 JSTaggedValue SlowRuntimeStub::DelObjProp(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop)
308 {
309     INTERPRETER_TRACE(thread, Delobjprop);
310     [[maybe_unused]] EcmaHandleScope handleScope(thread);
311 
312     JSHandle<JSTaggedValue> objHandle(thread, obj);
313     JSHandle<JSTaggedValue> propHandle(thread, prop);
314     return RuntimeStubs::RuntimeDelObjProp(thread, objHandle, propHandle);
315 }
316 
NewObjRange(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget, uint16_t firstArgIdx, uint16_t length)317 JSTaggedValue SlowRuntimeStub::NewObjRange(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget,
318                                            uint16_t firstArgIdx, uint16_t length)
319 {
320     INTERPRETER_TRACE(thread, NewobjRange);
321     [[maybe_unused]] EcmaHandleScope handleScope(thread);
322 
323     JSHandle<JSTaggedValue> funcHandle(thread, func);
324     JSHandle<JSTaggedValue> newTargetHandle(thread, newTarget);
325     return RuntimeStubs::RuntimeNewObjRange(thread, funcHandle, newTargetHandle, firstArgIdx, length);
326 }
327 
CreateObjectWithExcludedKeys(JSThread *thread, uint16_t numKeys, JSTaggedValue objVal, uint16_t firstArgRegIdx)328 JSTaggedValue SlowRuntimeStub::CreateObjectWithExcludedKeys(JSThread *thread, uint16_t numKeys, JSTaggedValue objVal,
329                                                             uint16_t firstArgRegIdx)
330 {
331     INTERPRETER_TRACE(thread, CreateObjectWithExcludedKeys);
332     [[maybe_unused]] EcmaHandleScope handleScope(thread);
333 
334     JSHandle<JSTaggedValue> obj(thread, objVal);
335     return RuntimeStubs::RuntimeCreateObjectWithExcludedKeys(thread, numKeys, obj, firstArgRegIdx);
336 }
337 
Exp(JSThread *thread, JSTaggedValue base, JSTaggedValue exponent)338 JSTaggedValue SlowRuntimeStub::Exp(JSThread *thread, JSTaggedValue base, JSTaggedValue exponent)
339 {
340     INTERPRETER_TRACE(thread, Exp);
341     [[maybe_unused]] EcmaHandleScope handleScope(thread);
342 
343     return RuntimeStubs::RuntimeExp(thread, base, exponent);
344 }
345 
IsIn(JSThread *thread, JSTaggedValue prop, JSTaggedValue obj)346 JSTaggedValue SlowRuntimeStub::IsIn(JSThread *thread, JSTaggedValue prop, JSTaggedValue obj)
347 {
348     INTERPRETER_TRACE(thread, IsIn);
349     [[maybe_unused]] EcmaHandleScope handleScope(thread);
350 
351     JSHandle<JSTaggedValue> propHandle(thread, prop);
352     JSHandle<JSTaggedValue> objHandle(thread, obj);
353     return RuntimeStubs::RuntimeIsIn(thread, propHandle, objHandle);
354 }
355 
Instanceof(JSThread *thread, JSTaggedValue obj, JSTaggedValue target)356 JSTaggedValue SlowRuntimeStub::Instanceof(JSThread *thread, JSTaggedValue obj, JSTaggedValue target)
357 {
358     INTERPRETER_TRACE(thread, Instanceof);
359     [[maybe_unused]] EcmaHandleScope handleScope(thread);
360 
361     JSHandle<JSTaggedValue> objHandle(thread, obj);
362     JSHandle<JSTaggedValue> targetHandle(thread, target);
363     return RuntimeStubs::RuntimeInstanceof(thread, objHandle, targetHandle);
364 }
365 
InstanceofByHandler(JSThread *thread, JSTaggedValue target, JSTaggedValue object, JSTaggedValue instOfHandler)366 JSTaggedValue SlowRuntimeStub::InstanceofByHandler(JSThread *thread, JSTaggedValue target, JSTaggedValue object,
367                                                    JSTaggedValue instOfHandler)
368 {
369     INTERPRETER_TRACE(thread, InstanceofByHandler);
370     [[maybe_unused]] EcmaHandleScope handleScope(thread);
371 
372     JSHandle<JSTaggedValue> objectHandle(thread, object);
373     JSHandle<JSTaggedValue> targetHandle(thread, target);
374     JSHandle<JSTaggedValue> instOfHandle(thread, instOfHandler);
375 
376     return RuntimeStubs::RuntimeInstanceofByHandler(thread, targetHandle, objectHandle, instOfHandle);
377 }
378 
NewLexicalEnv(JSThread *thread, uint16_t numVars)379 JSTaggedValue SlowRuntimeStub::NewLexicalEnv(JSThread *thread, uint16_t numVars)
380 {
381     INTERPRETER_TRACE(thread, Newlexenv);
382     [[maybe_unused]] EcmaHandleScope handleScope(thread);
383 
384     return RuntimeStubs::RuntimeNewLexicalEnv(thread, numVars);
385 }
386 
NewSendableEnv(JSThread *thread, uint16_t numVars)387 JSTaggedValue SlowRuntimeStub::NewSendableEnv(JSThread *thread, uint16_t numVars)
388 {
389     INTERPRETER_TRACE(thread, NewSendableEnv);
390     [[maybe_unused]] EcmaHandleScope handleScope(thread);
391 
392     return RuntimeStubs::RuntimeNewSendableEnv(thread, numVars);
393 }
394 
NewLexicalEnvWithName(JSThread *thread, uint16_t numVars, uint16_t scopeId)395 JSTaggedValue SlowRuntimeStub::NewLexicalEnvWithName(JSThread *thread, uint16_t numVars, uint16_t scopeId)
396 {
397     INTERPRETER_TRACE(thread, NewlexenvwithName);
398     [[maybe_unused]] EcmaHandleScope handleScope(thread);
399 
400     return RuntimeStubs::RuntimeNewLexicalEnvWithName(thread, numVars, scopeId);
401 }
402 
CreateIterResultObj(JSThread *thread, JSTaggedValue value, JSTaggedValue flag)403 JSTaggedValue SlowRuntimeStub::CreateIterResultObj(JSThread *thread, JSTaggedValue value, JSTaggedValue flag)
404 {
405     INTERPRETER_TRACE(thread, CreateIterResultObj);
406     [[maybe_unused]] EcmaHandleScope handleScope(thread);
407 
408     JSHandle<JSTaggedValue> valueHandle(thread, value);
409     return RuntimeStubs::RuntimeCreateIterResultObj(thread, valueHandle, flag);
410 }
411 
CreateGeneratorObj(JSThread *thread, JSTaggedValue genFunc)412 JSTaggedValue SlowRuntimeStub::CreateGeneratorObj(JSThread *thread, JSTaggedValue genFunc)
413 {
414     INTERPRETER_TRACE(thread, CreateGeneratorObj);
415     [[maybe_unused]] EcmaHandleScope handleScope(thread);
416 
417     JSHandle<JSTaggedValue> generatorFunction(thread, genFunc);
418     return RuntimeStubs::RuntimeCreateGeneratorObj(thread, generatorFunction);
419 }
420 
CreateAsyncGeneratorObj(JSThread *thread, JSTaggedValue genFunc)421 JSTaggedValue SlowRuntimeStub::CreateAsyncGeneratorObj(JSThread *thread, JSTaggedValue genFunc)
422 {
423     INTERPRETER_TRACE(thread, CreateAsyncGeneratorObj);
424     [[maybe_unused]] EcmaHandleScope handleScope(thread);
425 
426     JSHandle<JSTaggedValue> asyncGeneratorFunction(thread, genFunc);
427     return RuntimeStubs::RuntimeCreateAsyncGeneratorObj(thread, asyncGeneratorFunction);
428 }
429 
SuspendGenerator(JSThread *thread, JSTaggedValue genObj, JSTaggedValue value)430 JSTaggedValue SlowRuntimeStub::SuspendGenerator(JSThread *thread, JSTaggedValue genObj, JSTaggedValue value)
431 {
432     INTERPRETER_TRACE(thread, SuspendGenerator);
433     [[maybe_unused]] EcmaHandleScope handleScope(thread);
434 
435     JSHandle<JSTaggedValue> genObjHandle(thread, genObj);
436     JSHandle<JSTaggedValue> valueHandle(thread, value);
437     return RuntimeStubs::RuntimeSuspendGenerator(thread, genObjHandle, valueHandle);
438 }
439 
SetGeneratorState(JSThread *thread, JSTaggedValue genObj, int32_t index)440 void SlowRuntimeStub::SetGeneratorState(JSThread *thread, JSTaggedValue genObj, int32_t index)
441 {
442     INTERPRETER_TRACE(thread, SetGeneratorState);
443     [[maybe_unused]] EcmaHandleScope handleScope(thread);
444 
445     JSHandle<JSTaggedValue> genObjHandle(thread, genObj);
446     return RuntimeStubs::RuntimeSetGeneratorState(thread, genObjHandle, index);
447 }
448 
AsyncFunctionAwaitUncaught(JSThread *thread, JSTaggedValue asyncFuncObj, JSTaggedValue value)449 JSTaggedValue SlowRuntimeStub::AsyncFunctionAwaitUncaught(JSThread *thread, JSTaggedValue asyncFuncObj,
450                                                           JSTaggedValue value)
451 {
452     INTERPRETER_TRACE(thread, AsyncFunctionAwaitUncaught);
453     [[maybe_unused]] EcmaHandleScope handleScope(thread);
454     JSHandle<JSTaggedValue> asyncFuncObjHandle(thread, asyncFuncObj);
455     JSHandle<JSTaggedValue> valueHandle(thread, value);
456 
457     return RuntimeStubs::RuntimeAsyncFunctionAwaitUncaught(thread, asyncFuncObjHandle, valueHandle);
458 }
459 
AsyncFunctionResolveOrReject(JSThread *thread, JSTaggedValue asyncFuncObj, JSTaggedValue value, bool is_resolve)460 JSTaggedValue SlowRuntimeStub::AsyncFunctionResolveOrReject(JSThread *thread, JSTaggedValue asyncFuncObj,
461                                                             JSTaggedValue value, bool is_resolve)
462 {
463     INTERPRETER_TRACE(thread, AsyncFunctionResolveOrReject);
464     [[maybe_unused]] EcmaHandleScope handleScope(thread);
465 
466     JSHandle<JSTaggedValue> asyncFuncObjHandle(thread, asyncFuncObj);
467     JSHandle<JSTaggedValue> valueHandle(thread, value);
468     return RuntimeStubs::RuntimeAsyncFunctionResolveOrReject(thread, asyncFuncObjHandle, valueHandle, is_resolve);
469 }
470 
NewObjApply(JSThread *thread, JSTaggedValue func, JSTaggedValue array)471 JSTaggedValue SlowRuntimeStub::NewObjApply(JSThread *thread, JSTaggedValue func, JSTaggedValue array)
472 {
473     INTERPRETER_TRACE(thread, NewObjApply);
474     [[maybe_unused]] EcmaHandleScope handleScope(thread);
475 
476     JSHandle<JSTaggedValue> funcHandle(thread, func);
477     JSHandle<JSTaggedValue> jsArray(thread, array);
478     return RuntimeStubs::RuntimeNewObjApply(thread, funcHandle, jsArray);
479 }
480 
ThrowUndefinedIfHole(JSThread *thread, JSTaggedValue obj)481 void SlowRuntimeStub::ThrowUndefinedIfHole(JSThread *thread, JSTaggedValue obj)
482 {
483     INTERPRETER_TRACE(thread, ThrowUndefinedIfHole);
484     [[maybe_unused]] EcmaHandleScope handleScope(thread);
485 
486     JSHandle<EcmaString> name(thread, obj);
487     return RuntimeStubs::RuntimeThrowUndefinedIfHole(thread, name);
488 }
489 
ThrowIfSuperNotCorrectCall(JSThread *thread, uint16_t index, JSTaggedValue thisValue)490 JSTaggedValue SlowRuntimeStub::ThrowIfSuperNotCorrectCall(JSThread *thread, uint16_t index, JSTaggedValue thisValue)
491 {
492     INTERPRETER_TRACE(thread, ThrowIfSuperNotCorrectCall);
493     [[maybe_unused]] EcmaHandleScope handleScope(thread);
494 
495     return RuntimeStubs::RuntimeThrowIfSuperNotCorrectCall(thread, index, thisValue);
496 }
497 
ThrowIfNotObject(JSThread *thread)498 void SlowRuntimeStub::ThrowIfNotObject(JSThread *thread)
499 {
500     INTERPRETER_TRACE(thread, ThrowIfNotObject);
501     [[maybe_unused]] EcmaHandleScope handleScope(thread);
502 
503     THROW_TYPE_ERROR(thread, "Inner return result is not object");
504 }
505 
ThrowThrowNotExists(JSThread *thread)506 void SlowRuntimeStub::ThrowThrowNotExists(JSThread *thread)
507 {
508     INTERPRETER_TRACE(thread, ThrowThrowNotExists);
509     [[maybe_unused]] EcmaHandleScope handleScope(thread);
510 
511     return RuntimeStubs::RuntimeThrowIfNotObject(thread);
512 }
513 
ThrowPatternNonCoercible(JSThread *thread)514 void SlowRuntimeStub::ThrowPatternNonCoercible(JSThread *thread)
515 {
516     INTERPRETER_TRACE(thread, ThrowPatternNonCoercible);
517     [[maybe_unused]] EcmaHandleScope handleScope(thread);
518 
519     return RuntimeStubs::RuntimeThrowPatternNonCoercible(thread);
520 }
521 
StOwnByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)522 JSTaggedValue SlowRuntimeStub::StOwnByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)
523 {
524     INTERPRETER_TRACE(thread, StOwnByName);
525     [[maybe_unused]] EcmaHandleScope handleScope(thread);
526 
527     JSHandle<JSTaggedValue> objHandle(thread, obj);
528     JSHandle<JSTaggedValue> propHandle(thread, prop);
529     JSHandle<JSTaggedValue> valueHandle(thread, value);
530     return RuntimeStubs::RuntimeStOwnByName(thread, objHandle, propHandle, valueHandle);
531 }
532 
StOwnByNameWithNameSet(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)533 JSTaggedValue SlowRuntimeStub::StOwnByNameWithNameSet(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop,
534                                                       JSTaggedValue value)
535 {
536     INTERPRETER_TRACE(thread, StOwnByName);
537     [[maybe_unused]] EcmaHandleScope handleScope(thread);
538 
539     JSHandle<JSTaggedValue> objHandle(thread, obj);
540     JSHandle<JSTaggedValue> propHandle(thread, prop);
541     JSHandle<JSTaggedValue> valueHandle(thread, value);
542     return RuntimeStubs::RuntimeStOwnByNameWithNameSet(thread, objHandle, propHandle, valueHandle);
543 }
544 
StOwnByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, JSTaggedValue value)545 JSTaggedValue SlowRuntimeStub::StOwnByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, JSTaggedValue value)
546 {
547     INTERPRETER_TRACE(thread, StOwnById);
548     [[maybe_unused]] EcmaHandleScope handleScope(thread);
549 
550     JSHandle<JSTaggedValue> objHandle(thread, obj);
551     JSHandle<JSTaggedValue> idxHandle(thread, JSTaggedValue(idx));
552     JSHandle<JSTaggedValue> valueHandle(thread, value);
553     return RuntimeStubs::RuntimeStOwnByIndex(thread, objHandle, idxHandle, valueHandle);
554 }
555 
StOwnByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key, JSTaggedValue value)556 JSTaggedValue SlowRuntimeStub::StOwnByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key, JSTaggedValue value)
557 {
558     INTERPRETER_TRACE(thread, StOwnByValue);
559     [[maybe_unused]] EcmaHandleScope handleScope(thread);
560 
561     JSHandle<JSTaggedValue> objHandle(thread, obj);
562     JSHandle<JSTaggedValue> keyHandle(thread, key);
563     JSHandle<JSTaggedValue> valueHandle(thread, value);
564     return RuntimeStubs::RuntimeStOwnByValue(thread, objHandle, keyHandle, valueHandle);
565 }
566 
StOwnByValueWithNameSet(JSThread *thread, JSTaggedValue obj, JSTaggedValue key, JSTaggedValue value)567 JSTaggedValue SlowRuntimeStub::StOwnByValueWithNameSet(JSThread *thread, JSTaggedValue obj, JSTaggedValue key,
568                                                        JSTaggedValue value)
569 {
570     INTERPRETER_TRACE(thread, StOwnByValue);
571     [[maybe_unused]] EcmaHandleScope handleScope(thread);
572 
573     JSHandle<JSTaggedValue> objHandle(thread, obj);
574     JSHandle<JSTaggedValue> keyHandle(thread, key);
575     JSHandle<JSTaggedValue> valueHandle(thread, value);
576     return RuntimeStubs::RuntimeStOwnByValueWithNameSet(thread, objHandle, keyHandle, valueHandle);
577 }
578 
CreateEmptyArray(JSThread *thread, ObjectFactory *factory, JSHandle<GlobalEnv> globalEnv)579 JSTaggedValue SlowRuntimeStub::CreateEmptyArray(JSThread *thread, ObjectFactory *factory, JSHandle<GlobalEnv> globalEnv)
580 {
581     INTERPRETER_TRACE(thread, CreateEmptyArray);
582     [[maybe_unused]] EcmaHandleScope handleScope(thread);
583     return RuntimeStubs::RuntimeCreateEmptyArray(thread, factory, globalEnv);
584 }
585 
CreateEmptyObject(JSThread *thread, ObjectFactory *factory, JSHandle<GlobalEnv> globalEnv)586 JSTaggedValue SlowRuntimeStub::CreateEmptyObject(JSThread *thread, ObjectFactory *factory,
587                                                  JSHandle<GlobalEnv> globalEnv)
588 {
589     INTERPRETER_TRACE(thread, CreateEmptyObject);
590     [[maybe_unused]] EcmaHandleScope handleScope(thread);
591 
592     return RuntimeStubs::RuntimeCreateEmptyObject(thread, factory, globalEnv);
593 }
594 
CreateObjectWithBuffer(JSThread *thread, ObjectFactory *factory, JSObject *literal)595 JSTaggedValue SlowRuntimeStub::CreateObjectWithBuffer(JSThread *thread, ObjectFactory *factory, JSObject *literal)
596 {
597     INTERPRETER_TRACE(thread, CreateObjectWithBuffer);
598     [[maybe_unused]] EcmaHandleScope handleScope(thread);
599 
600     JSHandle<JSObject> obj(thread, literal);
601     return RuntimeStubs::RuntimeCreateObjectWithBuffer(thread, factory, obj);
602 }
603 
CreateObjectHavingMethod(JSThread *thread, ObjectFactory *factory, JSObject *literal, JSTaggedValue env)604 JSTaggedValue SlowRuntimeStub::CreateObjectHavingMethod(JSThread *thread, ObjectFactory *factory, JSObject *literal,
605                                                         JSTaggedValue env)
606 {
607     INTERPRETER_TRACE(thread, CreateObjectHavingMethod);
608     [[maybe_unused]] EcmaHandleScope handleScope(thread);
609 
610     JSHandle<JSObject> obj(thread, literal);
611     JSHandle<JSTaggedValue> envi(thread, env);
612     return RuntimeStubs::RuntimeCreateObjectHavingMethod(thread, factory, obj, envi);
613 }
614 
SetObjectWithProto(JSThread *thread, JSTaggedValue proto, JSTaggedValue obj)615 JSTaggedValue SlowRuntimeStub::SetObjectWithProto(JSThread *thread, JSTaggedValue proto, JSTaggedValue obj)
616 {
617     INTERPRETER_TRACE(thread, SetObjectWithProto);
618     [[maybe_unused]] EcmaHandleScope handleScope(thread);
619 
620     JSHandle<JSTaggedValue> protoHandle(thread, proto);
621     JSHandle<JSObject> objHandle(thread, obj);
622     return RuntimeStubs::RuntimeSetObjectWithProto(thread, protoHandle, objHandle);
623 }
624 
IterNext(JSThread *thread, JSTaggedValue iter)625 JSTaggedValue SlowRuntimeStub::IterNext(JSThread *thread, JSTaggedValue iter)
626 {
627     INTERPRETER_TRACE(thread, IterNext);
628     [[maybe_unused]] EcmaHandleScope handleScope(thread);
629 
630     JSHandle<JSTaggedValue> iterHandle(thread, iter);
631     return RuntimeStubs::RuntimeIterNext(thread, iterHandle);
632 }
633 
CloseIterator(JSThread *thread, JSTaggedValue iter)634 JSTaggedValue SlowRuntimeStub::CloseIterator(JSThread *thread, JSTaggedValue iter)
635 {
636     INTERPRETER_TRACE(thread, CloseIterator);
637     [[maybe_unused]] EcmaHandleScope handleScope(thread);
638 
639     JSHandle<JSTaggedValue> iterHandle(thread, iter);
640     return RuntimeStubs::RuntimeCloseIterator(thread, iterHandle);
641 }
642 
StModuleVar(JSThread *thread, int32_t index, JSTaggedValue value)643 void SlowRuntimeStub::StModuleVar(JSThread *thread, int32_t index, JSTaggedValue value)
644 {
645     INTERPRETER_TRACE(thread, StModuleVar);
646     [[maybe_unused]] EcmaHandleScope scope(thread);
647 
648     return RuntimeStubs::RuntimeStModuleVar(thread, index, value);
649 }
650 
StModuleVar(JSThread *thread, JSTaggedValue key, JSTaggedValue value)651 void SlowRuntimeStub::StModuleVar(JSThread *thread, JSTaggedValue key, JSTaggedValue value)
652 {
653     INTERPRETER_TRACE(thread, StModuleVar);
654     [[maybe_unused]] EcmaHandleScope scope(thread);
655 
656     return RuntimeStubs::RuntimeStModuleVar(thread, key, value);
657 }
658 
LdLocalModuleVar(JSThread *thread, int32_t index)659 JSTaggedValue SlowRuntimeStub::LdLocalModuleVar(JSThread *thread, int32_t index)
660 {
661     RUNTIME_TRACE(thread, LdLocalModuleVarByIndex);
662     [[maybe_unused]] EcmaHandleScope scope(thread);
663 
664     return RuntimeStubs::RuntimeLdLocalModuleVar(thread, index);
665 }
666 
LdExternalModuleVar(JSThread *thread, int32_t index)667 JSTaggedValue SlowRuntimeStub::LdExternalModuleVar(JSThread *thread, int32_t index)
668 {
669     RUNTIME_TRACE(thread, LdExternalModuleVarByIndex);
670     [[maybe_unused]] EcmaHandleScope scope(thread);
671 
672     return RuntimeStubs::RuntimeLdExternalModuleVar(thread, index);
673 }
674 
LdModuleVar(JSThread *thread, JSTaggedValue key, bool inner)675 JSTaggedValue SlowRuntimeStub::LdModuleVar(JSThread *thread, JSTaggedValue key, bool inner)
676 {
677     INTERPRETER_TRACE(thread, LdModuleVar);
678     [[maybe_unused]] EcmaHandleScope scope(thread);
679 
680     return RuntimeStubs::RuntimeLdModuleVar(thread, key, inner);
681 }
682 
CreateRegExpWithLiteral(JSThread *thread, JSTaggedValue pattern, uint8_t flags)683 JSTaggedValue SlowRuntimeStub::CreateRegExpWithLiteral(JSThread *thread, JSTaggedValue pattern, uint8_t flags)
684 {
685     INTERPRETER_TRACE(thread, CreateRegExpWithLiteral);
686     [[maybe_unused]] EcmaHandleScope handleScope(thread);
687 
688     JSHandle<JSTaggedValue> patternHandle(thread, pattern);
689     return RuntimeStubs::RuntimeCreateRegExpWithLiteral(thread, patternHandle, flags);
690 }
691 
CreateArrayWithBuffer(JSThread *thread, ObjectFactory *factory, JSArray *literal)692 JSTaggedValue SlowRuntimeStub::CreateArrayWithBuffer(JSThread *thread, ObjectFactory *factory, JSArray *literal)
693 {
694     INTERPRETER_TRACE(thread, CreateArrayWithBuffer);
695     [[maybe_unused]] EcmaHandleScope handleScope(thread);
696 
697     JSHandle<JSTaggedValue> array(thread, literal);
698     return RuntimeStubs::RuntimeCreateArrayWithBuffer(thread, factory, array);
699 }
700 
GetTemplateObject(JSThread *thread, JSTaggedValue literal)701 JSTaggedValue SlowRuntimeStub::GetTemplateObject(JSThread *thread, JSTaggedValue literal)
702 {
703     INTERPRETER_TRACE(thread, GetTemplateObject);
704     [[maybe_unused]] EcmaHandleScope handleScope(thread);
705 
706     JSHandle<JSTaggedValue> templateLiteral(thread, literal);
707     return RuntimeStubs::RuntimeGetTemplateObject(thread, templateLiteral);
708 }
709 
GetNextPropName(JSThread *thread, JSTaggedValue iter)710 JSTaggedValue SlowRuntimeStub::GetNextPropName(JSThread *thread, JSTaggedValue iter)
711 {
712     INTERPRETER_TRACE(thread, GetNextPropName);
713     [[maybe_unused]] EcmaHandleScope handleScope(thread);
714 
715     JSHandle<JSTaggedValue> iterator(thread, iter);
716     return RuntimeStubs::RuntimeGetNextPropName(thread, iterator);
717 }
718 
CopyDataProperties(JSThread *thread, JSTaggedValue dst, JSTaggedValue src)719 JSTaggedValue SlowRuntimeStub::CopyDataProperties(JSThread *thread, JSTaggedValue dst, JSTaggedValue src)
720 {
721     INTERPRETER_TRACE(thread, CopyDataProperties);
722     [[maybe_unused]] EcmaHandleScope handleScope(thread);
723 
724     JSHandle<JSTaggedValue> dstHandle(thread, dst);
725     JSHandle<JSTaggedValue> srcHandle(thread, src);
726     return RuntimeStubs::RuntimeCopyDataProperties(thread, dstHandle, srcHandle);
727 }
728 
GetIteratorNext(JSThread *thread, JSTaggedValue obj, JSTaggedValue method)729 JSTaggedValue SlowRuntimeStub::GetIteratorNext(JSThread *thread, JSTaggedValue obj, JSTaggedValue method)
730 {
731     RUNTIME_TRACE(thread, GetIteratorNext);
732     [[maybe_unused]] EcmaHandleScope handleScope(thread);
733 
734     JSHandle<JSTaggedValue> iter(thread, obj);
735     JSHandle<JSTaggedValue> next(thread, method);
736     return RuntimeStubs::RuntimeGetIteratorNext(thread, iter, next);
737 }
738 
GetUnmapedArgs(JSThread *thread, JSTaggedType *sp, uint32_t actualNumArgs, uint32_t startIdx)739 JSTaggedValue SlowRuntimeStub::GetUnmapedArgs(JSThread *thread, JSTaggedType *sp, uint32_t actualNumArgs,
740                                               uint32_t startIdx)
741 {
742     INTERPRETER_TRACE(thread, GetUnmapedArgs);
743     [[maybe_unused]] EcmaHandleScope handleScope(thread);
744     return RuntimeStubs::RuntimeGetUnmapedArgs(thread, sp, actualNumArgs, startIdx);
745 }
746 
CopyRestArgs(JSThread *thread, JSTaggedType *sp, uint32_t restNumArgs, uint32_t startIdx)747 JSTaggedValue SlowRuntimeStub::CopyRestArgs(JSThread *thread, JSTaggedType *sp, uint32_t restNumArgs, uint32_t startIdx)
748 {
749     INTERPRETER_TRACE(thread, Copyrestargs);
750     [[maybe_unused]] EcmaHandleScope handleScope(thread);
751     return RuntimeStubs::RuntimeCopyRestArgs(thread, sp, restNumArgs, startIdx);
752 }
753 
GetIterator(JSThread *thread, JSTaggedValue obj)754 JSTaggedValue SlowRuntimeStub::GetIterator(JSThread *thread, JSTaggedValue obj)
755 {
756     INTERPRETER_TRACE(thread, GetIterator);
757     [[maybe_unused]] EcmaHandleScope handleScope(thread);
758 
759     JSHandle<JSTaggedValue> objHandle(thread, obj);
760     return RuntimeStubs::RuntimeGetIterator(thread, objHandle);
761 }
762 
GetAsyncIterator(JSThread *thread, JSTaggedValue obj)763 JSTaggedValue SlowRuntimeStub::GetAsyncIterator(JSThread *thread, JSTaggedValue obj)
764 {
765     INTERPRETER_TRACE(thread, GetAsyncIterator);
766     [[maybe_unused]] EcmaHandleScope handleScope(thread);
767 
768     JSHandle<JSTaggedValue> objHandle(thread, obj);
769     return RuntimeStubs::RuntimeGetAsyncIterator(thread, objHandle);
770 }
771 
DefineGetterSetterByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue getter, JSTaggedValue setter, bool flag)772 JSTaggedValue SlowRuntimeStub::DefineGetterSetterByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop,
773                                                          JSTaggedValue getter, JSTaggedValue setter, bool flag)
774 {
775     INTERPRETER_TRACE(thread, DefineGetterSetterByValue);
776     [[maybe_unused]] EcmaHandleScope handleScope(thread);
777 
778     JSHandle<JSObject> objHandle(thread, obj);
779     JSHandle<JSTaggedValue> propHandle(thread, prop);
780     JSHandle<JSTaggedValue> getterHandle(thread, getter);
781     JSHandle<JSTaggedValue> setterHandle(thread, setter);
782     JSHandle<JSTaggedValue> func(thread, JSTaggedValue::Undefined());
783     return RuntimeStubs::RuntimeDefineGetterSetterByValue(thread, objHandle, propHandle,
784                                                           getterHandle, setterHandle, flag,
785                                                           func, 0);
786 }
787 
LdObjByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, bool callGetter, JSTaggedValue receiver)788 JSTaggedValue SlowRuntimeStub::LdObjByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, bool callGetter,
789                                             JSTaggedValue receiver)
790 {
791     INTERPRETER_TRACE(thread, LdObjByIndex);
792     [[maybe_unused]] EcmaHandleScope handleScope(thread);
793 
794     JSHandle<JSTaggedValue> objHandle(thread, obj);
795     return RuntimeStubs::RuntimeLdObjByIndex(thread, objHandle, idx, callGetter, receiver);
796 }
797 
StObjByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, JSTaggedValue value)798 JSTaggedValue SlowRuntimeStub::StObjByIndex(JSThread *thread, JSTaggedValue obj, uint32_t idx, JSTaggedValue value)
799 {
800     INTERPRETER_TRACE(thread, StObjByIndex);
801     [[maybe_unused]] EcmaHandleScope handleScope(thread);
802 
803     JSHandle<JSTaggedValue> objHandle(thread, obj);
804     JSHandle<JSTaggedValue> valueHandle(thread, value);
805     return RuntimeStubs::RuntimeStObjByIndex(thread, objHandle, idx, valueHandle);
806 }
807 
LdObjByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, bool callGetter, JSTaggedValue receiver)808 JSTaggedValue SlowRuntimeStub::LdObjByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, bool callGetter,
809                                            JSTaggedValue receiver)
810 {
811     INTERPRETER_TRACE(thread, LdObjByName);
812     [[maybe_unused]] EcmaHandleScope handleScope(thread);
813     return RuntimeStubs::RuntimeLdObjByName(thread, obj, prop, callGetter, receiver);
814 }
815 
StObjByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)816 JSTaggedValue SlowRuntimeStub::StObjByName(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)
817 {
818     INTERPRETER_TRACE(thread, StObjByName);
819     [[maybe_unused]] EcmaHandleScope handleScope(thread);
820 
821     JSHandle<JSTaggedValue> objHandle(thread, obj);
822     JSHandle<JSTaggedValue> propHandle(thread, prop);
823     JSHandle<JSTaggedValue> valueHandle(thread, value);
824     return RuntimeStubs::RuntimeStObjByName(thread, objHandle, propHandle, valueHandle);
825 }
826 
LdObjByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, bool callGetter, JSTaggedValue receiver)827 JSTaggedValue SlowRuntimeStub::LdObjByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, bool callGetter,
828                                             JSTaggedValue receiver)
829 {
830     INTERPRETER_TRACE(thread, LdObjByValue);
831     [[maybe_unused]] EcmaHandleScope handleScope(thread);
832 
833     JSHandle<JSTaggedValue> objHandle(thread, obj);
834     JSHandle<JSTaggedValue> propHandle(thread, prop);
835     return RuntimeStubs::RuntimeLdObjByValue(thread, objHandle, propHandle, callGetter, receiver);
836 }
837 
StObjByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop, JSTaggedValue value)838 JSTaggedValue SlowRuntimeStub::StObjByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue prop,
839                                             JSTaggedValue value)
840 {
841     INTERPRETER_TRACE(thread, StObjByValue);
842     [[maybe_unused]] EcmaHandleScope handleScope(thread);
843 
844     JSHandle<JSTaggedValue> objHandle(thread, obj);
845     JSHandle<JSTaggedValue> propHandle(thread, prop);
846     JSHandle<JSTaggedValue> valueHandle(thread, value);
847     return RuntimeStubs::RuntimeStObjByValue(thread, objHandle, propHandle, valueHandle);
848 }
849 
TryLdGlobalByNameFromGlobalProto(JSThread *thread, JSTaggedValue global, JSTaggedValue prop)850 JSTaggedValue SlowRuntimeStub::TryLdGlobalByNameFromGlobalProto(JSThread *thread, JSTaggedValue global,
851                                                                 JSTaggedValue prop)
852 {
853     INTERPRETER_TRACE(thread, Trygetobjprop);
854     [[maybe_unused]] EcmaHandleScope handleScope(thread);
855 
856     JSHandle<JSTaggedValue> obj(thread, global.GetTaggedObject()->GetClass()->GetPrototype());
857     JSHandle<JSTaggedValue> propHandle(thread, prop);
858     return RuntimeStubs::RuntimeTryLdGlobalByName(thread, obj, propHandle);
859 }
860 
TryStGlobalByName(JSThread *thread, JSTaggedValue prop)861 JSTaggedValue SlowRuntimeStub::TryStGlobalByName(JSThread *thread, JSTaggedValue prop)
862 {
863     INTERPRETER_TRACE(thread, TryStGlobalByName);
864     // If fast path is fail, not need slow path, just throw error.
865     return ThrowReferenceError(thread, prop, " is not defined");
866 }
867 
LdGlobalVarFromGlobalProto(JSThread *thread, JSTaggedValue global, JSTaggedValue prop)868 JSTaggedValue SlowRuntimeStub::LdGlobalVarFromGlobalProto(JSThread *thread, JSTaggedValue global, JSTaggedValue prop)
869 {
870     INTERPRETER_TRACE(thread, LdGlobalVar);
871     [[maybe_unused]] EcmaHandleScope handleScope(thread);
872 
873     JSHandle<JSTaggedValue> objHandle(thread, global);
874     JSHandle<JSTaggedValue> propHandle(thread, prop);
875     return RuntimeStubs::RuntimeLdGlobalVarFromProto(thread, objHandle, propHandle); // After checked global itself.
876 }
877 
StGlobalVar(JSThread *thread, JSTaggedValue prop, JSTaggedValue value)878 JSTaggedValue SlowRuntimeStub::StGlobalVar(JSThread *thread, JSTaggedValue prop, JSTaggedValue value)
879 {
880     INTERPRETER_TRACE(thread, StGlobalVar);
881     [[maybe_unused]] EcmaHandleScope handleScope(thread);
882 
883     JSHandle<JSTaggedValue> propHandle(thread, prop);
884     JSHandle<JSTaggedValue> valueHandle(thread, value);
885     return RuntimeStubs::RuntimeStGlobalVar(thread, propHandle, valueHandle);
886 }
887 
TryUpdateGlobalRecord(JSThread *thread, JSTaggedValue prop, JSTaggedValue value)888 JSTaggedValue SlowRuntimeStub::TryUpdateGlobalRecord(JSThread *thread, JSTaggedValue prop, JSTaggedValue value)
889 {
890     INTERPRETER_TRACE(thread, TryUpdateGlobalRecord);
891     [[maybe_unused]] EcmaHandleScope handleScope(thread);
892 
893     return RuntimeStubs::RuntimeTryUpdateGlobalRecord(thread, prop, value);
894 }
895 
896 // return box
LdGlobalRecord(JSThread *thread, JSTaggedValue key)897 JSTaggedValue SlowRuntimeStub::LdGlobalRecord(JSThread *thread, JSTaggedValue key)
898 {
899     INTERPRETER_TRACE(thread, LdGlobalRecord);
900     [[maybe_unused]] EcmaHandleScope handleScope(thread);
901 
902     return RuntimeStubs::RuntimeLdGlobalRecord(thread, key);
903 }
904 
StGlobalRecord(JSThread *thread, JSTaggedValue prop, JSTaggedValue value, bool isConst)905 JSTaggedValue SlowRuntimeStub::StGlobalRecord(JSThread *thread, JSTaggedValue prop, JSTaggedValue value, bool isConst)
906 {
907     INTERPRETER_TRACE(thread, StGlobalRecord);
908     [[maybe_unused]] EcmaHandleScope handleScope(thread);
909 
910     JSHandle<JSTaggedValue> propHandle(thread, prop);
911     JSHandle<JSTaggedValue> valueHandle(thread, value);
912     return RuntimeStubs::RuntimeStGlobalRecord(thread, propHandle, valueHandle, isConst);
913 }
914 
ThrowReferenceError(JSThread *thread, JSTaggedValue prop, const char *desc)915 JSTaggedValue SlowRuntimeStub::ThrowReferenceError(JSThread *thread, JSTaggedValue prop, const char *desc)
916 {
917     INTERPRETER_TRACE(thread, ThrowReferenceError);
918     [[maybe_unused]] EcmaHandleScope handleScope(thread);
919 
920     JSHandle<JSTaggedValue> propHandle(thread, prop);
921     return RuntimeStubs::RuntimeThrowReferenceError(thread, propHandle, desc);
922 }
923 
ThrowTypeError(JSThread *thread, const char *message)924 JSTaggedValue SlowRuntimeStub::ThrowTypeError(JSThread *thread, const char *message)
925 {
926     INTERPRETER_TRACE(thread, ThrowTypeError);
927     [[maybe_unused]] EcmaHandleScope handleScope(thread);
928 
929     return RuntimeStubs::RuntimeThrowTypeError(thread, message);
930 }
931 
ThrowSyntaxError(JSThread *thread, const char *message)932 JSTaggedValue SlowRuntimeStub::ThrowSyntaxError(JSThread *thread, const char *message)
933 {
934     INTERPRETER_TRACE(thread, ThrowSyntaxError);
935     [[maybe_unused]] EcmaHandleScope handleScope(thread);
936 
937     return RuntimeStubs::RuntimeThrowSyntaxError(thread, message);
938 }
939 
StArraySpread(JSThread *thread, JSTaggedValue dst, JSTaggedValue index, JSTaggedValue src)940 JSTaggedValue SlowRuntimeStub::StArraySpread(JSThread *thread, JSTaggedValue dst, JSTaggedValue index,
941                                              JSTaggedValue src)
942 {
943     INTERPRETER_TRACE(thread, StArraySpread);
944     [[maybe_unused]] EcmaHandleScope handleScope(thread);
945 
946     JSHandle<JSTaggedValue> dstHandle(thread, dst);
947     JSHandle<JSTaggedValue> srcHandle(thread, src);
948     return RuntimeStubs::RuntimeStArraySpread(thread, dstHandle, index, srcHandle);
949 }
950 
DefineFunc(JSThread *thread, JSTaggedValue constPool, uint16_t methodId, JSTaggedValue module, uint16_t length, JSTaggedValue env, JSTaggedValue homeObject)951 JSTaggedValue SlowRuntimeStub::DefineFunc(JSThread *thread, JSTaggedValue constPool, uint16_t methodId,
952                                           JSTaggedValue module, uint16_t length, JSTaggedValue env,
953                                           JSTaggedValue homeObject)
954 {
955     INTERPRETER_TRACE(thread, DefineFunc);
956     [[maybe_unused]] EcmaHandleScope handleScope(thread);
957     JSHandle<JSTaggedValue> constpoolHandle(thread, constPool);
958     JSHandle<JSTaggedValue> moduleHandle(thread, module);
959     JSHandle<JSTaggedValue> envHandle(thread, env);
960     JSHandle<JSTaggedValue> homeObjectHandle(thread, homeObject);
961     return RuntimeStubs::RuntimeDefinefunc(thread, constpoolHandle, methodId, moduleHandle,
962                                            length, envHandle, homeObjectHandle);
963 }
964 
GetSuperConstructor(JSThread *thread, JSTaggedValue ctor)965 JSTaggedValue SlowRuntimeStub::GetSuperConstructor(JSThread *thread, JSTaggedValue ctor)
966 {
967     INTERPRETER_TRACE(thread, GetSuperConstructor);
968     JSHandle<JSTaggedValue> ctorHandle(thread, ctor);
969     JSHandle<JSTaggedValue> superConstructor(thread, JSTaggedValue::GetPrototype(thread, ctorHandle));
970     RETURN_EXCEPTION_IF_ABRUPT_COMPLETION(thread);
971     return superConstructor.GetTaggedValue();
972 }
973 
SuperCall(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget, uint16_t firstVRegIdx, uint16_t length)974 JSTaggedValue SlowRuntimeStub::SuperCall(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget,
975                                          uint16_t firstVRegIdx, uint16_t length)
976 {
977     INTERPRETER_TRACE(thread, SuperCall);
978     [[maybe_unused]] EcmaHandleScope handleScope(thread);
979 
980     JSHandle<JSTaggedValue> funcHandle(thread, func);
981     JSHandle<JSTaggedValue> newTargetHandle(thread, newTarget);
982     return RuntimeStubs::RuntimeSuperCall(thread, funcHandle, newTargetHandle, firstVRegIdx, length);
983 }
984 
DynamicImport(JSThread *thread, JSTaggedValue specifier, JSTaggedValue currentFunc)985 JSTaggedValue SlowRuntimeStub::DynamicImport(JSThread *thread, JSTaggedValue specifier, JSTaggedValue currentFunc)
986 {
987     INTERPRETER_TRACE(thread, DynamicImport);
988     [[maybe_unused]] EcmaHandleScope handleScope(thread);
989 
990     JSHandle<JSTaggedValue> specifierHandle(thread, specifier);
991     JSHandle<JSTaggedValue> currentFuncHandle(thread, currentFunc);
992     return RuntimeStubs::RuntimeDynamicImport(thread, specifierHandle, currentFuncHandle);
993 }
994 
SuperCallSpread(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget, JSTaggedValue array)995 JSTaggedValue SlowRuntimeStub::SuperCallSpread(JSThread *thread, JSTaggedValue func, JSTaggedValue newTarget,
996                                                JSTaggedValue array)
997 {
998     INTERPRETER_TRACE(thread, SuperCallSpread);
999     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1000 
1001     JSHandle<JSTaggedValue> funcHandle(thread, func);
1002     JSHandle<JSTaggedValue> newTargetHandle(thread, newTarget);
1003     JSHandle<JSTaggedValue> jsArray(thread, array);
1004     return RuntimeStubs::RuntimeSuperCallSpread(thread, funcHandle, newTargetHandle, jsArray);
1005 }
1006 
SuperCallForwardAllArgs(JSThread *thread, JSTaggedType *sp, JSTaggedValue func, JSTaggedValue newTarget, uint32_t restNumArgs, uint32_t startIdx)1007 JSTaggedValue SlowRuntimeStub::SuperCallForwardAllArgs(JSThread *thread, JSTaggedType *sp, JSTaggedValue func,
1008                                                        JSTaggedValue newTarget, uint32_t restNumArgs, uint32_t startIdx)
1009 {
1010     JSHandle<JSTaggedValue> superFunc(thread, GetSuperConstructor(thread, func));
1011     JSHandle<JSTaggedValue> newTargetHandle(thread, newTarget);
1012     return RuntimeStubs::RuntimeSuperCallForwardAllArgs(thread, sp, superFunc, newTargetHandle, restNumArgs, startIdx);
1013 }
1014 
DefineMethod(JSThread *thread, Method *method, JSTaggedValue homeObject, uint16_t length, JSTaggedValue env, JSTaggedValue module)1015 JSTaggedValue SlowRuntimeStub::DefineMethod(JSThread *thread, Method *method, JSTaggedValue homeObject,
1016                                             uint16_t length, JSTaggedValue env, JSTaggedValue module)
1017 {
1018     INTERPRETER_TRACE(thread, DefineMethod);
1019     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1020     JSHandle<Method> methodHandle(thread, method);
1021     JSHandle<JSTaggedValue> homeObjectHandle(thread, homeObject);
1022     JSHandle<JSTaggedValue> envHandle(thread, env);
1023     JSHandle<JSTaggedValue> moduleHandle(thread, module);
1024     return RuntimeStubs::RuntimeDefineMethod(thread, methodHandle, homeObjectHandle, length, envHandle, moduleHandle);
1025 }
1026 
LdSendableClass(JSThread *thread, JSTaggedValue env, uint16_t level)1027 JSTaggedValue SlowRuntimeStub::LdSendableClass(JSThread *thread, JSTaggedValue env, uint16_t level)
1028 {
1029     INTERPRETER_TRACE(thread, LdSendableClass);
1030     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1031     JSHandle<JSTaggedValue> envHandle(thread, env);
1032     return RuntimeStubs::RuntimeLdSendableClass(envHandle, level);
1033 }
1034 
LdSendableExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)1035 JSTaggedValue SlowRuntimeStub::LdSendableExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)
1036 {
1037     RUNTIME_TRACE(thread, LdSendableExternalModuleVarByIndex);
1038     [[maybe_unused]] EcmaHandleScope scope(thread);
1039 
1040     return RuntimeStubs::RuntimeLdSendableExternalModuleVar(thread, index, thisFunc);
1041 }
1042 
LdLazyExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)1043 JSTaggedValue SlowRuntimeStub::LdLazyExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)
1044 {
1045     RUNTIME_TRACE(thread, LdLazyExternalModuleVarByIndex);
1046     [[maybe_unused]] EcmaHandleScope scope(thread);
1047     return RuntimeStubs::RuntimeLdLazyExternalModuleVar(thread, index, thisFunc);
1048 }
1049 
LdLazySendableExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)1050 JSTaggedValue SlowRuntimeStub::LdLazySendableExternalModuleVar(JSThread *thread, int32_t index, JSTaggedValue thisFunc)
1051 {
1052     RUNTIME_TRACE(thread, LdLazySendableExternalModuleVarByIndex);
1053     [[maybe_unused]] EcmaHandleScope scope(thread);
1054 
1055     return RuntimeStubs::RuntimeLdLazySendableExternalModuleVar(thread, index, thisFunc);
1056 }
1057 
LdSuperByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key, JSTaggedValue thisFunc)1058 JSTaggedValue SlowRuntimeStub::LdSuperByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key,
1059                                               JSTaggedValue thisFunc)
1060 {
1061     INTERPRETER_TRACE(thread, LdSuperByValue);
1062     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1063 
1064     JSHandle<JSTaggedValue> objHandle(thread, obj);
1065     JSHandle<JSTaggedValue> propHandle(thread, key);
1066     return RuntimeStubs::RuntimeLdSuperByValue(thread, objHandle, propHandle, thisFunc);
1067 }
1068 
StSuperByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key, JSTaggedValue value, JSTaggedValue thisFunc)1069 JSTaggedValue SlowRuntimeStub::StSuperByValue(JSThread *thread, JSTaggedValue obj, JSTaggedValue key,
1070                                               JSTaggedValue value, JSTaggedValue thisFunc)
1071 {
1072     INTERPRETER_TRACE(thread, StSuperByValue);
1073     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1074 
1075     JSHandle<JSTaggedValue> objHandle(thread, obj);
1076     JSHandle<JSTaggedValue> propHandle(thread, key);
1077     JSHandle<JSTaggedValue> valueHandle(thread, value);
1078     return RuntimeStubs::RuntimeStSuperByValue(thread, objHandle, propHandle, valueHandle, thisFunc);
1079 }
1080 
GetCallSpreadArgs(JSThread *thread, JSTaggedValue array)1081 JSTaggedValue SlowRuntimeStub::GetCallSpreadArgs(JSThread *thread, JSTaggedValue array)
1082 {
1083     INTERPRETER_TRACE(thread, GetCallSpreadArgs);
1084     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1085 
1086     JSHandle<JSTaggedValue> jsArray(thread, array);
1087     return RuntimeStubs::RuntimeGetCallSpreadArgs(thread, jsArray);
1088 }
1089 
ThrowDeleteSuperProperty(JSThread *thread)1090 void SlowRuntimeStub::ThrowDeleteSuperProperty(JSThread *thread)
1091 {
1092     INTERPRETER_TRACE(thread, ThrowDeleteSuperProperty);
1093     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1094 
1095     return RuntimeStubs::RuntimeThrowDeleteSuperProperty(thread);
1096 }
1097 
NotifyInlineCache(JSThread *thread, JSFunction *function)1098 JSTaggedValue SlowRuntimeStub::NotifyInlineCache(JSThread *thread, JSFunction *function)
1099 {
1100     INTERPRETER_TRACE(thread, NotifyInlineCache);
1101     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1102 
1103     JSHandle<JSFunction> functionHandle(thread, function);
1104     uint32_t slotSize = functionHandle->GetCallTarget()->GetSlotSize();
1105     return RuntimeStubs::RuntimeNotifyInlineCache(thread, functionHandle, slotSize);
1106 }
1107 
ResolveClass(JSThread *thread, JSTaggedValue ctor, TaggedArray *literal, JSTaggedValue base, JSTaggedValue lexenv)1108 JSTaggedValue SlowRuntimeStub::ResolveClass(JSThread *thread, JSTaggedValue ctor, TaggedArray *literal,
1109                                             JSTaggedValue base, JSTaggedValue lexenv)
1110 {
1111     JSHandle<JSFunction> cls(thread, ctor);
1112     JSHandle<TaggedArray> literalBuffer(thread, literal);
1113     JSHandle<JSTaggedValue> baseHandle(thread, base);
1114     JSHandle<JSTaggedValue> lexicalEnv(thread, lexenv);
1115     return RuntimeStubs::RuntimeResolveClass(thread, cls, literalBuffer, baseHandle, lexicalEnv);
1116 }
1117 
1118 // clone class may need re-set inheritance relationship due to extends may be a variable.
CloneClassFromTemplate(JSThread *thread, JSTaggedValue ctor, JSTaggedValue base, JSTaggedValue lexenv)1119 JSTaggedValue SlowRuntimeStub::CloneClassFromTemplate(JSThread *thread, JSTaggedValue ctor, JSTaggedValue base,
1120                                                       JSTaggedValue lexenv)
1121 {
1122     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1123 
1124     JSHandle<JSTaggedValue> lexenvHandle(thread, lexenv);
1125     JSHandle<JSTaggedValue> baseHandle(thread, base);
1126     JSHandle<JSFunction> cls(thread, ctor);
1127     return RuntimeStubs::RuntimeCloneClassFromTemplate(thread, cls, baseHandle, lexenvHandle);
1128 }
1129 
1130 // clone class may need re-set inheritance relationship due to extends may be a variable.
CreateClassWithBuffer(JSThread *thread, JSTaggedValue base, JSTaggedValue lexenv, JSTaggedValue constpool, uint16_t methodId, uint16_t literalId, JSTaggedValue module, JSTaggedValue length)1131 JSTaggedValue SlowRuntimeStub::CreateClassWithBuffer(JSThread *thread, JSTaggedValue base,
1132                                                      JSTaggedValue lexenv, JSTaggedValue constpool,
1133                                                      uint16_t methodId, uint16_t literalId, JSTaggedValue module,
1134                                                      JSTaggedValue length)
1135 {
1136     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1137     JSHandle<JSTaggedValue> baseHandle(thread, base);
1138     JSHandle<JSTaggedValue> lexenvHandle(thread, lexenv);
1139     JSHandle<JSTaggedValue> constpoolHandle(thread, constpool);
1140     JSHandle<JSTaggedValue> moduleHandle(thread, module);
1141     JSHandle<JSTaggedValue> lengthHandle(thread, length);
1142     return RuntimeStubs::RuntimeCreateClassWithBuffer(thread, baseHandle, lexenvHandle,
1143                                                       constpoolHandle, methodId, literalId,
1144                                                       moduleHandle, lengthHandle);
1145 }
1146 
CreateSharedClass(JSThread *thread, JSTaggedValue base, JSTaggedValue constpool, uint16_t methodId, uint16_t literalId, uint16_t length, JSTaggedValue module)1147 JSTaggedValue SlowRuntimeStub::CreateSharedClass(JSThread *thread, JSTaggedValue base,
1148                                                  JSTaggedValue constpool, uint16_t methodId, uint16_t literalId,
1149                                                  uint16_t length, JSTaggedValue module)
1150 {
1151     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1152     JSHandle<JSTaggedValue> baseHandle(thread, base);
1153     JSHandle<JSTaggedValue> constpoolHandle(thread, constpool);
1154     JSHandle<JSTaggedValue> moduleHandle(thread, module);
1155     return RuntimeStubs::RuntimeCreateSharedClass(thread, baseHandle, constpoolHandle, methodId,
1156                                                   literalId, length, moduleHandle);
1157 }
1158 
SetClassInheritanceRelationship(JSThread *thread, JSTaggedValue ctor, JSTaggedValue base)1159 JSTaggedValue SlowRuntimeStub::SetClassInheritanceRelationship(JSThread *thread, JSTaggedValue ctor, JSTaggedValue base)
1160 {
1161     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1162 
1163     JSHandle<JSTaggedValue> cls(thread, ctor);
1164     JSHandle<JSTaggedValue> parent(thread, base);
1165     return RuntimeStubs::RuntimeSetClassInheritanceRelationship(thread, cls, parent);
1166 }
1167 
SetClassConstructorLength(JSThread *thread, JSTaggedValue ctor, JSTaggedValue length)1168 JSTaggedValue SlowRuntimeStub::SetClassConstructorLength(JSThread *thread, JSTaggedValue ctor, JSTaggedValue length)
1169 {
1170     return RuntimeStubs::RuntimeSetClassConstructorLength(thread, ctor, length);
1171 }
1172 
GetModuleNamespace(JSThread *thread, int32_t index)1173 JSTaggedValue SlowRuntimeStub::GetModuleNamespace(JSThread *thread, int32_t index)
1174 {
1175     return RuntimeStubs::RuntimeGetModuleNamespace(thread, index);
1176 }
1177 
GetModuleNamespace(JSThread *thread, JSTaggedValue localName)1178 JSTaggedValue SlowRuntimeStub::GetModuleNamespace(JSThread *thread, JSTaggedValue localName)
1179 {
1180     return RuntimeStubs::RuntimeGetModuleNamespace(thread, localName);
1181 }
1182 
LdBigInt(JSThread *thread, JSTaggedValue numberBigInt)1183 JSTaggedValue SlowRuntimeStub::LdBigInt(JSThread *thread, JSTaggedValue numberBigInt)
1184 {
1185     INTERPRETER_TRACE(thread, LdBigInt);
1186     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1187     JSHandle<JSTaggedValue> bigint(thread, numberBigInt);
1188     return RuntimeStubs::RuntimeLdBigInt(thread, bigint);
1189 }
AsyncGeneratorResolve(JSThread *thread, JSTaggedValue asyncFuncObj, const JSTaggedValue value, JSTaggedValue flag)1190 JSTaggedValue SlowRuntimeStub::AsyncGeneratorResolve(JSThread *thread, JSTaggedValue asyncFuncObj,
1191                                                      const JSTaggedValue value, JSTaggedValue flag)
1192 {
1193     INTERPRETER_TRACE(thread, AsyncGeneratorResolve);
1194     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1195 
1196     JSHandle<JSTaggedValue> genObjHandle(thread, asyncFuncObj);
1197     JSHandle<JSTaggedValue> valueHandle(thread, value);
1198 
1199     return RuntimeStubs::RuntimeAsyncGeneratorResolve(thread, genObjHandle, valueHandle, flag);
1200 }
1201 
AsyncGeneratorReject(JSThread *thread, JSTaggedValue asyncFuncObj, const JSTaggedValue value)1202 JSTaggedValue SlowRuntimeStub::AsyncGeneratorReject(JSThread *thread, JSTaggedValue asyncFuncObj,
1203                                                     const JSTaggedValue value)
1204 {
1205     INTERPRETER_TRACE(thread, AsyncGeneratorReject);
1206     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1207 
1208     JSHandle<JSAsyncGeneratorObject> asyncFuncObjHandle(thread, asyncFuncObj);
1209     JSHandle<JSTaggedValue> valueHandle(thread, value);
1210 
1211     return JSAsyncGeneratorObject::AsyncGeneratorReject(thread, asyncFuncObjHandle, valueHandle);
1212 }
1213 
LdPatchVar(JSThread *thread, uint32_t index)1214 JSTaggedValue SlowRuntimeStub::LdPatchVar(JSThread *thread, uint32_t index)
1215 {
1216     INTERPRETER_TRACE(thread, LdPatchVar);
1217     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1218 
1219     return RuntimeStubs::RuntimeLdPatchVar(thread, index);
1220 }
1221 
StPatchVar(JSThread *thread, uint32_t index, JSTaggedValue value)1222 JSTaggedValue SlowRuntimeStub::StPatchVar(JSThread *thread, uint32_t index, JSTaggedValue value)
1223 {
1224     INTERPRETER_TRACE(thread, StPatchVar);
1225     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1226 
1227     JSHandle<JSTaggedValue> valueHandle(thread, value);
1228     return RuntimeStubs::RuntimeStPatchVar(thread, index, valueHandle);
1229 }
1230 
NotifyConcurrentResult(JSThread *thread, JSTaggedValue result, JSTaggedValue hint)1231 JSTaggedValue SlowRuntimeStub::NotifyConcurrentResult(JSThread *thread, JSTaggedValue result, JSTaggedValue hint)
1232 {
1233     INTERPRETER_TRACE(thread, NotifyConcurrentResult);
1234     return RuntimeStubs::RuntimeNotifyConcurrentResult(thread, result, hint);
1235 }
1236 
UpdateAOTHClass(JSThread *thread, JSTaggedValue jshclass, JSTaggedValue newjshclass, JSTaggedValue key)1237 JSTaggedValue SlowRuntimeStub::UpdateAOTHClass(JSThread *thread, JSTaggedValue jshclass,
1238                                                JSTaggedValue newjshclass, JSTaggedValue key)
1239 {
1240     INTERPRETER_TRACE(thread, UpdateAOTHClass);
1241     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1242     JSHandle<JSHClass> oldhclass(thread, jshclass);
1243     JSHandle<JSHClass> newhclass(thread, newjshclass);
1244     return RuntimeStubs::RuntimeUpdateAOTHClass(thread, oldhclass, newhclass, key);
1245 }
1246 
DefineField(JSThread *thread, JSTaggedValue obj, JSTaggedValue propKey, JSTaggedValue value)1247 JSTaggedValue SlowRuntimeStub::DefineField(JSThread *thread, JSTaggedValue obj,
1248                                            JSTaggedValue propKey, JSTaggedValue value)
1249 {
1250     INTERPRETER_TRACE(thread, DefineField);
1251     return RuntimeStubs::RuntimeDefineField(thread, obj, propKey, value);
1252 }
1253 
CreatePrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv, uint32_t count, JSTaggedValue constpool, uint32_t literalId, JSTaggedValue module)1254 JSTaggedValue SlowRuntimeStub::CreatePrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv,
1255     uint32_t count, JSTaggedValue constpool, uint32_t literalId, JSTaggedValue module)
1256 {
1257     INTERPRETER_TRACE(thread, CreatePrivateProperty);
1258     return RuntimeStubs::RuntimeCreatePrivateProperty(thread, lexicalEnv, count, constpool, literalId, module);
1259 }
1260 
DefinePrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv, uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj, JSTaggedValue value)1261 JSTaggedValue SlowRuntimeStub::DefinePrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv,
1262     uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj, JSTaggedValue value)
1263 {
1264     INTERPRETER_TRACE(thread, DefinePrivateProperty);
1265     return RuntimeStubs::RuntimeDefinePrivateProperty(thread, lexicalEnv, levelIndex, slotIndex, obj, value);
1266 }
1267 
LdPrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv, uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj)1268 JSTaggedValue SlowRuntimeStub::LdPrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv,
1269     uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj)
1270 {
1271     INTERPRETER_TRACE(thread, LdPrivateProperty);
1272     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1273     return RuntimeStubs::RuntimeLdPrivateProperty(thread, lexicalEnv, levelIndex, slotIndex, obj);
1274 }
1275 
StPrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv, uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj, JSTaggedValue value)1276 JSTaggedValue SlowRuntimeStub::StPrivateProperty(JSThread *thread, JSTaggedValue lexicalEnv,
1277     uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj, JSTaggedValue value)
1278 {
1279     INTERPRETER_TRACE(thread, StPrivateProperty);
1280     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1281     return RuntimeStubs::RuntimeStPrivateProperty(thread, lexicalEnv, levelIndex, slotIndex, obj, value);
1282 }
1283 
TestIn(JSThread *thread, JSTaggedValue lexicalEnv, uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj)1284 JSTaggedValue SlowRuntimeStub::TestIn(JSThread *thread, JSTaggedValue lexicalEnv,
1285     uint32_t levelIndex, uint32_t slotIndex, JSTaggedValue obj)
1286 {
1287     INTERPRETER_TRACE(thread, TestIn);
1288     [[maybe_unused]] EcmaHandleScope handleScope(thread);
1289     return RuntimeStubs::RuntimeTestIn(thread, lexicalEnv, levelIndex, slotIndex, obj);
1290 }
1291 }  // namespace panda::ecmascript
1292