mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 06:18:51 +00:00
@@ -66,15 +66,16 @@ proc sameMethodBucket(a, b: PSym): MethodResult =
|
|||||||
bb = bb.lastSon
|
bb = bb.lastSon
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
if sameType(aa, bb): discard
|
if sameType(aa, bb):
|
||||||
|
if aa.kind == tyObject and result != Invalid: result = Yes
|
||||||
elif aa.kind == tyObject and bb.kind == tyObject:
|
elif aa.kind == tyObject and bb.kind == tyObject:
|
||||||
let diff = inheritanceDiff(bb, aa)
|
let diff = inheritanceDiff(bb, aa)
|
||||||
if diff < 0: discard "Ok"
|
if diff < 0:
|
||||||
|
if result != Invalid: result = Yes
|
||||||
elif diff != high(int):
|
elif diff != high(int):
|
||||||
result = Invalid
|
result = Invalid
|
||||||
else:
|
else:
|
||||||
return No
|
return No
|
||||||
if result != Invalid: result = Yes
|
|
||||||
|
|
||||||
proc attachDispatcher(s: PSym, dispatcher: PNode) =
|
proc attachDispatcher(s: PSym, dispatcher: PNode) =
|
||||||
var L = s.ast.len-1
|
var L = s.ast.len-1
|
||||||
|
|||||||
48
tests/method/tmultim7.nim
Normal file
48
tests/method/tmultim7.nim
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
# 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
|
||||||
Reference in New Issue
Block a user