@@ -112,24 +112,24 @@ Core.NamedTuple
112112
113113if nameof (@__MODULE__ ) === :Base
114114
115- @eval function NamedTuple {names,T} (args:: Tuple ) where {names, T <: Tuple }
115+ @eval function (NT :: Type{ NamedTuple{names,T}} ) (args:: Tuple ) where {names, T <: Tuple }
116116 if length (args) != length (names:: Tuple )
117117 throw (ArgumentError (" Wrong number of arguments to named tuple constructor." ))
118118 end
119119 # Note T(args) might not return something of type T; e.g.
120120 # Tuple{Type{Float64}}((Float64,)) returns a Tuple{DataType}
121- $ (Expr (:splatnew , :(NamedTuple{names,T}) , :(T (args))))
121+ $ (Expr (:splatnew , :NT , :(T (args))))
122122end
123123
124- function NamedTuple {names, T} (nt:: NamedTuple ) where {names, T <: Tuple }
124+ function (NT :: Type{ NamedTuple{names, T}} ) (nt:: NamedTuple ) where {names, T <: Tuple }
125125 if @generated
126- Expr (:new , :(NamedTuple{names, T}) ,
127- Any[ :(let Tn = fieldtype (T , $ n),
126+ Expr (:new , :NT ,
127+ Any[ :(let Tn = fieldtype (NT , $ n),
128128 ntn = getfield (nt, $ (QuoteNode (names[n])))
129129 ntn isa Tn ? ntn : convert (Tn, ntn)
130130 end ) for n in 1 : length (names) ]. .. )
131131 else
132- NamedTuple {names, T} (map (Fix1 (getfield, nt), names))
132+ NT (map (Fix1 (getfield, nt), names))
133133 end
134134end
135135
@@ -145,14 +145,11 @@ function NamedTuple{names}(nt::NamedTuple) where {names}
145145 end
146146end
147147
148- NamedTuple {names, T} (itr) where {names, T <: Tuple } = NamedTuple {names, T} (T (itr))
149- NamedTuple {names} (itr) where {names} = NamedTuple {names} (Tuple (itr))
148+ (NT :: Type{ NamedTuple{names, T}} ) (itr) where {names, T <: Tuple } = NT (T (itr))
149+ (NT :: Type{ NamedTuple{names}} ) (itr) where {names} = NT (Tuple (itr))
150150
151151NamedTuple (itr) = (; itr... )
152152
153- # avoids invalidating Union{}(...)
154- NamedTuple {names, Union{}} (itr:: Tuple ) where {names} = throw (MethodError (NamedTuple{names, Union{}}, (itr,)))
155-
156153end # if Base
157154
158155# Like NamedTuple{names, T} as a constructor, but omits the additional
0 commit comments