From 2f4b8f159545b545d4b49cb3c1429c09522519ee Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 29 May 2018 14:27:46 +0200 Subject: Formals come after locals in the CallContext The method updating the internal class for a CallContext messed up the order between locals and formals, leading to wrong name lookups for signal handlers taking implicit arguments Task-number: QTBUG-68522 Change-Id: I36d55b3b0cfe9af6397455782551498b7ddb940a Reviewed-by: Lars Knoll Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4function.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp index 83e861138b..6fca9ecd45 100644 --- a/src/qml/jsruntime/qv4function.cpp +++ b/src/qml/jsruntime/qv4function.cpp @@ -112,6 +112,11 @@ void Function::updateInternalClass(ExecutionEngine *engine, const QListinternalClasses[EngineBase::Class_CallContext]; + // first locals + const quint32_le *localsIndices = compiledFunction->localsTable(); + for (quint32 i = 0; i < compiledFunction->nLocals; ++i) + internalClass = internalClass->addMember(engine->identifierTable->identifier(compilationUnit->runtimeStrings[localsIndices[i]]), Attr_NotConfigurable); + Scope scope(engine); ScopedString arg(scope); for (const QString ¶meterName : parameterNames) { @@ -119,10 +124,6 @@ void Function::updateInternalClass(ExecutionEngine *engine, const QListaddMember(arg, Attr_NotConfigurable); } nFormals = parameters.size(); - - const quint32_le *localsIndices = compiledFunction->localsTable(); - for (quint32 i = 0; i < compiledFunction->nLocals; ++i) - internalClass = internalClass->addMember(engine->identifierTable->identifier(compilationUnit->runtimeStrings[localsIndices[i]]), Attr_NotConfigurable); } QT_END_NAMESPACE -- cgit v1.2.3