]> ocean-lang.org Git - ocean/commitdiff
oceani: simplify loop in var_block_close()
authorNeilBrown <neil@brown.name>
Fri, 5 Nov 2021 23:55:01 +0000 (10:55 +1100)
committerNeilBrown <neil@brown.name>
Mon, 8 Nov 2021 09:56:36 +0000 (20:56 +1100)
The 'step' was not in the 'for' header, which makes it harder to follow
how the loop works.
Also add a comment to explain where is happening when ->name->var != v.

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

index 4bd3959f5147ac5bdcab4f1d46760f5cbc60fcec..0772bcff3000e8816f863bd63a201856c885941a 100644 (file)
@@ -1147,9 +1147,17 @@ all pending-scope variables become conditionally scoped.
 
                scope_pop(c);
                for (vp = &c->in_scope;
-                    v = *vp, v && v->min_depth > c->scope_depth;
-                    ) {
-                       if (v->name->var == v) switch (ct) {
+                    (v = *vp) && v->min_depth > c->scope_depth;
+                    (v->scope == OutScope || v->name->var != v)
+                    ? (*vp =  v->in_scope, 0)
+                    : ( vp = &v->in_scope, 0)) {
+                       if (v->name->var != v) {
+                               /* This is still in scope, but we haven't just
+                                * closed the scope.
+                                */
+                               continue;
+                       }
+                       switch (ct) {
                        case CloseElse:
                        case CloseParallel: /* handle PendingScope */
                                switch(v->scope) {
@@ -1210,10 +1218,6 @@ all pending-scope variables become conditionally scoped.
                                }
                                break;
                        }
-                       if (v->scope == OutScope || v->name->var != v)
-                               *vp = v->in_scope;
-                       else
-                               vp = &v->in_scope;
                }
        }