From 87a6268d3c93fef26ca5f7a74a3ec78b6aae667a Mon Sep 17 00:00:00 2001 From: JamesP Date: Mon, 5 Oct 2015 15:16:43 +1000 Subject: [PATCH 1/2] bug fix #3416 add wrapper around `[]=` to account for changes in StringTableRef disabling inc of counter --- lib/pure/strtabs.nim | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/pure/strtabs.nim b/lib/pure/strtabs.nim index 86f81aa433..0a1cc61676 100644 --- a/lib/pure/strtabs.nim +++ b/lib/pure/strtabs.nim @@ -135,15 +135,18 @@ proc enlarge(t: StringTableRef) = if not isNil(t.data[i].key): rawInsert(t, n, t.data[i].key, t.data[i].val) swap(t.data, n) -proc `[]=`*(t: StringTableRef, key, val: string) {.rtl, extern: "nstPut".} = - ## puts a (key, value)-pair into `t`. +proc addVal(t: StringTableRef, key, val: string) = var index = rawGet(t, key) if index >= 0: t.data[index].val = val else: if mustRehash(len(t.data), t.counter): enlarge(t) rawInsert(t, t.data, key, val) - inc(t.counter) + +proc `[]=`*(t: StringTableRef, key, val: string) {.rtl, extern: "nstPut".} = + ## puts a (key, value)-pair into `t`. + t.addVal(key, val) + inc(t.counter) proc raiseFormatException(s: string) = var e: ref ValueError From 73821ad1c4b2f64a2885c60c3bc43e74cae5ee1d Mon Sep 17 00:00:00 2001 From: JamesP Date: Mon, 5 Oct 2015 15:19:56 +1000 Subject: [PATCH 2/2] add assert test to end of module --- lib/pure/strtabs.nim | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/pure/strtabs.nim b/lib/pure/strtabs.nim index 0a1cc61676..1ce9067a78 100644 --- a/lib/pure/strtabs.nim +++ b/lib/pure/strtabs.nim @@ -135,18 +135,15 @@ proc enlarge(t: StringTableRef) = if not isNil(t.data[i].key): rawInsert(t, n, t.data[i].key, t.data[i].val) swap(t.data, n) -proc addVal(t: StringTableRef, key, val: string) = +proc `[]=`*(t: StringTableRef, key, val: string) {.rtl, extern: "nstPut".} = + ## puts a (key, value)-pair into `t`. var index = rawGet(t, key) if index >= 0: t.data[index].val = val else: if mustRehash(len(t.data), t.counter): enlarge(t) rawInsert(t, t.data, key, val) - -proc `[]=`*(t: StringTableRef, key, val: string) {.rtl, extern: "nstPut".} = - ## puts a (key, value)-pair into `t`. - t.addVal(key, val) - inc(t.counter) + inc(t.counter) proc raiseFormatException(s: string) = var e: ref ValueError @@ -176,6 +173,9 @@ proc clear*(s: StringTableRef, mode: StringTableMode) = s.mode = mode s.counter = 0 s.data.setLen(startSize) + for i in 0..