pub struct Block<'c>(/* private fields */);Implementations§
Source§impl<'c> Block<'c>
impl<'c> Block<'c>
Sourcepub fn append(func: Function<'c>) -> Self
pub fn append(func: Function<'c>) -> Self
Examples found in repository?
examples/compile.rs (line 21)
14fn main() {
15 let ctxt = Ctxt::new();
16
17 {
18 let s32_ty = Type::int(&ctxt, 32);
19 let fun_ty = ty::Function::new(vec![], s32_ty);
20 let foo = Function::new(&ctxt, "foo", fun_ty.clone());
21 let foo_start = Block::append(foo);
22 let foo_ret = foo_start.build_const_int(s32_ty, 0);
23 foo_start.build_return(foo_ret);
24
25 let main = Function::new(&ctxt, "main", fun_ty);
26 let main_start = Block::append(main); // the first block added is the entry
27 // block
28 let main_end = Block::append(main);
29 let main_ret = main_start.build_call(foo, &[]);
30 main_start.build_branch(main_end);
31 main_end.build_call(foo, &[]); // useless, but you can still do
32 main_end.build_return(main_ret);
33 }
34
35 println!("{}", ctxt);
36}Sourcepub fn build_const_int(self, ty: Type<'c>, value: u64) -> Value<'c>
pub fn build_const_int(self, ty: Type<'c>, value: u64) -> Value<'c>
Examples found in repository?
examples/compile.rs (line 22)
14fn main() {
15 let ctxt = Ctxt::new();
16
17 {
18 let s32_ty = Type::int(&ctxt, 32);
19 let fun_ty = ty::Function::new(vec![], s32_ty);
20 let foo = Function::new(&ctxt, "foo", fun_ty.clone());
21 let foo_start = Block::append(foo);
22 let foo_ret = foo_start.build_const_int(s32_ty, 0);
23 foo_start.build_return(foo_ret);
24
25 let main = Function::new(&ctxt, "main", fun_ty);
26 let main_start = Block::append(main); // the first block added is the entry
27 // block
28 let main_end = Block::append(main);
29 let main_ret = main_start.build_call(foo, &[]);
30 main_start.build_branch(main_end);
31 main_end.build_call(foo, &[]); // useless, but you can still do
32 main_end.build_return(main_ret);
33 }
34
35 println!("{}", ctxt);
36}Sourcepub fn build_call(self, func: Function<'c>, args: &[Value<'c>]) -> Value<'c>
pub fn build_call(self, func: Function<'c>, args: &[Value<'c>]) -> Value<'c>
Examples found in repository?
examples/compile.rs (line 29)
14fn main() {
15 let ctxt = Ctxt::new();
16
17 {
18 let s32_ty = Type::int(&ctxt, 32);
19 let fun_ty = ty::Function::new(vec![], s32_ty);
20 let foo = Function::new(&ctxt, "foo", fun_ty.clone());
21 let foo_start = Block::append(foo);
22 let foo_ret = foo_start.build_const_int(s32_ty, 0);
23 foo_start.build_return(foo_ret);
24
25 let main = Function::new(&ctxt, "main", fun_ty);
26 let main_start = Block::append(main); // the first block added is the entry
27 // block
28 let main_end = Block::append(main);
29 let main_ret = main_start.build_call(foo, &[]);
30 main_start.build_branch(main_end);
31 main_end.build_call(foo, &[]); // useless, but you can still do
32 main_end.build_return(main_ret);
33 }
34
35 println!("{}", ctxt);
36}pub fn build_mul(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_udiv(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_sdiv(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_urem(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_srem(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_add(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_sub(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_shl(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_zshr(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_sshr(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_and(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_xor(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
pub fn build_or(self, lhs: Value<'c>, rhs: Value<'c>) -> Value<'c>
Sourcepub fn build_return(self, value: Value<'c>)
pub fn build_return(self, value: Value<'c>)
Examples found in repository?
examples/compile.rs (line 23)
14fn main() {
15 let ctxt = Ctxt::new();
16
17 {
18 let s32_ty = Type::int(&ctxt, 32);
19 let fun_ty = ty::Function::new(vec![], s32_ty);
20 let foo = Function::new(&ctxt, "foo", fun_ty.clone());
21 let foo_start = Block::append(foo);
22 let foo_ret = foo_start.build_const_int(s32_ty, 0);
23 foo_start.build_return(foo_ret);
24
25 let main = Function::new(&ctxt, "main", fun_ty);
26 let main_start = Block::append(main); // the first block added is the entry
27 // block
28 let main_end = Block::append(main);
29 let main_ret = main_start.build_call(foo, &[]);
30 main_start.build_branch(main_end);
31 main_end.build_call(foo, &[]); // useless, but you can still do
32 main_end.build_return(main_ret);
33 }
34
35 println!("{}", ctxt);
36}Sourcepub fn build_branch(self, blk: Block<'c>)
pub fn build_branch(self, blk: Block<'c>)
Examples found in repository?
examples/compile.rs (line 30)
14fn main() {
15 let ctxt = Ctxt::new();
16
17 {
18 let s32_ty = Type::int(&ctxt, 32);
19 let fun_ty = ty::Function::new(vec![], s32_ty);
20 let foo = Function::new(&ctxt, "foo", fun_ty.clone());
21 let foo_start = Block::append(foo);
22 let foo_ret = foo_start.build_const_int(s32_ty, 0);
23 foo_start.build_return(foo_ret);
24
25 let main = Function::new(&ctxt, "main", fun_ty);
26 let main_start = Block::append(main); // the first block added is the entry
27 // block
28 let main_end = Block::append(main);
29 let main_ret = main_start.build_call(foo, &[]);
30 main_start.build_branch(main_end);
31 main_end.build_call(foo, &[]); // useless, but you can still do
32 main_end.build_return(main_ret);
33 }
34
35 println!("{}", ctxt);
36}Trait Implementations§
Auto Trait Implementations§
impl<'c> Freeze for Block<'c>
impl<'c> !RefUnwindSafe for Block<'c>
impl<'c> !Send for Block<'c>
impl<'c> !Sync for Block<'c>
impl<'c> Unpin for Block<'c>
impl<'c> !UnwindSafe for Block<'c>
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