better error messages: use <T1, T2> instead of (T1, T2) in order to prevent confusions with tuple types

This commit is contained in:
Araq 2018-02-10 20:39:05 +01:00
commit ef6eda4cb4
25 changed files with 62 additions and 62 deletions

View file

@ -272,7 +272,7 @@ const
errXStackEscape: "address of '$1' may not escape its stack frame", errXStackEscape: "address of '$1' may not escape its stack frame",
errVarForOutParamNeededX: "for a \'var\' type a variable needs to be passed; but '$1' is immutable", errVarForOutParamNeededX: "for a \'var\' type a variable needs to be passed; but '$1' is immutable",
errPureTypeMismatch: "type mismatch", errPureTypeMismatch: "type mismatch",
errTypeMismatch: "type mismatch: got (", errTypeMismatch: "type mismatch: got <",
errButExpected: "but expected one of: ", errButExpected: "but expected one of: ",
errButExpectedX: "but expected \'$1\'", errButExpectedX: "but expected \'$1\'",
errAmbiguousCallXYZ: "ambiguous call; both $1 and $2 match for: $3", errAmbiguousCallXYZ: "ambiguous call; both $1 and $2 match for: $3",

View file

@ -156,14 +156,14 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
add(candidates, err.sym.getProcHeader(prefer)) add(candidates, err.sym.getProcHeader(prefer))
add(candidates, "\n") add(candidates, "\n")
if err.firstMismatch != 0 and n.len > 2: if err.firstMismatch != 0 and n.len > 2:
add(candidates, "first type mismatch at position: " & $err.firstMismatch & add(candidates, " first type mismatch at position: " & $err.firstMismatch &
"\nrequired type: ") "\n required type: ")
if err.firstMismatch < err.sym.typ.len: if err.firstMismatch < err.sym.typ.len:
candidates.add typeToString(err.sym.typ.sons[err.firstMismatch]) candidates.add typeToString(err.sym.typ.sons[err.firstMismatch])
else: else:
candidates.add "none" candidates.add "none"
if err.firstMismatch < n.len: if err.firstMismatch < n.len:
candidates.add "\nbut expression '" candidates.add "\n but expression '"
candidates.add renderTree(n[err.firstMismatch]) candidates.add renderTree(n[err.firstMismatch])
candidates.add "' is of type: " candidates.add "' is of type: "
candidates.add typeToString(n[err.firstMismatch].typ) candidates.add typeToString(n[err.firstMismatch].typ)
@ -190,7 +190,7 @@ proc notFoundError*(c: PContext, n: PNode, errors: CandidateErrors) =
let (prefer, candidates) = presentFailedCandidates(c, n, errors) let (prefer, candidates) = presentFailedCandidates(c, n, errors)
var result = msgKindToString(errTypeMismatch) var result = msgKindToString(errTypeMismatch)
add(result, describeArgs(c, n, 1, prefer)) add(result, describeArgs(c, n, 1, prefer))
add(result, ')') add(result, '>')
if candidates != "": if candidates != "":
add(result, "\n" & msgKindToString(errButExpected) & "\n" & candidates) add(result, "\n" & msgKindToString(errButExpected) & "\n" & candidates)
localError(n.info, errGenerated, result & "\nexpression: " & $n) localError(n.info, errGenerated, result & "\nexpression: " & $n)

View file

@ -735,7 +735,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
hasErrorType = true hasErrorType = true
break break
if not hasErrorType: if not hasErrorType:
add(msg, ")\n" & msgKindToString(errButExpected) & "\n" & add(msg, ">\n" & msgKindToString(errButExpected) & "\n" &
typeToString(n.sons[0].typ)) typeToString(n.sons[0].typ))
localError(n.info, errGenerated, msg) localError(n.info, errGenerated, msg)
return errorNode(c, n) return errorNode(c, n)

View file

@ -1149,8 +1149,8 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType =
if m.state != csMatch: if m.state != csMatch:
let err = "cannot instantiate " & typeToString(t) & "\n" & let err = "cannot instantiate " & typeToString(t) & "\n" &
"got: (" & describeArgs(c, n) & ")\n" & "got: <" & describeArgs(c, n) & ">\n" &
"but expected: (" & describeArgs(c, t.n, 0) & ")" "but expected: <" & describeArgs(c, t.n, 0) & ">"
localError(n.info, errGenerated, err) localError(n.info, errGenerated, err)
return newOrPrevType(tyError, prev, c) return newOrPrevType(tyError, prev, c)

View file

