summary refs log tree commit diff stats
path: root/compiler/astalgo.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-03-19 22:12:08 +0100
committerAraq <rumpf_a@web.de>2012-03-19 22:12:08 +0100
commitbb1885115db4d8075a6c688b58d4ccb91b6ad24a (patch)
tree311e436ba00df97885cc662bb3f690a3511cbf90 /compiler/astalgo.nim
parent7cd2f353c72ced274e5a6e6c0f92e8e32e9d6374 (diff)
parent7b41b0f84113d3b9901d5c598dd909a1df6f960f (diff)
downloadNim-bb1885115db4d8075a6c688b58d4ccb91b6ad24a.tar.gz
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'compiler/astalgo.nim')
-rwxr-xr-xcompiler/astalgo.nim13
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/astalgo.nim b/compiler/astalgo.nim
index 7128102a8..9da0d3a20 100755
--- a/compiler/astalgo.nim
+++ b/compiler/astalgo.nim
@@ -567,6 +567,19 @@ proc StrTableRawInsert(data: var TSymSeq, n: PSym) =
   assert(data[h] == nil)
   data[h] = n
 
+proc SymTabReplaceRaw(data: var TSymSeq, prevSym: PSym, newSym: PSym) =
+  assert prevSym.name.h == newSym.name.h
+  var h: THash = prevSym.name.h and high(data)
+  while data[h] != nil:
+    if data[h] == prevSym:
+      data[h] = newSym
+      return
+    h = nextTry(h, high(data))
+  assert false
+ 
+proc SymTabReplace*(t: var TStrTable, prevSym: PSym, newSym: PSym) =
+  SymTabReplaceRaw(t.data, prevSym, newSym)
+
 proc StrTableEnlarge(t: var TStrTable) = 
   var n: TSymSeq
   newSeq(n, len(t.data) * growthFactor)