typetraits.$: $((int, float), int) is now "((int, float), int)" instead of "(tuple of (int, float), int)" (#14812)

Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
Timothee Cour 2020-07-02 07:19:43 -07:00 • committed by GitHub
commit a6cbe58e8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 11 additions and 12 deletions

View file

@ -1,5 +1,5 @@
discard """
errormsg: "invalid type: 'empty' in this context: 'array[0..0, tuple of (string, seq[empty])]' for var"
errormsg: "invalid type: 'empty' in this context: 'array[0..0, (string, seq[empty])]' for var"
line: 8
"""

View file

@ -12,12 +12,12 @@ proc f(b: B)
but expression 'A()' is of type: A
expression: f(A(), "extra")
tsigmatch.nim(125, 6) Error: type mismatch: got <tuple of (string, proc (){.gcsafe, locks: 0.})>
tsigmatch.nim(125, 6) Error: type mismatch: got <(string, proc (){.gcsafe, locks: 0.})>
but expected one of:
proc foo(x: (string, proc ()))
first type mismatch at position: 1
required type for x: tuple of (string, proc (){.closure.})
but expression '("foobar", proc () = echo(["Hello!"]))' is of type: tuple of (string, proc (){.gcsafe, locks: 0.})
required type for x: (string, proc (){.closure.})
but expression '("foobar", proc () = echo(["Hello!"]))' is of type: (string, proc (){.gcsafe, locks: 0.})
expression: foo(("foobar", proc () = echo(["Hello!"])))
tsigmatch.nim(132, 11) Error: type mismatch: got <proc (s: string): string{.noSideEffect, gcsafe, locks: 0.}>

View file

@ -52,10 +52,8 @@ block: # name, `$`
doAssert $tuple[] == "tuple[]"
doAssert $(int,) == "(int,)"
doAssert $(int, float) == "(int, float)"
doAssert $((int), tuple[], tuple[a: uint], tuple[a: uint, b: float], (int,), (int, float)) == "(int, tuple[], tuple[a: uint], tuple[a: uint, b: float], tuple of (int,), tuple of (int, float))"
# xxx this is inconsistent, it should be:
# "(int, tuple[], tuple[a: uint], tuple[a: uint, b: float], (int,), (int, float))"
# which matches how you write it, is consistent with `$(int,)`, and is un-ambiguous.
doAssert $((int), tuple[], tuple[a: uint], tuple[a: uint, b: float], (int,), (int, float)) ==
"(int, tuple[], tuple[a: uint], tuple[a: uint, b: float], (int,), (int, float))"
block: # typeToString
type MyInt = int

View file

@ -5,7 +5,7 @@ discard """
# bug #7937
template printError(error: typed) =
# Error: inconsistent typing for reintroduced symbol 'instInfo': previous type was: tuple[filename: string, line: int, column: int]; new type is: tuple of (string, int, int)
# Error: inconsistent typing for reintroduced symbol 'instInfo': previous type was: tuple[filename: string, line: int, column: int]; new type is: (string, int, int)
let instInfo {.gensym.} = instantiationInfo()
echo "Error at ", instInfo.filename, ':', instInfo.line, ": ", error