Skip to content

Commit 0c4f0f8

Browse files
committed
lowered: improve inference of lnn and add_include
1 parent 351b730 commit 0c4f0f8

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/lowered.jl

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ methods_by_execution!(methodinfo, docexprs, mod::Module, ex::Expr; kwargs...) =
237237

238238
function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, frame::Frame, isrequired::AbstractVector{Bool}; mode::Symbol=:eval, skip_include::Bool=true)
239239
isok(lnn::LineTypes) = !iszero(lnn.line) || lnn.file !== :none # might fail either one, but accept anything
240+
lnnstd(lnn::LineTypes) = LineNumberNode(lnn.line, lnn.file)
240241

241242
mod = moduleof(frame)
242243
# Hoist this lookup for performance. Don't throw even when `mod` is a baremodule:
@@ -289,9 +290,9 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
289290
lnn = nothing
290291
if line_is_decl
291292
sigcode = @lookup(frame, stmt3.args[2])::Core.SimpleVector
292-
lnn = sigcode[end]
293-
if !isa(lnn, LineNumberNode)
294-
lnn = nothing
293+
lnntmp = sigcode[end]
294+
if isa(lnntmp, LineNumberNode)
295+
lnn = lnntmp
295296
end
296297
end
297298
if lnn === nothing
@@ -300,9 +301,10 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
300301
bodycode = @lookup(frame, bodycode)
301302
end
302303
if isa(bodycode, CodeInfo)
303-
lnn = linetable(bodycode, 1)
304-
if !isok(lnn)
305-
lnn = nothing
304+
lnn_ = linetable(bodycode, 1)
305+
if isok(lnn_)
306+
lnn = lnnstd(lnn_)
307+
else
306308
if length(bodycode.code) > 1
307309
# This may be a kwarg method. Mimic LoweredCodeUtils.bodymethod,
308310
# except without having a method
@@ -335,7 +337,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
335337
for lnntmp in linetable(bodycode)
336338
lnntmp = lnntmp::LineTypes
337339
if isok(lnntmp)
338-
lnn = lnntmp
340+
lnn = lnnstd(lnntmp)
339341
break
340342
end
341343
end
@@ -345,7 +347,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
345347
bodycode = bodycode::Expr
346348
lnntmp = bodycode.args[end][1]::LineTypes
347349
if isok(lnntmp)
348-
lnn = lnntmp
350+
lnn = lnnstd(lnntmp)
349351
end
350352
end
351353
end
@@ -354,7 +356,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
354356
while i > 0
355357
lnntmp = linetable(frame, i)
356358
if isok(lnntmp)
357-
lnn = lnntmp
359+
lnn = lnnstd(lnntmp)
358360
break
359361
end
360362
i -= 1
@@ -391,7 +393,7 @@ function methods_by_execution!(@nospecialize(recurse), methodinfo, docexprs, fra
391393
elseif skip_include && (f === modinclude || f === Base.include || f === Core.include)
392394
# include calls need to be managed carefully from several standpoints, including
393395
# path management and parsing new expressions
394-
add_includes!(methodinfo, mod, @lookup(frame, stmt.args[2]))
396+
add_includes!(methodinfo, mod, @lookup(frame, stmt.args[2])::String)
395397
assign_this!(frame, nothing) # FIXME: the file might return something different from `nothing`
396398
pc = next_or_nothing!(frame)
397399
elseif f === Base.Docs.doc! # && mode !== :eval

0 commit comments

Comments
 (0)