aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativecompiler.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2012-02-14 10:47:03 +0000
committerQt by Nokia <qt-info@nokia.com>2012-02-20 08:34:28 +0100
commit330152354aed8496ac78d145e14b25ee2d7bf8fb (patch)
treed1aacb6ef10d695651a66138050c45cc34249e83 /src/declarative/qml/qdeclarativecompiler.cpp
parentde431c5e6cc8d439ed039e24f050ad8020792ab8 (diff)
Use Utf8 for javascript source code
This saves a surprising amount of memory. Change-Id: I16f7bde8d11fe11703d4e441060fd52e9632248c Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/declarative/qml/qdeclarativecompiler.cpp')
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 74dbd6767f..ddae3682b6 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -913,8 +913,11 @@ void QDeclarativeCompiler::compileTree(QDeclarativeScript::Object *tree)
if (!compileState->v8BindingProgram.isEmpty()) {
Instruction::InitV8Bindings bindings;
- bindings.program = output->indexForString(compileState->v8BindingProgram);
- bindings.programIndex = compileState->v8BindingProgramIndex;
+ int index = output->programs.count();
+ output->programs.append(compileState->v8BindingProgram);
+ output->v8bindings.append(v8::Persistent<v8::Array>());
+
+ bindings.programIndex = index;
bindings.line = compileState->v8BindingProgramLine;
output->addInstruction(bindings);
}
@@ -1346,9 +1349,8 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeScript::Object *obj)
Instruction::StoreSignal store;
store.signalIndex = prop->index;
- const QString &rewrite =
- rewriteSignalHandler(v->value, prop->name().toString());
- store.value = output->indexForString(rewrite);
+ const QString &rewrite = rewriteSignalHandler(v->value, prop->name().toString());
+ store.value = output->indexForByteArray(rewrite.toUtf8());
store.context = v->signalExpressionContextStack;
store.line = v->location.start.line;
store.column = v->location.start.column;
@@ -1469,8 +1471,11 @@ void QDeclarativeCompiler::genComponent(QDeclarativeScript::Object *obj)
if (!compileState->v8BindingProgram.isEmpty()) {
Instruction::InitV8Bindings bindings;
- bindings.program = output->indexForString(compileState->v8BindingProgram);
- bindings.programIndex = compileState->v8BindingProgramIndex;
+ int index = output->programs.count();
+ output->programs.append(compileState->v8BindingProgram);
+ output->v8bindings.append(v8::Persistent<v8::Array>());
+
+ bindings.programIndex = index;
bindings.line = compileState->v8BindingProgramLine;
output->addInstruction(bindings);
}
@@ -3049,8 +3054,9 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeScript::Object *obj, Dyn
}
funcScript += QLatin1Char(')') + s->body + QLatin1Char(')');
+ QByteArray utf8 = funcScript.toUtf8();
VMD::MethodData methodData = { s->parameterNames.count(), 0,
- funcScript.length(),
+ utf8.length(),
s->location.start.line };
VMD *vmd = (QDeclarativeVMEMetaData *)dynamicData.data();
@@ -3060,10 +3066,10 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeScript::Object *obj, Dyn
md = methodData;
md.bodyOffset = dynamicData.size();
- dynamicData.append((const char *)funcScript.constData(),
- (funcScript.length() * sizeof(QChar)));
+ dynamicData.append((const char *)utf8.constData(), utf8.length());
}
+
methodIndex++;
}
}
@@ -3626,29 +3632,28 @@ bool QDeclarativeCompiler::completeComponentBuild()
int startLineNumber = sharedBindings.at(0)->value->location.start.line;
int lineNumber = startLineNumber;
- QString functionArray(QLatin1String("["));
+ QByteArray functionArray("[", 1);
for (int ii = 0; ii < sharedBindings.count(); ++ii) {
+
JSBindingReference *reference = sharedBindings.at(ii);
QDeclarativeScript::Value *value = reference->value;
const QString &expression = reference->rewrittenExpression;
- if (ii != 0) functionArray += QLatin1String(",");
+ if (ii != 0) functionArray.append(",", 1);
while (lineNumber < value->location.start.line) {
lineNumber++;
- functionArray += QLatin1String("\n");
+ functionArray.append("\n", 1);
}
- functionArray += expression;
+ functionArray += expression.toUtf8();
lineNumber += expression.count(QLatin1Char('\n'));
reference->compiledIndex = ii;
}
- functionArray += QLatin1String("]");
+ functionArray.append("]", 1);
compileState->v8BindingProgram = functionArray;
compileState->v8BindingProgramLine = startLineNumber;
- compileState->v8BindingProgramIndex = output->v8bindings.count();
- output->v8bindings.append(v8::Persistent<v8::Array>());
}
if (bindingCompiler.isValid())