Skip to content

Commit 411784e

Browse files
committed
use kwarg
1 parent f7d6c45 commit 411784e

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

src/codeedges.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -567,34 +567,35 @@ will end up skipping a subset of such statements, perhaps while repeating others
567567
568568
See also [`lines_required!`](@ref) and [`selective_eval!`](@ref).
569569
"""
570-
function lines_required(obj::Union{Symbol,GlobalRef}, src::CodeInfo, edges::CodeEdges, args...)
570+
function lines_required(obj::Union{Symbol,GlobalRef}, src::CodeInfo, edges::CodeEdges; kwargs...)
571571
isrequired = falses(length(edges.preds))
572572
objs = Set{Union{Symbol,GlobalRef}}([obj])
573-
return lines_required!(isrequired, objs, src, edges, args...)
573+
return lines_required!(isrequired, objs, src, edges; kwargs...)
574574
end
575575

576-
function lines_required(idx::Int, src::CodeInfo, edges::CodeEdges, args...)
576+
function lines_required(idx::Int, src::CodeInfo, edges::CodeEdges; kwargs...)
577577
isrequired = falses(length(edges.preds))
578578
isrequired[idx] = true
579579
objs = Set{Union{Symbol,GlobalRef}}()
580-
return lines_required!(isrequired, objs, src, edges, args...)
580+
return lines_required!(isrequired, objs, src, edges; kwargs...)
581581
end
582582

583583
"""
584-
lines_required!(isrequired::AbstractVector{Bool}, src::CodeInfo, edges::CodeEdges, norequire = ())
584+
lines_required!(isrequired::AbstractVector{Bool}, src::CodeInfo, edges::CodeEdges;
585+
norequire = ())
585586
586587
Like `lines_required`, but where `isrequired[idx]` has already been set to `true` for all statements
587588
that you know you need to evaluate. All other statements should be marked `false` at entry.
588589
On return, the complete set of required statements will be marked `true`.
589590
590-
`norequire` specifies statements (represented as iterator of `Int`s) that should _not_ be
591-
marked as a requirement.
591+
`norequire` keyword argument specifies statements (represented as iterator of `Int`s) that
592+
should _not_ be marked as a requirement.
592593
For example, use `norequire = LoweredCodeUtils.exclude_named_typedefs(src, edges)` if you're
593594
extracting method signatures and not evaluating new definitions.
594595
"""
595-
function lines_required!(isrequired::AbstractVector{Bool}, src::CodeInfo, edges::CodeEdges, norequire = ())
596+
function lines_required!(isrequired::AbstractVector{Bool}, src::CodeInfo, edges::CodeEdges; kwargs...)
596597
objs = Set{Union{Symbol,GlobalRef}}()
597-
return lines_required!(isrequired, objs, src, edges, norequire)
598+
return lines_required!(isrequired, objs, src, edges; kwargs...)
598599
end
599600

600601
function exclude_named_typedefs(src::CodeInfo, edges::CodeEdges)
@@ -614,7 +615,7 @@ function exclude_named_typedefs(src::CodeInfo, edges::CodeEdges)
614615
return norequire
615616
end
616617

617-
function lines_required!(isrequired::AbstractVector{Bool}, objs, src::CodeInfo, edges::CodeEdges, norequire = ())
618+
function lines_required!(isrequired::AbstractVector{Bool}, objs, src::CodeInfo, edges::CodeEdges; norequire = ())
618619
# Do a traveral of "numbered" predecessors
619620
# We'll mostly use generic graph traversal to discover all the lines we need,
620621
# but structs are in a bit of a different category (especially on Julia 1.5+).

test/codeedges.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function hastrackedexpr(stmt; heads=LoweredCodeUtils.trackedheads)
2222
return false, haseval
2323
end
2424

25-
function minimal_evaluation(predicate, src::Core.CodeInfo, edges::CodeEdges, args...)
25+
function minimal_evaluation(predicate, src::Core.CodeInfo, edges::CodeEdges; kwargs...)
2626
isrequired = fill(false, length(src.code))
2727
for (i, stmt) in enumerate(src.code)
2828
if !isrequired[i]
@@ -33,7 +33,7 @@ function minimal_evaluation(predicate, src::Core.CodeInfo, edges::CodeEdges, arg
3333
end
3434
end
3535
# All tracked expressions are marked. Now add their dependencies.
36-
lines_required!(isrequired, src, edges, args...)
36+
lines_required!(isrequired, src, edges; kwargs...)
3737
return isrequired
3838
end
3939

@@ -262,7 +262,7 @@ end
262262
frame = Frame(ModEval, ex)
263263
src = frame.framecode.src
264264
edges = CodeEdges(src)
265-
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt),false), src, edges, exclude_named_typedefs(src, edges)) # initially mark only the constructor
265+
isrequired = minimal_evaluation(stmt->(LoweredCodeUtils.ismethod3(stmt),false), src, edges; norequire=exclude_named_typedefs(src, edges)) # initially mark only the constructor
266266
bbs = Core.Compiler.compute_basic_blocks(src.code)
267267
for (iblock, block) in enumerate(bbs.blocks)
268268
r = LoweredCodeUtils.rng(block)
@@ -301,7 +301,7 @@ end
301301
src = thk.args[1]
302302
edges = CodeEdges(src)
303303
idx = findfirst(stmt->Meta.isexpr(stmt, :method), src.code)
304-
lr = lines_required(idx, src, edges, exclude_named_typedefs(src, edges))
304+
lr = lines_required(idx, src, edges; norequire=exclude_named_typedefs(src, edges))
305305
idx = findfirst(stmt->Meta.isexpr(stmt, :(=)) && Meta.isexpr(stmt.args[2], :call) && is_global_ref(stmt.args[2].args[1], Core, :Box), src.code)
306306
@test lr[idx]
307307
# but make sure we don't break primitivetype & abstracttype (https://github.com/timholy/Revise.jl/pull/611)

0 commit comments

Comments
 (0)