summary refs log tree commit diff stats
path: root/tests/objects/tobjects_issues.nim
blob: f1a416d04838d7656ea1ce0cd4e43c6e9b7117ee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
discard """
  output: '''
tbObj of TC true
true
5
true
is Nil false
'''
"""


block t1053:
  type
    TA = object of RootObj
      a: int
    TB = object of TA
      b: int
    TC = object of TB
      c: int

  proc test(p: TA) =
    if p of TB:
      echo "tbObj of TC ", p of TC

  var v = TC()
  v.a = 1
  v.b = 2
  v.c = 3
  test(v)



block t924:
  type
    MyObject = object of RootObj
      x: int
  var asd: MyObject

  proc isMyObject(obj: RootObj) =
      echo obj of MyObject
      if obj of MyObject:
          let a = MyObject(obj)
          echo a.x

  asd.x = 5
  isMyObject(asd)



block t4673:
  type
    BaseObj[T] = ref object of RootObj
    SomeObj = ref object of BaseObj[int]

  proc doSomething[T](o: BaseObj[T]) =
    echo "true"
  var o = new(SomeObj)
  o.doSomething() # Error: cannot instantiate: 'T'



block t1658:
  type
    Loop = ref object
      onBeforeSelect: proc (L: Loop)

  var L: Loop
  new L
  L.onBeforeSelect = proc (bar: Loop) =
    echo "is Nil ", bar.isNil

  L.onBeforeSelect(L)



block t2508:
  type
    GenericNodeObj[T] = ref object
      obj: T
    Node = ref object
      children: seq[Node]
      parent: Node
      nodeObj: GenericNodeObj[int]

  proc newNode(nodeObj: GenericNodeObj): Node =
    result = Node(nodeObj: nodeObj)
    newSeq(result.children, 10)

  var genericObj = GenericNodeObj[int]()
  var myNode = newNode(genericObj)



block t2540:
  type
    BaseSceneNode[T] = ref object of RootObj
      children: seq[BaseSceneNode[T]]
      parent: BaseSceneNode[T]
    SceneNode[T] = ref object of BaseSceneNode[T]
    SomeObj = ref object

  proc newSceneNode[T](): SceneNode[T] =
    new result
    result.children = @[]

  var aNode = newSceneNode[SomeObj]()


block t3038:
  type
    Data[T] = ref object of RootObj
      data: T
    Type = ref object of RootObj
    SubType[T] = ref object of Type
      data: Data[T]
    SubSubType = ref object of SubType[int]
    SubSubSubType = ref object of SubSubType