| ... | @@ -2241,7 +2241,8 @@ static void visit_fn_decl(Context *c, const FunctionDecl *fn_decl) { | ... | @@ -2241,7 +2241,8 @@ static void visit_fn_decl(Context *c, const FunctionDecl *fn_decl) { |
| 2241 | | 2241 | |
| 2242 | // it worked | 2242 | // it worked |
| 2243 | | 2243 | |
| 2244 | AstNode *parameter_init_block = trans_create_node(c, NodeTypeBlock); | 2244 | assert(actual_body_node->type == NodeTypeBlock); |
| | 2245 | AstNode *body_node_with_param_inits = trans_create_node(c, NodeTypeBlock); |
| 2245 | | 2246 | |
| 2246 | for (size_t i = 0; i < proto_node->data.fn_proto.params.length; i += 1) { | 2247 | for (size_t i = 0; i < proto_node->data.fn_proto.params.length; i += 1) { |
| 2247 | AstNode *param_node = proto_node->data.fn_proto.params.at(i); | 2248 | AstNode *param_node = proto_node->data.fn_proto.params.at(i); |
| ... | @@ -2253,14 +2254,16 @@ static void visit_fn_decl(Context *c, const FunctionDecl *fn_decl) { | ... | @@ -2253,14 +2254,16 @@ static void visit_fn_decl(Context *c, const FunctionDecl *fn_decl) { |
| 2253 | // var c_name = _mangled_name; | 2254 | // var c_name = _mangled_name; |
| 2254 | AstNode *parameter_init = trans_create_node_var_decl_local(c, false, good_name, nullptr, trans_create_node_symbol(c, mangled_name)); | 2255 | AstNode *parameter_init = trans_create_node_var_decl_local(c, false, good_name, nullptr, trans_create_node_symbol(c, mangled_name)); |
| 2255 | | 2256 | |
| 2256 | parameter_init_block->data.block.statements.append(parameter_init); | 2257 | body_node_with_param_inits->data.block.statements.append(parameter_init); |
| 2257 | } | 2258 | } |
| 2258 | | 2259 | |
| 2259 | parameter_init_block->data.block.statements.append(actual_body_node); | 2260 | for (size_t i = 0; i < actual_body_node->data.block.statements.length; i += 1) { |
| | 2261 | body_node_with_param_inits->data.block.statements.append(actual_body_node->data.block.statements.at(i)); |
| | 2262 | } |
| 2260 | | 2263 | |
| 2261 | AstNode *fn_def_node = trans_create_node(c, NodeTypeFnDef); | 2264 | AstNode *fn_def_node = trans_create_node(c, NodeTypeFnDef); |
| 2262 | fn_def_node->data.fn_def.fn_proto = proto_node; | 2265 | fn_def_node->data.fn_def.fn_proto = proto_node; |
| 2263 | fn_def_node->data.fn_def.body = parameter_init_block; | 2266 | fn_def_node->data.fn_def.body = body_node_with_param_inits; |
| 2264 | | 2267 | |
| 2265 | proto_node->data.fn_proto.fn_def_node = fn_def_node; | 2268 | proto_node->data.fn_proto.fn_def_node = fn_def_node; |
| 2266 | c->root->data.root.top_level_decls.append(fn_def_node); | 2269 | c->root->data.root.top_level_decls.append(fn_def_node); |