Skip to content

Commit

Permalink
fixes #21974; fixes sameConstant fieldDefect (#21981)
Browse files Browse the repository at this point in the history
* fixes #21974; fixes sameConstant fieldDefect

* add a test case
  • Loading branch information
ringabout committed Jun 1, 2023
1 parent b3e1892 commit 8e35b3d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/injectdestructors.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1016,7 +1016,7 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode; tmpFlags = {sfSing

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:
Expand Down
30 changes: 30 additions & 0 deletions tests/arc/tarc_orc.nim
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,33 @@ proc bug(): seq[Obj] =
# bug #19990
let s = bug()
doAssert s[0] == (value: 1, arr: @[1])

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"

0 comments on commit 8e35b3d

Please sign in to comment.