summary refs log tree commit diff stats
path: root/compiler/cgmeth.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/cgmeth.nim')
-rw-r--r--compiler/cgmeth.nim15
1 files changed, 9 insertions, 6 deletions
diff --git a/compiler/cgmeth.nim b/compiler/cgmeth.nim
index 52fd8ab49..3a945ae0a 100644
--- a/compiler/cgmeth.nim
+++ b/compiler/cgmeth.nim
@@ -35,15 +35,18 @@ proc genConv(n: PNode, d: PType, downcast: bool): PNode =
   else:
     result = n
 
+proc getDispatcher*(s: PSym): PSym =
+  ## can return nil if is has no dispatcher.
+  let dispn = lastSon(s.ast)
+  if dispn.kind == nkSym:
+    let disp = dispn.sym
+    if sfDispatcher in disp.flags: result = disp
+
 proc methodCall*(n: PNode): PNode =
   result = n
   # replace ordinary method by dispatcher method:
-  let dispn = lastSon(result.sons[0].sym.ast)
-  if dispn.kind == nkSym:
-    let disp = dispn.sym
-    if sfDispatcher notin disp.flags:
-      localError(n.info, "'" & $result & "' lacks a dispatcher")
-      return
+  let disp = getDispatcher(result.sons[0].sym)
+  if disp != nil:
     result.sons[0].sym = disp
     # change the arguments to up/downcasts to fit the dispatcher's parameters:
     for i in countup(1, sonsLen(result)-1):