@@ -4,8 +4,11 @@ abstract type AbstractScope end
44
55" Widest scope that contains all processors."
66struct AnyScope <: AbstractScope end
7+ proc_in_scope (:: Processor , :: AnyScope ) = true
78
89abstract type AbstractScopeTaint end
10+ proc_in_scope (proc:: Processor , scope:: AbstractScope ) =
11+ ! isa (constrain (scope, ExactScope (proc)), InvalidScope)
912
1013" Taints a scope for later evaluation."
1114struct TaintScope <: AbstractScope
@@ -44,6 +47,8 @@ UnionScope(scopes...) = UnionScope((scopes...,))
4447UnionScope (scopes:: Vector{<:AbstractScope} ) = UnionScope ((scopes... ,))
4548UnionScope (s:: AbstractScope ) = UnionScope ((s,))
4649UnionScope () = UnionScope (())
50+ proc_in_scope (proc:: Processor , scope:: UnionScope ) =
51+ any (subscope-> proc_in_scope (proc, subscope), scope. scopes)
4752
4853function Base.:(== )(us1:: UnionScope , us2:: UnionScope )
4954 if length (us1. scopes) != length (us2. scopes)
@@ -78,6 +83,8 @@ function ProcessScope(wid::Integer)
7883end
7984ProcessScope (p:: OSProc ) = ProcessScope (p. pid)
8085ProcessScope () = ProcessScope (myid ())
86+ proc_in_scope (proc:: Processor , scope:: ProcessScope ) =
87+ root_worker_id (proc) == scope. wid
8188
8289struct ProcessorTypeTaint{T} <: AbstractScopeTaint end
8390
@@ -92,12 +99,14 @@ struct ExactScope <: AbstractScope
9299 processor:: Processor
93100end
94101ExactScope (proc) = ExactScope (ProcessScope (get_parent (proc). pid), proc)
102+ proc_in_scope (proc:: Processor , scope:: ExactScope ) = proc == scope. processor
95103
96104" Indicates that the applied scopes `x` and `y` are incompatible."
97105struct InvalidScope <: AbstractScope
98106 x:: AbstractScope
99107 y:: AbstractScope
100108end
109+ proc_in_scope (:: Processor , :: InvalidScope ) = false
101110
102111# Show methods
103112
0 commit comments