summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/qml/qmlparser.cpp18
-rw-r--r--src/declarative/qml/qmlparser_p.h7
-rw-r--r--src/declarative/qml/qmlscriptparser.cpp8
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;