summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-12-21 08:31:42 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-12-21 08:31:42 (GMT)
commitcf7a6fee7af112ca3d6e4c511417b9e42cfc6716 (patch)
treec73d207c08d75d15d08c66a93cd37ae105eda8a6 /src/declarative
parent0a4ab50b6ed19a2d3fbe7b1f9d9614ad5d9b339e (diff)
downloadQt-cf7a6fee7af112ca3d6e4c511417b9e42cfc6716.zip
Qt-cf7a6fee7af112ca3d6e4c511417b9e42cfc6716.tar.gz
Qt-cf7a6fee7af112ca3d6e4c511417b9e42cfc6716.tar.bz2
Empty URLs should not be resolved
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/qml/qmlbindingvme.cpp11
-rw-r--r--src/declarative/qml/qmlbindingvme_p.h2
2 files changed, 8 insertions, 5 deletions
diff --git a/src/declarative/qml/qmlbindingvme.cpp b/src/declarative/qml/qmlbindingvme.cpp
index 043cbb3..2e3dcca 100644
--- a/src/declarative/qml/qmlbindingvme.cpp
+++ b/src/declarative/qml/qmlbindingvme.cpp
@@ -237,6 +237,8 @@ struct Program {
quint32 signalTableOffset;
quint16 subscriptions;
quint16 identifiers;
+ quint16 instructionCount;
+ quint16 dummy;
const char *data() const { return ((const char *)this) + sizeof(Program); }
const Instr *instructions() const { return (const Instr *)(data() + dataLength); }
@@ -588,7 +590,7 @@ inline static QUrl toUrl(Register *reg, int type, QmlContextPrivate *context, bo
return QUrl();
}
- if (base.isRelative())
+ if (!base.isEmpty() && base.isRelative())
return context->url.resolved(base);
else
return base;
@@ -881,16 +883,16 @@ void QmlBindingVME::run(const char *programData, int instrIndex,
}
}
-void QmlBindingVME::dump(const QByteArray &programData)
+void QmlBindingVME::dump(const char *programData)
{
- const Program *program = (const Program *)programData.constData();
+ const Program *program = (const Program *)programData;
qWarning() << "Program.bindings:" << program->bindings;
qWarning() << "Program.dataLength:" << program->dataLength;
qWarning() << "Program.subscriptions:" << program->subscriptions;
qWarning() << "Program.indentifiers:" << program->identifiers;
- int count = (programData.size() - sizeof(Program) - program->dataLength) / sizeof(Instr);
+ int count = program->instructionCount;
const Instr *instr = program->instructions();
while (count--) {
@@ -2147,6 +2149,7 @@ QByteArray QmlBindingCompiler::program() const
prog.dataLength = 4 * ((data.size() + 3) / 4);
prog.subscriptions = d->committed.subscriptionIds.count();
prog.identifiers = d->committed.registeredStrings.count();
+ prog.instructionCount = bytecode.count();
int size = sizeof(Program) + bytecode.count() * sizeof(Instr);
size += prog.dataLength;
diff --git a/src/declarative/qml/qmlbindingvme_p.h b/src/declarative/qml/qmlbindingvme_p.h
index de73037..ceaf2b3 100644
--- a/src/declarative/qml/qmlbindingvme_p.h
+++ b/src/declarative/qml/qmlbindingvme_p.h
@@ -85,7 +85,7 @@ public:
static void run(const char *program, int instr,
Config *config, QmlContextPrivate *context,
QObject **scopes, QObject **outputs);
- static void dump(const QByteArray &);
+ static void dump(const char *);
};
class QmlBindingCompilerPrivate;