Skip to content

Commit b218d7a

Browse files
committed
Improve efficiency of lines_required!
1 parent bd7ad2e commit b218d7a

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/codeedges.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,8 +686,10 @@ function lines_required!(isrequired::AbstractVector{Bool}, objs, src::CodeInfo,
686686
# So far, everything is generic graph traversal. Now we add some domain-specific information.
687687
# New struct definitions, including their constructors, get spread out over many
688688
# statements. If we're evaluating any of them, it's important to evaluate *all* of them.
689-
for (idx, stmt) in enumerate(src.code)
690-
isrequired[idx] || continue
689+
idx = 1
690+
while idx < length(src.code)
691+
stmt = src.code[idx]
692+
isrequired[idx] || (idx += 1; continue)
691693
for (typedefr, typedefn) in zip(typedef_blocks, typedef_names)
692694
if idx typedefr
693695
ireq = view(isrequired, typedefr)
@@ -706,6 +708,8 @@ function lines_required!(isrequired::AbstractVector{Bool}, objs, src::CodeInfo,
706708
end
707709
end
708710
end
711+
idx = last(typedefr) + 1
712+
continue
709713
end
710714
end
711715
# Anonymous functions may not yet include the method definition
@@ -722,6 +726,7 @@ function lines_required!(isrequired::AbstractVector{Bool}, objs, src::CodeInfo,
722726
end
723727
end
724728
end
729+
idx += 1
725730
end
726731
iter += 1 # just for diagnostics
727732
end

0 commit comments

Comments
 (0)