Class: Ikra::RubyIntegration::SymbolicCycleFinder

Inherits:
Symbolic::Visitor show all
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

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