| ... | ... | @@ -2241,7 +2241,8 @@ static void visit_fn_decl(Context *c, const FunctionDecl *fn_decl) { |
| 2241 | 2241 | |
| 2242 | 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 | 2247 | for (size_t i = 0; i < proto_node->data.fn_proto.params.length; i += 1) { |
| 2247 | 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 | 2254 | // var c_name = _mangled_name; |
| 2254 | 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 | 2264 | AstNode *fn_def_node = trans_create_node(c, NodeTypeFnDef); |
| 2262 | 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 | 2268 | proto_node->data.fn_proto.fn_def_node = fn_def_node; |
| 2266 | 2269 | c->root->data.root.top_level_decls.append(fn_def_node); |