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