diff options
author | Zahary Karadjov <zahary@gmail.com> | 2013-05-11 23:45:20 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2013-05-11 23:45:20 +0300 |
commit | 9a6f47ae69ff3730cc33092c52b3e42187446ccb (patch) | |
tree | 50003f59f90ade6148202160691943f7c131aeed /compiler/astalgo.nim | |
parent | 40b411fb1c319a74daedce524c5d821b6bdc0e45 (diff) | |
download | Nim-9a6f47ae69ff3730cc33092c52b3e42187446ccb.tar.gz |
switch to a linked list of scopes
Diffstat (limited to 'compiler/astalgo.nim')
-rw-r--r-- | compiler/astalgo.nim | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/compiler/astalgo.nim b/compiler/astalgo.nim index 364e164bb..16dd196b4 100644 --- a/compiler/astalgo.nim +++ b/compiler/astalgo.nim @@ -83,10 +83,16 @@ proc NextIdentIter*(ti: var TIdentIter, tab: TStrTable): PSym # 3 nested statements # ... # -type +type + TScope = object + symbols*: TStrTable + parent*: PScope + + PScope = ref TScope + TSymTab*{.final.} = object tos*: Natural # top of stack - stack*: seq[TStrTable] + stack*: seq[PScope] proc InitSymTab*(tab: var TSymTab) @@ -98,10 +104,6 @@ proc SymTabAdd*(tab: var TSymTab, e: PSym) proc SymTabAddAt*(tab: var TSymTab, e: PSym, at: Natural) proc SymTabAddUnique*(tab: var TSymTab, e: PSym): TResult proc SymTabAddUniqueAt*(tab: var TSymTab, e: PSym, at: Natural): TResult -proc OpenScope*(tab: var TSymTab) -proc RawCloseScope*(tab: var TSymTab) - # the real "closeScope" adds some - # checks in parsobj # these are for debugging only: They are not really deprecated, but I want # the warning so that release versions do not contain debugging statements: @@ -745,14 +747,6 @@ proc SymTabAddUniqueAt(tab: var TSymTab, e: PSym, at: Natural): TResult = proc SymTabAddUnique(tab: var TSymTab, e: PSym): TResult = result = SymTabAddUniqueAt(tab, e, tab.tos - 1) - -proc OpenScope(tab: var TSymTab) = - if tab.tos >= len(tab.stack): setlen(tab.stack, tab.tos + 1) - initStrTable(tab.stack[tab.tos]) - Inc(tab.tos) - -proc RawCloseScope(tab: var TSymTab) = - Dec(tab.tos) iterator items*(tab: TStrTable): PSym = var it: TTabIter |