This commit is contained in:
parent
c0a2e2ed92
commit
79ec8c2571
2 changed files with 49 additions and 1 deletions
|
|
@ -1938,7 +1938,8 @@ proc localConvMatch(c: PContext, m: var TCandidate, f, a: PType,
|
||||||
var call = newNodeI(nkCall, arg.info)
|
var call = newNodeI(nkCall, arg.info)
|
||||||
call.add(f.n.copyTree)
|
call.add(f.n.copyTree)
|
||||||
call.add(arg.copyTree)
|
call.add(arg.copyTree)
|
||||||
result = c.semExpr(c, call)
|
result = c.semTryExpr(c, call)
|
||||||
|
|
||||||
if result != nil:
|
if result != nil:
|
||||||
if result.typ == nil: return nil
|
if result.typ == nil: return nil
|
||||||
# resulting type must be consistent with the other arguments:
|
# resulting type must be consistent with the other arguments:
|
||||||
|
|
|
||||||
47
tests/errmsgs/tsigmatch2.nim
Normal file
47
tests/errmsgs/tsigmatch2.nim
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
discard """
|
||||||
|
cmd: "nim check --showAllMismatches:on --hints:off $file"
|
||||||
|
nimout: '''
|
||||||
|
tsigmatch2.nim(40, 14) Error: type mismatch: got <float64>
|
||||||
|
but expected one of:
|
||||||
|
proc foo(i: Foo): string
|
||||||
|
first type mismatch at position: 1
|
||||||
|
required type for i: Foo
|
||||||
|
but expression '1.2' is of type: float64
|
||||||
|
proc foo(args: varargs[string, myproc]): string
|
||||||
|
first type mismatch at position: 1
|
||||||
|
required type for args: varargs[string]
|
||||||
|
but expression '1.2' is of type: float64
|
||||||
|
|
||||||
|
expression: foo(1.2)
|
||||||
|
tsigmatch2.nim(46, 7) Error: type mismatch: got <int literal(1)>
|
||||||
|
but expected one of:
|
||||||
|
proc foo(args: varargs[string, myproc])
|
||||||
|
first type mismatch at position: 1
|
||||||
|
required type for args: varargs[string]
|
||||||
|
but expression '1' is of type: int literal(1)
|
||||||
|
|
||||||
|
expression: foo 1
|
||||||
|
'''
|
||||||
|
errormsg: "type mismatch"
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# line 30
|
||||||
|
|
||||||
|
block: # issue #13182
|
||||||
|
proc myproc(a: int): string = $("myproc", a)
|
||||||
|
proc foo(args: varargs[string, myproc]): string = $args
|
||||||
|
type Foo = object
|
||||||
|
proc foo(i: Foo): string = "in foo(i)"
|
||||||
|
static: doAssert foo(Foo()) == "in foo(i)"
|
||||||
|
static: doAssert foo(1) == """["(\"myproc\", 1)"]"""
|
||||||
|
doAssert not compiles(foo(1.2))
|
||||||
|
discard foo(1.2)
|
||||||
|
|
||||||
|
block:
|
||||||
|
proc myproc[T](x: T): string =
|
||||||
|
let temp = 12.isNil
|
||||||
|
proc foo(args: varargs[string, myproc]) = discard
|
||||||
|
foo 1
|
||||||
|
static: echo "done"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue