diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-02-06 15:04:23 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-02-12 10:39:51 +0000 |
commit | ae3aa07c4df1f8e6e413b7513611d306063b126b (patch) | |
tree | afcc64f1f8fa654482b1d3a11e4e2522b968184f /src/libs/3rdparty | |
parent | d68fc038cccc168ae8f3d03f12c00779876233f0 (diff) |
C++: Remove workaround for crashing if parsing invalid code
This reverts the changes
commit beac7b9539457fe721de1709b9a406cac2379851
C++: Fix highlighting after "invalid code"
commit 78ab287fc6d3770646012e461b0a518db4e9c9f4
C++: Stop parsing a declaration after two tries
which were a work around for QTCREATORBUG-12890.
A follow-up patch provides a proper fix.
Task-number: QTCREATORBUG-12890
Change-Id: I2650a8e41c8ff1180cad9f069e463fc51bd2f1b1
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/libs/3rdparty')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.cpp | 33 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.h | 4 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/TranslationUnit.cpp | 5 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/TranslationUnit.h | 5 |
4 files changed, 6 insertions, 41 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index c98f92cc37..86eeaa2f2a 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -265,13 +265,12 @@ inline void debugPrintCheckCache(bool) {} return true; \ } -Parser::Parser(TranslationUnit *unit, int retryParseDeclarationLimit) +Parser::Parser(TranslationUnit *unit) : _translationUnit(unit), _control(unit->control()), _pool(unit->memoryPool()), _languageFeatures(unit->languageFeatures()), _tokenIndex(1), - _retryParseDeclarationLimit(retryParseDeclarationLimit), _templateArguments(0), _inFunctionBody(false), _inExpressionStatement(false), @@ -311,20 +310,6 @@ bool Parser::skipUntil(int token) return false; } -void Parser::skipUntilAfterSemicolonOrRightBrace() -{ - while (int tk = LA()) { - switch (tk) { - case T_SEMICOLON: - case T_RBRACE: - consumeToken(); - return; - default: - consumeToken(); - } - } -} - void Parser::skipUntilDeclaration() { for (; ; consumeToken()) { @@ -641,25 +626,19 @@ bool Parser::parseTranslationUnit(TranslationUnitAST *&node) TranslationUnitAST *ast = new (_pool) TranslationUnitAST; DeclarationListAST **decl = &ast->declaration_list; - int declarationsInRowFailedToParse = 0; - while (LA()) { unsigned start_declaration = cursor(); DeclarationAST *declaration = 0; if (parseDeclaration(declaration)) { - declarationsInRowFailedToParse = 0; *decl = new (_pool) DeclarationListAST; (*decl)->value = declaration; decl = &(*decl)->next; } else { error(start_declaration, "expected a declaration"); rewind(start_declaration + 1); - if (++declarationsInRowFailedToParse == _retryParseDeclarationLimit) - skipUntilAfterSemicolonOrRightBrace(); - else - skipUntilDeclaration(); + skipUntilDeclaration(); } @@ -808,8 +787,6 @@ bool Parser::parseLinkageBody(DeclarationAST *&node) ast->lbrace_token = consumeToken(); DeclarationListAST **declaration_ptr = &ast->declaration_list; - int declarationsInRowFailedToParse = 0; - while (int tk = LA()) { if (tk == T_RBRACE) break; @@ -817,17 +794,13 @@ bool Parser::parseLinkageBody(DeclarationAST *&node) unsigned start_declaration = cursor(); DeclarationAST *declaration = 0; if (parseDeclaration(declaration)) { - declarationsInRowFailedToParse = 0; *declaration_ptr = new (_pool) DeclarationListAST; (*declaration_ptr)->value = declaration; declaration_ptr = &(*declaration_ptr)->next; } else { error(start_declaration, "expected a declaration"); rewind(start_declaration + 1); - if (++declarationsInRowFailedToParse == _retryParseDeclarationLimit) - skipUntilAfterSemicolonOrRightBrace(); - else - skipUntilDeclaration(); + skipUntilDeclaration(); } _templateArgumentList.clear(); diff --git a/src/libs/3rdparty/cplusplus/Parser.h b/src/libs/3rdparty/cplusplus/Parser.h index 5f0a182bd1..4a2a6dfb7e 100644 --- a/src/libs/3rdparty/cplusplus/Parser.h +++ b/src/libs/3rdparty/cplusplus/Parser.h @@ -33,7 +33,7 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT Parser { public: - Parser(TranslationUnit *translationUnit, int retryParseDeclarationLimit); + Parser(TranslationUnit *translationUnit); ~Parser(); bool parseTranslationUnit(TranslationUnitAST *&node); @@ -254,7 +254,6 @@ public: bool parseDesignator(DesignatorAST *&node); bool skipUntil(int token); - void skipUntilAfterSemicolonOrRightBrace(); void skipUntilDeclaration(); bool skipUntilStatement(); bool skip(int l, int r); @@ -317,7 +316,6 @@ private: MemoryPool *_pool; LanguageFeatures _languageFeatures; unsigned _tokenIndex; - int _retryParseDeclarationLimit; bool _templateArguments: 1; bool _inFunctionBody: 1; bool _inExpressionStatement: 1; diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp index 4f1ff72139..ea180af5bf 100644 --- a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp +++ b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp @@ -49,8 +49,7 @@ TranslationUnit::TranslationUnit(Control *control, const StringLiteral *fileId) _lastSourceChar(0), _pool(0), _ast(0), - _flags(0), - _retryParseDeclarationLimit(defaultRetryParseDeclarationLimit()) + _flags(0) { _tokens = new std::vector<Token>(); _comments = new std::vector<Token>(); @@ -300,7 +299,7 @@ bool TranslationUnit::parse(ParseMode mode) f._parsed = true; - Parser parser(this, _retryParseDeclarationLimit); + Parser parser(this); bool parsed = false; switch (mode) { diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.h b/src/libs/3rdparty/cplusplus/TranslationUnit.h index eb4e1f2e3a..94eb81666b 100644 --- a/src/libs/3rdparty/cplusplus/TranslationUnit.h +++ b/src/libs/3rdparty/cplusplus/TranslationUnit.h @@ -149,9 +149,6 @@ public: LanguageFeatures languageFeatures() const { return _languageFeatures; } void setLanguageFeatures(LanguageFeatures features) { _languageFeatures = features; } - static int defaultRetryParseDeclarationLimit() { return 2; } - void setRetryParseDeclarationLimit(int limit) { _retryParseDeclarationLimit = limit; } - private: struct PPLine { unsigned utf16charOffset; @@ -213,8 +210,6 @@ private: Flags f; }; LanguageFeatures _languageFeatures; - - int _retryParseDeclarationLimit; }; } // namespace CPlusPlus |