Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qv4runtimeapi_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant
4#ifndef QV4RUNTIMEAPI_P_H
5#define QV4RUNTIMEAPI_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <private/qv4global_p.h>
19#include <private/qv4staticvalue_p.h>
20
22
23namespace QV4 {
24
25typedef uint Bool;
26
27struct Q_QML_EXPORT Runtime {
29 typedef ReturnedValue (*BinaryOperation)(const Value &left, const Value &right);
31
32 enum class Throws { No, Yes };
33 enum class ChangesContext { No, Yes };
34 enum class Pure { No, Yes };
36
39 struct Method
40 {
41 static constexpr bool throws = t == Throws::Yes;
42 static constexpr bool changesContext = c == ChangesContext::Yes;
43 static constexpr bool pure = p == Pure::Yes;
45 };
49
50 /* call */
60 {
61 static ReturnedValue call(ExecutionEngine *, int, Value[], int);
62 };
64 {
65 static ReturnedValue call(ExecutionEngine *, const Value &, int, Value[], int);
66 };
68 {
69 static ReturnedValue call(ExecutionEngine *, const Value &, uint, Value[], int);
70 };
72 {
73 static ReturnedValue call(ExecutionEngine *, const Value &, Value[], int);
74 };
76 {
77 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &, Value[], int);
78 };
84 {
85 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &, Value[], int);
86 };
91
92 /* construct */
94 {
95 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &, Value[], int);
96 };
98 {
99 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &, Value[], int);
100 };
101
102 /* load & store */
104 {
105 static void call(ExecutionEngine *, int, const Value &);
106 };
108 {
109 static void call(ExecutionEngine *, int, const Value &);
110 };
112 {
113 static void call(ExecutionEngine *, const Value &, int, const Value &);
114 };
116 {
117 static void call(ExecutionEngine *, const Value &, const Value &, const Value &);
118 };
120 {
121 static ReturnedValue call(ExecutionEngine *, const Value &, int);
122 };
124 {
125 static ReturnedValue call(ExecutionEngine *, int);
126 };
128 {
129 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &);
130 };
132 {
133 static ReturnedValue call(ExecutionEngine *, const Value &);
134 };
136 {
137 static void call(ExecutionEngine *, const Value &, const Value &);
138 };
152 {
153 static ReturnedValue call(ExecutionEngine *, Function *, const Value &, int);
154 };
156 {
157 static void call(Function *, const Value &, int, const Value &);
158 };
160 {
161 static void call(Function *, const Value &, int, const Value &);
162 };
163
164 /* typeof */
166 {
167 static ReturnedValue call(ExecutionEngine *, const Value &);
168 };
170 {
171 static ReturnedValue call(ExecutionEngine *, int);
172 };
173
174 /* delete */
176 {
177 static Bool call(ExecutionEngine *, const Value &, const Value &);
178 };
180 {
181 static ReturnedValue call(ExecutionEngine *, Function *, const Value &, const Value &);
182 };
184 {
185 static Bool call(ExecutionEngine *, int);
186 };
188 {
189 static ReturnedValue call(ExecutionEngine *, Function *, int);
190 };
191
192 /* exceptions & scopes */
194 {
195 static void call(ExecutionEngine *, const Value &);
196 };
198 {
199 static void call(JSTypesStackFrame *);
200 };
206 {
207 static void call(ExecutionEngine *, int, int);
208 };
210 {
211 static void call(ExecutionEngine *, int);
212 };
214 {
215 static void call(ExecutionEngine *);
216 };
218 {
219 static void call(ExecutionEngine *, int);
220 };
222 {
223 static void call(ExecutionEngine *);
224 };
226 {
227 static void call(ExecutionEngine *, int);
228 };
230 {
231 static void call(ExecutionEngine *, const Value &);
232 };
233
234 /* garbage collection */
236 {
237 static void call(const Value &toBeMarked);
238 };
239
240 /* closures */
242 {
243 static ReturnedValue call(ExecutionEngine *, int);
244 };
245
246 /* Function header */
248 {
249 static ReturnedValue call(ExecutionEngine *, const Value &);
250 };
252 {
253 static void call(ExecutionEngine *, Bool, int);
254 };
267
268 /* literals */
274 {
275 static ReturnedValue call(ExecutionEngine *, int, Value[], int);
276 };
278 {
279 static ReturnedValue call(ExecutionEngine *, int, const Value &, Value[]);
280 };
281
282 /* for-in, for-of and array destructuring */
284 {
285 static ReturnedValue call(ExecutionEngine *, const Value &, int);
286 };
288 {
289 static ReturnedValue call(ExecutionEngine *, const Value &, Value *);
290 };
292 {
293 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &, Value *);
294 };
296 {
297 static ReturnedValue call(ExecutionEngine *, const Value &);
298 };
303
304 /* conversions */
306 {
307 static ReturnedValue call(ExecutionEngine *, const Value &);
308 };
310 {
311 static Bool call(const Value &);
312 };
314 {
315 static ReturnedValue call(ExecutionEngine *, const Value &);
316 };
317 /* unary operators */
319 {
320 static ReturnedValue call(const Value &);
321 };
322
323 /* binary operators */
325 {
326 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &);
327 };
329 {
330 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &);
331 };
333 {
334 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &);
335 };
337 {
338 static ReturnedValue call(ExecutionEngine *, const Value &, const Value &);
339 };
341 {
342 static ReturnedValue call(const Value &, const Value &);
343 };
345 {
346 static ReturnedValue call(const Value &, const Value &);
347 };
349 {
350 static ReturnedValue call(const Value &, const Value &);
351 };
353 {
354 static ReturnedValue call(const Value &, const Value &);
355 };
357 {
358 static ReturnedValue call(const Value &, const Value &);
359 };
361 {
362 static ReturnedValue call(const Value &, const Value &);
363 };
365 {
366 static ReturnedValue call(const Value &, const Value &);
367 };
369 {
370 static ReturnedValue call(const Value &, const Value &);
371 };
373 {
374 static ReturnedValue call(const Value &, const Value &);
375 };
377 {
378 static ReturnedValue call(const Value &, const Value &);
379 };
381 {
382 static ReturnedValue call(const Value &, const Value &);
383 };
385 {
386 static ReturnedValue call(const Value &, const Value &);
387 };
389 {
390 static ReturnedValue call(const Value &, const Value &);
391 };
393 {
394 static ReturnedValue call(const Value &, const Value &);
395 };
397 {
398 static ReturnedValue call(const Value &, const Value &);
399 };
401 {
402 static ReturnedValue call(const Value &, const Value &);
403 };
405 {
406 static ReturnedValue call(const Value &, const Value &);
407 };
409 {
410 static ReturnedValue call(const Value &, const Value &);
411 };
413 {
414 static ReturnedValue call(const Value &, const Value &);
415 };
416
417 /* comparisons */
419 {
420 static Bool call(const Value &, const Value &);
421 };
423 {
424 static Bool call(const Value &, const Value &);
425 };
427 {
428 static Bool call(const Value &, const Value &);
429 };
431 {
432 static Bool call(const Value &, const Value &);
433 };
435 {
436 static Bool call(const Value &, const Value &);
437 };
439 {
440 static Bool call(const Value &, const Value &);
441 };
443 {
444 static Bool call(const Value &, const Value &);
445 };
447 {
448 static Bool call(const Value &, const Value &);
449 };
450
452 {
453 static Bool call(ExecutionEngine *, const Value &, const Value &);
454 };
456 {
457 static Bool call(ExecutionEngine *, const Value &, const Value &);
458 };
459
461 {
462 static ReturnedValue call(ExecutionEngine *, int);
463 };
465 {
466 static ReturnedValue call(Function *, int);
467 };
468
470 static const int tailCall_function = -1;
471 static const int tailCall_thisObject = -2;
472 static const int tailCall_argv = -3;
473 static const int tailCall_argc = -4;
474 };
475
476 static QHash<const void *, const char *> symbolTable();
477};
478
479static_assert(std::is_standard_layout<Runtime>::value, "Runtime needs to be standard layout in order for us to be able to use offsetof");
480static_assert(sizeof(Runtime::BinaryOperation) == sizeof(void*), "JIT expects a function pointer to fit into a regular pointer, for cross-compilation offset translation");
481
482} // namespace QV4
483
484QT_END_NAMESPACE
485
486#endif // QV4RUNTIMEAPI_P_H
Definition qjsvalue.h:23
@ STRING_HINT
@ PREFERREDTYPE_HINT
@ NUMBER_HINT
uint Bool
Q_STATIC_ASSERT(sizeof(SharedImageHeader) % 4==0)
DEFINE_MANAGED_VTABLE(ArrayData)