mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
(cherry picked from commit 3105909f88)
This commit is contained in:
@@ -515,8 +515,8 @@ proc atomicRefOp(c: var TLiftCtx; t: PType; body, x, y: PNode) =
|
||||
body.add genIf(c, cond, actions)
|
||||
body.add newAsgnStmt(x, y)
|
||||
of attachedDestructor:
|
||||
actions.add newAsgnStmt(x, newNodeIT(nkNilLit, body.info, t))
|
||||
body.add genIf(c, cond, actions)
|
||||
body.add newAsgnStmt(x, newNodeIT(nkNilLit, body.info, t))
|
||||
of attachedDeepCopy: assert(false, "cannot happen")
|
||||
of attachedTrace:
|
||||
if isFinal(elemType):
|
||||
@@ -564,8 +564,8 @@ proc atomicClosureOp(c: var TLiftCtx; t: PType; body, x, y: PNode) =
|
||||
body.add genIf(c, cond, actions)
|
||||
body.add newAsgnStmt(x, y)
|
||||
of attachedDestructor:
|
||||
actions.add newAsgnStmt(xenv, newNodeIT(nkNilLit, body.info, xenv.typ))
|
||||
body.add genIf(c, cond, actions)
|
||||
body.add newAsgnStmt(xenv, newNodeIT(nkNilLit, body.info, xenv.typ))
|
||||
of attachedDeepCopy: assert(false, "cannot happen")
|
||||
of attachedTrace:
|
||||
body.add callCodegenProc(c.g, "nimTraceRefDyn", c.info, genAddrOf(xenv), y)
|
||||
@@ -622,8 +622,8 @@ proc ownedRefOp(c: var TLiftCtx; t: PType; body, x, y: PNode) =
|
||||
body.add genIf(c, x, actions)
|
||||
body.add newAsgnStmt(x, y)
|
||||
of attachedDestructor:
|
||||
actions.add newAsgnStmt(x, newNodeIT(nkNilLit, body.info, t))
|
||||
body.add genIf(c, x, actions)
|
||||
body.add newAsgnStmt(x, newNodeIT(nkNilLit, body.info, t))
|
||||
of attachedDeepCopy: assert(false, "cannot happen")
|
||||
of attachedTrace, attachedDispose: discard
|
||||
|
||||
@@ -675,8 +675,8 @@ proc ownedClosureOp(c: var TLiftCtx; t: PType; body, x, y: PNode) =
|
||||
body.add genIf(c, xx, actions)
|
||||
body.add newAsgnStmt(x, y)
|
||||
of attachedDestructor:
|
||||
actions.add newAsgnStmt(xx, newNodeIT(nkNilLit, body.info, xx.typ))
|
||||
body.add genIf(c, xx, actions)
|
||||
body.add newAsgnStmt(xx, newNodeIT(nkNilLit, body.info, xx.typ))
|
||||
of attachedDeepCopy: assert(false, "cannot happen")
|
||||
of attachedTrace, attachedDispose: discard
|
||||
|
||||
|
||||
@@ -3,6 +3,18 @@ discard """
|
||||
123xyzabc
|
||||
destroyed: false
|
||||
destroyed: false
|
||||
1
|
||||
(x: "0")
|
||||
(x: "1")
|
||||
(x: "2")
|
||||
(x: "3")
|
||||
(x: "4")
|
||||
(x: "5")
|
||||
(x: "6")
|
||||
(x: "7")
|
||||
(x: "8")
|
||||
(x: "9")
|
||||
(x: "10")
|
||||
closed
|
||||
destroying variable
|
||||
'''
|
||||
@@ -89,3 +101,75 @@ let
|
||||
|
||||
assert n.sortedByIt(it) == @["b", "c"], "fine"
|
||||
assert q.sortedByIt(it[0]) == @[("b", "1"), ("c", "2")], "fails under arc"
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# issue #14236
|
||||
|
||||
type
|
||||
MyType = object
|
||||
a: seq[int]
|
||||
|
||||
proc re(x: static[string]): static MyType =
|
||||
MyType()
|
||||
|
||||
proc match(inp: string, rg: static MyType) =
|
||||
doAssert rg.a.len == 0
|
||||
|
||||
match("ac", re"a(b|c)")
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# issue #14243
|
||||
|
||||
type
|
||||
Game* = ref object
|
||||
|
||||
proc free*(game: Game) =
|
||||
let a = 5
|
||||
|
||||
proc newGame*(): Game =
|
||||
new(result, free)
|
||||
|
||||
var game*: Game
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# issue #14333
|
||||
|
||||
type
|
||||
SimpleLoop = object
|
||||
|
||||
Lsg = object
|
||||
loops: seq[ref SimpleLoop]
|
||||
root: ref SimpleLoop
|
||||
|
||||
var lsg: Lsg
|
||||
lsg.loops.add lsg.root
|
||||
echo lsg.loops.len
|
||||
|
||||
# bug #14495
|
||||
type
|
||||
Gah = ref object
|
||||
x: string
|
||||
|
||||
proc bug14495 =
|
||||
var owners: seq[Gah]
|
||||
for i in 0..10:
|
||||
owners.add Gah(x: $i)
|
||||
|
||||
var x: seq[Gah]
|
||||
for i in 0..10:
|
||||
x.add owners[i]
|
||||
|
||||
for i in 0..100:
|
||||
setLen(x, 0)
|
||||
setLen(x, 10)
|
||||
|
||||
for i in 0..x.len-1:
|
||||
if x[i] != nil:
|
||||
echo x[i][]
|
||||
|
||||
for o in owners:
|
||||
echo o[]
|
||||
|
||||
bug14495()
|
||||
|
||||
Reference in New Issue
Block a user