Class: Ikra::RubyIntegration::SymbolicCycleFinder
- Inherits:
-
Symbolic::Visitor
- Object
- Symbolic::Visitor
- Ikra::RubyIntegration::SymbolicCycleFinder
- Defined in:
- lib/ruby_core/array_command.rb
Overview
This visitor traverses the tree of symbolically executed parallel operations. It raises an exception, if an array command was generated by symbolic execution/interpretation of ‘send_node`.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(send_node) ⇒ SymbolicCycleFinder
constructor
A new instance of SymbolicCycleFinder.
- #visit_array_command(node) ⇒ Object
Methods inherited from Symbolic::Visitor
#visit_array_combine_command, #visit_array_host_section_command, #visit_array_identity_command, #visit_array_in_host_section_command, #visit_array_index_command, #visit_array_reduce_command, #visit_array_select_command, #visit_array_stencil_command, #visit_array_zip_command, #visit_fixed_size_array_in_host_section_command
Constructor Details
#initialize(send_node) ⇒ SymbolicCycleFinder
Returns a new instance of SymbolicCycleFinder.
16 17 18 |
# File 'lib/ruby_core/array_command.rb', line 16 def initialize(send_node) @send_node = send_node end |
Class Method Details
.raise_on_cycle(command, send_node) ⇒ Object
11 12 13 14 |
# File 'lib/ruby_core/array_command.rb', line 11 def self.raise_on_cycle(command, send_node) visitor = self.new(send_node) command.accept(visitor) end |
Instance Method Details
#visit_array_command(node) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'lib/ruby_core/array_command.rb', line 20 def visit_array_command(node) if node.generator_node == @send_node raise CycleDetectedError.new(node: node) else # No cycle found yet, check dependent computations super end end |