summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorLeandro Melo <leandro.melo@nokia.com>2011-02-04 16:26:10 +0100
committerLeandro Melo <leandro.melo@nokia.com>2011-02-04 17:04:56 +0100
commitcb9cc8dca6c26a2058f9c7058806221733b91ff9 (patch)
tree206a864b7d8a24dac05490a435ffa576930517bc /src/shared/cplusplus
parent3c8ff2bee448c93580cd83f9919c9f0d55c29986 (diff)
downloadqt-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.cpp12
-rw-r--r--src/shared/cplusplus/Control.h11
-rw-r--r--src/shared/cplusplus/Parser.cpp7
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);
}
+