4#ifndef QV4EXECUTABLECOMPILATIONUNIT_P_H
5#define QV4EXECUTABLECOMPILATIONUNIT_P_H
18#include <private/qintrusivelist_p.h>
19#include <private/qqmlmetatype_p.h>
20#include <private/qqmlnullablevalue_p.h>
21#include <private/qqmlpropertycachevector_p.h>
22#include <private/qqmlrefcount_p.h>
23#include <private/qqmltype_p.h>
24#include <private/qqmltypenamecache_p.h>
25#include <private/qv4compileddata_p.h>
26#include <private/qv4identifierhash_p.h>
37class CompilationUnitMapper;
57static_assert(std::is_standard_layout_v<CompilationUnitRuntimeData>);
84 return m_compilationUnit->typeNameCache;
89 return &m_compilationUnit->propertyCaches;
94 return m_compilationUnit->rootPropertyCache();
100 inline IdentifierHash namedObjectsPerComponent(
int componentObjectIndex);
108 return m_compilationUnit->resolvedType(
id);
113 return m_compilationUnit->qmlTypeForComponent(inlineComponentName);
120 return m_compilationUnit->inlineComponentId(inlineComponentName);
131 return m_compilationUnit->nativeMethodsAcceptThisObjects();
138 bool isESModule()
const {
return m_compilationUnit->isESModule(); }
140 int objectCount()
const {
return m_compilationUnit->objectCount(); }
143 return m_compilationUnit->objectAt(
index);
146 Heap::Object *templateObjectAt(
int index)
const;
148 Heap::Module *instantiate();
151 QVector<ResolveSetEntry> resolveSet;
152 return resolveExportRecursively(exportName, &resolveSet);
158 QVector<const ExecutableCompilationUnit*> exportNameSet;
159 getExportedNamesRecursively(&
names, &exportNameSet);
161 auto last = std::unique(
names.begin(),
names.end());
167 void evaluateModuleRequests();
170 void markObjects(
MarkStack *markStack)
const;
175 return m_compilationUnit->bindingValueAsNumber(binding);
179 return m_compilationUnit->bindingValueAsScriptString(binding);
190 Heap::Module *
module()
const {
return m_module; }
191 void setModule(Heap::Module *module) { m_module =
module; }
199 return &m_compilationUnit->dependentScripts;
205 return &m_compilationUnit->bindingPropertyDataPerObject.at(objectIndex);
210 return m_compilationUnit;
218 const auto *
data = unitData();
219 return data->indexOfRootFunction != -1
220 ? runtimeFunctions[
data->indexOfRootFunction]
229 {
return unitData()->stringTableSize; }
234 QQmlRefPointer<CompiledData::CompilationUnit> m_compilationUnit;
235 Heap::Module *m_module =
nullptr;
237 struct ResolveSetEntry
240 ResolveSetEntry(ExecutableCompilationUnit *module,
QV4::String *exportName)
241 : module(module), exportName(exportName) {}
242 ExecutableCompilationUnit *
module = nullptr;
246 ExecutableCompilationUnit();
247 ExecutableCompilationUnit(QQmlRefPointer<CompiledData::CompilationUnit> &&compilationUnit);
248 ~ExecutableCompilationUnit();
250 static QQmlRefPointer<ExecutableCompilationUnit>
create(
251 QQmlRefPointer<CompiledData::CompilationUnit> &&compilationUnit,
255 QVector<ResolveSetEntry> *resolveSet);
259 Q_NEVER_INLINE IdentifierHash createNamedObjectsPerComponent(
int componentObjectIndex);
260 const CompiledData::ExportEntry *lookupNameInExportTable(
261 const CompiledData::ExportEntry *firstExportEntry,
int tableSize,
264 void getExportedNamesRecursively(
265 QStringList *
names, QVector<const ExecutableCompilationUnit *> *exportNameSet,
266 bool includeDefaultExport =
true)
const;
273 return createNamedObjectsPerComponent(componentObjectIndex);
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString url(FormattingOptions options=FormattingOptions(PrettyDecoded)) const
Returns a string representation of the URL.
const CompiledObject * objectAt(int index) const
const CompiledData::Unit * unitData() const
const CompiledData::BindingPropertyData * bindingPropertyDataPerObjectAt(qsizetype objectIndex) const
QStringList exportedNames() const
bool ignoresFunctionSignature() const
int totalBindingsCount() const
bool componentsAreBound() const
QQmlPropertyCacheVector * propertyCachesPtr()
QHash< int, IdentifierHash > namedObjectsPerComponentCache
bool valueTypesAreAddressable() const
Heap::Module * module() const
ResolvedTypeReference * resolvedType(int id) const
void mark(MarkStack *markStack) const
const Value * resolveExport(QV4::String *exportName)
void setModule(Heap::Module *module)
QQmlPropertyCache::ConstPtr rootPropertyCache() const
QV4::Function * rootFunction()
double bindingValueAsNumber(const CompiledData::Binding *binding) const
IdentifierHash namedObjectsPerComponent(int componentObjectIndex)
int inlineComponentId(const QString &inlineComponentName) const
int totalParserStatusCount() const
QMetaType metaType() const
QString finalUrlString() const
QString bindingValueAsScriptString(const CompiledData::Binding *binding) const
QQmlType qmlTypeForComponent(const QString &inlineComponentName=QString()) const
int totalObjectCount() const
quint32 totalStringCount() const
QString stringAt(uint index) const
bool nativeMethodsAcceptThisObjects() const
bool valueTypesAreCopied() const
const QVector< QQmlRefPointer< QQmlScriptData > > * dependentScriptsPtr() const
const QQmlRefPointer< QV4::CompiledData::CompilationUnit > & baseCompilationUnit() const
QQmlRefPointer< QQmlTypeNameCache > typeNameCache() const
QSet< QString >::iterator it
Combined button and popup list for selecting options.
QVector< const QQmlPropertyData * > BindingPropertyData
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
engine evaluate("var myObject = new MyObject()")
[8]
QVector< QV4::Heap::Object * > templateObjects
QVector< QV4::Heap::InternalClass * > runtimeBlocks
Heap::InternalClass ** runtimeClasses
QVector< QV4::Function * > runtimeFunctions
const StaticValue * constants
const StaticValue ** imports
QV4::StaticValue * runtimeRegularExpressions
Heap::String ** runtimeStrings
QV4::Lookup * runtimeLookups