CassetteOverlay.jl
CassetteOverlay.jl copied to clipboard
Printing pointer causes error
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?