]> ocean-lang.org Git - ocean/commitdiff
oceani: create separate scope for do part of while
authorNeilBrown <neil@brown.name>
Sat, 6 Nov 2021 23:59:23 +0000 (10:59 +1100)
committerNeilBrown <neil@brown.name>
Mon, 8 Nov 2021 09:56:36 +0000 (20:56 +1100)
Any variables created in the do part won't be created in the final
iteration, so we want them to be constrained to the do part, not seen as
part of the whole loop body.
This makes while/do match if/then better.

Signed-off-by: NeilBrown <neil@brown.name>
csrc/oceani.mdc

index 122bcbcc6338ac33772f83c79b7256942564ef47..1be7c673c010a31c9737fcfb959abc4861afb956 100644 (file)
@@ -3945,19 +3945,21 @@ casepart` to track a list of case parts.
 
        $*binode
        // This scope is closed in CondStatement
-       WhilePart -> while UseBlock OptNL do Block ${
+       WhilePart -> while UseBlock OptNL do OpenBlock ${
                        $0 = new(binode);
                        $0->op = Loop;
                        $0->left = $<UB;
-                       $0->right = $<Bl;
+                       $0->right = $<OB;
+                       var_block_close(c, CloseSequential);
                        var_block_close(c, CloseSequential);
                }$
-               | while OpenScope Expression ColonBlock ${
+               | while OpenScope Expression OpenScope ColonBlock ${
                        $0 = new(binode);
                        $0->op = Loop;
                        $0->left = $<Exp;
                        $0->right = $<CB;
                        var_block_close(c, CloseSequential);
+                       var_block_close(c, CloseSequential);
                }$
 
        $cond_statement