diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2012-02-14 10:47:03 +0000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-20 08:34:28 +0100 |
commit | 330152354aed8496ac78d145e14b25ee2d7bf8fb (patch) | |
tree | d1aacb6ef10d695651a66138050c45cc34249e83 /src/declarative/qml/qdeclarativecompiler.cpp | |
parent | de431c5e6cc8d439ed039e24f050ad8020792ab8 (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.cpp | 39 |
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()) |