| ... | ... | @@ -2825,10 +2825,14 @@ fn zirStructDecl( |
| 2825 | 2825 | }); |
| 2826 | 2826 | errdefer wip_ty.cancel(ip); |
| 2827 | 2827 | |
| 2828 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 2829 | | .ty = Type.type, |
| 2830 | | .val = Value.fromInterned(wip_ty.index), |
| 2831 | | }, small.name_strategy, "struct", inst); |
| 2828 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 2829 | block, |
| 2830 | src, |
| 2831 | Value.fromInterned(wip_ty.index), |
| 2832 | small.name_strategy, |
| 2833 | "struct", |
| 2834 | inst, |
| 2835 | ); |
| 2832 | 2836 | mod.declPtr(new_decl_index).owns_tv = true; |
| 2833 | 2837 | errdefer mod.abortAnonDecl(new_decl_index); |
| 2834 | 2838 | |
| ... | ... | @@ -2861,7 +2865,7 @@ fn createAnonymousDeclTypeNamed( |
| 2861 | 2865 | sema: *Sema, |
| 2862 | 2866 | block: *Block, |
| 2863 | 2867 | src: LazySrcLoc, |
| 2864 | | typed_value: TypedValue, |
| 2868 | val: Value, |
| 2865 | 2869 | name_strategy: Zir.Inst.NameStrategy, |
| 2866 | 2870 | anon_prefix: []const u8, |
| 2867 | 2871 | inst: ?Zir.Inst.Index, |
| ... | ... | @@ -2887,12 +2891,12 @@ fn createAnonymousDeclTypeNamed( |
| 2887 | 2891 | const name = mod.intern_pool.getOrPutStringFmt(gpa, "{}__{s}_{d}", .{ |
| 2888 | 2892 | src_decl.name.fmt(&mod.intern_pool), anon_prefix, @intFromEnum(new_decl_index), |
| 2889 | 2893 | }) catch unreachable; |
| 2890 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, typed_value, name); |
| 2894 | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, val, name); |
| 2891 | 2895 | return new_decl_index; |
| 2892 | 2896 | }, |
| 2893 | 2897 | .parent => { |
| 2894 | 2898 | const name = mod.declPtr(block.src_decl).name; |
| 2895 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, typed_value, name); |
| 2899 | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, val, name); |
| 2896 | 2900 | return new_decl_index; |
| 2897 | 2901 | }, |
| 2898 | 2902 | .func => { |
| ... | ... | @@ -2915,7 +2919,7 @@ fn createAnonymousDeclTypeNamed( |
| 2915 | 2919 | // function and the name doesn't matter since it will later |
| 2916 | 2920 | // result in a compile error. |
| 2917 | 2921 | const arg_val = sema.resolveConstValue(block, .unneeded, arg, undefined) catch |
| 2918 | | return sema.createAnonymousDeclTypeNamed(block, src, typed_value, .anon, anon_prefix, null); |
| 2922 | return sema.createAnonymousDeclTypeNamed(block, src, val, .anon, anon_prefix, null); |
| 2919 | 2923 | |
| 2920 | 2924 | if (arg_i != 0) try writer.writeByte(','); |
| 2921 | 2925 | try writer.print("{}", .{arg_val.fmtValue(sema.typeOf(arg), sema.mod)}); |
| ... | ... | @@ -2928,7 +2932,7 @@ fn createAnonymousDeclTypeNamed( |
| 2928 | 2932 | |
| 2929 | 2933 | try writer.writeByte(')'); |
| 2930 | 2934 | const name = try mod.intern_pool.getOrPutString(gpa, buf.items); |
| 2931 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, typed_value, name); |
| 2935 | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, val, name); |
| 2932 | 2936 | return new_decl_index; |
| 2933 | 2937 | }, |
| 2934 | 2938 | .dbg_var => { |
| ... | ... | @@ -2943,12 +2947,12 @@ fn createAnonymousDeclTypeNamed( |
| 2943 | 2947 | src_decl.name.fmt(&mod.intern_pool), zir_data[i].str_op.getStr(sema.code), |
| 2944 | 2948 | }); |
| 2945 | 2949 | |
| 2946 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, typed_value, name); |
| 2950 | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, val, name); |
| 2947 | 2951 | return new_decl_index; |
| 2948 | 2952 | }, |
| 2949 | 2953 | else => {}, |
| 2950 | 2954 | }; |
| 2951 | | return sema.createAnonymousDeclTypeNamed(block, src, typed_value, .anon, anon_prefix, null); |
| 2955 | return sema.createAnonymousDeclTypeNamed(block, src, val, .anon, anon_prefix, null); |
| 2952 | 2956 | }, |
| 2953 | 2957 | } |
| 2954 | 2958 | } |
| ... | ... | @@ -3048,10 +3052,14 @@ fn zirEnumDecl( |
| 3048 | 3052 | |
| 3049 | 3053 | errdefer if (!done) wip_ty.cancel(ip); |
| 3050 | 3054 | |
| 3051 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 3052 | | .ty = Type.type, |
| 3053 | | .val = Value.fromInterned(wip_ty.index), |
| 3054 | | }, small.name_strategy, "enum", inst); |
| 3055 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 3056 | block, |
| 3057 | src, |
| 3058 | Value.fromInterned(wip_ty.index), |
| 3059 | small.name_strategy, |
| 3060 | "enum", |
| 3061 | inst, |
| 3062 | ); |
| 3055 | 3063 | const new_decl = mod.declPtr(new_decl_index); |
| 3056 | 3064 | new_decl.owns_tv = true; |
| 3057 | 3065 | errdefer if (!done) mod.abortAnonDecl(new_decl_index); |
| ... | ... | @@ -3315,10 +3323,14 @@ fn zirUnionDecl( |
| 3315 | 3323 | }); |
| 3316 | 3324 | errdefer wip_ty.cancel(ip); |
| 3317 | 3325 | |
| 3318 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 3319 | | .ty = Type.type, |
| 3320 | | .val = Value.fromInterned(wip_ty.index), |
| 3321 | | }, small.name_strategy, "union", inst); |
| 3326 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 3327 | block, |
| 3328 | src, |
| 3329 | Value.fromInterned(wip_ty.index), |
| 3330 | small.name_strategy, |
| 3331 | "union", |
| 3332 | inst, |
| 3333 | ); |
| 3322 | 3334 | mod.declPtr(new_decl_index).owns_tv = true; |
| 3323 | 3335 | errdefer mod.abortAnonDecl(new_decl_index); |
| 3324 | 3336 | |
| ... | ... | @@ -3399,10 +3411,14 @@ fn zirOpaqueDecl( |
| 3399 | 3411 | }; |
| 3400 | 3412 | errdefer wip_ty.cancel(ip); |
| 3401 | 3413 | |
| 3402 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 3403 | | .ty = Type.type, |
| 3404 | | .val = Value.fromInterned(wip_ty.index), |
| 3405 | | }, small.name_strategy, "opaque", inst); |
| 3414 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 3415 | block, |
| 3416 | src, |
| 3417 | Value.fromInterned(wip_ty.index), |
| 3418 | small.name_strategy, |
| 3419 | "opaque", |
| 3420 | inst, |
| 3421 | ); |
| 3406 | 3422 | mod.declPtr(new_decl_index).owns_tv = true; |
| 3407 | 3423 | errdefer mod.abortAnonDecl(new_decl_index); |
| 3408 | 3424 | |
| ... | ... | @@ -3462,10 +3478,14 @@ fn zirErrorSetDecl( |
| 3462 | 3478 | |
| 3463 | 3479 | const error_set_ty = try mod.errorSetFromUnsortedNames(names.keys()); |
| 3464 | 3480 | |
| 3465 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 3466 | | .ty = Type.type, |
| 3467 | | .val = error_set_ty.toValue(), |
| 3468 | | }, name_strategy, "error", inst); |
| 3481 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 3482 | block, |
| 3483 | src, |
| 3484 | error_set_ty.toValue(), |
| 3485 | name_strategy, |
| 3486 | "error", |
| 3487 | inst, |
| 3488 | ); |
| 3469 | 3489 | const new_decl = mod.declPtr(new_decl_index); |
| 3470 | 3490 | new_decl.owns_tv = true; |
| 3471 | 3491 | errdefer mod.abortAnonDecl(new_decl_index); |
| ... | ... | @@ -21490,10 +21510,14 @@ fn zirReify( |
| 21490 | 21510 | }; |
| 21491 | 21511 | errdefer wip_ty.cancel(ip); |
| 21492 | 21512 | |
| 21493 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 21494 | | .ty = Type.type, |
| 21495 | | .val = Value.fromInterned(wip_ty.index), |
| 21496 | | }, name_strategy, "opaque", inst); |
| 21513 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 21514 | block, |
| 21515 | src, |
| 21516 | Value.fromInterned(wip_ty.index), |
| 21517 | name_strategy, |
| 21518 | "opaque", |
| 21519 | inst, |
| 21520 | ); |
| 21497 | 21521 | mod.declPtr(new_decl_index).owns_tv = true; |
| 21498 | 21522 | errdefer mod.abortAnonDecl(new_decl_index); |
| 21499 | 21523 | |
| ... | ... | @@ -21686,10 +21710,14 @@ fn reifyEnum( |
| 21686 | 21710 | return sema.fail(block, src, "Type.Enum.tag_type must be an integer type", .{}); |
| 21687 | 21711 | } |
| 21688 | 21712 | |
| 21689 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 21690 | | .ty = Type.type, |
| 21691 | | .val = Value.fromInterned(wip_ty.index), |
| 21692 | | }, name_strategy, "enum", inst); |
| 21713 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 21714 | block, |
| 21715 | src, |
| 21716 | Value.fromInterned(wip_ty.index), |
| 21717 | name_strategy, |
| 21718 | "enum", |
| 21719 | inst, |
| 21720 | ); |
| 21693 | 21721 | mod.declPtr(new_decl_index).owns_tv = true; |
| 21694 | 21722 | errdefer mod.abortAnonDecl(new_decl_index); |
| 21695 | 21723 | |
| ... | ... | @@ -21829,10 +21857,14 @@ fn reifyUnion( |
| 21829 | 21857 | }; |
| 21830 | 21858 | errdefer wip_ty.cancel(ip); |
| 21831 | 21859 | |
| 21832 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 21833 | | .ty = Type.type, |
| 21834 | | .val = Value.fromInterned(wip_ty.index), |
| 21835 | | }, name_strategy, "union", inst); |
| 21860 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 21861 | block, |
| 21862 | src, |
| 21863 | Value.fromInterned(wip_ty.index), |
| 21864 | name_strategy, |
| 21865 | "union", |
| 21866 | inst, |
| 21867 | ); |
| 21836 | 21868 | mod.declPtr(new_decl_index).owns_tv = true; |
| 21837 | 21869 | errdefer mod.abortAnonDecl(new_decl_index); |
| 21838 | 21870 | |
| ... | ... | @@ -22084,10 +22116,14 @@ fn reifyStruct( |
| 22084 | 22116 | .auto => {}, |
| 22085 | 22117 | }; |
| 22086 | 22118 | |
| 22087 | | const new_decl_index = try sema.createAnonymousDeclTypeNamed(block, src, .{ |
| 22088 | | .ty = Type.type, |
| 22089 | | .val = Value.fromInterned(wip_ty.index), |
| 22090 | | }, name_strategy, "struct", inst); |
| 22119 | const new_decl_index = try sema.createAnonymousDeclTypeNamed( |
| 22120 | block, |
| 22121 | src, |
| 22122 | Value.fromInterned(wip_ty.index), |
| 22123 | name_strategy, |
| 22124 | "struct", |
| 22125 | inst, |
| 22126 | ); |
| 22091 | 22127 | mod.declPtr(new_decl_index).owns_tv = true; |
| 22092 | 22128 | errdefer mod.abortAnonDecl(new_decl_index); |
| 22093 | 22129 | |
| ... | ... | @@ -26139,9 +26175,10 @@ fn zirBuiltinExtern( |
| 26139 | 26175 | const new_decl_index = try mod.allocateNewDecl(sema.owner_decl.src_namespace, sema.owner_decl.src_node); |
| 26140 | 26176 | errdefer mod.destroyDecl(new_decl_index); |
| 26141 | 26177 | const new_decl = mod.declPtr(new_decl_index); |
| 26142 | | try mod.initNewAnonDecl(new_decl_index, sema.owner_decl.src_line, .{ |
| 26143 | | .ty = Type.fromInterned(ptr_info.child), |
| 26144 | | .val = Value.fromInterned( |
| 26178 | try mod.initNewAnonDecl( |
| 26179 | new_decl_index, |
| 26180 | sema.owner_decl.src_line, |
| 26181 | Value.fromInterned( |
| 26145 | 26182 | if (Type.fromInterned(ptr_info.child).zigTypeTag(mod) == .Fn) |
| 26146 | 26183 | try ip.getExternFunc(sema.gpa, .{ |
| 26147 | 26184 | .ty = ptr_info.child, |
| ... | ... | @@ -26160,7 +26197,8 @@ fn zirBuiltinExtern( |
| 26160 | 26197 | .is_weak_linkage = options.linkage == .weak, |
| 26161 | 26198 | } }), |
| 26162 | 26199 | ), |
| 26163 | | }, options.name); |
| 26200 | options.name, |
| 26201 | ); |
| 26164 | 26202 | new_decl.owns_tv = true; |
| 26165 | 26203 | // Note that this will queue the anon decl for codegen, so that the backend can |
| 26166 | 26204 | // correctly handle the extern, including duplicate detection. |
| ... | ... | @@ -37381,10 +37419,12 @@ fn generateUnionTagTypeNumbered( |
| 37381 | 37419 | errdefer mod.destroyDecl(new_decl_index); |
| 37382 | 37420 | const fqn = try union_owner_decl.fullyQualifiedName(mod); |
| 37383 | 37421 | const name = try ip.getOrPutStringFmt(gpa, "@typeInfo({}).Union.tag_type.?", .{fqn.fmt(ip)}); |
| 37384 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, .{ |
| 37385 | | .ty = Type.noreturn, |
| 37386 | | .val = Value.@"unreachable", |
| 37387 | | }, name); |
| 37422 | try mod.initNewAnonDecl( |
| 37423 | new_decl_index, |
| 37424 | src_decl.src_line, |
| 37425 | Value.@"unreachable", |
| 37426 | name, |
| 37427 | ); |
| 37388 | 37428 | errdefer mod.abortAnonDecl(new_decl_index); |
| 37389 | 37429 | |
| 37390 | 37430 | const new_decl = mod.declPtr(new_decl_index); |
| ... | ... | @@ -37425,10 +37465,12 @@ fn generateUnionTagTypeSimple( |
| 37425 | 37465 | const new_decl_index = try mod.allocateNewDecl(block.namespace, src_decl.src_node); |
| 37426 | 37466 | errdefer mod.destroyDecl(new_decl_index); |
| 37427 | 37467 | const name = try ip.getOrPutStringFmt(gpa, "@typeInfo({}).Union.tag_type.?", .{fqn.fmt(ip)}); |
| 37428 | | try mod.initNewAnonDecl(new_decl_index, src_decl.src_line, .{ |
| 37429 | | .ty = Type.noreturn, |
| 37430 | | .val = Value.@"unreachable", |
| 37431 | | }, name); |
| 37468 | try mod.initNewAnonDecl( |
| 37469 | new_decl_index, |
| 37470 | src_decl.src_line, |
| 37471 | Value.@"unreachable", |
| 37472 | name, |
| 37473 | ); |
| 37432 | 37474 | mod.declPtr(new_decl_index).name_fully_qualified = true; |
| 37433 | 37475 | break :new_decl_index new_decl_index; |
| 37434 | 37476 | }; |