| ... | ... | @@ -9640,9 +9640,9 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9640 | 9640 | // alignment: comptime_int, |
| 9641 | 9641 | field_values[1] = try Value.Tag.int_u64.create(sema.arena, ty.abiAlignment(target)); |
| 9642 | 9642 | // is_generic: bool, |
| 9643 | | field_values[2] = if (info.is_generic) Value.@"true" else Value.@"false"; |
| 9643 | field_values[2] = Value.makeBool(info.is_generic); |
| 9644 | 9644 | // is_var_args: bool, |
| 9645 | | field_values[3] = if (info.is_var_args) Value.@"true" else Value.@"false"; |
| 9645 | field_values[3] = Value.makeBool(info.is_var_args); |
| 9646 | 9646 | // return_type: ?type, |
| 9647 | 9647 | field_values[4] = try Value.Tag.ty.create(sema.arena, ty.fnReturnType()); |
| 9648 | 9648 | // args: []const FnArg, |
| ... | ... | @@ -9699,9 +9699,9 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9699 | 9699 | // size: Size, |
| 9700 | 9700 | field_values[0] = try Value.Tag.enum_field_index.create(sema.arena, @enumToInt(info.size)); |
| 9701 | 9701 | // is_const: bool, |
| 9702 | | field_values[1] = if (!info.mutable) Value.@"true" else Value.@"false"; |
| 9702 | field_values[1] = Value.makeBool(!info.mutable); |
| 9703 | 9703 | // is_volatile: bool, |
| 9704 | | field_values[2] = if (info.@"volatile") Value.@"true" else Value.@"false"; |
| 9704 | field_values[2] = Value.makeBool(info.@"volatile"); |
| 9705 | 9705 | // alignment: comptime_int, |
| 9706 | 9706 | field_values[3] = try Value.Tag.int_u64.create(sema.arena, alignment); |
| 9707 | 9707 | // address_space: AddressSpace |
| ... | ... | @@ -9709,9 +9709,9 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9709 | 9709 | // child: type, |
| 9710 | 9710 | field_values[5] = try Value.Tag.ty.create(sema.arena, info.pointee_type); |
| 9711 | 9711 | // is_allowzero: bool, |
| 9712 | | field_values[6] = if (info.@"allowzero") Value.@"true" else Value.@"false"; |
| 9713 | | // sentinel: anytype, |
| 9714 | | field_values[7] = if (info.sentinel) |some| try Value.Tag.opt_payload.create(sema.arena, some) else Value.@"null"; |
| 9712 | field_values[6] = Value.makeBool(info.@"allowzero"); |
| 9713 | // sentinel: ?*const anyopaque, |
| 9714 | field_values[7] = try sema.optRefValue(block, src, info.pointee_type, info.sentinel); |
| 9715 | 9715 | |
| 9716 | 9716 | return sema.addConstant( |
| 9717 | 9717 | type_info_ty, |
| ... | ... | @@ -9728,8 +9728,8 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9728 | 9728 | field_values[0] = try Value.Tag.int_u64.create(sema.arena, info.len); |
| 9729 | 9729 | // child: type, |
| 9730 | 9730 | field_values[1] = try Value.Tag.ty.create(sema.arena, info.elem_type); |
| 9731 | | // sentinel: anytype, |
| 9732 | | field_values[2] = if (info.sentinel) |some| try Value.Tag.opt_payload.create(sema.arena, some) else Value.@"null"; |
| 9731 | // sentinel: ?*const anyopaque, |
| 9732 | field_values[2] = try sema.optRefValue(block, src, info.elem_type, info.sentinel); |
| 9733 | 9733 | |
| 9734 | 9734 | return sema.addConstant( |
| 9735 | 9735 | type_info_ty, |
| ... | ... | @@ -9788,7 +9788,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9788 | 9788 | var int_tag_type_buffer: Type.Payload.Bits = undefined; |
| 9789 | 9789 | const int_tag_ty = try ty.intTagType(&int_tag_type_buffer).copy(sema.arena); |
| 9790 | 9790 | |
| 9791 | | const is_exhaustive = if (ty.isNonexhaustiveEnum()) Value.@"false" else Value.@"true"; |
| 9791 | const is_exhaustive = Value.makeBool(!ty.isNonexhaustiveEnum()); |
| 9792 | 9792 | |
| 9793 | 9793 | var fields_anon_decl = try block.startAnonDecl(src); |
| 9794 | 9794 | defer fields_anon_decl.deinit(); |
| ... | ... | @@ -10050,14 +10050,12 @@ fn typeInfoDecls( |
| 10050 | 10050 | break :v try Value.Tag.decl_ref.create(decls_anon_decl.arena(), new_decl); |
| 10051 | 10051 | }; |
| 10052 | 10052 | |
| 10053 | | const is_pub = if (decl.is_pub) Value.@"true" else Value.@"false"; |
| 10054 | | |
| 10055 | 10053 | const fields = try decls_anon_decl.arena().create([2]Value); |
| 10056 | 10054 | fields.* = .{ |
| 10057 | 10055 | //name: []const u8, |
| 10058 | 10056 | name_val, |
| 10059 | 10057 | //is_pub: bool, |
| 10060 | | is_pub, |
| 10058 | Value.makeBool(decl.is_pub), |
| 10061 | 10059 | }; |
| 10062 | 10060 | decls_val.* = try Value.Tag.@"struct".create(decls_anon_decl.arena(), fields); |
| 10063 | 10061 | } |
| ... | ... | @@ -15660,6 +15658,24 @@ fn ensureDeclAnalyzed(sema: *Sema, decl: *Decl) CompileError!void { |
| 15660 | 15658 | }; |
| 15661 | 15659 | } |
| 15662 | 15660 | |
| 15661 | fn refValue(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type, val: Value) !Value { |
| 15662 | var anon_decl = try block.startAnonDecl(src); |
| 15663 | defer anon_decl.deinit(); |
| 15664 | const decl = try anon_decl.finish( |
| 15665 | try ty.copy(anon_decl.arena()), |
| 15666 | try val.copy(anon_decl.arena()), |
| 15667 | ); |
| 15668 | try sema.mod.declareDeclDependency(sema.owner_decl, decl); |
| 15669 | return try Value.Tag.decl_ref.create(sema.arena, decl); |
| 15670 | } |
| 15671 | |
| 15672 | fn optRefValue(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type, opt_val: ?Value) !Value { |
| 15673 | const val = opt_val orelse return Value.@"null"; |
| 15674 | const ptr_val = try refValue(sema, block, src, ty, val); |
| 15675 | const result = try Value.Tag.opt_payload.create(sema.arena, ptr_val); |
| 15676 | return result; |
| 15677 | } |
| 15678 | |
| 15663 | 15679 | fn analyzeDeclRef(sema: *Sema, decl: *Decl) CompileError!Air.Inst.Ref { |
| 15664 | 15680 | try sema.mod.declareDeclDependency(sema.owner_decl, decl); |
| 15665 | 15681 | try sema.ensureDeclAnalyzed(decl); |