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

Printing pointer causes error

Open jumerckx opened this issue 1 year ago • 0 comments

Following code throws an error:

using CassetteOverlay
@MethodTable MyTable
mypass = @overlaypass MyTable
mypass() do
    print(Ptr{Nothing}(0))
end
ERROR: type DataType has no field body
Stacktrace:
  [1] ##MyTable#218
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:232 [inlined]
  [2] getproperty
    @ ./Base.jl:43 [inlined]
  [3] typename
    @ ./essentials.jl:501 [inlined]
  [4] (::var"##MyTable#218")(::typeof(Base.typename), ::Type{NamedTuple})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
  [5] typename
    @ ./essentials.jl:501 [inlined]
  [6] (::var"##MyTable#218")(::typeof(Base.typename), ::Type{NamedTuple})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
  [7] typename
    @ ./essentials.jl:501 [inlined]
  [8] show_datatype
    @ ./show.jl:1089 [inlined]
  [9] (::var"##MyTable#218")(::typeof(Base.show_datatype), ::Base.TTY, ::Type{Ptr{Nothing}}, ::Vector{TypeVar})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [10] show_datatype
    @ Base ./show.jl:1087 [inlined]
 [11] _show_type
    @ ./show.jl:971 [inlined]
 [12] (::var"##MyTable#218")(::typeof(Base._show_type), ::Base.TTY, ::Type{Ptr{Nothing}})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [13] show
    @ ./show.jl:963 [inlined]
 [14] (::var"##MyTable#218")(::typeof(show), ::Base.TTY, ::Type{Ptr{Nothing}})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [15] print
    @ ./strings/io.jl:35 [inlined]
 [16] (::var"##MyTable#218")(::typeof(print), ::Base.TTY, ::Type{Ptr{Nothing}})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [17] print
    @ ./strings/io.jl:46 [inlined]
 [18] (::var"##MyTable#218")(::typeof(print), ::Base.TTY, ::Type{Ptr{Nothing}}, ::String)
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [19] show
    @ ./show.jl:1249 [inlined]
 [20] print
    @ ./strings/io.jl:35 [inlined]
 [21] (::var"##MyTable#218")(::typeof(print), ::Base.TTY, ::Ptr{Nothing})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [22] ##MyTable#218
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:243 [inlined]
 [23] print
    @ ./coreio.jl:3 [inlined]
 [24] (::var"##MyTable#218")(::typeof(print), ::Ptr{Nothing})
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [25] #18
    @ ~/masterthesis/mojo_in_julia/main.jl:168 [inlined]
 [26] (::var"##MyTable#218")(fargs::var"#18#19")
    @ Main ~/.julia/packages/CassetteOverlay/2hq0U/src/CassetteOverlay.jl:0
 [27] top-level scope
    @ ~/masterthesis/mojo_in_julia/main.jl:167

This seems similar to https://github.com/JuliaDebug/CassetteOverlay.jl/issues/33#issuecomment-1562982637. When I define:

@inline (::typeof(mypass))(::typeof(Base.typename), @nospecialize args...) = 
    Base.typename(args...)

after the pass has been created, it works. Is there a better fix?

jumerckx avatar Jan 14 '24 15:01 jumerckx