diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-27 06:03:25 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-05-27 06:03:25 (GMT) |
commit | 0a6df63c7150f0010b08ce2ba08a492cd129a96f (patch) | |
tree | f36c41c6b8665e761ae933393785b7d5f8481258 /src/declarative | |
parent | a190b92bb4eb40ecf8c30d6f368c0d15ec317580 (diff) | |
download | Qt-0a6df63c7150f0010b08ce2ba08a492cd129a96f.zip Qt-0a6df63c7150f0010b08ce2ba08a492cd129a96f.tar.gz Qt-0a6df63c7150f0010b08ce2ba08a492cd129a96f.tar.bz2 |
Save the JavaScript AST in the QmlParser::Variant for use by others
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/qml/qmlparser.cpp | 18 | ||||
-rw-r--r-- | src/declarative/qml/qmlparser_p.h | 7 | ||||
-rw-r--r-- | src/declarative/qml/qmlscriptparser.cpp | 8 |
3 files changed, 25 insertions, 8 deletions
diff --git a/src/declarative/qml/qmlparser.cpp b/src/declarative/qml/qmlparser.cpp index c5d7092..5c2a69f 100644 --- a/src/declarative/qml/qmlparser.cpp +++ b/src/declarative/qml/qmlparser.cpp @@ -281,10 +281,14 @@ QmlParser::Variant::Variant(double v, const QString &asWritten) { } -QmlParser::Variant::Variant(const QString &v, Type type) -: t(type), s(v) +QmlParser::Variant::Variant(const QString &v) +: t(String), s(v) +{ +} + +QmlParser::Variant::Variant(const QString &v, JavaScript::AST::Node *n) +: t(Script), n(n), s(v) { - Q_ASSERT(type == String || type == Script); } QmlParser::Variant &QmlParser::Variant::operator=(const Variant &o) @@ -334,4 +338,12 @@ QString QmlParser::Variant::asScript() const } } +JavaScript::AST::Node *QmlParser::Variant::asAST() const +{ + if (type() == Script) + return n; + else + return 0; +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h index 721f1a8..cb9b540 100644 --- a/src/declarative/qml/qmlparser_p.h +++ b/src/declarative/qml/qmlparser_p.h @@ -55,6 +55,8 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) +namespace JavaScript { namespace AST { class Node; } } + /* XXX @@ -175,7 +177,8 @@ namespace QmlParser Variant(const Variant &); Variant(bool); Variant(double, const QString &asWritten=QString()); - Variant(const QString &, Type = String); + Variant(const QString &); + Variant(const QString &, JavaScript::AST::Node *); Variant &operator=(const Variant &); Type type() const; @@ -189,12 +192,14 @@ namespace QmlParser QString asString() const; double asNumber() const; QString asScript() const; + JavaScript::AST::Node *asAST() const; private: Type t; union { bool b; double d; + JavaScript::AST::Node *n; }; QString s; }; diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp index 5c5b25e..b862953 100644 --- a/src/declarative/qml/qmlscriptparser.cpp +++ b/src/declarative/qml/qmlscriptparser.cpp @@ -587,7 +587,7 @@ QmlParser::Variant ProcessAST::getVariant(AST::ExpressionNode *expr) if (lit->suffix == AST::NumericLiteral::noSuffix) return QmlParser::Variant(lit->value, asString(expr)); else - return QmlParser::Variant(asString(expr), QmlParser::Variant::Script); + return QmlParser::Variant(asString(expr), expr); } else { @@ -597,7 +597,7 @@ QmlParser::Variant ProcessAST::getVariant(AST::ExpressionNode *expr) } } - return QmlParser::Variant(asString(expr), QmlParser::Variant::Script); + return QmlParser::Variant(asString(expr), expr); } } @@ -620,8 +620,8 @@ bool ProcessAST::visit(AST::UiScriptBinding *node) if (AST::ExpressionStatement *stmt = AST::cast<AST::ExpressionStatement *>(node->statement)) { primitive = getVariant(stmt->expression); } else { // do binding - primitive = QmlParser::Variant(asString(node->statement), - QmlParser::Variant::Script); + primitive = QmlParser::Variant(asString(node->statement), + node->statement); } Value *v = new Value; |