| ... | ... | @@ -5590,6 +5590,15 @@ static ResultLocVar *create_var_result_loc(IrInstruction *alloca, ZigVar *var) { |
| 5590 | 5590 | return result_loc_var; |
| 5591 | 5591 | } |
| 5592 | 5592 | |
| 5593 | static void build_decl_var_and_init(IrBuilder *irb, Scope *scope, AstNode *source_node, ZigVar *var, |
| 5594 | IrInstruction *init, const char *name_hint, IrInstruction *is_comptime) |
| 5595 | { |
| 5596 | IrInstruction *alloca = ir_build_alloca_src(irb, scope, source_node, nullptr, name_hint, is_comptime); |
| 5597 | ResultLocVar *var_result_loc = create_var_result_loc(alloca, var); |
| 5598 | ir_build_end_expr(irb, scope, source_node, init, &var_result_loc->base); |
| 5599 | ir_build_var_decl_src(irb, scope, source_node, var, nullptr, alloca); |
| 5600 | } |
| 5601 | |
| 5593 | 5602 | static IrInstruction *ir_gen_var_decl(IrBuilder *irb, Scope *scope, AstNode *node) { |
| 5594 | 5603 | assert(node->type == NodeTypeVariableDeclaration); |
| 5595 | 5604 | |
| ... | ... | @@ -5967,13 +5976,10 @@ static IrInstruction *ir_gen_for_expr(IrBuilder *irb, Scope *parent_scope, AstNo |
| 5967 | 5976 | index_var = ir_create_var(irb, node, parent_scope, nullptr, true, false, true, is_comptime); |
| 5968 | 5977 | index_var_name = "i"; |
| 5969 | 5978 | } |
| 5970 | | parent_scope = index_var->parent_scope; |
| 5971 | 5979 | |
| 5972 | | IrInstruction *index_alloca = ir_build_alloca_src(irb, parent_scope, node, nullptr, index_var_name, is_comptime); |
| 5973 | | ResultLocVar *var_result_loc = create_var_result_loc(index_alloca, index_var); |
| 5974 | 5980 | IrInstruction *zero = ir_build_const_usize(irb, parent_scope, node, 0); |
| 5975 | | ir_build_end_expr(irb, parent_scope, node, zero, &var_result_loc->base); |
| 5976 | | ir_build_var_decl_src(irb, parent_scope, index_var_source_node, index_var, nullptr, index_alloca); |
| 5981 | build_decl_var_and_init(irb, parent_scope, index_var_source_node, index_var, zero, index_var_name, is_comptime); |
| 5982 | parent_scope = index_var->parent_scope; |
| 5977 | 5983 | |
| 5978 | 5984 | IrInstruction *one = ir_build_const_usize(irb, parent_scope, node, 1); |
| 5979 | 5985 | IrInstruction *index_ptr = ir_build_var_ptr(irb, parent_scope, node, index_var); |
| ... | ... | @@ -7495,7 +7501,7 @@ static IrInstruction *ir_gen_await_expr(IrBuilder *irb, Scope *scope, AstNode *n |
| 7495 | 7501 | IrInstruction *promise_result_type = ir_build_promise_result_type(irb, scope, node, target_promise_type); |
| 7496 | 7502 | ir_build_await_bookkeeping(irb, scope, node, promise_result_type); |
| 7497 | 7503 | IrInstruction *undef_promise_result = ir_build_implicit_cast(irb, scope, node, promise_result_type, undef); |
| 7498 | | ir_build_var_decl_src(irb, scope, node, result_var, nullptr, undef_promise_result); |
| 7504 | build_decl_var_and_init(irb, scope, node, result_var, undef_promise_result, "result", const_bool_false); |
| 7499 | 7505 | IrInstruction *my_result_var_ptr = ir_build_var_ptr(irb, scope, node, result_var); |
| 7500 | 7506 | ir_build_store_ptr(irb, scope, node, result_ptr_field_ptr, my_result_var_ptr); |
| 7501 | 7507 | IrInstruction *save_token = ir_build_coro_save(irb, scope, node, irb->exec->coro_handle); |
| ... | ... | @@ -7930,7 +7936,7 @@ bool ir_gen(CodeGen *codegen, AstNode *node, Scope *scope, IrExecutable *ir_exec |
| 7930 | 7936 | ZigType *coro_frame_type = get_promise_frame_type(irb->codegen, return_type); |
| 7931 | 7937 | IrInstruction *coro_frame_type_value = ir_build_const_type(irb, coro_scope, node, coro_frame_type); |
| 7932 | 7938 | IrInstruction *undef_coro_frame = ir_build_implicit_cast(irb, coro_scope, node, coro_frame_type_value, undef); |
| 7933 | | ir_build_var_decl_src(irb, coro_scope, node, promise_var, nullptr, undef_coro_frame); |
| 7939 | build_decl_var_and_init(irb, coro_scope, node, promise_var, undef_coro_frame, "promise", const_bool_false); |
| 7934 | 7940 | coro_promise_ptr = ir_build_var_ptr(irb, coro_scope, node, promise_var); |
| 7935 | 7941 | |
| 7936 | 7942 | ZigVar *await_handle_var = ir_create_var(irb, node, coro_scope, nullptr, false, false, true, const_bool_false); |
| ... | ... | @@ -7938,7 +7944,7 @@ bool ir_gen(CodeGen *codegen, AstNode *node, Scope *scope, IrExecutable *ir_exec |
| 7938 | 7944 | IrInstruction *await_handle_type_val = ir_build_const_type(irb, coro_scope, node, |
| 7939 | 7945 | get_optional_type(irb->codegen, irb->codegen->builtin_types.entry_promise)); |
| 7940 | 7946 | IrInstruction *null_await_handle = ir_build_implicit_cast(irb, coro_scope, node, await_handle_type_val, null_value); |
| 7941 | | ir_build_var_decl_src(irb, coro_scope, node, await_handle_var, nullptr, null_await_handle); |
| 7947 | build_decl_var_and_init(irb, coro_scope, node, await_handle_var, null_await_handle, "await_handle", const_bool_false); |
| 7942 | 7948 | irb->exec->await_handle_var_ptr = ir_build_var_ptr(irb, coro_scope, node, await_handle_var); |
| 7943 | 7949 | |
| 7944 | 7950 | u8_ptr_type = ir_build_const_type(irb, coro_scope, node, |
| ... | ... | @@ -7948,11 +7954,12 @@ bool ir_gen(CodeGen *codegen, AstNode *node, Scope *scope, IrExecutable *ir_exec |
| 7948 | 7954 | coro_id = ir_build_coro_id(irb, coro_scope, node, promise_as_u8_ptr); |
| 7949 | 7955 | coro_size_var = ir_create_var(irb, node, coro_scope, nullptr, false, false, true, const_bool_false); |
| 7950 | 7956 | IrInstruction *coro_size = ir_build_coro_size(irb, coro_scope, node); |
| 7951 | | ir_build_var_decl_src(irb, coro_scope, node, coro_size_var, nullptr, coro_size); |
| 7957 | build_decl_var_and_init(irb, coro_scope, node, coro_size_var, coro_size, "coro_size", const_bool_false); |
| 7952 | 7958 | IrInstruction *implicit_allocator_ptr = ir_build_get_implicit_allocator(irb, coro_scope, node, |
| 7953 | 7959 | ImplicitAllocatorIdArg); |
| 7954 | 7960 | irb->exec->coro_allocator_var = ir_create_var(irb, node, coro_scope, nullptr, true, true, true, const_bool_false); |
| 7955 | | ir_build_var_decl_src(irb, coro_scope, node, irb->exec->coro_allocator_var, nullptr, implicit_allocator_ptr); |
| 7961 | build_decl_var_and_init(irb, coro_scope, node, irb->exec->coro_allocator_var, implicit_allocator_ptr, |
| 7962 | "allocator", const_bool_false); |
| 7956 | 7963 | Buf *realloc_field_name = buf_create_from_str(ASYNC_REALLOC_FIELD_NAME); |
| 7957 | 7964 | IrInstruction *realloc_fn_ptr = ir_build_field_ptr(irb, coro_scope, node, implicit_allocator_ptr, realloc_field_name); |
| 7958 | 7965 | IrInstruction *realloc_fn = ir_build_load_ptr(irb, coro_scope, node, realloc_fn_ptr); |