diff options
author | Araq <rumpf_a@web.de> | 2018-08-13 17:27:44 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2018-08-13 17:27:44 +0200 |
commit | 420ed0596b8114c67275c4702fa3524ebd76e5eb (patch) | |
tree | f381eaedb04743a43faa1ded7e5d77ac5952ab3e /compiler | |
parent | d60bb1b289c7914443a20b78bfb6c69f05184937 (diff) | |
download | Nim-420ed0596b8114c67275c4702fa3524ebd76e5eb.tar.gz |
fixes more nil handling regressions
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ast.nim | 4 | ||||
-rw-r--r-- | compiler/patterns.nim | 8 |
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 |