ExprTools.jl icon indicating copy to clipboard operation
ExprTools.jl copied to clipboard

`signature(::Method)` on a generated function errors

Open oxinabox opened this issue 3 years ago • 0 comments

However, signature(type_tuple) works.

julia> @generated foo(x) = :(1+1)
foo (generic function with 1 method)

julia> signature(only(methods(foo)).sig)
Dict{Symbol, Any} with 2 entries:
  :name => :(op::typeof(foo))
  :args => Expr[:(x1::Any)]

julia> signature(only(methods(foo)))
ERROR: Method is @generated; try `code_lowered` instead.
Stacktrace:
 [1] error(s::String)
   @ Base ./error.jl:33
 [2] uncompressed_ir(m::Method)
   @ Base ./reflection.jl:988
 [3] slot_names
   @ ~/JuliaEnvs/ChainRulesWorld/ExprTools.jl/src/method.jl:106 [inlined]
 [4] argument_names(m::Method)
   @ ExprTools ~/JuliaEnvs/ChainRulesWorld/ExprTools.jl/src/method.jl:111
 [5] arguments(m::Method, sig::Type)
   @ ExprTools ~/JuliaEnvs/ChainRulesWorld/ExprTools.jl/src/method.jl:182
 [6] signature(m::Method; extra_hygiene::Bool)
   @ ExprTools ~/JuliaEnvs/ChainRulesWorld/ExprTools.jl/src/method.jl:45
 [7] signature(m::Method)
   @ ExprTools ~/JuliaEnvs/ChainRulesWorld/ExprTools.jl/src/method.jl:40
 [8] top-level scope
   @ REPL[38]:1

The error is to do with how we are finding the names of the arguments. which is not done for if we are doing it from the type-tuple. However, there must be another way since the names are displayed by methods

julia> methods(foo)
# 1 method for generic function "foo":
[1] foo(x) in Main at REPL[36]:1

oxinabox avatar Jul 06 '21 11:07 oxinabox