class
#include <slang/parsing/Preprocessor.h>
Preprocessor Preprocessor - Interface between lexer and parser.
This class handles the messy interface between various source file lexers, include directives, and macro expansion, and the actual SystemVerilog parser that wants a nice coherent stream of tokens to consume.
Public functions
- auto next() -> Token
- Gets the next token in the stream, after applying preprocessor rules.
-
void pushSource(std::
string_view source, std:: string_view name = "source") - Push a new source file onto the stack.
-
void predefine(const std::
string& definition, std:: string_view name = "<api>") - Predefines the given macro definition.
-
auto undefine(std::
string_view name) -> bool - Undefines a previously defined macro.
- void undefineAll()
- Undefines all currently defined macros.
-
auto isDefined(std::
string_view name) -> bool - Checks whether the given macro is defined.
- void setKeywordVersion(KeywordVersion version)
- Sets the base keyword version for the current compilation unit.
- void resetAllDirectives()
- Resets the state of all compiler directives; this is equivalent to encountering the `resetall directive in source.
- void pushDesignElementStack()
- Increases the preprocessor's view of the depth of parsed design elements, such as modules or interfaces.
- void popDesignElementStack()
- Decreases the preprocessor's view of the depth of parsed design elements, such as modules or interfaces.
-
auto getTimeScale() const -> const std::
optional<TimeScale>& - Gets the currently active time scale value, if any has been set by the user.
- auto getDefaultNetType() const -> TokenKind
- Gets the default net type to use if none is specified.
- auto getUnconnectedDrive() const -> TokenKind
- Gets the currently active drive strength to apply to unconnected nets, if any has been set by the user.
- auto getCurrentKeywordVersion() const -> KeywordVersion
- Gets the currently active keyword version in use by the preprocessor.
- auto getCurrentLibrary() const -> const SourceLibrary*
- Gets the currently active source library, or nullptr if none has been set.
- auto getSourceManager() const -> SourceManager&
- Gets the source manager associated with the preprocessor.
- auto getAllocator() const -> BumpAllocator&
- Gets the allocator used by the preprocessor.
- auto getDiagnostics() const -> Diagnostics&
- Gets the diagnostic bag passed to the Preprocessor's constructor.
-
auto getDefinedMacros() const -> std::
vector<const syntax:: DefineDirectiveSyntax*> - Gets all macros that have been defined thus far in the preprocessor.
Function documentation
void slang:: parsing:: Preprocessor:: predefine(const std:: string& definition,
std:: string_view name = "<api>")
Predefines the given macro definition.
The given definition string is lexed as if it were source text immediately following a `define directive. If any diagnostics are printed for the created text, they will be marked as coming from name.
bool slang:: parsing:: Preprocessor:: undefine(std:: string_view name)
Undefines a previously defined macro.
If the macro is not defined, or if you pass the name of an intrinsic macro, this call returns false and does not undefine anything.
bool slang:: parsing:: Preprocessor:: isDefined(std:: string_view name)
Checks whether the given macro is defined.
This does not check built-in directives except for the intrinsic macros (LINE, etc).
void slang:: parsing:: Preprocessor:: setKeywordVersion(KeywordVersion version)
Sets the base keyword version for the current compilation unit.
Note that this does not affect the keyword version if the user has explicitly requested a different version via the begin_keywords directive.
void slang:: parsing:: Preprocessor:: resetAllDirectives()
Resets the state of all compiler directives; this is equivalent to encountering the `resetall directive in source.
Note that this does not include the state of any macros that have been defined.
void slang:: parsing:: Preprocessor:: pushDesignElementStack()
Increases the preprocessor's view of the depth of parsed design elements, such as modules or interfaces.
A parser calls this whenever starting to parse a new design element so that the preprocessor can enforce rules about where directives may appear.
void slang:: parsing:: Preprocessor:: popDesignElementStack()
Decreases the preprocessor's view of the depth of parsed design elements, such as modules or interfaces.
A parser calls this whenever finishing parsing a design element so that the preprocessor can enforce rules about where directives may appear.
TokenKind slang:: parsing:: Preprocessor:: getDefaultNetType() const
Gets the default net type to use if none is specified.
This is set via the `default_nettype directive. If it is set to "none" by the user, this will return TokenKind::Unknown.
TokenKind slang:: parsing:: Preprocessor:: getUnconnectedDrive() const
Gets the currently active drive strength to apply to unconnected nets, if any has been set by the user.
If none is set, this returns TokenKind::Unknown.