fix #16384 and #17144 (#17126) [backport]

This commit is contained in:
flywind 2021-03-03 18:58:50 +08:00 • committed by GitHub
commit 6391f6e861
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 209 additions and 203 deletions

View file

@ -1019,7 +1019,8 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
let nc = regs[rc].node let nc = regs[rc].node
if nb.kind != nc.kind: discard if nb.kind != nc.kind: discard
elif (nb == nc) or (nb.kind == nkNilLit): ret = true # intentional elif (nb == nc) or (nb.kind == nkNilLit): ret = true # intentional
elif sameConstant(nb, nc): ret = true elif (nb.kind in {nkSym, nkTupleConstr, nkClosure} and nb.typ.kind == tyProc) and sameConstant(nb, nc):
ret = true
# this also takes care of procvar's, represented as nkTupleConstr, e.g. (nil, nil) # this also takes care of procvar's, represented as nkTupleConstr, e.g. (nil, nil)
elif nb.kind == nkIntLit and nc.kind == nkIntLit and nb.intVal == nc.intVal: # TODO: nkPtrLit elif nb.kind == nkIntLit and nc.kind == nkIntLit and nb.intVal == nc.intVal: # TODO: nkPtrLit
let tb = nb.getTyp let tb = nb.getTyp

View file

@ -2,12 +2,14 @@ discard """
targets: "c js" targets: "c js"
""" """
import lists, sequtils import std/[lists, sequtils]
const const
data = [1, 2, 3, 4, 5, 6] data = [1, 2, 3, 4, 5, 6]
block SinglyLinkedListTest1:
template main =
block SinglyLinkedListTest1:
var L: SinglyLinkedList[int] var L: SinglyLinkedList[int]
for d in items(data): L.prepend(d) for d in items(data): L.prepend(d)
for d in items(data): L.add(d) for d in items(data): L.add(d)
@ -15,7 +17,7 @@ block SinglyLinkedListTest1:
doAssert(4 in L) doAssert(4 in L)
block SinglyLinkedListTest2: block SinglyLinkedListTest2:
var L: SinglyLinkedList[string] var L: SinglyLinkedList[string]
for d in items(data): L.prepend($d) for d in items(data): L.prepend($d)
doAssert($L == """["6", "5", "4", "3", "2", "1"]""") doAssert($L == """["6", "5", "4", "3", "2", "1"]""")
@ -23,7 +25,7 @@ block SinglyLinkedListTest2:
doAssert("4" in L) doAssert("4" in L)
block DoublyLinkedListTest1: block DoublyLinkedListTest1:
var L: DoublyLinkedList[int] var L: DoublyLinkedList[int]
for d in items(data): L.prepend(d) for d in items(data): L.prepend(d)
for d in items(data): L.add(d) for d in items(data): L.add(d)
@ -32,7 +34,7 @@ block DoublyLinkedListTest1:
doAssert(4 in L) doAssert(4 in L)
block SinglyLinkedRingTest1: block SinglyLinkedRingTest1:
var L: SinglyLinkedRing[int] var L: SinglyLinkedRing[int]
L.prepend(4) L.prepend(4)
doAssert($L == "[4]") doAssert($L == "[4]")
@ -42,7 +44,7 @@ block SinglyLinkedRingTest1:
doAssert(4 in L) doAssert(4 in L)
block DoublyLinkedRingTest1: block DoublyLinkedRingTest1:
var L: DoublyLinkedRing[int] var L: DoublyLinkedRing[int]
L.prepend(4) L.prepend(4)
doAssert($L == "[4]") doAssert($L == "[4]")
@ -62,7 +64,7 @@ block DoublyLinkedRingTest1:
doAssert($L == "[]") doAssert($L == "[]")
doAssert(4 notin L) doAssert(4 notin L)
block tlistsToString: block tlistsToString:
block: block:
var l = initDoublyLinkedList[int]() var l = initDoublyLinkedList[int]()
l.add(1) l.add(1)
@ -82,8 +84,8 @@ block tlistsToString:
l.add('3') l.add('3')
doAssert $l == """['1', '2', '3']""" doAssert $l == """['1', '2', '3']"""
# Copied here until it is merged into sequtils # Copied here until it is merged into sequtils
template take(a: untyped, max: int): untyped = template take(a: untyped, max: int): untyped =
type T = typeof(block: (for ai in a: ai)) type T = typeof(block: (for ai in a: ai))
var ret: seq[T] var ret: seq[T]
var i = 0 var i = 0
@ -94,7 +96,7 @@ template take(a: untyped, max: int): untyped =
if i >= max: break if i >= max: break
ret ret
template testCommon(initList, toList) = template testCommon(initList, toList) =
block: # toSinglyLinkedList, toDoublyLinkedList block: # toSinglyLinkedList, toDoublyLinkedList
let l = seq[int].default let l = seq[int].default
@ -215,10 +217,10 @@ template testCommon(initList, toList) =
a.remove a.head a.remove a.head
doAssert a.take(6) == @[12, 12, 12, 12, 12, 12] doAssert a.take(6) == @[12, 12, 12, 12, 12, 12]
testCommon initSinglyLinkedList, toSinglyLinkedList testCommon initSinglyLinkedList, toSinglyLinkedList
testCommon initDoublyLinkedList, toDoublyLinkedList testCommon initDoublyLinkedList, toDoublyLinkedList
block remove: # return value check block remove: # return value check
var l = [0, 1, 2, 3].toSinglyLinkedList var l = [0, 1, 2, 3].toSinglyLinkedList
let n = l.head.next.next let n = l.head.next.next
doAssert l.remove(n) == true doAssert l.remove(n) == true
@ -231,3 +233,6 @@ block remove: # return value check
doAssert l.toSeq == [1] doAssert l.toSeq == [1]
doAssert l.remove(l.head) == true doAssert l.remove(l.head) == true
doAssert l.toSeq == [] doAssert l.toSeq == []
static: main()
main()