mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-21 14:55:24 +00:00
replace old problematic isNamedTuple implementation by TypeTrait isNamedTuple in dollars.nim (#13347)
* replace old problematic isNamedTuple implementation by TypeTrait isNamedTuple * fix for bootstrap
This commit is contained in:
@@ -103,6 +103,7 @@ proc initDefines*(symbols: StringTableRef) =
|
||||
defineSymbol("nimNewShiftOps")
|
||||
defineSymbol("nimHasCursor")
|
||||
defineSymbol("nimHasExceptionsQuery")
|
||||
defineSymbol("nimHasIsNamedTuple")
|
||||
|
||||
when defined(nimHasLibFFI):
|
||||
# Renaming as we can't conflate input vs output define flags; e.g. this
|
||||
|
||||
@@ -49,18 +49,22 @@ proc `$`*(t: typedesc): string {.magic: "TypeTrait".}
|
||||
## doAssert $(type("Foo")) == "string"
|
||||
## static: doAssert $(type(@['A', 'B'])) == "seq[char]"
|
||||
|
||||
when defined(nimHasIsNamedTuple):
|
||||
proc isNamedTuple(T: typedesc): bool {.magic: "TypeTrait".}
|
||||
else:
|
||||
# for bootstrap; remove after release 1.2
|
||||
proc isNamedTuple(T: typedesc): bool =
|
||||
# Taken from typetraits.
|
||||
when T isnot tuple: result = false
|
||||
else:
|
||||
var t: T
|
||||
for name, _ in t.fieldPairs:
|
||||
when name == "Field0":
|
||||
return compiles(t.Field0)
|
||||
else:
|
||||
return true
|
||||
return false
|
||||
|
||||
proc isNamedTuple(T: typedesc): bool =
|
||||
# Taken from typetraits.
|
||||
when T isnot tuple: result = false
|
||||
else:
|
||||
var t: T
|
||||
for name, _ in t.fieldPairs:
|
||||
when name == "Field0":
|
||||
return compiles(t.Field0)
|
||||
else:
|
||||
return true
|
||||
return false
|
||||
|
||||
proc `$`*[T: tuple|object](x: T): string =
|
||||
## Generic ``$`` operator for tuples that is lifted from the components
|
||||
|
||||
Reference in New Issue
Block a user