AstGen: implement defer for continue

This commit is contained in:
Andrew Kelley
2021-04-20 16:38:58 -07:00
parent a59bcae59f
commit 458c4b6fc6
2 changed files with 7 additions and 3 deletions

View File

@@ -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

View File

@@ -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});