fixes #21974; fixes sameConstant fieldDefect (#21981)

* fixes #21974; fixes sameConstant fieldDefect

* add a test case

(cherry picked from commit 8e35b3d577)
This commit is contained in:
ringabout
2023-06-02 01:02:56 +08:00
committed by narimiran
parent 50173ec7ec
commit 876f6d69a8
2 changed files with 31 additions and 1 deletions

View File

@@ -997,7 +997,7 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode): PNode =
proc sameLocation*(a, b: PNode): bool =
proc sameConstant(a, b: PNode): bool =
a.kind in nkLiterals and a.intVal == b.intVal
a.kind in nkLiterals and b.kind in nkLiterals and a.intVal == b.intVal
const nkEndPoint = {nkSym, nkDotExpr, nkCheckedFieldExpr, nkBracketExpr}
if a.kind in nkEndPoint and b.kind in nkEndPoint:

View File

@@ -45,3 +45,33 @@ proc main() = # todo bug with templates
doAssert b() == @[]
static: main()
main()
block: # bug #21974
type Test[T] = ref object
values : seq[T]
counter: int
proc newTest[T](): Test[T] =
result = new(Test[T])
result.values = newSeq[T](16)
result.counter = 0
proc push[T](self: Test[T], value: T) =
self.counter += 1
if self.counter >= self.values.len:
self.values.setLen(self.values.len * 2)
self.values[self.counter - 1] = value
proc pop[T](self: Test[T]): T =
result = self.values[0]
self.values[0] = self.values[self.counter - 1] # <--- This line
self.counter -= 1
type X = tuple
priority: int
value : string
var a = newTest[X]()
a.push((1, "One"))
doAssert a.pop.value == "One"