]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
oceani: move var_block_close() calls to the code sections that close the block
[ocean] / csrc / oceani.mdc
index 2a40ff203efa442fa148610521cb016070c13974..d1967562fdf6f1c94731f151f26c73ba3a1c47a0 100644 (file)
@@ -932,7 +932,6 @@ like "if" and the code following it.
 
        $void
        OpenScope -> ${ scope_push(c); }$
-       ClosePara -> ${ var_block_close(c, CloseParallel); }$
 
 Each variable records a scope depth and is in one of four states:
 
@@ -3846,8 +3845,8 @@ defined.
        // may or may not end with EOL
        // WhilePart and IfPart include an appropriate Suffix
 
-       // Both ForPart and Whilepart open scopes, and CondSuffix only
-       // closes one - so in the first branch here we have another to close.
+       // ForPart, SwitchPart, and IfPart open scopes, o we have to close
+       // them.  WhilePart opens and closes its own scope.
        CondStatement -> ForPart OptNL ThenPart OptNL WhilePart CondSuffix ${
                        $0 = $<CS;
                        $0->forpart = $<FP;
@@ -3951,17 +3950,20 @@ defined.
                        var_block_close(c, CloseSequential);
                }$
 
-       IfPart -> if UseBlock OptNL then OpenBlock ClosePara ${
+       IfPart -> if UseBlock OptNL then OpenBlock ${
                        $0.condpart = $<UB;
-                       $0.thenpart = $<Bl;
+                       $0.thenpart = $<OB;
+                       var_block_close(c, CloseParallel);
                }$
-               | if OpenScope Expression OpenScope ColonBlock ClosePara ${
+               | if OpenScope Expression OpenScope ColonBlock ${
                        $0.condpart = $<Ex;
-                       $0.thenpart = $<Bl;
+                       $0.thenpart = $<CB;
+                       var_block_close(c, CloseParallel);
                }$
-               | if OpenScope Expression OpenScope OptNL then Block ClosePara ${
+               | if OpenScope Expression OpenScope OptNL then Block ${
                        $0.condpart = $<Ex;
                        $0.thenpart = $<Bl;
+                       var_block_close(c, CloseParallel);
                }$
 
        $*exec
@@ -4027,16 +4029,16 @@ defined.
                                do_indent(indent, "if");
                        if (cs->condpart && cs->condpart->type == Xbinode &&
                            cast(binode, cs->condpart)->op == Block) {
-                               if (bracket)    // UNTESTED
-                                       printf(" {\n"); // UNTESTED
+                               if (bracket)
+                                       printf(" {\n");
                                else
-                                       printf(":\n");  // UNTESTED
-                               print_exec(cs->condpart, indent+1, bracket);    // UNTESTED
-                               if (bracket)    // UNTESTED
-                                       do_indent(indent, "}\n");       // UNTESTED
-                               if (cs->thenpart) {     // UNTESTED
-                                       do_indent(indent, "then:\n");   // UNTESTED
-                                       print_exec(cs->thenpart, indent+1, bracket);    // UNTESTED
+                                       printf("\n");
+                               print_exec(cs->condpart, indent+1, bracket);
+                               if (bracket)
+                                       do_indent(indent, "}\n");
+                               if (cs->thenpart) {
+                                       do_indent(indent, "then\n");
+                                       print_exec(cs->thenpart, indent+1, bracket);
                                }
                        } else {
                                printf(" ");