diff --git a/changelog.md b/changelog.md index fded20ca6..030644951 100644 --- a/changelog.md +++ b/changelog.md @@ -115,7 +115,9 @@ - `macros.newLit` now preserves named vs unnamed tuples; use `-d:nimHasWorkaround14720` to keep old behavior - Add `random.gauss`, that uses the ratio of uniforms method of sampling from a Gaussian distribution. - Add `typetraits.elementType` to get element type of an iterable. -- `typetraits.$`: `$(int,)` is now `"(int,)"`; `$tuple[]` is now `"tuple[]"` +- `typetraits.$` changes: `$(int,)` is now `"(int,)"` instead of `"(int)"`; + `$tuple[]` is now `"tuple[]"` instead of `"tuple"`; + `$((int, float), int)` is now `"((int, float), int)"` instead of `"(tuple of (int, float), int)"` - add `macros.extractDocCommentsAndRunnables` helper - `strformat.fmt` and `strformat.&` support `= specifier`. `fmt"{expr=}"` now expands to `fmt"expr={expr}"`. diff --git a/compiler/types.nim b/compiler/types.nim index 0be0b3eed..1f787a4e5 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -636,8 +636,7 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string = elif t.len == 0: result = "tuple[]" else: - if prefer == preferTypeName: result = "(" - else: result = "tuple of (" + result = "(" for i in 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 diff --git a/tests/metatype/ttypetraits.nim b/tests/metatype/ttypetraits.nim index ca918266f..50c474fe9 100644 --- a/tests/metatype/ttypetraits.nim +++ b/tests/metatype/ttypetraits.nim @@ -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 diff --git a/tests/template/tgensym_instantiationinfo.nim b/tests/template/tgensym_instantiationinfo.nim index 305e7e1c3..4b997ed6a 100644 --- a/tests/template/tgensym_instantiationinfo.nim +++ b/tests/template/tgensym_instantiationinfo.nim @@ -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