diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-04-06 12:05:21 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-05-02 14:17:59 +0000 |
commit | 5cd9d88c2683c5d226ab1dc0384868408c036fe9 (patch) | |
tree | e7499131b3ef31b945e2aceec68c285103eea637 /src/qml/compiler/qv4compilerscanfunctions.cpp | |
parent | 2c23299ecd94dbcce0a90b3b374a674cad6a3683 (diff) | |
download | qtdeclarative-5cd9d88c2683c5d226ab1dc0384868408c036fe9.tar.gz |
Avoid excessive creation of contexts
Variables do not escape if they are being used from an
inner block in the same function.
Change-Id: I494861edf9d8a492930797928a3137362082d084
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4compilerscanfunctions.cpp')
-rw-r--r-- | src/qml/compiler/qv4compilerscanfunctions.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4compilerscanfunctions.cpp b/src/qml/compiler/qv4compilerscanfunctions.cpp index f5bfd14c93..40459b3b28 100644 --- a/src/qml/compiler/qv4compilerscanfunctions.cpp +++ b/src/qml/compiler/qv4compilerscanfunctions.cpp @@ -524,6 +524,12 @@ void ScanFunctions::calcEscapingVariables() for (const QString &var : qAsConst(inner->usedVariables)) { Context *c = inner; while (c) { + Context *current = c; + c = c->parent; + if (current->isWithBlock || current->contextType != ContextType::Block) + break; + } + while (c) { Context::MemberMap::const_iterator it = c->members.find(var); if (it != c->members.end()) { if (c != inner) { |