Error while including a file

Sometimes I get this error while including a file include("filename.jl"). Then I have to restart Julia and it works again. I am using Revise.
No a single line of the included file is executed.
What could be the problem? Thanks in advance.

ERROR: MethodError: no method matching getindex(::Array{UInt8,1}, ::UnitRange{UInt64})
Closest candidates are:
  getindex(::Array, ::Int64) at array.jl:729
  getindex(::Array, ::Int64, ::Int64, ::Int64...) at array.jl:730
  getindex(::Array, ::UnitRange{Int64}) at array.jl:734
  ...
Stacktrace:
 [1] pwd() at ./file.jl:54
 [2] abspath at ./path.jl:325 [inlined]
 [3] _include_dependency(::Module, ::String) at ./loading.jl:742
 [4] include_relative(::Module, ::String) at ./loading.jl:1030
 [5] include(::Module, ::String) at ./sysimg.jl:29
 [6] include(::String) at ./client.jl:403
 [7] top-level scope at none:0

It’s kinda odd because the method

  getindex(::Array, ::UnitRange{Int64}) at array.jl:734

that is suggested should match?

The method it’s complaining is missing is

getindex(::Vector{UInt8}, ::UnitRange{UInt64})

note that the second argument is UInt64 not Int64.

1 Like

Ah, good catch.

Even so:

julia> a = UInt8[1,2,3,4,5,6];

julia> a[1:UInt64(3)]
3-element Array{UInt8,1}:
 0x01
 0x02
 0x03

Perhaps Revise is deleting some method?

It does seem as if the generic fallback method at abstractarray.jl:925 is gettind deleted.

It’s pretty strange that Revise could do that. I’m wondering if there should be some kind of check to make sure it does not delete methods from Base, perhaps unless some global flag is set.

Please file as a Revise issue. Might be similar to https://github.com/timholy/Revise.jl/issues/234 (which is a Julia bug, not a Revise bug). Theoretically Revise shouldn’t do this, but it does depend on accurate subtyping. Or there could be a bug.

3 Likes

@RaulDurand, to catch this in the act, turn on Revise’s logging. This is what I do in my startup.jl file:

 atreplinit() do repl
    try
        @eval using Revise
        @async Revise.debug_logger()
        @async Revise.wait_steal_repl_backend()
    catch
    end
end

Then if the error happens again, you can retrospectively examine rlogger = Revise.debug_logger() and figure out what happened. See instructions in those docs about how to capture info and submit a bug report.

3 Likes