- v = *vp, v && v->depth > c->scope_depth && 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) {