@@ -45,17 +45,27 @@ impl Fir {
4545 type_tables : & Vec < TypeTable > ,
4646 oir : & mut Oir ,
4747 ) -> Function {
48- let mut sig = Signature :: new ( CallConv :: SystemV ) ;
48+ let sig = Signature :: new ( CallConv :: Cold ) ;
4949 let name = UserFuncName :: user ( namespace, index) ;
5050 // todo:: types need to be worked out, params and returns defined
51- func_def
52- . args
53- . iter ( )
54- . for_each ( |_x| sig. params . push ( AbiParam :: new ( I64 ) ) ) ;
55- sig. returns . push ( AbiParam :: new ( I64 ) ) ;
5651 let mut func = Function :: with_name_signature ( name, sig) ;
5752 let mut builder = FunctionBuilder :: new ( & mut func, ctx) ;
5853 let root_block = builder. create_block ( ) ;
54+ func_def. args . iter ( ) . for_each ( |x| {
55+ let z = self
56+ . recurse (
57+ x. as_ref ( ) . as_ref ( ) ,
58+ & mut builder,
59+ dtbl,
60+ scopes,
61+ type_tables,
62+ oir,
63+ )
64+ . unwrap ( ) ;
65+ builder. func . signature . params . push ( AbiParam :: new ( I64 ) ) ;
66+ //let res = builder.block_params(root_block)[z.as_u32() as usize];
67+ } ) ;
68+ builder. func . signature . returns . push ( AbiParam :: new ( I64 ) ) ;
5969 builder. append_block_params_for_function_params ( root_block) ;
6070 builder. switch_to_block ( root_block) ;
6171 let _result = self . recurse (
@@ -70,6 +80,19 @@ impl Fir {
7080 builder. finalize ( ) ;
7181 func
7282 }
83+ pub fn handle_arg_init (
84+ & mut self ,
85+ op : & SymbolInit ,
86+ builder : & mut FunctionBuilder ,
87+ dtbl : & DataTable ,
88+ scopes : & Vec < ScopeTable > ,
89+ type_tables : & Vec < TypeTable > ,
90+ oir : & mut Oir ,
91+ ) -> ResultFir < Variable > {
92+ let result = self . add_var ( ) ;
93+ self . sym . table . insert ( op. ident . clone ( ) , result. as_u32 ( ) ) ;
94+ Ok ( result)
95+ }
7396 pub fn handle_const_init (
7497 & mut self ,
7598 op : & Initialization ,
@@ -265,6 +288,9 @@ impl Fir {
265288 TypeTree :: ConstInit ( op) => {
266289 self . handle_const_init ( & op, builder, dtbl, scopes, type_tables, oir)
267290 }
291+ TypeTree :: ArgInit ( op) => {
292+ self . handle_arg_init ( & op, builder, dtbl, scopes, type_tables, oir)
293+ }
268294 TypeTree :: SymbolAccess ( op) => {
269295 self . handle_sym_access ( & op, dtbl, scopes, type_tables, oir, builder)
270296 }
0 commit comments