pub struct PreprocessorState<'a> {
pub includes: Vec<&'a Path>,
pub defines: Vec<Define<'a>>,
pub timescales: Vec<Timescale<'a>>,
pub default_nettypes: Vec<(DefaultNettype, Span<'a>)>,
pub unconnected_drives: Vec<(UnconnectedDrive, Span<'a>)>,
pub cell_defines: Vec<(bool, Span<'a>)>,
pub line_directives: Vec<LineDirective<'a>>,
pub included_files: HashMap<&'a str, &'a str>,
pub curr_standard: StandardVersion,
pub warnings: Vec<PreprocessorWarning<'a>>,
/* private fields */
}Expand description
The current state of the preprocessor
The preprocessor has to keep track of various directives and
how they affect later preprocessing. A PreprocessorState
encapsulates all of this.
This is primarily meant to be used in the preprocessor, but can be examined afterwards to glean extra information, such as which files were included.
Fields§
§includes: Vec<&'a Path>The include paths to search for included files
defines: Vec<Define<'a>>The preprocessor definitions
timescales: Vec<Timescale<'a>>Any timescales declared with `timescale
default_nettypes: Vec<(DefaultNettype, Span<'a>)>Default nettypes declared with `default_nettype
unconnected_drives: Vec<(UnconnectedDrive, Span<'a>)>Unconnected drives declared with `unconnected_drive
or `nounconnected_drive
cell_defines: Vec<(bool, Span<'a>)>Cell definitions from `celldefine and `endcelldefine
line_directives: Vec<LineDirective<'a>>Line directives declared with `line
included_files: HashMap<&'a str, &'a str>The contents of included files (file_name -> content)
curr_standard: StandardVersionThe current standard for reserved keywords
warnings: Vec<PreprocessorWarning<'a>>Any warnings encountered so far
Implementations§
Source§impl<'a> PreprocessorState<'a>
impl<'a> PreprocessorState<'a>
Sourcepub fn new(includes: Vec<&'a Path>, defines: Vec<Define<'a>>) -> Self
pub fn new(includes: Vec<&'a Path>, defines: Vec<Define<'a>>) -> Self
Create a new PreprocessorState
Sourcepub fn make_fresh(&mut self, defines: Vec<Define<'a>>)
pub fn make_fresh(&mut self, defines: Vec<Define<'a>>)
Make the PreprocessorState fresh, as though it had just started preprocessing
This retains all files that were read in, avoiding reading in their contents again
Sourcepub fn reset_all(&mut self, reset_all_span: Span<'a>)
pub fn reset_all(&mut self, reset_all_span: Span<'a>)
Reset all resetable configs
This is called when a `resetall is encountered
Sourcepub fn is_defined(&self, macro_name: &'a str) -> bool
pub fn is_defined(&self, macro_name: &'a str) -> bool
Check whether the given macro is defined
Sourcepub fn get_define_decl(&self, macro_name: &'a str) -> Option<Span<'a>>
pub fn get_define_decl(&self, macro_name: &'a str) -> Option<Span<'a>>
Get the definition span for a macro, if it’s been defined
Sourcepub fn in_define_arg(&self) -> bool
pub fn in_define_arg(&self) -> bool
Whether we’re currently preprocessing a definition argument
Sourcepub fn undefine(&mut self, macro_name: &'a str) -> bool
pub fn undefine(&mut self, macro_name: &'a str) -> bool
Remove a given macro, evaluating to whether a macro was removed
This is called when a `undef is encountered
Sourcepub fn define(
&mut self,
macro_name: &'a str,
macro_span: Span<'a>,
macro_body: DefineBody<'a>,
)
pub fn define( &mut self, macro_name: &'a str, macro_span: Span<'a>, macro_body: DefineBody<'a>, )
Define a new macro
This is called when a `define is encountered, and assumes that
any previous definitions were removed with PreprocessorState::undefine
Sourcepub fn command_line_define(
&mut self,
macro_name: &'a str,
macro_text: Option<Vec<SpannedToken<'a>>>,
)
pub fn command_line_define( &mut self, macro_name: &'a str, macro_text: Option<Vec<SpannedToken<'a>>>, )
Define a new macro from the command line
This is similar to PreprocessorState::define, but
uses a Span with no file name
Sourcepub fn undefineall(&mut self)
pub fn undefineall(&mut self)
Undefine all macros
This is called when a `undefineall is encountered
Sourcepub fn get_macro_tokens(
&self,
macro_name: &'a str,
) -> Option<(Span<'a>, (Vec<SpannedToken<'a>>, Option<Vec<(SpannedString<'a>, Option<Vec<SpannedToken<'a>>>)>>))>
pub fn get_macro_tokens( &self, macro_name: &'a str, ) -> Option<(Span<'a>, (Vec<SpannedToken<'a>>, Option<Vec<(SpannedString<'a>, Option<Vec<SpannedToken<'a>>>)>>))>
Get the (Span, DefineBody::get_tokens) for a text macro,
if it exists
Sourcepub fn get_file_path(&self, include_path: &str) -> Option<PathBuf>
pub fn get_file_path(&self, include_path: &str) -> Option<PathBuf>
Get the full path from an `include statement
Sourcepub fn add_timescale(&mut self, timescale: Timescale<'a>)
pub fn add_timescale(&mut self, timescale: Timescale<'a>)
Add a compiler directive timescale
This is called when a `timescale is encountered
Sourcepub fn get_timescale(&self, span: &Span<'a>) -> &Timescale<'a>
pub fn get_timescale(&self, span: &Span<'a>) -> &Timescale<'a>
Get the correct compiler timescale, based on the Span
where a delay is encountered
Sourcepub fn add_default_nettype(
&mut self,
def_span: Span<'a>,
default_nettype: DefaultNettype,
)
pub fn add_default_nettype( &mut self, def_span: Span<'a>, default_nettype: DefaultNettype, )
Add a compiler directive default nettype
This is called when a `default_nettype is encountered
Sourcepub fn get_default_nettype(&self, span: &Span<'a>) -> &DefaultNettype
pub fn get_default_nettype(&self, span: &Span<'a>) -> &DefaultNettype
Get the correct compiler default nettype, based on the Span
where an implicit nettype is needed
Sourcepub fn retain_file(
&mut self,
file_path: String,
file_contents: String,
cache: &'a PreprocessorCache<'a>,
) -> (&'a str, &'a str)
pub fn retain_file( &mut self, file_path: String, file_contents: String, cache: &'a PreprocessorCache<'a>, ) -> (&'a str, &'a str)
Retain the contents of a file
Produces (&file_path, &file_contents) as references to
the cached passed arguments
Sourcepub fn included_files(&self) -> Vec<(String, String)>
pub fn included_files(&self) -> Vec<(String, String)>
Get the included files as a Vec of (name, content) tuples
Sourcepub fn add_unconnected_drive(
&mut self,
unconnected_drive_span: Span<'a>,
unconnected_drive: UnconnectedDrive,
)
pub fn add_unconnected_drive( &mut self, unconnected_drive_span: Span<'a>, unconnected_drive: UnconnectedDrive, )
Add an unconnected drive
This is called when a `unconnected_drive or a
`nounconnected_drive is encountered
Sourcepub fn get_unconnected_drive(&self, span: &Span<'a>) -> &UnconnectedDrive
pub fn get_unconnected_drive(&self, span: &Span<'a>) -> &UnconnectedDrive
Get the unconnected drive based on the Span where an
unconnected net is encountered
Sourcepub fn add_cell_define(&mut self, is_cell_define: bool, span: Span<'a>)
pub fn add_cell_define(&mut self, is_cell_define: bool, span: Span<'a>)
Add a cell define declaration
This is called when a `celldefine is encountered
Sourcepub fn is_cell_module(&self, declaration_span: &Span<'a>) -> bool
pub fn is_cell_module(&self, declaration_span: &Span<'a>) -> bool
Determine whether a module is a cell module, based on the Span
of the module declaration
Sourcepub fn add_line_directive(
&mut self,
file_name: &'a str,
line_number: &'a str,
dir_span: Span<'a>,
)
pub fn add_line_directive( &mut self, file_name: &'a str, line_number: &'a str, dir_span: Span<'a>, )
Add a line directive
This is called when a `line is encountered
Sourcepub fn get_line_directive_file(&self, span: &Span<'a>) -> &'a str
pub fn get_line_directive_file(&self, span: &Span<'a>) -> &'a str
Get the file name from a Span, factoring in `line directives
Sourcepub fn get_line_directive_line(
&mut self,
span: &Span<'a>,
cache: &'a PreprocessorCache<'a>,
) -> &'a str
pub fn get_line_directive_line( &mut self, span: &Span<'a>, cache: &'a PreprocessorCache<'a>, ) -> &'a str
Get the line number of a Span, factoring in `line directives
pub fn retain_string( &mut self, string: String, cache: &'a PreprocessorCache<'a>, ) -> &'a str
Sourcepub fn warn(&mut self, warning: PreprocessorWarning<'a>)
pub fn warn(&mut self, warning: PreprocessorWarning<'a>)
Add a warning encountered during preprocessing
Trait Implementations§
Source§impl<'a> Clone for PreprocessorState<'a>
impl<'a> Clone for PreprocessorState<'a>
Source§fn clone(&self) -> PreprocessorState<'a>
fn clone(&self) -> PreprocessorState<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<'a> Freeze for PreprocessorState<'a>
impl<'a> RefUnwindSafe for PreprocessorState<'a>
impl<'a> Send for PreprocessorState<'a>
impl<'a> Sync for PreprocessorState<'a>
impl<'a> Unpin for PreprocessorState<'a>
impl<'a> UnsafeUnpin for PreprocessorState<'a>
impl<'a> UnwindSafe for PreprocessorState<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);