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
qv4qmetaobjectwrapper.cpp
Go to the documentation of this file.
1
// Copyright (C) 2024 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
#
include
"qv4qmetaobjectwrapper_p.h"
6
7
#
include
<
private
/
qqmlobjectorgadget_p
.
h
>
8
#
include
<
private
/
qv4jscall_p
.
h
>
9
#
include
<
private
/
qv4qobjectwrapper_p
.
h
>
10
11
QT_BEGIN_NAMESPACE
12
13
using
namespace
Qt::StringLiterals;
14
15
namespace
QV4
{
16
17
void
Heap
::
QMetaObjectWrapper
::
init
(
const
QMetaObject *metaObject)
18
{
19
FunctionObject::init();
20
m_metaObject = metaObject;
21
}
22
23
void
Heap
::
QMetaObjectWrapper
::
destroy
()
24
{
25
delete
[] m_constructors;
26
FunctionObject::destroy();
27
}
28
29
ReturnedValue
QMetaObjectWrapper
::
create
(
ExecutionEngine
*
engine
,
const
QMetaObject
*
metaObject
) {
30
31
Scope
scope
(
engine
);
32
Scoped
<
QMetaObjectWrapper
>
mo
(
scope
,
engine
->
memoryManager
->
allocate
<
QMetaObjectWrapper
>(
metaObject
)->
asReturnedValue
());
33
mo
->
init
(
engine
);
34
return
mo
->
asReturnedValue
();
35
}
36
37
void
QMetaObjectWrapper
::
init
(
ExecutionEngine
*) {
38
const
QMetaObject
&
mo
= *
d
()->
metaObject
();
39
40
for
(
int
i
= 0;
i
<
mo
.
enumeratorCount
();
i
++) {
41
QMetaEnum
Enum
=
mo
.
enumerator
(
i
);
42
for
(
int
k
= 0;
k
<
Enum
.
keyCount
();
k
++) {
43
const
char
*
key
=
Enum
.
key
(
k
);
44
const
int
value
=
Enum
.
value
(
k
);
45
defineReadonlyProperty
(
QLatin1String
(
key
),
Value
::
fromInt32
(
value
));
46
}
47
}
48
}
49
50
ReturnedValue
QMetaObjectWrapper
::
virtualCallAsConstructor
(
const
FunctionObject
*
f
,
const
Value
*
argv
,
int
argc
,
const
Value
*)
51
{
52
Q_ASSERT
(
f
->
as
<
QMetaObjectWrapper
>());
53
return
construct
(
static_cast
<
const
QMetaObjectWrapper
*>(
f
)->
d
(),
argv
,
argc
);
54
}
55
56
ReturnedValue
QMetaObjectWrapper
::
constructInternal
(
57
const
QMetaObject
*
mo
,
const
QQmlPropertyData
*
constructors
,
Heap
::
FunctionObject
*
d
,
58
const
Value
*
argv
,
int
argc
)
59
{
60
ExecutionEngine
*
v4
=
d
->
internalClass
->
engine
;
61
62
if
(!
constructors
) {
63
return
v4
->
throwTypeError
(
QLatin1String
(
mo
->
className
())
64
+
QLatin1String
(
" has no invokable constructor"
));
65
}
66
67
Scope
scope
(
v4
);
68
ScopedObject
object
(
scope
);
69
JSCallData
cData
(
nullptr
,
argv
,
argc
);
70
CallData
*
callData
=
cData
.
callData
(
scope
);
71
72
const
QQmlObjectOrGadget
objectOrGadget
(
mo
);
73
74
const
auto
callType
= [](
QMetaType
metaType
) {
75
return
metaType
.
flags
() &
QMetaType
::
PointerToQObject
76
?
QMetaObject
::
CreateInstance
77
:
QMetaObject
::
ConstructInPlace
;
78
};
79
80
const
int
constructorCount
=
mo
->
constructorCount
();
81
if
(
constructorCount
== 1) {
82
object
=
QObjectMethod
::
callPrecise
(
83
objectOrGadget
,
constructors
[0],
v4
,
callData
,
84
callType
(
constructors
[0].
propType
()));
85
}
else
if
(
const
QQmlPropertyData
*
ctor
=
QObjectMethod
::
resolveOverloaded
(
86
objectOrGadget
,
constructors
,
constructorCount
,
v4
,
callData
)) {
87
object
=
QObjectMethod
::
callPrecise
(
88
objectOrGadget
, *
ctor
,
v4
,
callData
,
callType
(
ctor
->
propType
()));
89
}
90
91
if
(
object
) {
92
Scoped
<
FunctionObject
>
functionObject
(
scope
,
d
);
93
object
->
defineDefaultProperty
(
v4
->
id_constructor
(),
functionObject
);
94
object
->
setPrototypeOf
(
functionObject
);
95
}
96
97
return
object
.
asReturnedValue
();
98
}
99
100
bool
QMetaObjectWrapper
::
virtualIsEqualTo
(
Managed
*
a
,
Managed
*
b
)
101
{
102
const
QMetaObjectWrapper
*
aMetaObject
=
a
->
as
<
QMetaObjectWrapper
>();
103
Q_ASSERT
(
aMetaObject
);
104
const
QMetaObjectWrapper
*
bMetaObject
=
b
->
as
<
QMetaObjectWrapper
>();
105
return
bMetaObject
&&
aMetaObject
->
metaObject
() ==
bMetaObject
->
metaObject
();
106
}
107
108
DEFINE_OBJECT_VTABLE
(
QMetaObjectWrapper
);
109
110
}
// namespace QV4
111
112
QT_END_NAMESPACE
QPlatformGraphicsBufferHelper
\inmodule QtGui
QV4::Heap
Definition
qv4compileddata_p.h:72
QV4
Definition
qjsvalue.h:23
QV4::Heap::QMetaObjectWrapper
Definition
qv4qmetaobjectwrapper_p.h:32
QV4::Heap::QMetaObjectWrapper::init
void init(const QMetaObject *metaObject)
Definition
qv4qmetaobjectwrapper.cpp:17
QV4::Heap::QMetaObjectWrapper::destroy
void destroy()
Definition
qv4qmetaobjectwrapper.cpp:23
QV4::QMetaObjectWrapper
Definition
qv4qmetaobjectwrapper_p.h:87
qtdeclarative
src
qml
jsruntime
qv4qmetaobjectwrapper.cpp
Generated on
for Qt by
1.14.0