aboutsummaryrefslogtreecommitdiff
path: root/src/server/ast.odin
diff options
context:
space:
mode:
authorBradley Lewis <22850972+BradLewis@users.noreply.github.com>2025-10-30 17:11:14 -0400
committerGitHub <noreply@github.com>2025-10-30 17:11:14 -0400
commitaf3a10a0e3030e8360607982d22781b59bcb6cb9 (patch)
treee04d5112f06abf9f4f7a83436b8c10f92911ad8f /src/server/ast.odin
parent4fc217ef397898d8251ad8391895f2da22cbb848 (diff)
parent847d511c4c132ca773d6f29c705a0ad12823af63 (diff)
Merge pull request #1139 from BradLewis/fix/resolve-local-whens
Correctly resolve local when blocks
Diffstat (limited to 'src/server/ast.odin')
-rw-r--r--src/server/ast.odin14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/server/ast.odin b/src/server/ast.odin
index 70c568d..bee9ca9 100644
--- a/src/server/ast.odin
+++ b/src/server/ast.odin
@@ -476,10 +476,15 @@ collect_when_stmt :: proc(
if when_decl.body == nil {
return
}
+ if stmt, ok := get_when_block_stmt(when_decl); ok {
+ collect_when_body(exprs, file, file_tags, stmt)
+ }
+}
+get_when_block_stmt :: proc(when_decl: ^ast.When_Stmt) -> (^ast.Block_Stmt, bool) {
if resolve_when_condition(when_decl.cond) {
if block, ok := when_decl.body.derived.(^ast.Block_Stmt); ok {
- collect_when_body(exprs, file, file_tags, block)
+ return block, true
}
} else {
else_stmt := when_decl.else_stmt
@@ -488,19 +493,18 @@ collect_when_stmt :: proc(
if else_when, ok := else_stmt.derived.(^ast.When_Stmt); ok {
if resolve_when_condition(else_when.cond) {
if block, ok := else_when.body.derived.(^ast.Block_Stmt); ok {
- collect_when_body(exprs, file, file_tags, block)
+ return block, true
}
- return
}
else_stmt = else_when.else_stmt
} else {
if block, ok := else_stmt.derived.(^ast.Block_Stmt); ok {
- collect_when_body(exprs, file, file_tags, block)
+ return block, true
}
- return
}
}
}
+ return nil, false
}
collect_when_body :: proc(