aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@nokia.com>2012-05-07 10:52:28 +0200
committerJoerg Bornemann <joerg.bornemann@nokia.com>2012-05-08 13:27:14 +0200
commitd4988a30fc6fc67603ac110bfac2151afe5890fe (patch)
tree61c01e572f80ba6eeb9ad033b7bca481ca75241c
parentca3abca3d2c7d14630058a78253c3fdb3978f012 (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.cpp24
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;
}