summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-09-30 16:25:20 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-09-30 17:17:11 +0200
commite50d60ac97bb0080ee055574eada5a51a5bb907c (patch)
treec5318ab6b4dcba3d651a53e56af04f04187e7688 /src/shared/cplusplus
parent913b1bf02f1e55e182f48516a2f33a41ab2c8113 (diff)
downloadqt-creator-e50d60ac97bb0080ee055574eada5a51a5bb907c.tar.gz
Introduced MacroResolver.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/CPlusPlusForwardDeclarations.h1
-rw-r--r--src/shared/cplusplus/Control.cpp16
-rw-r--r--src/shared/cplusplus/Control.h15
-rw-r--r--src/shared/cplusplus/Parser.cpp8
-rw-r--r--src/shared/cplusplus/Parser.h2
5 files changed, 41 insertions, 1 deletions
diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
index 9e2380ae0b..eaa49eb173 100644
--- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
+++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
@@ -83,6 +83,7 @@ class Semantic;
class Control;
class MemoryPool;
class DiagnosticClient;
+class MacroResolver;
class Identifier;
class Literal;
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index fda1c3b32b..07e46fd1ae 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -59,6 +59,12 @@
CPLUSPLUS_BEGIN_NAMESPACE
+MacroResolver::MacroResolver()
+{ }
+
+MacroResolver::~MacroResolver()
+{ }
+
template <typename _Iterator>
static void delete_map_entries(_Iterator first, _Iterator last)
{
@@ -87,7 +93,8 @@ public:
Data(Control *control)
: control(control),
translationUnit(0),
- diagnosticClient(0)
+ diagnosticClient(0),
+ macroResolver(0)
{ }
~Data()
@@ -516,6 +523,7 @@ public:
Control *control;
TranslationUnit *translationUnit;
DiagnosticClient *diagnosticClient;
+ MacroResolver *macroResolver;
LiteralTable<Identifier> identifiers;
LiteralTable<StringLiteral> stringLiterals;
LiteralTable<NumericLiteral> numericLiterals;
@@ -576,6 +584,12 @@ TranslationUnit *Control::switchTranslationUnit(TranslationUnit *unit)
return previousTranslationUnit;
}
+MacroResolver *Control::macroResolver() const
+{ return d->macroResolver; }
+
+void Control::setMacroResolver(MacroResolver *macroResolver)
+{ d->macroResolver = macroResolver; }
+
DiagnosticClient *Control::diagnosticClient() const
{ return d->diagnosticClient; }
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index beb18aab4f..323740b742 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -55,6 +55,18 @@
CPLUSPLUS_BEGIN_HEADER
CPLUSPLUS_BEGIN_NAMESPACE
+class CPLUSPLUS_EXPORT MacroResolver
+{
+ MacroResolver(const MacroResolver &other);
+ void operator = (const MacroResolver &other);
+
+public:
+ MacroResolver();
+ virtual ~MacroResolver();
+
+ virtual bool isMacro(TranslationUnit *unit, unsigned tokenIndex) const = 0;
+};
+
class CPLUSPLUS_EXPORT Control
{
public:
@@ -64,6 +76,9 @@ public:
TranslationUnit *translationUnit() const;
TranslationUnit *switchTranslationUnit(TranslationUnit *unit);
+ MacroResolver *macroResolver() const;
+ void setMacroResolver(MacroResolver *macroResolver);
+
DiagnosticClient *diagnosticClient() const;
void setDiagnosticClient(DiagnosticClient *diagnosticClient);
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 663ec333a4..86f805b054 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -244,6 +244,14 @@ void Parser::match(int kind, unsigned *token)
}
}
+bool Parser::isMacro(unsigned tokenIndex) const
+{
+ if (MacroResolver *r = _control->macroResolver())
+ return r->isMacro(_translationUnit, tokenIndex);
+
+ return false;
+}
+
bool Parser::parseClassOrNamespaceName(NameAST *&node)
{
if (LA() == T_IDENTIFIER) {
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 2f274e93ab..1bd6700f53 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -286,6 +286,8 @@ private:
inline void rewind(unsigned cursor)
{ _tokenIndex = cursor; }
+ bool isMacro(unsigned tokenIndex) const;
+
private:
TranslationUnit *_translationUnit;
Control *_control;