diff --git a/BRANCH_TODO b/BRANCH_TODO index 2e518f562c..365cae5a90 100644 --- a/BRANCH_TODO +++ b/BRANCH_TODO @@ -1,6 +1,5 @@ * defer - `break` - - `continue` * nested function decl: how to refer to params? * look for cached zir code * save zir code to cache diff --git a/src/AstGen.zig b/src/AstGen.zig index 5ce3581e9e..e3be25e3e2 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -1294,8 +1294,13 @@ fn continueExpr(parent_gz: *GenZir, parent_scope: *Scope, node: ast.Node.Index) }, .local_val => scope = scope.cast(Scope.LocalVal).?.parent, .local_ptr => scope = scope.cast(Scope.LocalPtr).?.parent, - .defer_normal => @panic("TODO continue/defer"), - .defer_error => @panic("TODO continue/defer"), + .defer_normal => { + const defer_scope = scope.cast(Scope.Defer).?; + scope = defer_scope.parent; + const expr_node = node_datas[defer_scope.defer_node].rhs; + try unusedResultExpr(parent_gz, defer_scope.parent, expr_node); + }, + .defer_error => scope = scope.cast(Scope.LocalPtr).?.parent, else => if (break_label != 0) { const label_name = try astgen.identifierTokenString(break_label); return astgen.failTok(break_label, "label not found: '{s}'", .{label_name});