pub struct Irgen {
decls: BTreeMap<String, Declaration>,
typedefs: HashMap<String, Dtype>,
structs: HashMap<String, Option<Dtype>>,
struct_tempid_counter: usize,
}
Expand description
A C file going through IR generation.
Fields§
§decls: BTreeMap<String, Declaration>
Declarations made in the C file (e.g, global variables and functions)
typedefs: HashMap<String, Dtype>
Type definitions made in the C file (e.g, typedef my_type = int;)
structs: HashMap<String, Option<Dtype>>
Structs defined in the C file,
struct_tempid_counter: usize
Temporary counter for anonymous structs. One should not need to use this any more.
Implementations§
Source§impl Irgen
impl Irgen
const BID_INIT: BlockId
const BID_COUNTER_INIT: usize = 1usize
const TEMPID_COUNTER_INIT: usize = 0usize
Sourcefn add_declaration(&mut self, source: &Declaration) -> Result<(), IrgenError>
fn add_declaration(&mut self, source: &Declaration) -> Result<(), IrgenError>
Add a declaration. It can be either a struct, typedef, or a variable.
Sourcefn add_function_definition(
&mut self,
source: &FunctionDefinition,
) -> Result<(), IrgenError>
fn add_function_definition( &mut self, source: &FunctionDefinition, ) -> Result<(), IrgenError>
Add a function definition.
Sourcefn add_decl(&mut self, name: &str, decl: Declaration) -> Result<(), IrgenError>
fn add_decl(&mut self, name: &str, decl: Declaration) -> Result<(), IrgenError>
Adds a possibly existing declaration.
Returns error if the previous declearation is incompatible with decl
.
Trait Implementations§
Source§impl Translate<TranslationUnit> for Irgen
impl Translate<TranslationUnit> for Irgen
Source§type Target = TranslationUnit
type Target = TranslationUnit
The type to translate to.
Source§type Error = IrgenError
type Error = IrgenError
The error type.
Auto Trait Implementations§
impl Freeze for Irgen
impl RefUnwindSafe for Irgen
impl Send for Irgen
impl Sync for Irgen
impl Unpin for Irgen
impl UnwindSafe for Irgen
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
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more