diff options
author | Leandro Melo <leandro.melo@nokia.com> | 2011-02-04 16:26:10 +0100 |
---|---|---|
committer | Leandro Melo <leandro.melo@nokia.com> | 2011-02-04 17:04:56 +0100 |
commit | cb9cc8dca6c26a2058f9c7058806221733b91ff9 (patch) | |
tree | 206a864b7d8a24dac05490a435ffa576930517bc /src/shared/cplusplus | |
parent | 3c8ff2bee448c93580cd83f9919c9f0d55c29986 (diff) | |
download | qt-creator-cb9cc8dca6c26a2058f9c7058806221733b91ff9.tar.gz |
C++ editor: Better control to stop the semantic highlighter
Done-by: Roberto Raggi
Reviewed-by: Leandro Melo
Reviewed-by: mae
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/Control.cpp | 12 | ||||
-rw-r--r-- | src/shared/cplusplus/Control.h | 11 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 7 |
3 files changed, 30 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index bb6e7fa86d..85441bf221 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -244,6 +244,7 @@ public: , objcRetainId(0) , objcCopyId(0) , objcNonatomicId(0) + , processor(0) {} ~Data() @@ -531,6 +532,7 @@ public: const Identifier *objcRetainId; const Identifier *objcCopyId; const Identifier *objcNonatomicId; + TopLevelDeclarationProcessor *processor; }; Control::Control() @@ -809,3 +811,13 @@ void Control::squeeze() { d->numericLiterals.reset(); } + +TopLevelDeclarationProcessor *Control::topLevelDeclarationProcessor() const +{ + return d->processor; +} + +void Control::setTopLevelDeclarationProcessor(CPlusPlus::TopLevelDeclarationProcessor *processor) +{ + d->processor = processor; +} diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h index 43c4ea1a1e..ce87685c8f 100644 --- a/src/shared/cplusplus/Control.h +++ b/src/shared/cplusplus/Control.h @@ -54,10 +54,18 @@ #define CPLUSPLUS_CONTROL_H #include "CPlusPlusForwardDeclarations.h" +#include "ASTfwd.h" #include "Names.h" namespace CPlusPlus { +class CPLUSPLUS_EXPORT TopLevelDeclarationProcessor +{ +public: + virtual ~TopLevelDeclarationProcessor() {} + virtual bool processDeclaration(DeclarationAST *ast) = 0; +}; + class CPLUSPLUS_EXPORT Control { public: @@ -67,6 +75,9 @@ public: TranslationUnit *translationUnit() const; TranslationUnit *switchTranslationUnit(TranslationUnit *unit); + TopLevelDeclarationProcessor *topLevelDeclarationProcessor() const; + void setTopLevelDeclarationProcessor(TopLevelDeclarationProcessor *processor); + DiagnosticClient *diagnosticClient() const; void setDiagnosticClient(DiagnosticClient *diagnosticClient); diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 4fdf77188e..7b1cfe17c1 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -566,6 +566,12 @@ bool Parser::parseTranslationUnit(TranslationUnitAST *&node) skipUntilDeclaration(); } + + if (TopLevelDeclarationProcessor *processor = _control->topLevelDeclarationProcessor()) { + if (processor->processDeclaration(declaration)) + break; + } + _templateArgumentList.clear(); } @@ -6032,3 +6038,4 @@ void Parser::fatal(unsigned index, const char *format, ...) va_end(ap); va_end(args); } + |