From: NeilBrown Date: Fri, 5 Nov 2021 23:55:01 +0000 (+1100) Subject: oceani: simplify loop in var_block_close() X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=commitdiff_plain;h=fa52ca27f14affaf14b76bc36e16fffed5a511b9 oceani: simplify loop in var_block_close() 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 --- diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index 4bd3959..0772bcf 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -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; } }