Interface for handling new include streams.
Definition IncludeHandler.hpp:21
Log base class.
Definition Log.hpp:19
void enableWarnings(bool enable)
Pre-processor to substitute macros and include directives.
Definition PreProcessor.hpp:38
Map< String, MacroPtr > mMacros
Definition PreProcessor.hpp:80
Map< String, std::size_t > mIncludeCounter
Definition PreProcessor.hpp:82
void pushIfBlock(const TokenPtr &directiveToken, bool active=false, bool elseAllowed=true)
void parseDirectiveDefine()
void undefineMacro(const String &ident, const Token *token=nullptr)
void parseDirectiveSpecialization()
Variant parseAndEvaluateArgumentExpression(const Token *token=nullptr)
Vector< String > listDefinedMacroIdents() const
UPtr< StringStream > mOutput
Definition PreProcessor.hpp:78
void setIfBlock(const TokenPtr &directiveToken, bool active=false, bool elseAllowed=true)
SPtr< Macro > MacroPtr
Definition PreProcessor.hpp:73
void parseDirectiveIfndef(bool skipEvaluation=false)
TokenPtrString expandMacro(const Macro ¯o, const Vector< TokenPtrString > &arguments)
Replaces all identifiers (specified by 'macro.parameters') in the token string (specified by 'macro....
TokenPtrString parseDirectiveTokenString(bool expandDefinedDirective=false, bool ignoreComments=false)
bool isDefined(const String &ident) const
void parseDirectivePragma()
virtual void writeLineDirective(UInt32 lineNo, const String &filename)
IncludeHandler & mIncludeHandler
Definition PreProcessor.hpp:76
ExpressionPtr parsePrimaryExpression() override
virtual bool onRedefineMacro(const Macro ¯o, const Macro &previousMacro)
virtual void parseDirective(const String &directive, bool ignoreUnknown)
void pushScannerSource(const SourceCodePtr &source, const String &filename="") override
void parseDirectiveElse()
void defineMacro(const Macro ¯o)
void parseDirectiveInclude()
virtual bool onDefineMacro(const Macro ¯o)
void parseDirectiveEndif()
void parseDirectiveIf(bool skipEvaluation=false)
virtual bool onSubstituteStdMacro(const Token &identifierToken, TokenPtrString &tokenString)
UPtr< std::iostream > process(const SourceCodePtr &input, const String &filename="", bool writeLineMarks=true, bool writeLineMarkFilenames=true, bool enableWarnings=false)
bool mWriteLineMarks
Definition PreProcessor.hpp:88
StringStream & getOutputStream()
Definition PreProcessor.hpp:144
bool popScannerSource() override
void parseDirectiveUndef()
void parseDirectiveIfOrElifCondition(bool isElseBranch, bool skipEvaluation=false)
Stack< IfBlock > mIfBlockStack
Stack to store the info which if-block in the hierarchy is active.
Definition PreProcessor.hpp:86
void parseDirectiveLine()
PreProcessor(IncludeHandler &includeHandler, Log *log=nullptr)
Variant evaluateExpression(const TokenPtrString &tokenString, const Token *token=nullptr)
void parseDirectiveIfdef(bool skipEvaluation=false)
TokenPtrString parseArgumentTokenString()
virtual bool onUndefineMacro(const Macro ¯o)
ExpressionPtr parseExpression()
void parseDirectiveError()
bool mWriteLineMarkFilenames
Definition PreProcessor.hpp:89
String parseDefinedSpecialization()
String parseDefinedMacro()
void parseAnyIfDirectiveAndSkipValidation()
Variant parseAndEvaluateExpression(const Token *token=nullptr)
Set< String > mOnceIncluded
Definition PreProcessor.hpp:81
TokenPtrString parseIdentAsTokenString()
void writePosToLineDirective()
TokenPtrString parseIdentArgumentsForMacro(const TokenPtr &identifierToken, const Macro ¯o)
void parseDirectiveElif(bool skipEvaluation=false)
void defineStandardMacro(const String &ident, Int32 intValue=1)
IfBlock getTopIfBlock() const
ScannerPtr makeScanner() override
Definition Variant.hpp:20
SPtr< Expression > ExpressionPtr
Definition Visitor.hpp:26
SPtr< SourceCode > SourceCodePtr
Definition SourceCode.hpp:66
SPtr< Token > TokenPtr
Definition Token.hpp:174
SPtr< Scanner > ScannerPtr
Definition Scanner.hpp:147
std::stack< T, Container > Stack
The Stack class is a container adapter that gives the programmer the functionality of a stack - speci...
Definition Stack.hpp:18
std::unique_ptr< T, Deleter > UPtr
UPtr is a smart pointer that owns and manages another object through a pointer and disposes of that o...
Definition SmartPtr.hpp:28
std::shared_ptr< T > SPtr
SPtr is a smart pointer that retains shared ownership of an object through a pointer.
Definition SmartPtr.hpp:37
BasicStringStream< char > StringStream
Wide string stream used for primarily for constructing narrow strings.
Definition StringStream.hpp:32
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
std::int32_t Int32
Definition DataTypes.hpp:21
std::uint32_t UInt32
Definition DataTypes.hpp:23
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
std::set< Key, Compare, ScopedAllocatorAdaptor< StdAllocator< Key, RawAllocator > > > Set
Set is an associative container that contains a sorted set of unique objects of type Key.
Definition Set.hpp:21
std::map< Key, T, Compare, ScopedAllocatorAdaptor< StdAllocator< Pair< const Key, T >, RawAllocator > > > Map
Map is a sorted associative container that contains key-value pairs with unique keys.
Definition Map.hpp:24
Definition PreProcessor.hpp:62
void setActive(bool activate)
bool parentActive
Definition PreProcessor.hpp:67
bool wasActive
Definition PreProcessor.hpp:69
bool elseAllowed
Definition PreProcessor.hpp:70
bool active
Definition PreProcessor.hpp:68
TokenPtr directiveToken
Definition PreProcessor.hpp:65
SourceCodePtr directiveSource
Definition PreProcessor.hpp:66
Definition PreProcessor.hpp:41
bool hasParameterList() const
bool emptyParamList
Definition PreProcessor.hpp:59
TokenPtr identifierToken
Definition PreProcessor.hpp:54
Macro(const TokenPtr &identifierToken, const TokenPtrString &value, const Vector< String > ¶meters, bool varArgs=false, bool stdMacro=false, bool emptyParamList=false)
bool stdMacro
Definition PreProcessor.hpp:58
Macro(const TokenPtr &identifierToken)
TokenPtrString tokenString
Definition PreProcessor.hpp:55
Macro(const TokenPtr &identifierToken, const TokenPtrString &value)
Vector< String > parameters
Definition PreProcessor.hpp:56
Macro & operator=(const Macro &)=default
bool varArgs
Definition PreProcessor.hpp:57
Macro(const Macro &)=default