aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-10-14 22:42:06 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-15 06:43:53 +0200
commit6fbf62e8e1e1739a3c993de1cec785c0f7625602 (patch)
treedf5381afccf8ffad3f406020cd0d117804d8c581 /src/qml
parentdf267e50195c00f2085ed93ceb5f59ed81f89206 (diff)
Fix some more issues with exact GC
Get the formal and local names of function object from the compilation unit to avoid creating another set of strings. Use a ScopedFunctionObject in eval() Change-Id: I6693aec2e88818df9c160b3780db12d8df79c2fe Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/jsruntime/qv4function.cpp4
-rw-r--r--src/qml/jsruntime/qv4globalobject.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp
index 65fec54be6..291d7cc033 100644
--- a/src/qml/jsruntime/qv4function.cpp
+++ b/src/qml/jsruntime/qv4function.cpp
@@ -65,14 +65,14 @@ Function::Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit,
formals.fill(0);
const quint32 *formalsIndices = compiledFunction->formalsTable();
for (int i = 0; i < compiledFunction->nFormals; ++i)
- formals[i] = engine->newString(unit->data->stringAt(formalsIndices[i]))->getPointer();
+ formals[i] = compilationUnit->runtimeStrings[formalsIndices[i]].asString();
locals.resize(compiledFunction->nLocals);
locals.fill(0);
const quint32 *localsIndices = compiledFunction->localsTable();
for (int i = 0; i < compiledFunction->nLocals; ++i)
- locals[i] = engine->newString(unit->data->stringAt(localsIndices[i]))->getPointer();
+ locals[i] = compilationUnit->runtimeStrings[localsIndices[i]].asString();
}
Function::~Function()
diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp
index 390fffff8a..3b1e0b1bae 100644
--- a/src/qml/jsruntime/qv4globalobject.cpp
+++ b/src/qml/jsruntime/qv4globalobject.cpp
@@ -389,7 +389,7 @@ ReturnedValue EvalFunction::evalCall(CallData *callData, bool directCall)
needsActivation = function->needsActivation();
if (strictMode) {
- FunctionObject *e = FunctionObject::creatScriptFunction(ctx, function);
+ ScopedFunctionObject e(scope, FunctionObject::creatScriptFunction(ctx, function));
ScopedCallData callData(scope, 0);
callData->thisObject = ctx->callData->thisObject;
return e->call(callData);