class TypeProf::Core::BotFilter

Attributes

base_vtx[R]
next_vtx[R]
prev_vtx[R]
types[R]

Public Class Methods

new(genv, node, prev_vtx, base_vtx) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/graph/filter.rb, line 97
def initialize(genv, node, prev_vtx, base_vtx)
  @node = node
  @types = {}
  @prev_vtx = prev_vtx
  @next_vtx = Vertex.new(node)
  @base_vtx = base_vtx
  base_vtx.add_edge(genv, self)
  prev_vtx.add_edge(genv, self) if prev_vtx != base_vtx
end

Public Instance Methods

filter(types) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/graph/filter.rb, line 109
def filter(types)
  types.select {|ty| (ty == genv.nil_type) == @allow_nil }
end
on_type_added(genv, src_var, added_types) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/graph/filter.rb, line 113
def on_type_added(genv, src_var, added_types)
  if src_var == @base_vtx
    if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
      @next_vtx.on_type_removed(genv, self, @types.keys & @next_vtx.types.keys) # XXX: smoke/control/bot2.rb
    end
  else
    added_types.each do |ty|
      @types[ty] = true
    end
    if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
      # ignore
    else
      @next_vtx.on_type_added(genv, self, added_types - @next_vtx.types.keys) # XXX: smoke/control/bot4.rb
    end
  end
end
on_type_removed(genv, src_var, removed_types) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/graph/filter.rb, line 130
def on_type_removed(genv, src_var, removed_types)
  if src_var == @base_vtx
    if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
      # ignore
    else
      @next_vtx.on_type_added(genv, self, @types.keys - @next_vtx.types.keys) # XXX: smoke/control/bot4.rb
    end
  else
    removed_types.each do |ty|
      @types.delete(ty) || raise
    end
    if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
      # ignore
    else
      @next_vtx.on_type_removed(genv, self, removed_types & @next_vtx.types.keys) # XXX: smoke/control/bot2.rb
    end
  end
end
to_s() click to toggle source

@@new_id = 0

# File typeprof-0.30.1/lib/typeprof/core/graph/filter.rb, line 151
def to_s
  "BF#{ @id ||= $new_id += 1 } -> #{ @next_vtx }"
end