diff options
-rw-r--r-- | compiler/ast.nim | 2 | ||||
-rw-r--r-- | compiler/vm.nim | 7 | ||||
-rw-r--r-- | lib/pure/collections/sequtils.nim | 2 |
3 files changed, 7 insertions, 4 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 02f5ae67e..8286e3bb7 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -1661,7 +1661,7 @@ proc isException*(t: PType): bool = # check if `y` is object type and it inherits from Exception assert(t != nil) - if t.kind != tyObject: + if t.kind != tyObject: return false var base = t diff --git a/compiler/vm.nim b/compiler/vm.nim index 5c9a982ab..0a706b0fc 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -1467,7 +1467,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = "request to create a NimNode of invalid kind") let cc = regs[rc].node - regs[ra].node = newNodeI(TNodeKind(int(k)), + let x = newNodeI(TNodeKind(int(k)), if cc.kind != nkNilLit: cc.info elif c.comesFromHeuristic.line > -1: @@ -1476,7 +1476,10 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = c.callsite[1].info else: c.debug[pc]) - regs[ra].node.flags.incl nfIsRef + x.flags.incl nfIsRef + # prevent crashes in the compiler resulting from wrong macros: + if x.kind == nkIdent: x.ident = getIdent"" + regs[ra].node = x of opcNCopyNimNode: decodeB(rkNode) regs[ra].node = copyNode(regs[rb].node) diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index 06e96ca36..511020228 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -711,7 +711,7 @@ proc mapLitsImpl(constructor: NimNode; op: NimNode; nested: bool; result.add op result.add constructor else: - result = newNimNode(constructor.kind, lineInfoFrom=constructor) + result = copyNimNode(constructor) for v in constructor: if nested or v.kind in filter: result.add mapLitsImpl(v, op, nested, filter) |