class Roby::ExecutionEngine::ExceptionPropagationVisitor

Graph visitor that propagates exceptions in the dependency graph

Attributes

exception_handler[R]
handled_exceptions[R]
unhandled_exceptions[R]

Public Class Methods

new(graph, object, origin, origin_neighbours = graph.out_neighbours(origin), &exception_handler) click to toggle source
Calls superclass method Roby::Relations::ForkMergeVisitor::new
# File lib/roby/execution_engine.rb, line 1134
def initialize(graph, object, origin, origin_neighbours = graph.out_neighbours(origin), &exception_handler)
    super(graph, object, origin, origin_neighbours)
    @exception_handler = exception_handler
    @handled_exceptions = Array.new
    @unhandled_exceptions = Array.new
end

Public Instance Methods

fork_object(obj) click to toggle source
# File lib/roby/execution_engine.rb, line 1149
def fork_object(obj)
    obj.fork
end
handle_examine_vertex(u) click to toggle source
# File lib/roby/execution_engine.rb, line 1153
def handle_examine_vertex(u)
    e = vertex_to_object.fetch(u)
    return if !e

    if e.handled = exception_handler[e, u]
        handled_exceptions << e
    elsif out_degree[u] == 0
        unhandled_exceptions << e
    end
end
propagate_object(u, v, obj) click to toggle source
# File lib/roby/execution_engine.rb, line 1141
def propagate_object(u, v, obj)
    raise if u == v
    if !obj.handled?
        obj.propagate(u, v)
        obj
    end
end