summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2018-08-13 17:27:44 +0200
committerAraq <rumpf_a@web.de>2018-08-13 17:27:44 +0200
commit420ed0596b8114c67275c4702fa3524ebd76e5eb (patch)
treef381eaedb04743a43faa1ded7e5d77ac5952ab3e /compiler
parentd60bb1b289c7914443a20b78bfb6c69f05184937 (diff)
downloadNim-420ed0596b8114c67275c4702fa3524ebd76e5eb.tar.gz
fixes more nil handling regressions
Diffstat (limited to 'compiler')
-rw-r--r--compiler/ast.nim4
-rw-r--r--compiler/patterns.nim8
2 files changed, 8 insertions, 4 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 7d8d098e3..e294eccc2 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -971,8 +971,8 @@ const
     tyFloat..tyFloat128, tyUInt..tyUInt64}
   ConstantDataTypes*: TTypeKinds = {tyArray, tySet,
                                     tyTuple, tySequence}
-  NilableTypes*: TTypeKinds = {tyPointer, tyCString, tyRef, tyPtr, tySequence,
-    tyProc, tyString, tyError}
+  NilableTypes*: TTypeKinds = {tyPointer, tyCString, tyRef, tyPtr,
+    tyProc, tyError}
   ExportableSymKinds* = {skVar, skConst, skProc, skFunc, skMethod, skType,
     skIterator,
     skMacro, skTemplate, skConverter, skEnumField, skLet, skStub, skAlias}
diff --git a/compiler/patterns.nim b/compiler/patterns.nim
index aa06342f9..ebb3a7c1d 100644
--- a/compiler/patterns.nim
+++ b/compiler/patterns.nim
@@ -21,14 +21,17 @@ type
     formals: int
     c: PContext
     subMatch: bool       # subnode matches are special
+    mappingIsFull: bool
   PPatternContext = var TPatternContext
 
 proc getLazy(c: PPatternContext, sym: PSym): PNode =
-  if not isNil(c.mapping):
+  if c.mappingIsFull:
     result = c.mapping[sym.position]
 
 proc putLazy(c: PPatternContext, sym: PSym, n: PNode) =
-  if isNil(c.mapping): newSeq(c.mapping, c.formals)
+  if not c.mappingIsFull:
+    newSeq(c.mapping, c.formals)
+    c.mappingIsFull = true
   c.mapping[sym.position] = n
 
 proc matches(c: PPatternContext, p, n: PNode): bool
@@ -211,6 +214,7 @@ proc matchStmtList(c: PPatternContext, p, n: PNode): PNode =
         # we need to undo any bindings:
         when defined(nimNoNilSeqs):
           c.mapping = @[]
+          c.mappingIsFull = false
         else:
           if not isNil(c.mapping): c.mapping = nil
         return false