Skip to content

Commit 5119352

Browse files
committed
Handle more node types in recur lookup
Signed-off-by: James Hamlin <jfhamlin@gmail.com>
1 parent 5776240 commit 5119352

1 file changed

Lines changed: 31 additions & 1 deletion

File tree

pkg/codegen/analyze.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,41 @@ func nodeRecurs(n *ast.Node, loopID string) bool {
1818
case ast.OpLet, ast.OpLoop:
1919
letNode := n.Sub.(*ast.LetNode)
2020
return nodeRecurs(letNode.Body, loopID)
21+
case ast.OpLetFn:
22+
letFnNode := n.Sub.(*ast.LetFnNode)
23+
return nodeRecurs(letFnNode.Body, loopID)
2124
case ast.OpIf:
2225
ifNode := n.Sub.(*ast.IfNode)
2326
return nodeRecurs(ifNode.Then, loopID) || nodeRecurs(ifNode.Else, loopID)
24-
// TODO: review all other node types
27+
case ast.OpTry:
28+
tryNode := n.Sub.(*ast.TryNode)
29+
if nodeRecurs(tryNode.Body, loopID) {
30+
return true
31+
}
32+
for _, catch := range tryNode.Catches {
33+
if nodeRecurs(catch, loopID) {
34+
return true
35+
}
36+
}
37+
case ast.OpCatch:
38+
catchNode := n.Sub.(*ast.CatchNode)
39+
return nodeRecurs(catchNode.Body, loopID)
40+
case ast.OpCase:
41+
caseNode := n.Sub.(*ast.CaseNode)
42+
if nodeRecurs(caseNode.Default, loopID) {
43+
return true
44+
}
45+
for _, branch := range caseNode.Nodes {
46+
if nodeRecurs(branch, loopID) {
47+
return true
48+
}
49+
}
50+
case ast.OpCaseNode:
51+
caseNode := n.Sub.(*ast.CaseNodeNode)
52+
return nodeRecurs(caseNode.Then, loopID)
2553
default:
2654
return false // can't recur in this node type
2755
}
56+
57+
return false
2858
}

0 commit comments

Comments
 (0)