add isNamedTuple; make $(1, 2) be (1, 2) instead of (Field0: 1, Field1: 2) which leaked implementation detail (#10070)
* add `isNamedTuple`; make $(1, 2) be (1, 2) instead of leaking implementation detail (Field0: 1, Field1: 2) fixes this: #8670 (comment) /cc @alehander42 @Vindaar @mratsim * Note: isNamedTuple is useful in other places, eg #10010 (comment) * move isNamedTuple to helpers.nim to avoid exposing new symbol to system.nim * remove workaround in tests/vm/tissues.nim failing test now that #10218 was makes it work
This commit is contained in:
parent
bf3a308e86
commit
6ce3949c8a
14 changed files with 113 additions and 23 deletions
|
|
@ -17,3 +17,9 @@ converter toWrapped[T](value: T): Wrapped[T] =
|
|||
|
||||
let result = Plain()
|
||||
discard $result
|
||||
|
||||
proc foo[T2](a: Wrapped[T2]) =
|
||||
# Error: generic instantiation too nested
|
||||
discard $a
|
||||
|
||||
foo(result)
|
||||
|
|
|
|||
27
tests/errmsgs/tnested_generic_instantiation2.nim
Normal file
27
tests/errmsgs/tnested_generic_instantiation2.nim
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
discard """
|
||||
errormsg: "generic instantiation too nested"
|
||||
"""
|
||||
|
||||
#[
|
||||
bug #4766
|
||||
see also: tnested_generic_instantiation.nim
|
||||
]#
|
||||
|
||||
proc toString*[T](x: T) =
|
||||
for name, value in fieldPairs(x):
|
||||
when compiles(toString(value)):
|
||||
discard
|
||||
toString(value)
|
||||
|
||||
type
|
||||
Plain = ref object
|
||||
discard
|
||||
|
||||
Wrapped[T] = object
|
||||
value: T
|
||||
|
||||
converter toWrapped[T](value: T): Wrapped[T] =
|
||||
Wrapped[T](value: value)
|
||||
|
||||
let result = Plain()
|
||||
toString(result)
|
||||
Loading…
Add table
Add a link
Reference in a new issue