diff options
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4module.cpp | 22 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4module_p.h | 2 |
4 files changed, 15 insertions, 13 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index e92d7c69ba..90c75b204d 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -1700,7 +1700,7 @@ void ExecutionEngine::injectModule(const QQmlRefPointer<CompiledData::Compilatio modules.insert(moduleUnit->finalUrl(), moduleUnit); } -QQmlRefPointer<CompiledData::CompilationUnit> ExecutionEngine::loadModule(const QUrl &_url, CompiledData::CompilationUnit *referrer) +QQmlRefPointer<CompiledData::CompilationUnit> ExecutionEngine::loadModule(const QUrl &_url, const CompiledData::CompilationUnit *referrer) { QUrl url = QQmlTypeLoader::normalize(_url); if (referrer) diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h index 00879511d3..4cd7e40013 100644 --- a/src/qml/jsruntime/qv4engine_p.h +++ b/src/qml/jsruntime/qv4engine_p.h @@ -582,7 +582,7 @@ public: QHash<QUrl, QQmlRefPointer<CompiledData::CompilationUnit>> modules; void injectModule(const QQmlRefPointer<CompiledData::CompilationUnit> &moduleUnit); - QQmlRefPointer<CompiledData::CompilationUnit> loadModule(const QUrl &_url, CompiledData::CompilationUnit *referrer = nullptr); + QQmlRefPointer<CompiledData::CompilationUnit> loadModule(const QUrl &_url, const CompiledData::CompilationUnit *referrer = nullptr); #endif private: diff --git a/src/qml/jsruntime/qv4module.cpp b/src/qml/jsruntime/qv4module.cpp index e8e84ac965..5974c9be73 100644 --- a/src/qml/jsruntime/qv4module.cpp +++ b/src/qml/jsruntime/qv4module.cpp @@ -162,7 +162,9 @@ bool Module::virtualDeleteProperty(Managed *m, PropertyKey id) struct ModuleNamespaceIterator : ObjectOwnPropertyKeyIterator { - uint exportIndex = 0; + QStringList exportedNames; + int exportIndex = 0; + ModuleNamespaceIterator(const QStringList &names) : exportedNames(names) {} ~ModuleNamespaceIterator() override = default; PropertyKey next(const Object *o, Property *pd = nullptr, PropertyAttributes *attrs = nullptr) override; @@ -171,23 +173,23 @@ struct ModuleNamespaceIterator : ObjectOwnPropertyKeyIterator PropertyKey ModuleNamespaceIterator::next(const Object *o, Property *pd, PropertyAttributes *attrs) { const Module *module = static_cast<const Module *>(o); - if (exportIndex < module->d()->unit->unitData()->localExportEntryTableSize) { + if (exportIndex < exportedNames.count()) { if (attrs) *attrs = Attr_Data; - if (pd) { - const CompiledData::ExportEntry &entry = module->d()->unit->unitData()->localExportEntryTable()[exportIndex]; - Scope scope(module->engine()); - ScopedString exportName(scope, module->d()->unit->runtimeStrings[entry.exportName]); - pd->value = *module->d()->unit->resolveExport(exportName); - } + Scope scope(module->engine()); + ScopedString exportName(scope, scope.engine->newString(exportedNames.at(exportIndex))); exportIndex++; + if (pd) + pd->value = *module->d()->unit->resolveExport(exportName); + return exportName->toPropertyKey(); } return ObjectOwnPropertyKeyIterator::next(o, pd, attrs); } -OwnPropertyKeyIterator *Module::virtualOwnPropertyKeys(const Object *) +OwnPropertyKeyIterator *Module::virtualOwnPropertyKeys(const Object *o) { - return new ModuleNamespaceIterator; + const Module *module = static_cast<const Module *>(o); + return new ModuleNamespaceIterator(module->d()->unit->exportedNames()); } Heap::Object *Module::virtualGetPrototypeOf(const Managed *) diff --git a/src/qml/jsruntime/qv4module_p.h b/src/qml/jsruntime/qv4module_p.h index c22e6cd1c3..bb004b3b44 100644 --- a/src/qml/jsruntime/qv4module_p.h +++ b/src/qml/jsruntime/qv4module_p.h @@ -81,7 +81,7 @@ struct Q_QML_EXPORT Module : public Object { static bool virtualDefineOwnProperty(Managed *, PropertyKey, const Property *, PropertyAttributes); static bool virtualPut(Managed *, PropertyKey, const Value &, Value *); static bool virtualDeleteProperty(Managed *m, PropertyKey id); - static OwnPropertyKeyIterator *virtualOwnPropertyKeys(const Object *); + static OwnPropertyKeyIterator *virtualOwnPropertyKeys(const Object *m); static Heap::Object *virtualGetPrototypeOf(const Managed *); static bool virtualSetPrototypeOf(Managed *, const Object *proto); static bool virtualIsExtensible(const Managed *); |