const QByteArray preprocessedCode = snapshot.preprocessedCode(source.code, source.fileName);
doc = snapshot.documentFromSource(preprocessedCode, source.fileName);
+ doc->control()->setTopLevelDeclarationProcessor(this);
doc->check();
#if 0
class CPPEditor;
-class SemanticHighlighter: public QThread
+class SemanticHighlighter: public QThread, CPlusPlus::TopLevelDeclarationProcessor
{
Q_OBJECT
SemanticHighlighter(QObject *parent = 0);
virtual ~SemanticHighlighter();
+ virtual bool processDeclaration(CPlusPlus::DeclarationAST *) { return m_done; }
+
void abort();
struct Source
, objcRetainId(0)
, objcCopyId(0)
, objcNonatomicId(0)
+ , processor(0)
{}
~Data()
const Identifier *objcRetainId;
const Identifier *objcCopyId;
const Identifier *objcNonatomicId;
+ TopLevelDeclarationProcessor *processor;
};
Control::Control()
{
d->numericLiterals.reset();
}
+
+TopLevelDeclarationProcessor *Control::topLevelDeclarationProcessor() const
+{
+ return d->processor;
+}
+
+void Control::setTopLevelDeclarationProcessor(CPlusPlus::TopLevelDeclarationProcessor *processor)
+{
+ d->processor = processor;
+}
#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:
TranslationUnit *translationUnit() const;
TranslationUnit *switchTranslationUnit(TranslationUnit *unit);
+ TopLevelDeclarationProcessor *topLevelDeclarationProcessor() const;
+ void setTopLevelDeclarationProcessor(TopLevelDeclarationProcessor *processor);
+
DiagnosticClient *diagnosticClient() const;
void setDiagnosticClient(DiagnosticClient *diagnosticClient);
skipUntilDeclaration();
}
+
+ if (TopLevelDeclarationProcessor *processor = _control->topLevelDeclarationProcessor()) {
+ if (processor->processDeclaration(declaration))
+ break;
+ }
+
_templateArgumentList.clear();
}
va_end(ap);
va_end(args);
}
+