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
qqmlbuiltins_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 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
5#ifndef QQMLBUILTINS_H
6#define QQMLBUILTINS_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <private/qqmlcomponentattached_p.h>
20
21#include <QtQml/qjsvalue.h>
22#include <QtQml/qqmlcomponent.h>
23#include <QtQml/qqmlscriptstring.h>
24
25#include <QtQmlIntegration/qqmlintegration.h>
26
27#include <QtCore/qobject.h>
28#include <QtCore/qglobal.h>
29#include <QtCore/qtmetamacros.h>
30#include <QtCore/qmetaobject.h>
31#include <QtCore/qdatetime.h>
32#include <QtCore/qstring.h>
33#include <QtCore/qurl.h>
34#include <QtCore/qvariantmap.h>
35#include <QtCore/qtypes.h>
36#include <QtCore/qchar.h>
37#include <QtCore/qjsonobject.h>
38#include <QtCore/qjsonvalue.h>
39#include <QtCore/qjsonarray.h>
40
41#include <climits>
42
43#if QT_CONFIG(regularexpression)
44#include <QtCore/qregularexpression.h>
45#endif
46
47QT_BEGIN_NAMESPACE
48
49// moc doesn't do 64bit constants, so we have to determine the size of qsizetype indirectly.
50// We assume that qsizetype is always the same size as a pointer. I haven't seen a platform
51// where this is not the case.
52// Furthermore moc is wrong about pretty much everything on 64bit windows. We need to hardcode
53// the size there.
54// Likewise, we also have to determine the size of long and ulong indirectly.
55
56#if defined(Q_OS_WIN64)
57
58static_assert(sizeof(long) == 4);
59#define QML_LONG_IS_32BIT
60static_assert(sizeof(qsizetype) == 8);
61#define QML_SIZE_IS_64BIT
62
63#elif QT_POINTER_SIZE == 4
64
65static_assert(sizeof(long) == 4);
66#define QML_LONG_IS_32BIT
67static_assert(sizeof(qsizetype) == 4);
68#define QML_SIZE_IS_32BIT
69
70#else
71
72static_assert(sizeof(long) == 8);
73#define QML_LONG_IS_64BIT
74static_assert(sizeof(qsizetype) == 8);
75#define QML_SIZE_IS_64BIT
76
77#endif
78
79#define QML_EXTENDED_JAVASCRIPT(EXTENDED_TYPE)
80 Q_CLASSINFO("QML.Extended", #EXTENDED_TYPE)
81 Q_CLASSINFO("QML.ExtensionIsJavaScript", "true")
82
83template<typename A> struct QQmlPrimitiveAliasFriend {};
84
85#define QML_PRIMITIVE_ALIAS(PRIMITIVE_ALIAS)
86 Q_CLASSINFO("QML.PrimitiveAlias", #PRIMITIVE_ALIAS)
87 friend QQmlPrimitiveAliasFriend<PRIMITIVE_ALIAS>;
88
90{
91 Q_GADGET
92 QML_VALUE_TYPE(void)
94#if !QT_CONFIG(regularexpression)
96#endif
97 QML_FOREIGN(void)
98};
99
101{
102 Q_GADGET
103 QML_VALUE_TYPE(var)
107};
108
110{
111 Q_GADGET
112 QML_NAMED_ELEMENT(QtObject)
115 Q_CLASSINFO("QML.Root", "true")
116};
117
119{
120 Q_GADGET
121 QML_VALUE_TYPE(int)
123 QML_FOREIGN(int)
124#ifdef QML_SIZE_IS_32BIT
125 // Keep qsizetype as primitive alias. We want it as separate type.
127#endif
128};
129
131{
132 Q_GADGET
133 QML_FOREIGN(qint32)
134 QML_USING(int)
135};
136
138{
139 Q_GADGET
140 QML_FOREIGN(int32_t)
141 QML_USING(int)
142};
143
145{
146 Q_GADGET
147 QML_VALUE_TYPE(real)
148 QML_VALUE_TYPE(double)
150 QML_FOREIGN(double)
151};
152
154{
155 Q_GADGET
156 QML_VALUE_TYPE(string)
159};
160
162{
163 Q_GADGET
164 QML_ANONYMOUS
167};
168
170{
171 Q_GADGET
172 QML_VALUE_TYPE(bool)
174 QML_FOREIGN(bool)
175};
176
178{
179 Q_GADGET
180 QML_VALUE_TYPE(date)
183};
184
186{
187 Q_GADGET
188 QML_VALUE_TYPE(url)
191};
192
193#if QT_CONFIG(regularexpression)
194struct QQmlRegexpForeign
195{
196 Q_GADGET
197 QML_VALUE_TYPE(regexp)
198 QML_EXTENDED_JAVASCRIPT(RegExp)
199 QML_FOREIGN(QRegularExpression)
200};
201#endif
202
204{
205 Q_GADGET
206 QML_ANONYMOUS
209};
210
212{
213 Q_GADGET
214 QML_ANONYMOUS
217};
218
220{
221 Q_GADGET
222 QML_ANONYMOUS
225};
226
228{
229 Q_GADGET
230 QML_ANONYMOUS
233};
234
236{
237 Q_GADGET
238 QML_FOREIGN(int8_t)
240};
241
243{
244 Q_GADGET
245 QML_ANONYMOUS
248};
249
251{
252 Q_GADGET
253 QML_FOREIGN(uint8_t)
255};
256
258{
259 Q_GADGET
260 QML_FOREIGN(uchar)
262};
263
265{
266 Q_GADGET
267 QML_FOREIGN(char)
268#if CHAR_MAX == UCHAR_MAX
270#elif CHAR_MAX == SCHAR_MAX
272#else
273# error char is neither quint8 nor qint8
274#endif
275};
276
278{
279 Q_GADGET
280 QML_ANONYMOUS
282 QML_FOREIGN(short)
283};
284
286{
287 Q_GADGET
288 QML_FOREIGN(qint16)
289 QML_USING(short)
290};
291
293{
294 Q_GADGET
295 QML_FOREIGN(int16_t)
296 QML_USING(short)
297};
298
300{
301 Q_GADGET
302 QML_ANONYMOUS
305};
306
308{
309 Q_GADGET
310 QML_FOREIGN(quint16)
312};
313
315{
316 Q_GADGET
317 QML_FOREIGN(uint16_t)
319};
320
322{
323 Q_GADGET
324 QML_ANONYMOUS
327};
328
330{
331 Q_GADGET
332 QML_FOREIGN(quint32)
334};
335
337{
338 Q_GADGET
339 QML_FOREIGN(uint32_t)
341};
342
344{
345 Q_GADGET
346 QML_ANONYMOUS
350 // Keep qsizetype as primitive alias. We want it as separate type.
352#endif
353};
354
356{
357 Q_GADGET
358 QML_FOREIGN(qint64)
360};
361
363{
364 Q_GADGET
365 QML_FOREIGN(int64_t)
367};
368
370{
371 Q_GADGET
372 QML_FOREIGN(long)
373#if defined QML_LONG_IS_32BIT
374 QML_USING(int)
375#elif defined QML_LONG_IS_64BIT
377#else
378# error long is neither 32bit nor 64bit
379#endif
380};
381
383{
384 Q_GADGET
385 QML_ANONYMOUS
388};
389
391{
392 Q_GADGET
393 QML_FOREIGN(quint64)
395};
396
398{
399 Q_GADGET
400 QML_FOREIGN(uint64_t)
402};
403
405{
406 Q_GADGET
407 QML_FOREIGN(ulong)
408#if defined QML_LONG_IS_32BIT
410#elif defined QML_LONG_IS_64BIT
412#else
413# error ulong is neither 32bit nor 64bit
414#endif
415};
416
418{
419 Q_GADGET
420 QML_ANONYMOUS
422 QML_FOREIGN(float)
423};
424
426{
427 Q_GADGET
428 QML_FOREIGN(qreal)
429#if !defined(QT_COORD_TYPE) || defined(QT_COORD_TYPE_IS_DOUBLE)
430 QML_USING(double)
431#elif defined(QT_COORD_TYPE_IS_FLOAT)
432 QML_USING(float)
433#else
434# error qreal is neither float nor double
435#endif
436};
437
439{
440 Q_GADGET
441 QML_ANONYMOUS
444};
445
447{
448 Q_GADGET
449 QML_ANONYMOUS
452};
453
455{
456 Q_GADGET
457 QML_ANONYMOUS
460};
461
463{
464 Q_GADGET
465 QML_ANONYMOUS
466 QML_EXTENDED_JAVASCRIPT(ArrayBuffer)
468};
469
471{
472 Q_GADGET
473 QML_ANONYMOUS
476};
477
479{
480 Q_GADGET
481 QML_ANONYMOUS
484};
485
487{
488 Q_GADGET
489 QML_ANONYMOUS
492};
493
495{
496 Q_GADGET
497 QML_ANONYMOUS
500};
501
503{
504 Q_GADGET
505 QML_FOREIGN(QList<QObject*>)
507};
508
510{
511 Q_GADGET
512 QML_ANONYMOUS
515};
516
518{
519 Q_GADGET
520 QML_NAMED_ELEMENT(Component)
523};
524
526{
527 Q_GADGET
528 QML_ANONYMOUS
530};
531
533{
534 Q_GADGET
535 QML_ANONYMOUS
538};
539
541{
542 Q_GADGET
543 QML_ANONYMOUS
546};
547
549{
550 Q_GADGET
551 QML_ANONYMOUS
554};
555
557{
558 Q_GADGET
559 QML_ANONYMOUS
562};
563
564QT_END_NAMESPACE
565
566#endif // QQMLBUILTINS_H
#define QML_PRIMITIVE_ALIAS(PRIMITIVE_ALIAS)
#define QML_SIZE_IS_64BIT
#define QML_LONG_IS_64BIT
#define QML_EXTENDED_JAVASCRIPT(EXTENDED_TYPE)