Struct hugr_llvm::emit::EmitModuleContext
source · pub struct EmitModuleContext<'c, H> { /* private fields */ }
Implementations§
source§impl<'c, H> EmitModuleContext<'c, H>
impl<'c, H> EmitModuleContext<'c, H>
sourcepub fn iw_context(&self) -> &'c Context
pub fn iw_context(&self) -> &'c Context
Returns a reference to the inner Context.
sourcepub fn llvm_type(&self, hugr_type: &HugrType) -> Result<BasicTypeEnum<'c>>
pub fn llvm_type(&self, hugr_type: &HugrType) -> Result<BasicTypeEnum<'c>>
sourcepub fn llvm_func_type(
&self,
hugr_type: &HugrFuncType,
) -> Result<FunctionType<'c>>
pub fn llvm_func_type( &self, hugr_type: &HugrFuncType, ) -> Result<FunctionType<'c>>
Convert a HugrFuncType into an LLVM FunctionType.
sourcepub fn llvm_sum_type(&self, sum_type: HugrSumType) -> Result<LLVMSumType<'c>>
pub fn llvm_sum_type(&self, sum_type: HugrSumType) -> Result<LLVMSumType<'c>>
Convert a hugr HugrSumType into an LLVM LLVMSumType.
sourcepub fn new(
module: Module<'c>,
namer: Rc<Namer>,
extensions: Rc<CodegenExtsMap<'c, H>>,
typer: Rc<TypeConverter<'c>>,
) -> Self
pub fn new( module: Module<'c>, namer: Rc<Namer>, extensions: Rc<CodegenExtsMap<'c, H>>, typer: Rc<TypeConverter<'c>>, ) -> Self
Creates a new EmitModuleContext
. We take ownership of the Module,
and return it in EmitModuleContext::finish.
sourcepub fn extensions(&self) -> Rc<CodegenExtsMap<'c, H>>
pub fn extensions(&self) -> Rc<CodegenExtsMap<'c, H>>
Returns a reference to the inner CodegenExtsMap.
sourcepub fn typing_session(&self) -> TypingSession<'c, H>
pub fn typing_session(&self) -> TypingSession<'c, H>
Returns a TypingSession constructed from it’s members.
sourcepub fn get_func_defn(
&self,
node: FatNode<'c, FuncDefn, H>,
) -> Result<FunctionValue<'c>>where
H: HugrView,
pub fn get_func_defn(
&self,
node: FatNode<'c, FuncDefn, H>,
) -> Result<FunctionValue<'c>>where
H: HugrView,
Adds or gets the FunctionValue in the Module corresponding to the given FuncDefn.
The name of the result is mangled by EmitModuleContext::name_func.
sourcepub fn get_func_decl(
&self,
node: FatNode<'c, FuncDecl, H>,
) -> Result<FunctionValue<'c>>where
H: HugrView,
pub fn get_func_decl(
&self,
node: FatNode<'c, FuncDecl, H>,
) -> Result<FunctionValue<'c>>where
H: HugrView,
Adds or gets the FunctionValue in the Module corresponding to the given FuncDecl.
The name of the result is mangled by EmitModuleContext::name_func.
sourcepub fn get_extern_func(
&self,
symbol: impl AsRef<str>,
typ: FunctionType<'c>,
) -> Result<FunctionValue<'c>>
pub fn get_extern_func( &self, symbol: impl AsRef<str>, typ: FunctionType<'c>, ) -> Result<FunctionValue<'c>>
Adds or get the FunctionValue in the Module with the given symbol and function type.
The name undergoes no mangling. The FunctionValue will have Linkage::External.
If this function is called multiple times with the same arguments it will return the same FunctionValue.
If a function with the given name exists but the type does not match then an Error is returned.
sourcepub fn get_global(
&self,
symbol: impl AsRef<str>,
typ: impl BasicType<'c>,
constant: bool,
) -> Result<GlobalValue<'c>>
pub fn get_global( &self, symbol: impl AsRef<str>, typ: impl BasicType<'c>, constant: bool, ) -> Result<GlobalValue<'c>>
Adds or gets the GlobalValue in the Module corresponding to the given symbol and LLVM type.
The name will not be mangled.
If a global with the given name exists but the type or constant-ness does not match then an error will be returned.
Auto Trait Implementations§
impl<'c, H> !Freeze for EmitModuleContext<'c, H>
impl<'c, H> !RefUnwindSafe for EmitModuleContext<'c, H>
impl<'c, H> !Send for EmitModuleContext<'c, H>
impl<'c, H> !Sync for EmitModuleContext<'c, H>
impl<'c, H> Unpin for EmitModuleContext<'c, H>
impl<'c, H> !UnwindSafe for EmitModuleContext<'c, H>
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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>
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>
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 moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.