mirror of
https://github.com/nim-lang/Nim.git
synced 2026-05-03 12:34:44 +00:00
use typeof instead type (#16962)
This commit is contained in:
@@ -11,7 +11,7 @@ runnableExamples:
|
||||
z1: int8
|
||||
let a = (1.5'f32, (b: "b2", a: "a2"), 'x', @[Foo(t: true, z1: -3), nil], [{"name": "John"}.newStringTable])
|
||||
let j = a.toJson
|
||||
doAssert j.jsonTo(type(a)).toJson == j
|
||||
doAssert j.jsonTo(typeof(a)).toJson == j
|
||||
|
||||
import std/[json,strutils,tables,sets,strtabs,options]
|
||||
|
||||
@@ -42,7 +42,7 @@ type
|
||||
|
||||
proc isNamedTuple(T: typedesc): bool {.magic: "TypeTrait".}
|
||||
proc distinctBase(T: typedesc): typedesc {.magic: "TypeTrait".}
|
||||
template distinctBase[T](a: T): untyped = distinctBase(type(a))(a)
|
||||
template distinctBase[T](a: T): untyped = distinctBase(typeof(a))(a)
|
||||
|
||||
macro getDiscriminants(a: typedesc): seq[string] =
|
||||
## return the discriminant keys
|
||||
|
||||
@@ -45,9 +45,9 @@ template `.`*(a: Wrapnil, b): untyped =
|
||||
## See top-level example.
|
||||
let a1 = a # to avoid double evaluations
|
||||
let a2 = a1.valueImpl
|
||||
type T = Wrapnil[type(a2.b)]
|
||||
type T = Wrapnil[typeof(a2.b)]
|
||||
if a1.validImpl:
|
||||
when type(a2) is ref|ptr:
|
||||
when typeof(a2) is ref|ptr:
|
||||
if a2 == nil:
|
||||
default(T)
|
||||
else:
|
||||
@@ -72,13 +72,13 @@ template `[]`*[I](a: Wrapnil, i: I): untyped =
|
||||
# correctly will raise IndexDefect if a is valid but wraps an empty container
|
||||
wrapnil(a1.valueImpl[i])
|
||||
else:
|
||||
default(Wrapnil[type(a1.valueImpl[i])])
|
||||
default(Wrapnil[typeof(a1.valueImpl[i])])
|
||||
|
||||
template `[]`*(a: Wrapnil): untyped =
|
||||
## See top-level example.
|
||||
let a1 = a # to avoid double evaluations
|
||||
let a2 = a1.valueImpl
|
||||
type T = Wrapnil[type(a2[])]
|
||||
type T = Wrapnil[typeof(a2[])]
|
||||
if a1.validImpl:
|
||||
if a2 == nil:
|
||||
default(T)
|
||||
|
||||
Reference in New Issue
Block a user