diff --git a/BRANCH_TODO b/BRANCH_TODO index 2e518f562cd6e5f031d7d8d7965a3a0dcca7dbf6..365cae5a90eeb1dc65bfc602205c0007a8b19116 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 5ce3581e9e396b031e5903174cc3d81273fa9547..e3be25e3e2f5e05dc2777d41fa512efeab84ab4a 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});