Skip to content

Commit c6379d5

Browse files
authored
Merge pull request #35 from timholy/teh/namedtuple
Generate names for `::NamedTuple` arguments (fixes #34)
2 parents f2d7ff5 + 1b7ebce commit c6379d5

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

src/debug.jl

+16-10
Original file line numberDiff line numberDiff line change
@@ -508,9 +508,13 @@ function signature_names!(sigex::ExLike)
508508
# This argument has a type but no name
509509
return arg, true
510510
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
514518
end
515519
return arg
516520
end
@@ -537,20 +541,22 @@ function signature_names!(sigex::ExLike)
537541
argnames = Union{Symbol,Expr}[]
538542
for i = offset+1:length(sigex.args)
539543
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
544548
# 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])
547551
sigex.args[i] = :($name::$argt)
548552
else
549553
# This is a ::Type{T} argument. We should remove this from the list of parameters
554+
name = retname[1]
550555
parameternames = filter(!isequal(name), parameternames)
551556
end
557+
retname = name
552558
end
553-
push!(argnames, name)
559+
push!(argnames, retname)
554560
end
555561

556562
return sigex.args[1], tuple(argnames...), kwnames, tuple(parameternames...)

test/runtests.jl

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ Base.show(io::IO, ::ErrorsOnShow) = throw(ArgumentError("no show"))
3333
ex = :(f(Tuseless::Type{T}, ::IndexStyle, x::Int) where T)
3434
@test Rebugger.signature_names!(ex) == (:f, (:Tuseless, :__IndexStyle_1, :x), (), (:T,))
3535
@test ex == :(f(Tuseless::Type{T}, __IndexStyle_1::IndexStyle, x::Int) where T)
36+
# issue #34
37+
ex = :(_mapreduce_dim(f, op, ::NamedTuple{()}, A::AbstractArray, ::Colon))
38+
@test Rebugger.signature_names!(ex) == (:_mapreduce_dim, (:f, :op, :__NamedTuple_1, :A, :__Colon_1), (), ())
39+
@test ex == :(_mapreduce_dim(f, op, __NamedTuple_1::NamedTuple{()}, A::AbstractArray, __Colon_1::Colon))
3640
end
3741
@testset "Caller buffer capture and insertion" begin
3842
function run_insertion(str, atstr)

0 commit comments

Comments
 (0)