| ... | @@ -249,9 +249,9 @@ pub const bool_rl: ResultLoc = .{ .ty = .bool_type }; | ... | @@ -249,9 +249,9 @@ pub const bool_rl: ResultLoc = .{ .ty = .bool_type }; |
| 249 | fn typeExpr(gz: *GenZir, scope: *Scope, type_node: ast.Node.Index) InnerError!Zir.Inst.Ref { | 249 | fn typeExpr(gz: *GenZir, scope: *Scope, type_node: ast.Node.Index) InnerError!Zir.Inst.Ref { |
| 250 | const prev_force_comptime = gz.force_comptime; | 250 | const prev_force_comptime = gz.force_comptime; |
| 251 | gz.force_comptime = true; | 251 | gz.force_comptime = true; |
| 252 | const e = expr(gz, scope, .{ .ty = .type_type }, type_node); | 252 | defer gz.force_comptime = prev_force_comptime; |
| 253 | gz.force_comptime = prev_force_comptime; | 253 | |
| 254 | return e; | 254 | return expr(gz, scope, .{ .ty = .type_type }, type_node); |
| 255 | } | 255 | } |
| 256 | | 256 | |
| 257 | fn lvalExpr(gz: *GenZir, scope: *Scope, node: ast.Node.Index) InnerError!Zir.Inst.Ref { | 257 | fn lvalExpr(gz: *GenZir, scope: *Scope, node: ast.Node.Index) InnerError!Zir.Inst.Ref { |
| ... | @@ -1465,9 +1465,9 @@ fn comptimeExpr( | ... | @@ -1465,9 +1465,9 @@ fn comptimeExpr( |
| 1465 | ) InnerError!Zir.Inst.Ref { | 1465 | ) InnerError!Zir.Inst.Ref { |
| 1466 | const prev_force_comptime = gz.force_comptime; | 1466 | const prev_force_comptime = gz.force_comptime; |
| 1467 | gz.force_comptime = true; | 1467 | gz.force_comptime = true; |
| 1468 | const result = try expr(gz, scope, rl, node); | 1468 | defer gz.force_comptime = prev_force_comptime; |
| 1469 | gz.force_comptime = prev_force_comptime; | 1469 | |
| 1470 | return result; | 1470 | return expr(gz, scope, rl, node); |
| 1471 | } | 1471 | } |
| 1472 | | 1472 | |
| 1473 | /// This one is for an actual `comptime` syntax, and will emit a compile error if | 1473 | /// This one is for an actual `comptime` syntax, and will emit a compile error if |
| ... | @@ -2121,8 +2121,8 @@ fn genDefers( | ... | @@ -2121,8 +2121,8 @@ fn genDefers( |
| 2121 | const expr_node = node_datas[defer_scope.defer_node].rhs; | 2121 | const expr_node = node_datas[defer_scope.defer_node].rhs; |
| 2122 | const prev_in_defer = gz.in_defer; | 2122 | const prev_in_defer = gz.in_defer; |
| 2123 | gz.in_defer = true; | 2123 | gz.in_defer = true; |
| | 2124 | defer gz.in_defer = prev_in_defer; |
| 2124 | try unusedResultExpr(gz, defer_scope.parent, expr_node); | 2125 | try unusedResultExpr(gz, defer_scope.parent, expr_node); |
| 2125 | gz.in_defer = prev_in_defer; | | |
| 2126 | }, | 2126 | }, |
| 2127 | .defer_error => { | 2127 | .defer_error => { |
| 2128 | const defer_scope = scope.cast(Scope.Defer).?; | 2128 | const defer_scope = scope.cast(Scope.Defer).?; |
| ... | @@ -2131,8 +2131,8 @@ fn genDefers( | ... | @@ -2131,8 +2131,8 @@ fn genDefers( |
| 2131 | const expr_node = node_datas[defer_scope.defer_node].rhs; | 2131 | const expr_node = node_datas[defer_scope.defer_node].rhs; |
| 2132 | const prev_in_defer = gz.in_defer; | 2132 | const prev_in_defer = gz.in_defer; |
| 2133 | gz.in_defer = true; | 2133 | gz.in_defer = true; |
| | 2134 | defer gz.in_defer = prev_in_defer; |
| 2134 | try unusedResultExpr(gz, defer_scope.parent, expr_node); | 2135 | try unusedResultExpr(gz, defer_scope.parent, expr_node); |
| 2135 | gz.in_defer = prev_in_defer; | | |
| 2136 | }, | 2136 | }, |
| 2137 | .namespace => unreachable, | 2137 | .namespace => unreachable, |
| 2138 | .top => unreachable, | 2138 | .top => unreachable, |
| ... | @@ -2887,6 +2887,7 @@ fn fnDecl( | ... | @@ -2887,6 +2887,7 @@ fn fnDecl( |
| 2887 | | 2887 | |
| 2888 | const prev_fn_block = astgen.fn_block; | 2888 | const prev_fn_block = astgen.fn_block; |
| 2889 | astgen.fn_block = &fn_gz; | 2889 | astgen.fn_block = &fn_gz; |
| | 2890 | defer astgen.fn_block = prev_fn_block; |
| 2890 | | 2891 | |
| 2891 | // Iterate over the parameters. We put the param names as the first N | 2892 | // Iterate over the parameters. We put the param names as the first N |
| 2892 | // items inside `extra` so that debug info later can refer to the parameter names | 2893 | // items inside `extra` so that debug info later can refer to the parameter names |
| ... | @@ -2938,8 +2939,6 @@ fn fnDecl( | ... | @@ -2938,8 +2939,6 @@ fn fnDecl( |
| 2938 | _ = try fn_gz.addUnTok(.ret_coerce, .void_value, tree.lastToken(body_node)); | 2939 | _ = try fn_gz.addUnTok(.ret_coerce, .void_value, tree.lastToken(body_node)); |
| 2939 | } | 2940 | } |
| 2940 | | 2941 | |
| 2941 | astgen.fn_block = prev_fn_block; | | |
| 2942 | | | |
| 2943 | break :func try decl_gz.addFunc(.{ | 2942 | break :func try decl_gz.addFunc(.{ |
| 2944 | .src_node = decl_node, | 2943 | .src_node = decl_node, |
| 2945 | .ret_ty = return_type_inst, | 2944 | .ret_ty = return_type_inst, |
| ... | @@ -3276,6 +3275,7 @@ fn testDecl( | ... | @@ -3276,6 +3275,7 @@ fn testDecl( |
| 3276 | | 3275 | |
| 3277 | const prev_fn_block = astgen.fn_block; | 3276 | const prev_fn_block = astgen.fn_block; |
| 3278 | astgen.fn_block = &fn_block; | 3277 | astgen.fn_block = &fn_block; |
| | 3278 | defer astgen.fn_block = prev_fn_block; |
| 3279 | | 3279 | |
| 3280 | const block_result = try expr(&fn_block, &fn_block.base, .none, body_node); | 3280 | const block_result = try expr(&fn_block, &fn_block.base, .none, body_node); |
| 3281 | if (fn_block.instructions.items.len == 0 or !fn_block.refIsNoReturn(block_result)) { | 3281 | if (fn_block.instructions.items.len == 0 or !fn_block.refIsNoReturn(block_result)) { |
| ... | @@ -3284,8 +3284,6 @@ fn testDecl( | ... | @@ -3284,8 +3284,6 @@ fn testDecl( |
| 3284 | _ = try fn_block.addUnTok(.ret_coerce, .void_value, tree.lastToken(body_node)); | 3284 | _ = try fn_block.addUnTok(.ret_coerce, .void_value, tree.lastToken(body_node)); |
| 3285 | } | 3285 | } |
| 3286 | | 3286 | |
| 3287 | astgen.fn_block = prev_fn_block; | | |
| 3288 | | | |
| 3289 | const func_inst = try decl_block.addFunc(.{ | 3287 | const func_inst = try decl_block.addFunc(.{ |
| 3290 | .src_node = node, | 3288 | .src_node = node, |
| 3291 | .ret_ty = .void_type, | 3289 | .ret_ty = .void_type, |