diff options
author | Robert Loehning <robert.loehning@nokia.com> | 2012-02-29 17:19:39 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@nokia.com> | 2012-03-01 08:27:40 +0100 |
commit | ff58b3102c4507517dfc65591de97116ab22b25e (patch) | |
tree | 0e8fbe18516f974ea03e5c21ca11a2bf5c5fb702 /src/libs/qmljs/qmljscodeformatter.cpp | |
parent | cb6e324738d57ce5dd870aec0fb29eef210bf36c (diff) | |
download | qt-creator-ff58b3102c4507517dfc65591de97116ab22b25e.tar.gz |
QmlJS indenter: Fix hang with invalid code.
Task-number: QTCREATORBUG-7005
(cherry picked from commit 0c597a6f070ebd434d93cc4052f8445e4ba434dc)
Change-Id: I2e343fbcc6931530e7db142bf6e268dac696970f
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljscodeformatter.cpp')
-rw-r--r-- | src/libs/qmljs/qmljscodeformatter.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp index 77bd008de6..7b1a5e250b 100644 --- a/src/libs/qmljs/qmljscodeformatter.cpp +++ b/src/libs/qmljs/qmljscodeformatter.cpp @@ -167,6 +167,11 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case Signal: case Property: case Identifier: enter(expression_or_objectdefinition); break; + + // error recovery + case RightBracket: + case RightParenthesis: leave(true); break; + default: enter(expression); continue; } break; @@ -251,9 +256,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case expression_or_objectdefinition: switch (kind) { case Dot: - case Identifier: break; // need to become an objectdefinition_open in cases like "width: Qt.Foo {" - case LeftBrace: turnInto(objectdefinition_open); break; - default: enter(expression); continue; // really? identifier and more tokens might already be gone + case Identifier: break; // need to become an objectdefinition_open in cases like "width: Qt.Foo {" + case LeftBrace: turnInto(objectdefinition_open); break; + + // propagate 'leave' from expression state + case RightBracket: + case RightParenthesis: leave(); continue; + + default: enter(expression); continue; // really? identifier and more tokens might already be gone } break; case expression_or_label: |