This commit is contained in:
parent
e24443f1bc
commit
7481f43753
3 changed files with 7 additions and 1 deletions
|
|
@ -11,7 +11,7 @@
|
||||||
# semantic checking.
|
# semantic checking.
|
||||||
|
|
||||||
import
|
import
|
||||||
options, ast, msgs, idents, passes, docgen, lineinfos, pathutils
|
options, ast, msgs, passes, docgen, lineinfos, pathutils
|
||||||
|
|
||||||
from modulegraphs import ModuleGraph, PPassContext
|
from modulegraphs import ModuleGraph, PPassContext
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,7 @@ proc evalTypeTrait(c: PContext; traitCall: PNode, operand: PType, context: PSym)
|
||||||
hasDestructor(t)
|
hasDestructor(t)
|
||||||
result = newIntNodeT(toInt128(ord(not complexObj)), traitCall, c.graph)
|
result = newIntNodeT(toInt128(ord(not complexObj)), traitCall, c.graph)
|
||||||
of "isNamedTuple":
|
of "isNamedTuple":
|
||||||
|
var operand = operand.skipTypes({tyGenericInst})
|
||||||
let cond = operand.kind == tyTuple and operand.n != nil
|
let cond = operand.kind == tyTuple and operand.n != nil
|
||||||
result = newIntNodeT(toInt128(ord(cond)), traitCall, c.graph)
|
result = newIntNodeT(toInt128(ord(cond)), traitCall, c.graph)
|
||||||
of "distinctBase":
|
of "distinctBase":
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ block: # isNamedTuple
|
||||||
type Foo2 = (Field0:1,).type
|
type Foo2 = (Field0:1,).type
|
||||||
type Foo3 = ().type
|
type Foo3 = ().type
|
||||||
type Foo4 = object
|
type Foo4 = object
|
||||||
|
type Foo5[T] = tuple[x:int, y: T]
|
||||||
|
type Foo6[T] = (T,)
|
||||||
|
|
||||||
doAssert (a:1,).type.isNamedTuple
|
doAssert (a:1,).type.isNamedTuple
|
||||||
doAssert Foo1.isNamedTuple
|
doAssert Foo1.isNamedTuple
|
||||||
|
|
@ -14,6 +16,9 @@ block: # isNamedTuple
|
||||||
doAssert not Foo3.isNamedTuple
|
doAssert not Foo3.isNamedTuple
|
||||||
doAssert not Foo4.isNamedTuple
|
doAssert not Foo4.isNamedTuple
|
||||||
doAssert not (1,).type.isNamedTuple
|
doAssert not (1,).type.isNamedTuple
|
||||||
|
doAssert isNamedTuple(Foo5[int8])
|
||||||
|
doAssert not isNamedTuple(Foo5)
|
||||||
|
doAssert not isNamedTuple(Foo6[int8])
|
||||||
|
|
||||||
proc typeToString*(t: typedesc, prefer = "preferTypeName"): string {.magic: "TypeTrait".}
|
proc typeToString*(t: typedesc, prefer = "preferTypeName"): string {.magic: "TypeTrait".}
|
||||||
## Returns the name of the given type, with more flexibility than `name`,
|
## Returns the name of the given type, with more flexibility than `name`,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue