mirror of
https://github.com/nim-lang/Nim.git
synced 2026-05-28 15:55:14 +00:00
Revert "make explicit copy and hook calls keep their symbol (#25731)"
This reverts commit a35614e539.
This commit is contained in:
@@ -778,17 +778,9 @@ proc replaceHookMagic*(c: PContext, n: PNode, kind: TTypeAttachedOp): PNode =
|
||||
result[0] = newSymNode(op)
|
||||
analyseIfAddressTakenInCall(c, result, false)
|
||||
of attachedSink:
|
||||
result = n
|
||||
let t = n[1].typ.skipTypes({tyAlias, tyVar, tySink})
|
||||
let op = getAttachedOp(c.graph, t, kind)
|
||||
if op != nil:
|
||||
result[0] = newSymNode(op)
|
||||
result = c.semAsgnOpr(c, n, nkSinkAsgn)
|
||||
of attachedAsgn:
|
||||
result = n
|
||||
let t = n[1].typ.skipTypes({tyAlias, tyVar, tySink})
|
||||
let op = getAttachedOp(c.graph, t, kind)
|
||||
if op != nil:
|
||||
result[0] = newSymNode(op)
|
||||
result = c.semAsgnOpr(c, n, nkAsgn)
|
||||
of attachedDeepCopy:
|
||||
result = n
|
||||
let t = n[1].typ.skipTypes({tyAlias, tyVar, tySink})
|
||||
|
||||
@@ -615,9 +615,9 @@ proc magicsAfterOverloadResolution(c: PContext, n: PNode,
|
||||
of mAsgn:
|
||||
case n[0].sym.name.s
|
||||
of "=", "=copy":
|
||||
result = replaceHookMagic(c, n, attachedAsgn)
|
||||
result = semAsgnOpr(c, n, nkAsgn)
|
||||
of "=sink":
|
||||
result = replaceHookMagic(c, n, attachedSink)
|
||||
result = semAsgnOpr(c, n, nkSinkAsgn)
|
||||
else:
|
||||
result = semShallowCopy(c, n, flags)
|
||||
of mIsPartOf: result = semIsPartOf(c, n, flags)
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
discard """
|
||||
output: '''
|
||||
246
|
||||
246
|
||||
'''
|
||||
"""
|
||||
|
||||
# issue #25730
|
||||
|
||||
type
|
||||
Inner[T] = object
|
||||
x: T
|
||||
Foo[T] = object
|
||||
inner: Inner[T]
|
||||
Bar[T] = object
|
||||
foo: Foo[T]
|
||||
|
||||
proc `=sink`[T](a: var Inner[T], b: Inner[T]) {.nodestroy.} =
|
||||
a.x = b.x * 2
|
||||
|
||||
proc `=copy`[T](a: var Inner[T], b: Inner[T]) {.nodestroy.} =
|
||||
a.x = b.x * 2
|
||||
|
||||
when true:
|
||||
proc `=sink`[T](a: var Bar[T], b: Bar[T]) {.nodestroy.} =
|
||||
`=sink`(a.foo, b.foo)
|
||||
|
||||
proc `=copy`[T](a: var Bar[T], b: Bar[T]) {.nodestroy.} =
|
||||
`=copy`(a.foo, b.foo)
|
||||
|
||||
proc useSink() =
|
||||
let a = Bar[int](foo: Foo[int](inner: Inner[int](x: 123)))
|
||||
var b: Bar[int]
|
||||
`=sink`(b, a)
|
||||
echo b.foo.inner.x
|
||||
|
||||
useSink()
|
||||
|
||||
proc useCopy() =
|
||||
let a = Bar[int](foo: Foo[int](inner: Inner[int](x: 123)))
|
||||
var b: Bar[int]
|
||||
`=copy`(b, a)
|
||||
echo b.foo.inner.x
|
||||
|
||||
useCopy()
|
||||
Reference in New Issue
Block a user