blob: 80f54caee1c0e334d90c561b7083de601bcbc1f2 (
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
118
119
120
121
122
123
124
125
126
127
128
|
discard """
output: '''
wof!
wof!
'''
"""
# bug #1659
type Animal = ref object {.inheritable.}
type Dog = ref object of Animal
method say(a: Animal): auto {.base.} = "wat!"
method say(a: Dog): auto = "wof!"
proc saySomething(a: Animal): auto = a.say()
method ec(a: Animal): auto {.base.} = echo "wat!"
method ec(a: Dog): auto = echo "wof!"
proc ech(a: Animal): auto = a.ec()
var a = Dog()
echo saySomething(a)
ech a
# bug #2401
type MyClass = ref object of RootObj
method HelloWorld*(obj: MyClass) {.base.} =
when defined(myPragma):
echo("Hello World")
# discard # with this line enabled it works
var obj = MyClass()
obj.HelloWorld()
# bug #5432
type
Iterator[T] = ref object of RootObj
# base methods with `T` in the return type are okay
method methodThatWorks*[T](i: Iterator[T]): T {.base.} =
discard
# base methods without `T` (void or basic types) fail
method methodThatFails*[T](i: Iterator[T]) {.base.} =
discard
type
SpecificIterator1 = ref object of Iterator[string]
SpecificIterator2 = ref object of Iterator[int]
# bug #3431
type
Lexer = object
buf*: string
pos*: int
lastchar*: char
ASTNode = object
method init*(self: var Lexer; buf: string) {.base.} =
self.buf = buf
self.pos = 0
self.lastchar = self.buf[0]
method init*(self: var ASTNode; val: string) =
discard
# bug #3370
type
RefTestA*[T] = ref object of RootObj
data*: T
method tester*[S](self: S): bool =
true
type
RefTestB* = RefTestA[(string, int)]
method tester*(self: RefTestB): bool =
true
type
RefTestC = RefTestA[string]
method tester*(self: RefTestC): bool =
false
# bug #3468
type X = ref object of RootObj
type Y = ref object of RootObj
method draw*(x: X) {.base.} = discard
method draw*(y: Y) {.base.} = discard
# bug #3550
type
BaseClass = ref object of RootObj
Class1 = ref object of BaseClass
Class2 = ref object of BaseClass
method test(obj: Class1, obj2: BaseClass) =
discard
method test(obj: Class2, obj2: BaseClass) =
discard
var obj1 = Class1()
var obj2 = Class2()
obj1.test(obj2)
obj2.test(obj1)
|