mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
@@ -66,15 +66,16 @@ proc sameMethodBucket(a, b: PSym): MethodResult =
|
||||
bb = bb.lastSon
|
||||
else:
|
||||
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:
|
||||
let diff = inheritanceDiff(bb, aa)
|
||||
if diff < 0: discard "Ok"
|
||||
if diff < 0:
|
||||
if result != Invalid: result = Yes
|
||||
elif diff != high(int):
|
||||
result = Invalid
|
||||
else:
|
||||
return No
|
||||
if result != Invalid: result = Yes
|
||||
|
||||
proc attachDispatcher(s: PSym, dispatcher: PNode) =
|
||||
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