nim-works / cps

Continuation-Passing Style for Nim 🔗

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cpsMagic overloading is broken on master

alaviss opened this issue · comments

import cps

type
  A = object

  B = object

proc wait(c: Continuation, x: A): Continuation {.cpsMagic.} = discard
proc wait(c: Continuation, x: B): Continuation {.cpsMagic.} = discard

proc foo() {.cps: Continuation.} =
  wait(B())

foo()

Got

test.nim(12, 7) Error: type mismatch: got <B>
but expected one of:
proc wait(c: Continuation; x: A): Continuation
  first type mismatch at position: 1
  required type for c: Continuation
  but expression 'B()' is of type: B
proc wait(c: Continuation; x: B): Continuation
  first type mismatch at position: 1
  required type for c: Continuation
  but expression 'B()' is of type: B
proc wait(x: A)
  first type mismatch at position: 1
  required type for x: A
  but expression 'B()' is of type: B

expression: wait(B())

Regression introduced by #258. This form of overloading is used heavily by nim-sys.

when compiles?

#258 was reverted