@@ -4,8 +4,11 @@ abstract type AbstractScope end
4
4
5
5
" Widest scope that contains all processors."
6
6
struct AnyScope <: AbstractScope end
7
+ proc_in_scope (:: Processor , :: AnyScope ) = true
7
8
8
9
abstract type AbstractScopeTaint end
10
+ proc_in_scope (proc:: Processor , scope:: AbstractScope ) =
11
+ ! isa (constrain (scope, ExactScope (proc)), InvalidScope)
9
12
10
13
" Taints a scope for later evaluation."
11
14
struct TaintScope <: AbstractScope
@@ -44,6 +47,8 @@ UnionScope(scopes...) = UnionScope((scopes...,))
44
47
UnionScope (scopes:: Vector{<:AbstractScope} ) = UnionScope ((scopes... ,))
45
48
UnionScope (s:: AbstractScope ) = UnionScope ((s,))
46
49
UnionScope () = UnionScope (())
50
+ proc_in_scope (proc:: Processor , scope:: UnionScope ) =
51
+ any (subscope-> proc_in_scope (proc, subscope), scope. scopes)
47
52
48
53
function Base.:(== )(us1:: UnionScope , us2:: UnionScope )
49
54
if length (us1. scopes) != length (us2. scopes)
@@ -78,6 +83,8 @@ function ProcessScope(wid::Integer)
78
83
end
79
84
ProcessScope (p:: OSProc ) = ProcessScope (p. pid)
80
85
ProcessScope () = ProcessScope (myid ())
86
+ proc_in_scope (proc:: Processor , scope:: ProcessScope ) =
87
+ root_worker_id (proc) == scope. wid
81
88
82
89
struct ProcessorTypeTaint{T} <: AbstractScopeTaint end
83
90
@@ -92,12 +99,14 @@ struct ExactScope <: AbstractScope
92
99
processor:: Processor
93
100
end
94
101
ExactScope (proc) = ExactScope (ProcessScope (get_parent (proc). pid), proc)
102
+ proc_in_scope (proc:: Processor , scope:: ExactScope ) = proc == scope. processor
95
103
96
104
" Indicates that the applied scopes `x` and `y` are incompatible."
97
105
struct InvalidScope <: AbstractScope
98
106
x:: AbstractScope
99
107
y:: AbstractScope
100
108
end
109
+ proc_in_scope (:: Processor , :: InvalidScope ) = false
101
110
102
111
# Show methods
103
112
0 commit comments