* fix #16110

* refs #16110

* fix comment

* Trigger build

* use shallowCopy for efficiency
This commit is contained in:
cooldome 2020-11-26 13:44:06 +00:00 • committed by GitHub
commit 2f1a9eadd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 8 deletions

View file

@ -1278,8 +1278,17 @@ proc typeSectionRightSidePass(c: PContext, n: PNode) =
incl st.flags, tfRefsAnonObj incl st.flags, tfRefsAnonObj
let obj = newSym(skType, getIdent(c.cache, s.name.s & ":ObjectType"), let obj = newSym(skType, getIdent(c.cache, s.name.s & ":ObjectType"),
nextId c.idgen, getCurrOwner(c), s.info) nextId c.idgen, getCurrOwner(c), s.info)
obj.ast = a.copyTree let symNode = newSymNode(obj)
obj.ast[0] = newSymNode(obj) obj.ast = a.shallowCopy
case a[0].kind
of nkSym: obj.ast[0] = symNode
of nkPragmaExpr:
obj.ast[0] = a[0].shallowCopy
obj.ast[0][0] = symNode
obj.ast[0][1] = a[0][1]
else: assert(false)
obj.ast[1] = a[1]
obj.ast[2] = a[2][0]
if sfPure in s.flags: if sfPure in s.flags:
obj.flags.incl sfPure obj.flags.incl sfPure
obj.typ = st.lastSon obj.typ = st.lastSon

View file

@ -71,15 +71,30 @@ assert: check_gen_proc(len(a)) == (false, true)
macro check(x: type): untyped = macro check(x: type): untyped =
let z = getType(x) let z = getType(x)
let y = getImpl(z[1]) let y = getImpl(z[1])
echo z.treeRepr let sym = if y[0].kind == nnkSym: y[0] else: y[0][0]
expectKind(z[1], nnkSym) expectKind(z[1], nnkSym)
expectKind(y[0], nnkSym) expectKind(sym, nnkSym)
doAssert(y[0] == z[1]) expectKind(y[2], nnkObjectTy)
doAssert(sym == z[1])
type type
TirePtr = ptr object TirePtr = ptr object
code: int code: int
var z: TirePtr TireRef* = ref object
check(typeof(z[])) code: int
TireRef2* {.inheritable.} = ref object
code: int
TireRef3* {.inheritable.} = object
code: int
var z1: TirePtr
check(typeof(z1[]))
var z2: TireRef
check(typeof(z2[]))
var z3: TireRef2
check(typeof(z3[]))
check(TireRef3)