[backport] fix #15595 procvar == works in VM (#15724)

This commit is contained in:
Timothee Cour
2020-10-26 22:19:05 +02:00
committed by GitHub
parent cf01945f54
commit 3bdc000521
2 changed files with 28 additions and 2 deletions

View File

@@ -994,8 +994,10 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
let nb = regs[rb].node
let nc = regs[rc].node
if nb.kind != nc.kind: discard
elif (nb == nc) or (nb.kind == nkNilLit): ret = true
elif nb.kind == nkIntLit and nb.intVal == nc.intVal: # TODO: nkPtrLit
elif (nb == nc) or (nb.kind == nkNilLit): ret = true # intentional
elif sameConstant(nb, nc): ret = true
# this also takes care of procvar's, represented as nkTupleConstr, eg (nil, nil)
elif nb.kind == nkIntLit and nc.kind == nkIntLit and nb.intVal == nc.intVal: # TODO: nkPtrLit
let tb = nb.getTyp
let tc = nc.getTyp
ret = tb.kind in PtrLikeKinds and tc.kind == tb.kind

View File

@@ -205,6 +205,30 @@ block: # bug #13081
static:
doAssert j1.x1 == 12
block: # bug #15595
proc fn0()=echo 0
proc fn1()=discard
proc main=
var local = 0
proc fn2()=echo local
var a0 = fn0
var a1 = fn1
var a2 = fn2
var a3: proc()
var a4: proc()
doAssert a0 == fn0 # bugfix
doAssert a1 == fn1 # ditto
doAssert a2 == fn2 # ditto
doAssert fn0 != fn1
doAssert a2 != nil
doAssert a3 == nil # bugfix
doAssert a3 == a4 # bugfix
static: main()
main()
# bug #15363
import sequtils