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