diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-06-02 01:02:56 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-01 19:02:56 +0200 |
commit | 8e35b3d577cb0a6b216b16668ff5f34a86cfbbab (patch) | |
tree | 44ad31ebd03e66217a9c8d63ba0542ee7588f296 | |
parent | b3e1892eb7f4cb8b2090be7ad12286cc54506e91 (diff) | |
download | Nim-8e35b3d577cb0a6b216b16668ff5f34a86cfbbab.tar.gz |
fixes #21974; fixes sameConstant fieldDefect (#21981)
* fixes #21974; fixes sameConstant fieldDefect * add a test case
-rw-r--r-- | compiler/injectdestructors.nim | 2 | ||||
-rw-r--r-- | tests/arc/tarc_orc.nim | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 56ca8f605..3275c1abc 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -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: diff --git a/tests/arc/tarc_orc.nim b/tests/arc/tarc_orc.nim index 2fbb2e792..387baa28f 100644 --- a/tests/arc/tarc_orc.nim +++ b/tests/arc/tarc_orc.nim @@ -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" |