summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2021-11-17 17:15:54 +0800
committerGitHub <noreply@github.com>2021-11-17 10:15:54 +0100
commitfe46c8b5f13f854e4109183d2199b922f939548c (patch)
tree39aeadcaf8a81537f795caedce9991ceabe0ab9a
parent92d6fb86c66ceda154972314ba695cea4aac9301 (diff)
downloadNim-fe46c8b5f13f854e4109183d2199b922f939548c.tar.gz
fix marshal bugs in VM (#19161) [backport:1.6]
-rw-r--r--compiler/vmmarshal.nim4
-rw-r--r--tests/ccgbugs/t8967.nim12
2 files changed, 10 insertions, 6 deletions
diff --git a/compiler/vmmarshal.nim b/compiler/vmmarshal.nim
index d48d2408c..d28f0325b 100644
--- a/compiler/vmmarshal.nim
+++ b/compiler/vmmarshal.nim
@@ -92,7 +92,8 @@ proc storeAny(s: var string; t: PType; a: PNode; stored: var IntSet;
       if a[i].kind == nkRange:
         var x = copyNode(a[i][0])
         storeAny(s, t.lastSon, x, stored, conf)
-        while x.intVal+1 <= a[i][1].intVal:
+        inc x.intVal
+        while x.intVal <= a[i][1].intVal:
           s.add(", ")
           storeAny(s, t.lastSon, x, stored, conf)
           inc x.intVal
@@ -231,7 +232,6 @@ proc loadAny(p: var JsonParser, t: PType,
     result = newNode(nkCurly)
     while p.kind != jsonArrayEnd and p.kind != jsonEof:
       result.add loadAny(p, t.lastSon, tab, cache, conf, idgen)
-      next(p)
     if p.kind == jsonArrayEnd: next(p)
     else: raiseParseErr(p, "']' end of array expected")
   of tyPtr, tyRef:
diff --git a/tests/ccgbugs/t8967.nim b/tests/ccgbugs/t8967.nim
index e342b7eae..0301a2e4f 100644
--- a/tests/ccgbugs/t8967.nim
+++ b/tests/ccgbugs/t8967.nim
@@ -4,7 +4,11 @@ discard """
 
 import marshal
 
-let orig: set[char] = {'A'..'Z'}
-let m = $$orig
-let old = to[set[char]](m)
-doAssert orig - old == {}
+template main() =
+  let orig: set[char] = {'A'..'Z'}
+  let m = $$orig
+  let old = to[set[char]](m)
+  doAssert orig - old == {}
+
+static: main()
+main()