@@ -26,11 +26,37 @@ DefaultScope() = TaintScope(AnyScope(),
2626" Union of two or more scopes."
2727struct UnionScope <: AbstractScope
2828 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
2942end
3043UnionScope (scopes... ) = UnionScope ((scopes... ,))
3144UnionScope (scopes:: Vector{<:AbstractScope} ) = UnionScope ((scopes... ,))
3245UnionScope (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
3460
3561" Scoped to the same physical node."
3662struct NodeScope <: AbstractScope
0 commit comments