Skip to content

Commit

Permalink
replace old problematic isNamedTuple implementation by TypeTrait isNa…
Browse files Browse the repository at this point in the history
…medTuple in dollars.nim (nim-lang#13347)

* replace old problematic isNamedTuple implementation by TypeTrait isNamedTuple

* fix for bootstrap
  • Loading branch information
timotheecour authored Feb 7, 2020
1 parent abd660c commit c0a2e2e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
1 change: 1 addition & 0 deletions compiler/condsyms.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 15 additions & 11 deletions lib/system/dollars.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit c0a2e2e

Please sign in to comment.