diff options
| author | Erik Verbruggen <[email protected]> | 2012-03-26 15:18:01 +0200 |
|---|---|---|
| committer | Erik Verbruggen <[email protected]> | 2012-03-29 14:28:17 +0200 |
| commit | 60db5736604583fe99dde3c25412d97f9b77489d (patch) | |
| tree | 2f5bf1342086232de0570500fd440a98eb12cb96 /src/libs/cplusplus/Macro.h | |
| parent | 159058d9eb7ab233f94cc6a0a5b0e7e8f691a041 (diff) | |
[C++] Rewrite of the preprocessor.
This rewrite fixes a couple of issues with the pre-processor. It now
supports:
- macros in macro bodies
- stringification of parameters [cpp.stringize]
- the concatenation operator [cpp.concat]
- #include MACRO_HERE
- defined() inside macro bodies used in pp-conditions.
Change-Id: Ifdb78041fb6afadf44f939a4bd66ce2832b8601f
Reviewed-by: Roberto Raggi <[email protected]>
Diffstat (limited to 'src/libs/cplusplus/Macro.h')
| -rw-r--r-- | src/libs/cplusplus/Macro.h | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/libs/cplusplus/Macro.h b/src/libs/cplusplus/Macro.h index 004969333f0..56de90fcf41 100644 --- a/src/libs/cplusplus/Macro.h +++ b/src/libs/cplusplus/Macro.h @@ -52,6 +52,8 @@ #ifndef CPLUSPLUS_PP_MACRO_H #define CPLUSPLUS_PP_MACRO_H +#include "PPToken.h" + #include <CPlusPlusForwardDeclarations.h> #include <QByteArray> @@ -60,8 +62,12 @@ namespace CPlusPlus { +class Environment; + class CPLUSPLUS_EXPORT Macro { + typedef Internal::PPToken PPToken; + public: Macro(); @@ -71,13 +77,16 @@ public: void setName(const QByteArray &name) { _name = name; } - QByteArray definition() const - { return _definition; } + const QByteArray definitionText() const + { return _definitionText; } + + const QVector<PPToken> &definitionTokens() const + { return _definitionTokens; } - void setDefinition(const QByteArray &definition) - { _definition = definition; } + void setDefinition(const QByteArray &definitionText, const QVector<PPToken> &definitionTokens) + { _definitionText = definitionText; _definitionTokens = definitionTokens; } - QVector<QByteArray> formals() const + const QVector<QByteArray> &formals() const { return _formals; } void addFormal(const QByteArray &formal) @@ -125,16 +134,11 @@ public: void setVariadic(bool isVariadic) { f._variadic = isVariadic; } - void setLineBreaks(const QList<unsigned> &breaks) - { _lineBreaks = breaks; } - - const QList<unsigned> &lineBreaks() const - { return _lineBreaks; } - QString toString() const; QString toStringWithLineBreaks() const; -// ### private +private: + friend class Environment; Macro *_next; unsigned _hashcode; @@ -149,10 +153,10 @@ private: }; QByteArray _name; - QByteArray _definition; + QByteArray _definitionText; + QVector<PPToken> _definitionTokens; QVector<QByteArray> _formals; QString _fileName; - QList<unsigned> _lineBreaks; unsigned _line; unsigned _offset; unsigned _length; |
