summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorFelix Krause <contact@flyx.org>2016-07-08 10:41:37 +0200
committerFelix Krause <contact@flyx.org>2016-07-08 10:41:37 +0200
commit9f8cdf25605c3cbf2d05ab12ae9e555608b4ad47 (patch)
tree1f94df4ea33e5a4c43efccf719bdbe4d395c1f31 /lib
parent4455e5d4b6f30d4ce042c68c8285b2062d146197 (diff)
downloadNim-9f8cdf25605c3cbf2d05ab12ae9e555608b4ad47.tar.gz
Use getOrDefault for tables.`==`
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/collections/tables.nim12
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim
index 8d5fbdfc3..9dc29fe69 100644
--- a/lib/pure/collections/tables.nim
+++ b/lib/pure/collections/tables.nim
@@ -298,19 +298,17 @@ proc hasKey*[A, B](t: TableRef[A, B], key: A): bool =
   ## returns true iff `key` is in the table `t`.
   result = t[].hasKey(key)
 
-template equalsImpl() =
+template equalsImpl(t) =
   if s.counter == t.counter:
     # different insertion orders mean different 'data' seqs, so we have
     # to use the slow route here:
     for key, val in s:
-      # prefix notation leads to automatic dereference in case of PTable
-      try:
-        if t[key] != val: return false
-      except KeyError: return false
+      if not t.hasKey(key): return false
+      if t.getOrDefault(key) != val: return false
     return true
 
 proc `==`*[A, B](s, t: Table[A, B]): bool =
-  equalsImpl()
+  equalsImpl(t)
 
 proc indexBy*[A, B, C](collection: A, index: proc(x: B): C): Table[C, B] =
   ## Index the collection with the proc provided.
@@ -400,7 +398,7 @@ proc `$`*[A, B](t: TableRef[A, B]): string =
 proc `==`*[A, B](s, t: TableRef[A, B]): bool =
   if isNil(s): result = isNil(t)
   elif isNil(t): result = false
-  else: equalsImpl()
+  else: equalsImpl(t[])
 
 proc newTableFrom*[A, B, C](collection: A, index: proc(x: B): C): TableRef[C, B] =
   ## Index the collection with the proc provided.