class Bpl::Atomicity
Constants
- DEFAULT_ATOMIC_ANNOTATION
Public Instance Methods
has_yield?(proc)
click to toggle source
# File lib/bpl/passes/concurrency/atomicity.rb, line 16 def has_yield?(proc) proc.body && proc.body.any? do |x| x.has_attribute? Preemption.options[:attribute] end end
run!(program)
click to toggle source
# File lib/bpl/passes/concurrency/atomicity.rb, line 22 def run! program work_list = [] program.declarations.each do |proc| next unless proc.is_a?(ProcedureDeclaration) atomic[proc] = proc.has_attribute?(attribute) || !has_yield?(proc) work_list << proc unless atomic[proc] end until work_list.empty? decl = work_list.shift sources = Set.new(call_graph_construction.callers[decl]) sources << decl.declaration if decl.is_a?(ImplementationDeclaration) sources.each do |p| next unless atomic[p] atomic[p] = false work_list |= [p] end end end