@@ -31,10 +31,14 @@ proc isGeneratedType*(s: string): bool =
3131type
3232 LocalInfo * = object
3333 kind* : SymKind
34+ crossedProc* : bool
3435 typ* : Cursor
36+ ScopeKind * = enum
37+ OtherScope , ProcScope , UnusedScope
3538 TypeScope * {.acyclic .} = ref object
3639 locals: Table [SymId , LocalInfo ]
3740 parent: TypeScope
41+ kind: ScopeKind
3842
3943 TypeCache * = object
4044 builtins* : BuiltinTypes
@@ -47,8 +51,8 @@ proc createTypeCache*(): TypeCache =
4751proc registerLocal * (c: var TypeCache ; s: SymId ; kind: SymKind ; typ: Cursor ) =
4852 c.current.locals[s] = LocalInfo (kind: kind, typ: typ)
4953
50- proc openScope * (c: var TypeCache ) =
51- c.current = TypeScope (locals: initTable [SymId , LocalInfo ](), parent: c.current)
54+ proc openScope * (c: var TypeCache ; kind = OtherScope ) =
55+ c.current = TypeScope (locals: initTable [SymId , LocalInfo ](), parent: c.current, kind: kind )
5256
5357proc closeScope * (c: var TypeCache ) =
5458 c.current = c.current.parent
@@ -87,11 +91,17 @@ proc getInitValueImpl(c: var TypeCache; s: SymId): Cursor =
8791
8892proc getLocalInfo * (c: var TypeCache ; s: SymId ): LocalInfo =
8993 var it {.cursor .} = c.current
94+ var crossedProc = false
95+ var compareTo = UnusedScope
9096 while it != nil :
9197 var res = it.locals.getOrDefault (s)
98+ if it.kind == compareTo:
99+ crossedProc = true
92100 if res.kind != NoSym :
101+ res.crossedProc = crossedProc
93102 return res
94103 it = it.parent
104+ compareTo = ProcScope
95105 return default (LocalInfo )
96106
97107proc getInitValue * (c: var TypeCache ; s: SymId ): Cursor =
0 commit comments