@ -1620,7 +1620,7 @@ proc typeMismatch*(info: TLineInfo, formal, actual: PType) =
let desc = typeToString(formal, preferDesc) let desc = typeToString(formal, preferDesc)
let x = if named == desc: named else: named & " = " & desc let x = if named == desc: named else: named & " = " & desc
var msg = msgKindToString(errTypeMismatch) & var msg = msgKindToString(errTypeMismatch) &
typeToString(actual) & ") " & typeToString(actual) & "> " &
msgKindToString(errButExpectedX) % [x] msgKindToString(errButExpectedX) % [x]
if formal.kind == tyProc and actual.kind == tyProc: if formal.kind == tyProc and actual.kind == tyProc:

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (array[0..2, float], array[0..1, float])" errormsg: "type mismatch: got <array[0..2, float], array[0..1, float]>"
""" """
proc `+`*[R, T] (v1, v2: array[R, T]): array[R, T] = proc `+`*[R, T] (v1, v2: array[R, T]): array[R, T] =

View file

@ -1,38 +1,38 @@
discard """ discard """
errormsg: "type mismatch: got (Bar[system.int])" errormsg: "type mismatch: got <Bar[system.int]>"
nimout: ''' nimout: '''
t3330.nim(63, 4) Error: type mismatch: got (Bar[system.int]) t3330.nim(63, 4) Error: type mismatch: got <Bar[system.int]>
but expected one of: but expected one of:
proc test(foo: Foo[int]) proc test(foo: Foo[int])
t3330.nim(48, 8) Hint: Non-matching candidates for add(k, string, T) t3330.nim(48, 8) Hint: Non-matching candidates for add(k, string, T)
proc add(x: var string; y: string) proc add(x: var string; y: string)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var string required type: var string
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add(x: var string; y: char) proc add(x: var string; y: char)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var string required type: var string
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add(result: var string; x: int64) proc add(result: var string; x: int64)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var string required type: var string
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add(result: var string; x: float) proc add(result: var string; x: float)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var string required type: var string
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add(x: var string; y: cstring) proc add(x: var string; y: cstring)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var string required type: var string
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add[T](x: var seq[T]; y: openArray[T]) proc add[T](x: var seq[T]; y: openArray[T])
first type mismatch at position: 1 first type mismatch at position: 1
required type: var seq[T] required type: var seq[T]
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
proc add[T](x: var seq[T]; y: T) proc add[T](x: var seq[T]; y: T)
first type mismatch at position: 1 first type mismatch at position: 1
required type: var seq[T] required type: var seq[T]
but expression 'k' is of type: Alias but expression 'k' is of type: Alias
t3330.nim(48, 8) template/generic instantiation from here t3330.nim(48, 8) template/generic instantiation from here
t3330.nim(55, 6) Foo: 'bar.value' cannot be assigned to t3330.nim(55, 6) Foo: 'bar.value' cannot be assigned to

View file

@ -26,14 +26,14 @@ texplain.nim(70, 6) ExplainedConcept: undeclared field: '.'
texplain.nim(70, 6) ExplainedConcept: expression '.' cannot be called texplain.nim(70, 6) ExplainedConcept: expression '.' cannot be called
texplain.nim(69, 5) ExplainedConcept: concept predicate failed texplain.nim(69, 5) ExplainedConcept: concept predicate failed
texplain.nim(113, 20) Error: type mismatch: got (NonMatchingType) texplain.nim(113, 20) Error: type mismatch: got <NonMatchingType>
but expected one of: but expected one of:
proc e(o: ExplainedConcept): int proc e(o: ExplainedConcept): int
texplain.nim(69, 5) ExplainedConcept: concept predicate failed texplain.nim(69, 5) ExplainedConcept: concept predicate failed
proc e(i: int): int proc e(i: int): int
expression: e(n) expression: e(n)
texplain.nim(114, 20) Error: type mismatch: got (NonMatchingType) texplain.nim(114, 20) Error: type mismatch: got <NonMatchingType>
but expected one of: but expected one of:
proc r(o: RegularConcept): int proc r(o: RegularConcept): int
texplain.nim(73, 5) RegularConcept: concept predicate failed texplain.nim(73, 5) RegularConcept: concept predicate failed
@ -45,7 +45,7 @@ texplain.nim(115, 20) Hint: Non-matching candidates for r(y)
proc r[T](a: SomeNumber; b: T; c: auto) proc r[T](a: SomeNumber; b: T; c: auto)
proc r(i: string): int proc r(i: string): int
texplain.nim(123, 2) Error: type mismatch: got (MatchingType) texplain.nim(123, 2) Error: type mismatch: got <MatchingType>
but expected one of: but expected one of:
proc f(o: NestedConcept) proc f(o: NestedConcept)
texplain.nim(73, 6) RegularConcept: undeclared field: 'foo' texplain.nim(73, 6) RegularConcept: undeclared field: 'foo'
@ -61,7 +61,7 @@ texplain.nim(77, 5) NestedConcept: concept predicate failed
expression: f(y) expression: f(y)
''' '''
line: 123 line: 123
errormsg: "type mismatch: got (MatchingType)" errormsg: "type mismatch: got <MatchingType>"
""" """
type type

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (string)" errormsg: "type mismatch: got <string>"
line: 21 line: 21
nimout: "twrapconcept.nim(11, 5) Foo: concept predicate failed" nimout: "twrapconcept.nim(11, 5) Foo: concept predicate failed"
""" """

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (string, arr: seq[empty])" errormsg: "type mismatch: got <string, arr: seq[empty]>"
line: 15 line: 15
""" """

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (proc [*missing parameters*](x: int) | proc (x: string){.gcsafe, locks: 0.})" errormsg: "type mismatch: got <proc [*missing parameters*](x: int) | proc (x: string){.gcsafe, locks: 0.}>"
line: 19 line: 19
""" """

