pub struct FunctionBuilder { /* private fields */ }
Implementations§
Source§impl FunctionBuilder
impl FunctionBuilder
Sourcepub fn new(ty: FuncType) -> Self
pub fn new(ty: FuncType) -> Self
Examples found in repository?
examples/simple_add.rs (line 14)
10fn main() {
11 let out_file = env::args().nth(1).expect("argument missing: output file");
12
13 let mut md = ModuleBuilder::new();
14 let f = FunctionBuilder::new(funtype!((i32, i32) -> i32))
15 .code(|cb, params| {
16 let a = params[0];
17 let b = params[1];
18 cb.get_local(a).get_local(b).i32_add().return_()
19 })
20 .build();
21 md.new_function(f);
22
23 let module = md.build();
24 let mut code = Vec::new();
25 module.dump(&mut code);
26 let mut out = File::create(out_file).unwrap();
27 out.write(&code).unwrap();
28}
More examples
examples/fibonacci.rs (line 15)
9fn main() {
10 let out_file = env::args().nth(1).expect("argument missing: output file");
11
12 let mut md = ModuleBuilder::new();
13 // function to create must be the 0th function of the module...
14 let fib = FunctionIndex(0).into();
15 let f = FunctionBuilder::new(funtype!((i32) -> i32))
16 .code(|cb, params| {
17 let n = params[0];
18 cb.get_local(n)
19 .constant(1i32)
20 .i32_sub()
21 .call(fib)
22 .get_local(n)
23 .constant(2i32)
24 .i32_sub()
25 .call(fib)
26 .i32_add()
27 .return_()
28 })
29 .build();
30 md.new_function(f);
31
32 let module = md.build();
33 let mut code = Vec::new();
34 module.dump(&mut code);
35 let mut out = File::create(out_file).unwrap();
36 out.write(&code).unwrap();
37}
Sourcepub fn build(self) -> (FuncType, FunctionBody)
pub fn build(self) -> (FuncType, FunctionBody)
Examples found in repository?
examples/simple_add.rs (line 20)
10fn main() {
11 let out_file = env::args().nth(1).expect("argument missing: output file");
12
13 let mut md = ModuleBuilder::new();
14 let f = FunctionBuilder::new(funtype!((i32, i32) -> i32))
15 .code(|cb, params| {
16 let a = params[0];
17 let b = params[1];
18 cb.get_local(a).get_local(b).i32_add().return_()
19 })
20 .build();
21 md.new_function(f);
22
23 let module = md.build();
24 let mut code = Vec::new();
25 module.dump(&mut code);
26 let mut out = File::create(out_file).unwrap();
27 out.write(&code).unwrap();
28}
More examples
examples/fibonacci.rs (line 29)
9fn main() {
10 let out_file = env::args().nth(1).expect("argument missing: output file");
11
12 let mut md = ModuleBuilder::new();
13 // function to create must be the 0th function of the module...
14 let fib = FunctionIndex(0).into();
15 let f = FunctionBuilder::new(funtype!((i32) -> i32))
16 .code(|cb, params| {
17 let n = params[0];
18 cb.get_local(n)
19 .constant(1i32)
20 .i32_sub()
21 .call(fib)
22 .get_local(n)
23 .constant(2i32)
24 .i32_sub()
25 .call(fib)
26 .i32_add()
27 .return_()
28 })
29 .build();
30 md.new_function(f);
31
32 let module = md.build();
33 let mut code = Vec::new();
34 module.dump(&mut code);
35 let mut out = File::create(out_file).unwrap();
36 out.write(&code).unwrap();
37}
pub fn new_local(&mut self, ty: ValueType) -> LocalIndex
pub fn new_locals(&mut self, tys: Vec<ValueType>) -> Vec<LocalIndex>
Sourcepub fn code<F: FnOnce(CodeBuilder, &[LocalIndex]) -> CodeBuilder>(
self,
f: F,
) -> Self
pub fn code<F: FnOnce(CodeBuilder, &[LocalIndex]) -> CodeBuilder>( self, f: F, ) -> Self
Examples found in repository?
examples/simple_add.rs (lines 15-19)
10fn main() {
11 let out_file = env::args().nth(1).expect("argument missing: output file");
12
13 let mut md = ModuleBuilder::new();
14 let f = FunctionBuilder::new(funtype!((i32, i32) -> i32))
15 .code(|cb, params| {
16 let a = params[0];
17 let b = params[1];
18 cb.get_local(a).get_local(b).i32_add().return_()
19 })
20 .build();
21 md.new_function(f);
22
23 let module = md.build();
24 let mut code = Vec::new();
25 module.dump(&mut code);
26 let mut out = File::create(out_file).unwrap();
27 out.write(&code).unwrap();
28}
More examples
examples/fibonacci.rs (lines 16-28)
9fn main() {
10 let out_file = env::args().nth(1).expect("argument missing: output file");
11
12 let mut md = ModuleBuilder::new();
13 // function to create must be the 0th function of the module...
14 let fib = FunctionIndex(0).into();
15 let f = FunctionBuilder::new(funtype!((i32) -> i32))
16 .code(|cb, params| {
17 let n = params[0];
18 cb.get_local(n)
19 .constant(1i32)
20 .i32_sub()
21 .call(fib)
22 .get_local(n)
23 .constant(2i32)
24 .i32_sub()
25 .call(fib)
26 .i32_add()
27 .return_()
28 })
29 .build();
30 md.new_function(f);
31
32 let module = md.build();
33 let mut code = Vec::new();
34 module.dump(&mut code);
35 let mut out = File::create(out_file).unwrap();
36 out.write(&code).unwrap();
37}
Auto Trait Implementations§
impl Freeze for FunctionBuilder
impl RefUnwindSafe for FunctionBuilder
impl Send for FunctionBuilder
impl Sync for FunctionBuilder
impl Unpin for FunctionBuilder
impl UnwindSafe for FunctionBuilder
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