@@ -112,24 +112,24 @@ Core.NamedTuple
112
112
113
113
if nameof (@__MODULE__ ) === :Base
114
114
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 }
116
116
if length (args) != length (names:: Tuple )
117
117
throw (ArgumentError (" Wrong number of arguments to named tuple constructor." ))
118
118
end
119
119
# Note T(args) might not return something of type T; e.g.
120
120
# Tuple{Type{Float64}}((Float64,)) returns a Tuple{DataType}
121
- $ (Expr (:splatnew , :(NamedTuple{names,T}) , :(T (args))))
121
+ $ (Expr (:splatnew , :NT , :(T (args))))
122
122
end
123
123
124
- function NamedTuple {names, T} (nt:: NamedTuple ) where {names, T <: Tuple }
124
+ function (NT :: Type{ NamedTuple{names, T}} ) (nt:: NamedTuple ) where {names, T <: Tuple }
125
125
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),
128
128
ntn = getfield (nt, $ (QuoteNode (names[n])))
129
129
ntn isa Tn ? ntn : convert (Tn, ntn)
130
130
end ) for n in 1 : length (names) ]. .. )
131
131
else
132
- NamedTuple {names, T} (map (Fix1 (getfield, nt), names))
132
+ NT (map (Fix1 (getfield, nt), names))
133
133
end
134
134
end
135
135
@@ -145,14 +145,11 @@ function NamedTuple{names}(nt::NamedTuple) where {names}
145
145
end
146
146
end
147
147
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))
150
150
151
151
NamedTuple (itr) = (; itr... )
152
152
153
- # avoids invalidating Union{}(...)
154
- NamedTuple {names, Union{}} (itr:: Tuple ) where {names} = throw (MethodError (NamedTuple{names, Union{}}, (itr,)))
155
-
156
153
end # if Base
157
154
158
155
# Like NamedTuple{names, T} as a constructor, but omits the additional
0 commit comments