@@ -508,9 +508,13 @@ function signature_names!(sigex::ExLike)
508
508
# This argument has a type but no name
509
509
return arg, true
510
510
end
511
- if isa (arg, Expr) && arg. head == :curly && arg. args[1 ] == :Type
512
- # Argument of the form ::Type{T}
513
- return arg. args[2 ], false
511
+ if isa (arg, Expr) && arg. head == :curly
512
+ if arg. args[1 ] == :Type
513
+ # Argument of the form ::Type{T}
514
+ return arg. args[2 ], false
515
+ elseif arg. args[1 ] == :NamedTuple
516
+ return :NamedTuple , true , arg
517
+ end
514
518
end
515
519
return arg
516
520
end
@@ -537,20 +541,22 @@ function signature_names!(sigex::ExLike)
537
541
argnames = Union{Symbol,Expr}[]
538
542
for i = offset+ 1 : length (sigex. args)
539
543
arg = sigex. args[i]
540
- name = argname (arg)
541
- if name isa Tuple
542
- name, genname = name
543
- if genname
544
+ retname = argname (arg)
545
+ if retname isa Tuple
546
+ should_gen = retname[ 2 ]
547
+ if should_gen
544
548
# This argument is missing a real name
545
- argt = name
546
- name = genunderscored (argt )
549
+ argt = length (retname) == 3 ? retname[ 3 ] : retname[ 1 ]
550
+ name = genunderscored (retname[ 1 ] )
547
551
sigex. args[i] = :($ name:: $argt )
548
552
else
549
553
# This is a ::Type{T} argument. We should remove this from the list of parameters
554
+ name = retname[1 ]
550
555
parameternames = filter (! isequal (name), parameternames)
551
556
end
557
+ retname = name
552
558
end
553
- push! (argnames, name )
559
+ push! (argnames, retname )
554
560
end
555
561
556
562
return sigex. args[1 ], tuple (argnames... ), kwnames, tuple (parameternames... )
0 commit comments