[minor]break loops after a candidate is added to seqs (#18770)

* [minor]break loops when added

* Update compiler/lookups.nim

Co-authored-by: Clyybber <darkmine956@gmail.com>

Co-authored-by: Clyybber <darkmine956@gmail.com>
This commit is contained in:
flywind 2021-08-31 19:32:37 +08:00 • committed by GitHub
commit 8f4bdb3596
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -211,13 +211,15 @@ proc debugScopes*(c: PContext; limit=0, max = int.high) {.deprecated.} =
proc searchInScopesFilterBy*(c: PContext, s: PIdent, filter: TSymKinds): seq[PSym] = proc searchInScopesFilterBy*(c: PContext, s: PIdent, filter: TSymKinds): seq[PSym] =
result = @[] result = @[]
block outer:
for scope in allScopes(c.currentScope): for scope in allScopes(c.currentScope):
var ti: TIdentIter var ti: TIdentIter
var candidate = initIdentIter(ti, scope.symbols, s) var candidate = initIdentIter(ti, scope.symbols, s)
while candidate != nil: while candidate != nil:
if candidate.kind in filter: if candidate.kind in filter:
if result.len == 0:
result.add candidate result.add candidate
# Break here, because further symbols encountered would be shadowed
break outer
candidate = nextIdentIter(ti, scope.symbols) candidate = nextIdentIter(ti, scope.symbols)
if result.len == 0: if result.len == 0: