diff options
author | Joerg Bornemann <joerg.bornemann@nokia.com> | 2012-05-07 10:52:28 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@nokia.com> | 2012-05-08 13:27:14 +0200 |
commit | d4988a30fc6fc67603ac110bfac2151afe5890fe (patch) | |
tree | 61c01e572f80ba6eeb9ad033b7bca481ca75241c | |
parent | ca3abca3d2c7d14630058a78253c3fdb3978f012 (diff) |
support global properties in JS imports
Example:
---foo.js---
SOMEVALUE="narf"
---myproject.qbp---
import 'foo.js' as Foo
Application {
name: Foo.SOMEVALUE
}
Change-Id: I47b335f3408ff537aeb7a3b173ba6b90a1f33718
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
-rw-r--r-- | src/lib/tools/scripttools.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/tools/scripttools.cpp b/src/lib/tools/scripttools.cpp index e2fe36ea9..7d55837f2 100644 --- a/src/lib/tools/scripttools.cpp +++ b/src/lib/tools/scripttools.cpp @@ -92,6 +92,15 @@ QScriptValue addJSImport(QScriptEngine *engine, const QScriptProgram &program, QScriptValue &targetObject) { + QSet<QString> globalPropertyNames; + { + QScriptValueIterator it(engine->globalObject()); + while (it.hasNext()) { + it.next(); + globalPropertyNames += it.name(); + } + } + engine->pushContext(); QScriptValue result = engine->evaluate(program); QScriptValue activationObject = engine->currentContext()->activationObject(); @@ -112,6 +121,21 @@ QScriptValue addJSImport(QScriptEngine *engine, } else { targetObject = activationObject; } + + // copy properties of the global object + QScriptValueIterator it(engine->globalObject()); + while (it.hasNext()) { + it.next(); + if (globalPropertyNames.contains(it.name())) + continue; + + if (debugJSImports) + qDebug() << "inserting global property" << it.name() << it.value().toString(); + + targetObject.setProperty(it.name(), it.value()); + it.remove(); + } + return result; } |