| ... | ... | @@ -2024,7 +2024,9 @@ fn resolveConstString( |
| 2024 | 2024 | block: *Block, |
| 2025 | 2025 | src: LazySrcLoc, |
| 2026 | 2026 | zir_ref: Zir.Inst.Ref, |
| 2027 | | reason: ComptimeReason, |
| 2027 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 2028 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 2029 | reason: ?ComptimeReason, |
| 2028 | 2030 | ) ![]u8 { |
| 2029 | 2031 | const air_inst = try sema.resolveInst(zir_ref); |
| 2030 | 2032 | return sema.toConstString(block, src, air_inst, reason); |
| ... | ... | @@ -2035,7 +2037,9 @@ pub fn toConstString( |
| 2035 | 2037 | block: *Block, |
| 2036 | 2038 | src: LazySrcLoc, |
| 2037 | 2039 | air_inst: Air.Inst.Ref, |
| 2038 | | reason: ComptimeReason, |
| 2040 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 2041 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 2042 | reason: ?ComptimeReason, |
| 2039 | 2043 | ) ![]u8 { |
| 2040 | 2044 | const pt = sema.pt; |
| 2041 | 2045 | const coerced_inst = try sema.coerce(block, .slice_const_u8, air_inst, src); |
| ... | ... | @@ -2261,6 +2265,8 @@ fn resolveConstValue( |
| 2261 | 2265 | block: *Block, |
| 2262 | 2266 | src: LazySrcLoc, |
| 2263 | 2267 | inst: Air.Inst.Ref, |
| 2268 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 2269 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 2264 | 2270 | reason: ?ComptimeReason, |
| 2265 | 2271 | ) CompileError!Value { |
| 2266 | 2272 | return try sema.resolveValue(inst) orelse { |
| ... | ... | @@ -2288,6 +2294,8 @@ fn resolveConstDefinedValue( |
| 2288 | 2294 | block: *Block, |
| 2289 | 2295 | src: LazySrcLoc, |
| 2290 | 2296 | air_ref: Air.Inst.Ref, |
| 2297 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 2298 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 2291 | 2299 | reason: ?ComptimeReason, |
| 2292 | 2300 | ) CompileError!Value { |
| 2293 | 2301 | const val = try sema.resolveConstValue(block, src, air_ref, reason); |
| ... | ... | @@ -2317,7 +2325,14 @@ pub fn resolveFinalDeclValue( |
| 2317 | 2325 | return val; |
| 2318 | 2326 | } |
| 2319 | 2327 | |
| 2320 | | fn failWithNeededComptime(sema: *Sema, block: *Block, src: LazySrcLoc, reason: ?ComptimeReason) CompileError { |
| 2328 | fn failWithNeededComptime( |
| 2329 | sema: *Sema, |
| 2330 | block: *Block, |
| 2331 | src: LazySrcLoc, |
| 2332 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 2333 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 2334 | reason: ?ComptimeReason, |
| 2335 | ) CompileError { |
| 2321 | 2336 | const msg, const fail_block = msg: { |
| 2322 | 2337 | const msg = try sema.errMsg(src, "unable to resolve comptime value", .{}); |
| 2323 | 2338 | errdefer msg.destroy(sema.gpa); |
| ... | ... | @@ -5569,10 +5584,12 @@ fn zirPanic(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void |
| 5569 | 5584 | const src = block.nodeOffset(inst_data.src_node); |
| 5570 | 5585 | const msg_inst = try sema.resolveInst(inst_data.operand); |
| 5571 | 5586 | |
| 5572 | | const coerced_msg = try sema.coerce(block, .slice_const_u8, msg_inst, block.builtinCallArgSrc(inst_data.src_node, 0)); |
| 5587 | const arg_src = block.builtinCallArgSrc(inst_data.src_node, 0); |
| 5588 | const coerced_msg = try sema.coerce(block, .slice_const_u8, msg_inst, arg_src); |
| 5573 | 5589 | |
| 5574 | 5590 | if (block.isComptime()) { |
| 5575 | | return sema.fail(block, src, "encountered @panic at comptime", .{}); |
| 5591 | const string = try sema.resolveConstString(block, arg_src, inst_data.operand, null); |
| 5592 | return sema.fail(block, src, "encountered @panic at comptime: {s}", .{string}); |
| 5576 | 5593 | } |
| 5577 | 5594 | |
| 5578 | 5595 | // We only apply the first hint in a branch. |
| ... | ... | @@ -37261,7 +37278,9 @@ fn derefSliceAsArray( |
| 37261 | 37278 | block: *Block, |
| 37262 | 37279 | src: LazySrcLoc, |
| 37263 | 37280 | slice_val: Value, |
| 37264 | | reason: ComptimeReason, |
| 37281 | /// `null` may be passed only if `block.isComptime()`. It indicates that the reason for the value |
| 37282 | /// being comptime-resolved is that the block is being comptime-evaluated. |
| 37283 | reason: ?ComptimeReason, |
| 37265 | 37284 | ) CompileError!Value { |
| 37266 | 37285 | return try sema.maybeDerefSliceAsArray(block, src, slice_val) orelse { |
| 37267 | 37286 | return sema.failWithNeededComptime(block, src, reason); |