class Bpl::DefinitionLocalization
Public Instance Methods
add_def(proc, id, stmt)
click to toggle source
# File lib/bpl/passes/analysis/definition_localization.rb, line 8 def add_def(proc, id, stmt) definitions[proc.name] ||= {} definitions[proc.name][id.name] ||= Set.new definitions[proc.name][id.name].add(stmt) end
run!(program)
click to toggle source
# File lib/bpl/passes/analysis/definition_localization.rb, line 14 def run! program program.declarations.each do |proc| next unless proc.is_a?(ProcedureDeclaration) && proc.body proc.body.each do |stmt| if stmt.is_a?(AssignStatement) stmt.lhs.each do |id| if id.is_a?(StorageIdentifier) add_def(proc, id, stmt) end end elsif stmt.is_a?(HavocStatement) stmt.identifiers.each do |id| add_def(proc, id, stmt) end elsif stmt.is_a?(CallStatement) mods = modification.modifies[stmt.procedure.declaration] (stmt.assignments + mods.to_a).each do |id| if id.is_a?(StorageIdentifier) add_def(proc, id, stmt) end end end end end end