aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp2
-rw-r--r--src/qml/jsruntime/qv4engine_p.h2
-rw-r--r--src/qml/jsruntime/qv4module.cpp22
-rw-r--r--src/qml/jsruntime/qv4module_p.h2
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 *);