@@ -148,24 +148,30 @@ end
148148
149149pop_structure_dict! (dict, key) = length (dict[key]) == 0 && pop! (dict, key)
150150
151+ struct NoValue end
152+ const NO_VALUE = NoValue ()
153+
151154function update_kwargs_and_metadata! (dict, kwargs, a, def, indices, type, var,
152155 varclass, where_types, meta)
153156 if indices isa Nothing
154157 if ! isnothing (meta) && haskey (meta, VariableUnit)
155158 uvar = gensym ()
156159 push! (where_types, uvar)
157- push! (kwargs, Expr (:kw , :($ a:: Union{Nothing, Missing, $uvar} ), nothing ))
160+ push! (kwargs,
161+ Expr (:kw , :($ a:: Union{Nothing, Missing, $NoValue, $uvar} ), NO_VALUE))
158162 else
159- push! (kwargs, Expr (:kw , :($ a:: Union{Nothing, Missing, $type} ), nothing ))
163+ push! (kwargs,
164+ Expr (:kw , :($ a:: Union{Nothing, Missing, $NoValue, $type} ), NO_VALUE))
160165 end
161166 dict[:kwargs ][getname (var)] = Dict (:value => def, :type => type)
162167 else
163168 vartype = gensym (:T )
164169 push! (kwargs,
165170 Expr (:kw ,
166171 Expr (:(:: ), a,
167- Expr (:curly , :Union , :Nothing , Expr (:curly , :AbstractArray , vartype))),
168- nothing ))
172+ Expr (:curly , :Union , :Nothing , :Missing , NoValue,
173+ Expr (:curly , :AbstractArray , vartype))),
174+ NO_VALUE))
169175 if ! isnothing (meta) && haskey (meta, VariableUnit)
170176 push! (where_types, vartype)
171177 else
@@ -679,7 +685,7 @@ function parse_variable_arg(dict, mod, arg, varclass, kwargs, where_types)
679685 varexpr = if haskey (metadata_with_exprs, VariableUnit)
680686 unit = metadata_with_exprs[VariableUnit]
681687 quote
682- $ name = if $ name === nothing
688+ $ name = if $ name === $ NO_VALUE
683689 $ setdefault ($ vv, $ def)
684690 else
685691 try
@@ -699,7 +705,7 @@ function parse_variable_arg(dict, mod, arg, varclass, kwargs, where_types)
699705 end
700706 else
701707 quote
702- $ name = if $ name === nothing
708+ $ name = if $ name === $ NO_VALUE
703709 $ setdefault ($ vv, $ def)
704710 else
705711 $ setdefault ($ vv, $ name)
0 commit comments