Skip to content

Commit 8d2b4fb

Browse files
committed
Don't explore const-proped/semi-concrete evaled callsites
1 parent 0ae8e07 commit 8d2b4fb

1 file changed

Lines changed: 18 additions & 13 deletions

File tree

src/codeview.jl

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,14 @@ function cthulhu_typed(io::IO, debuginfo::Symbol,
182182
callsite_diagnostics = TypedSyntax.Diagnostic[]
183183
if (diagnostics_vscode || inlay_types_vscode)
184184
vscode_io = IOContext(devnull, :inlay_hints=>vscode_io[:inlay_hints], :diagnostics=>vscode_io[:diagnostics])
185-
callsite_cis = Dict() # type annotation is a bit long so I skipped it, doesn't seem to affect performance
186-
visited_cis = Set{CodeInstance}((codeinst,))
187-
add_callsites!(callsite_cis, visited_cis, callsite_diagnostics, codeinst; optimize, annotate_source, interp)
188-
for callsite in values(callsite_cis)
189-
if !isnothing(callsite)
190-
descend_into_callsite!(vscode_io, callsite.tsn; iswarn, hide_type_stable, type_annotations)
185+
if haskey(interp.unopt, codeinst) # don't process const-proped results
186+
callsite_cis = Dict() # type annotation is a bit long so I skipped it, doesn't seem to affect performance
187+
visited_cis = Set{CodeInstance}((codeinst,))
188+
add_callsites!(callsite_cis, visited_cis, callsite_diagnostics, codeinst; optimize, annotate_source, interp)
189+
for callsite in values(callsite_cis)
190+
if !isnothing(callsite)
191+
descend_into_callsite!(vscode_io, callsite.tsn; iswarn, hide_type_stable, type_annotations)
192+
end
191193
end
192194
end
193195
end
@@ -358,14 +360,17 @@ function add_callsites!(d::AbstractDict, visited_cis::AbstractSet, diagnostics::
358360
end
359361

360362
for callsite in callsites
361-
callsite_ci = callsite.info isa MultiCallInfo ? nothing : get_ci(callsite)
363+
info = callsite.info
364+
isa(info, MultiCallInfo) && continue
365+
isa(info, ConstPropCallInfo) && continue
366+
isa(info, SemiConcreteCallInfo) && continue
362367

363-
if !isnothing(callsite_ci) && callsite_ci visited_cis
364-
push!(visited_cis, callsite_ci)
365-
# TODO: figure out why this `CodeInstance` is not present in the unoptimized cache.
366-
callsite_ci.def.def.sig === Tuple{typeof(getproperty), Module, Symbol} && continue
367-
add_callsites!(d, visited_cis, diagnostics, callsite_ci, source_ci; optimize, annotate_source, interp)
368-
end
368+
callsite_ci = get_ci(callsite)
369+
isnothing(callsite_ci) && continue
370+
in(callsite_ci, visited_cis) && continue
371+
372+
push!(visited_cis, callsite_ci)
373+
add_callsites!(d, visited_cis, diagnostics, callsite_ci, source_ci; optimize, annotate_source, interp)
369374
end
370375

371376
# Check if callsite is not just filling in default arguments and defined in same file as source_ci

0 commit comments

Comments
 (0)