/****************************************************************************
**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
**
**
**
+**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtDeclarative/qdeclarativeinfo.h>
#include <QtDeclarative/private/qdeclarativecustomparser_p.h>
-#include <QtDeclarative/private/qdeclarativeparser_p.h>
+#include <QtDeclarative/private/qdeclarativescript_p.h>
#include <QtDeclarative/qdeclarativeexpression.h>
#include <QtDeclarative/private/qdeclarativebinding_p.h>
#include <QtDeclarative/qdeclarativecontext.h>
reverseExpression = rewindExpression;
}
- /*virtual void copyOriginals(QDeclarative1ActionEvent *other)
+ virtual bool needsCopy() { return true; }
+ virtual void copyOriginals(QDeclarative1ActionEvent *other)
{
QDeclarative1ReplaceSignalHandler *rsh = static_cast<QDeclarative1ReplaceSignalHandler*>(other);
saveCurrentValues();
ownedExpression = rsh->ownedExpression;
rsh->ownedExpression = 0;
}
- }*/
+ }
virtual void rewind() {
ownedExpression = QDeclarativePropertyPrivate::setSignalExpression(property, rewindExpression);
};
void
-QDeclarative1PropertyChangesParser::compileList(QList<QPair<QByteArray, QVariant> > &list,
- const QByteArray &pre,
+QDeclarative1PropertyChangesParser::compileList(QList<QPair<QString, QVariant> > &list,
+ const QString &pre,
const QDeclarativeCustomParserProperty &prop)
{
- QByteArray propName = pre + prop.name();
+ QString propName = pre + prop.name();
QList<QVariant> values = prop.assignedValues();
for (int ii = 0; ii < values.count(); ++ii) {
QDeclarativeCustomParserProperty prop =
qvariant_cast<QDeclarativeCustomParserProperty>(value);
- QByteArray pre = propName + '.';
+ QString pre = propName + QLatin1Char('.');
compileList(list, pre, prop);
} else {
QByteArray
QDeclarative1PropertyChangesParser::compile(const QList<QDeclarativeCustomParserProperty> &props)
{
- QList<QPair<QByteArray, QVariant> > data;
+ QList<QPair<QString, QVariant> > data;
for(int ii = 0; ii < props.count(); ++ii)
- compileList(data, QByteArray(), props.at(ii));
+ compileList(data, QString(), props.at(ii));
QByteArray rv;
QDataStream ds(&rv, QIODevice::WriteOnly);
ds << data.count();
for(int ii = 0; ii < data.count(); ++ii) {
- QDeclarativeParser::Variant v = qvariant_cast<QDeclarativeParser::Variant>(data.at(ii).second);
+ QDeclarativeScript::Variant v = qvariant_cast<QDeclarativeScript::Variant>(data.at(ii).second);
QVariant var;
bool isScript = v.isScript();
QDeclarativeBinding::Identifier id = 0;
switch(v.type()) {
- case QDeclarativeParser::Variant::Boolean:
+ case QDeclarativeScript::Variant::Boolean:
var = QVariant(v.asBoolean());
break;
- case QDeclarativeParser::Variant::Number:
+ case QDeclarativeScript::Variant::Number:
var = QVariant(v.asNumber());
break;
- case QDeclarativeParser::Variant::String:
+ case QDeclarativeScript::Variant::String:
var = QVariant(v.asString());
break;
- case QDeclarativeParser::Variant::Invalid:
- case QDeclarativeParser::Variant::Script:
+ case QDeclarativeScript::Variant::Invalid:
+ case QDeclarativeScript::Variant::Script:
var = QVariant(v.asScript());
{
- // Pre-rewrite the expression
- QString expression = v.asScript();
- id = rewriteBinding(expression, data.at(ii).first); //### recreates the AST, which is slow
+ id = rewriteBinding(v, data.at(ii).first);
}
break;
}
- ds << QString::fromUtf8(data.at(ii).first) << isScript << var;
+ ds << data.at(ii).first << isScript << var;
if (isScript)
ds << id;
}
QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
QDeclarativeData *ddata = QDeclarativeData::get(q);
if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
- expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+ expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
QDeclarative1ReplaceSignalHandler *handler = new QDeclarative1ReplaceSignalHandler;
handler->property = prop;
handler->expression = expression;
QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
QDeclarativeData *ddata = QDeclarativeData::get(q);
if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
- expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+ expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
expressions << ExpressionChange(name, id, expression);
} else {
properties << qMakePair(name, data);
QDeclarativeBinding *newBinding = id != QDeclarativeBinding::Invalid ? QDeclarativeBinding::createBinding(id, object(), qmlContext(this), e->sourceFile(), e->lineNumber()) : 0;
if (!newBinding) {
newBinding = new QDeclarativeBinding(e->expression(), object(), qmlContext(this));
- newBinding->setSourceLocation(e->sourceFile(), e->lineNumber());
+ newBinding->setSourceLocation(e->sourceFile(), e->lineNumber(), e->columnNumber());
}
newBinding->setTarget(prop);
a.toBinding = newBinding;