parent
e5cdd7f773
commit
65ee80e50c
2 changed files with 43 additions and 8 deletions
|
|
@ -1203,6 +1203,8 @@ 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"),
|
||||||
getCurrOwner(c), s.info)
|
getCurrOwner(c), s.info)
|
||||||
|
if sfPure in s.flags:
|
||||||
|
obj.flags.incl sfPure
|
||||||
obj.typ = st.lastSon
|
obj.typ = st.lastSon
|
||||||
st.lastSon.sym = obj
|
st.lastSon.sym = obj
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,3 @@
|
||||||
discard """
|
|
||||||
output: '''23
|
|
||||||
1.5
|
|
||||||
'''
|
|
||||||
"""
|
|
||||||
|
|
||||||
# bug #554, #179
|
# bug #554, #179
|
||||||
|
|
||||||
type T[E] =
|
type T[E] =
|
||||||
|
|
@ -13,7 +7,8 @@ type T[E] =
|
||||||
var ob: T[int]
|
var ob: T[int]
|
||||||
|
|
||||||
ob = T[int](elem: 23)
|
ob = T[int](elem: 23)
|
||||||
echo ob.elem
|
|
||||||
|
doAssert ob.elem == 23
|
||||||
|
|
||||||
type
|
type
|
||||||
TTreeIteratorA* = ref object {.inheritable.}
|
TTreeIteratorA* = ref object {.inheritable.}
|
||||||
|
|
@ -47,4 +42,42 @@ type
|
||||||
|
|
||||||
var x = Apple(kind: Smooth, skin: 1.5)
|
var x = Apple(kind: Smooth, skin: 1.5)
|
||||||
var u = x.skin
|
var u = x.skin
|
||||||
echo u
|
|
||||||
|
doAssert u == 1.5
|
||||||
|
|
||||||
|
type
|
||||||
|
BaseRef {.inheritable, pure.} = ref object
|
||||||
|
baseRef: int
|
||||||
|
|
||||||
|
SubRef = ref object of BaseRef
|
||||||
|
|
||||||
|
BasePtr {.inheritable, pure.} = ptr object
|
||||||
|
basePtr: int
|
||||||
|
SubPtr = ptr object of BasePtr
|
||||||
|
|
||||||
|
BaseObj {.inheritable, pure.} = object
|
||||||
|
baseObj: int
|
||||||
|
|
||||||
|
SubObj = object of BaseObj
|
||||||
|
|
||||||
|
template baseObj[T](t: ptr T): untyped = T
|
||||||
|
|
||||||
|
proc something123(): int =
|
||||||
|
var r : SubRef
|
||||||
|
r.new
|
||||||
|
var p : SubPtr
|
||||||
|
p = create(baseObj(p))
|
||||||
|
var r2 : ref BaseObj
|
||||||
|
r2.new
|
||||||
|
|
||||||
|
var accu = 0
|
||||||
|
# trigger code generation
|
||||||
|
accu += r.baseRef
|
||||||
|
accu += p.basePtr
|
||||||
|
accu += r2.baseObj
|
||||||
|
|
||||||
|
doAssert sizeof(r[]) == sizeof(int)
|
||||||
|
doAssert sizeof(baseObj(p)) == sizeof(int)
|
||||||
|
doAssert sizeof(r2[]) == sizeof(int)
|
||||||
|
|
||||||
|
discard something123()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue