diff options
author | metagn <metagngn@gmail.com> | 2022-08-24 10:44:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-24 09:44:16 +0200 |
commit | b8dc58d8843af7dbd0ee2f3274e0d4cf18391dd2 (patch) | |
tree | 78c2cf31185875c855de1f1457daaefbaadd930e /lib/std/private | |
parent | 9d9ecc3c1d774a71b4b866d7e503b25c307e7cbf (diff) | |
download | Nim-b8dc58d8843af7dbd0ee2f3274e0d4cf18391dd2.tar.gz |
test removing dollar for objects out of system (#20242)
* test removing dollar for objects out of system * test & fixes * fix bootstrap * use nimPreviewSlimSystem, test stdlib category * fix test
Diffstat (limited to 'lib/std/private')
-rw-r--r-- | lib/std/private/miscdollars.nim | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/std/private/miscdollars.nim b/lib/std/private/miscdollars.nim index 840fedf54..47b788ee9 100644 --- a/lib/std/private/miscdollars.nim +++ b/lib/std/private/miscdollars.nim @@ -12,3 +12,42 @@ template toLocation*(result: var string, file: string | cstring, line: int, col: result.add ", " addInt(result, col) result.add ")" + +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 + +template tupleObjectDollar*[T: tuple | object](result: var string, x: T) = + result = "(" + const isNamed = T is object or isNamedTuple(typeof(T)) + var count {.used.} = 0 + for name, value in fieldPairs(x): + if count > 0: result.add(", ") + when isNamed: + result.add(name) + result.add(": ") + count.inc + when compiles($value): + when value isnot string and value isnot seq and compiles(value.isNil): + if value.isNil: result.add "nil" + else: result.addQuoted(value) + else: + result.addQuoted(value) + else: + result.add("...") + when not isNamed: + if count == 1: + result.add(",") # $(1,) should print as the semantically legal (1,) + result.add(")") |