@@ -26,11 +26,37 @@ DefaultScope() = TaintScope(AnyScope(),
26
26
" Union of two or more scopes."
27
27
struct UnionScope <: AbstractScope
28
28
scopes:: Tuple
29
+ function UnionScope (scopes:: Tuple )
30
+ scope_set = Set {AbstractScope} ()
31
+ for scope in scopes
32
+ if scope isa UnionScope
33
+ for subscope in scope. scopes
34
+ push! (scope_set, subscope)
35
+ end
36
+ else
37
+ push! (scope_set, scope)
38
+ end
39
+ end
40
+ return new ((collect (scope_set)... ,))
41
+ end
29
42
end
30
43
UnionScope (scopes... ) = UnionScope ((scopes... ,))
31
44
UnionScope (scopes:: Vector{<:AbstractScope} ) = UnionScope ((scopes... ,))
32
45
UnionScope (s:: AbstractScope ) = UnionScope ((s,))
33
- UnionScope () = throw (ArgumentError (" Cannot construct empty UnionScope" ))
46
+ UnionScope () = UnionScope (())
47
+
48
+ function Base.:(== )(us1:: UnionScope , us2:: UnionScope )
49
+ if length (us1. scopes) != length (us2. scopes)
50
+ return false
51
+ end
52
+ scopes = Set {AbstractScope} ()
53
+ for scope in us2. scopes
54
+ if ! (scope in us2. scopes)
55
+ return false
56
+ end
57
+ end
58
+ return true
59
+ end
34
60
35
61
" Scoped to the same physical node."
36
62
struct NodeScope <: AbstractScope
0 commit comments