View file

@ -2,8 +2,8 @@ discard """
errormsg: "cannot instantiate B" errormsg: "cannot instantiate B"
line: 20 line: 20
nimout: ''' nimout: '''
got: (type string) got: <type string>
but expected: (T: A) but expected: <T: A>
''' '''
""" """

View file

@ -1,13 +1,13 @@
discard """ discard """
cmd: "nim check $file" cmd: "nim check $file"
errormsg: "type mismatch: got (int literal(1), int literal(2), int literal(3))" errormsg: "type mismatch: got <int literal(1), int literal(2), int literal(3)>"
nimout: ''' nimout: '''
but expected one of: but expected one of:
proc main(a, b, c: string) proc main(a, b, c: string)
first type mismatch at position: 1 first type mismatch at position: 1
required type: string required type: string
but expression '1' is of type: int literal(1) but expression '1' is of type: int literal(1)
expression: main(1, 2, 3) expression: main(1, 2, 3)
''' '''

View file

@ -2,8 +2,8 @@ discard """
errormsg: "cannot instantiate B" errormsg: "cannot instantiate B"
line: 14 line: 14
nimout: ''' nimout: '''
got: (type int) got: <type int>
but expected: (T: string or float) but expected: <T: string or float>
''' '''
""" """

View file

@ -1,7 +1,7 @@
discard """ discard """
errormsg: '''got (tuple of (type NimEdAppWindow, int))''' errormsg: '''got <tuple of (type NimEdAppWindow, int)>'''
line: 22 line: 22
nimout: '''got (tuple of (type NimEdAppWindow, int)) nimout: '''got <tuple of (type NimEdAppWindow, int)>
but expected one of: but expected one of:
template xxx(tn: typedesc; i: int)''' template xxx(tn: typedesc; i: int)'''
""" """

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (int) but expected 'cshort = int16'" errormsg: "type mismatch: got <int> but expected 'cshort = int16'"
line: 12 line: 12
column: 10 column: 10
file: "tshow_asgn.nim" file: "tshow_asgn.nim"

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (Future[system.int], void)" errormsg: "type mismatch: got <Future[system.int], void>"
line: 20 line: 20
""" """

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (PTest)" errormsg: "type mismatch: got <PTest>"
""" """
type type

View file

@ -1,6 +1,6 @@
discard """ discard """
line: 16 line: 16
errormsg: "type mismatch: got (void)" errormsg: "type mismatch: got <void>"
""" """
# bug #950 # bug #950

View file

@ -1,5 +1,5 @@
discard """ discard """
errormsg: "type mismatch: got (FooRef[system.string])" errormsg: "type mismatch: got <FooRef[system.string]>"
line: 15 line: 15
""" """

View file

@ -1,6 +1,6 @@
discard """ discard """
line: 6 line: 6
errormsg: "type mismatch: got (int literal(1)) but expected 'bool'" errormsg: "type mismatch: got <int literal(1)> but expected 'bool'"
""" """
if 1: if 1:

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "tnocontains.nim" file: "tnocontains.nim"
line: 10 line: 10
errormsg: "type mismatch: got (string, string)" errormsg: "type mismatch: got <string, string>"
""" """
# shouldn't compile since it doesn't do what you think it does without # shouldn't compile since it doesn't do what you think it does without

View file

@ -1,6 +1,6 @@
discard """ discard """
line: 16 line: 16
errormsg: "type mismatch: got (BPtr) but expected 'APtr = ptr[RegionA, int]'" errormsg: "type mismatch: got <BPtr> but expected 'APtr = ptr[RegionA, int]'"
""" """
type type

View file

@ -1,6 +1,6 @@
discard """ discard """
line: 6 line: 6
errormsg: "type mismatch: got (type int)" errormsg: "type mismatch: got <type int>"
""" """
# bug #3079, #1146 # bug #3079, #1146
echo repr(int) echo repr(int)

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "ttypenoval.nim" file: "ttypenoval.nim"
line: 38 line: 38
errormsg: "type mismatch: got (type int) but expected 'int'" errormsg: "type mismatch: got <type int> but expected 'int'"
""" """
# A min-heap. # A min-heap.