fix #13349 regression: isNamedTuple now works with generic tuples (#13350)

This commit is contained in:
Timothee Cour
2020-02-06 21:58:04 -08:00
committed by GitHub
parent e24443f1bc
commit 7481f43753
3 changed files with 7 additions and 1 deletions

View File

@@ -11,7 +11,7 @@
# semantic checking.
import
options, ast, msgs, idents, passes, docgen, lineinfos, pathutils
options, ast, msgs, passes, docgen, lineinfos, pathutils
from modulegraphs import ModuleGraph, PPassContext

View File

@@ -176,6 +176,7 @@ proc evalTypeTrait(c: PContext; traitCall: PNode, operand: PType, context: PSym)
hasDestructor(t)
result = newIntNodeT(toInt128(ord(not complexObj)), traitCall, c.graph)
of "isNamedTuple":
var operand = operand.skipTypes({tyGenericInst})
let cond = operand.kind == tyTuple and operand.n != nil
result = newIntNodeT(toInt128(ord(cond)), traitCall, c.graph)
of "distinctBase":

View File

@@ -6,6 +6,8 @@ block: # isNamedTuple
type Foo2 = (Field0:1,).type
type Foo3 = ().type
type Foo4 = object
type Foo5[T] = tuple[x:int, y: T]
type Foo6[T] = (T,)
doAssert (a:1,).type.isNamedTuple
doAssert Foo1.isNamedTuple
@@ -14,6 +16,9 @@ block: # isNamedTuple
doAssert not Foo3.isNamedTuple
doAssert not Foo4.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".}
## Returns the name of the given type, with more flexibility than `name`,