mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
fixes #24378 ```nim type Win = typeof(`body`) doAssert not supportsCopyMem((int, Win)) ``` `semAfterMacroCall` doesn't skip the children aliases types in the tuple typedesc construction while the normal program seem to skip the aliases types somewhere `(int, Win)` is kept as `(int, alias string)` instead of expected `(int, string)`
This commit is contained in:
@@ -1645,7 +1645,7 @@ proc propagateToOwner*(owner, elem: PType; propagateHasAsgn = true) =
|
||||
if mask != {} and propagateHasAsgn:
|
||||
let o2 = owner.skipTypes({tyGenericInst, tyAlias, tySink})
|
||||
if o2.kind in {tyTuple, tyObject, tyArray,
|
||||
tySequence, tySet, tyDistinct}:
|
||||
tySequence, tyString, tySet, tyDistinct}:
|
||||
o2.flags.incl mask
|
||||
owner.flags.incl mask
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
discard """
|
||||
joinable: false
|
||||
"""
|
||||
|
||||
import typetraits
|
||||
import macros
|
||||
|
||||
@@ -402,3 +406,26 @@ when true: # Odd bug where alias can seep inside of `distinctBase`
|
||||
proc `$`*[T: AdtChild](adtChild: T): string = ""
|
||||
|
||||
check 10 is int
|
||||
|
||||
|
||||
block: # bug #24378
|
||||
macro forked(body: typed): untyped = # typed or untyped does not matter
|
||||
result = quote do:
|
||||
type Win = typeof(`body`)
|
||||
doAssert not supportsCopyMem((int, Win))
|
||||
doAssert not supportsCopyMem(tuple[a: int, b: Win])
|
||||
|
||||
type Win2[T] = typeof(`body`)
|
||||
doAssert not supportsCopyMem((int, Win2[int]))
|
||||
doAssert not supportsCopyMem(tuple[a: int, b: Win2[int]])
|
||||
forked:
|
||||
"foobar"
|
||||
|
||||
|
||||
type Win111 = typeof("foobar")
|
||||
doAssert not supportsCopyMem((int, Win111))
|
||||
doAssert not supportsCopyMem(tuple[a: int, b: Win111])
|
||||
|
||||
type Win222[T] = typeof("foobar")
|
||||
doAssert not supportsCopyMem((int, Win222[int]))
|
||||
doAssert not supportsCopyMem(tuple[a: int, b: Win222[int]])
|
||||
|
||||
Reference in New Issue
Block a user