class TypeProf::Core::Vertex - typeprof: Ruby Standard Library Documentation

# class TypeProf::Core::Vertex

### Attributes

next_vtxs[R]
types[R]

### Public Class Methods

new(origin) click to toggle source
Calls superclass method `TypeProf::Core::BasicVertex::new`

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 142
    def initialize(origin)
      # Note that origin is just for debug.
      # When an AST node is reused, the value of the origin will be invalid.
      case origin
      when AST::Node
      when RBS::AST::Declarations::Base
      when ValueEntity
      when ActualArguments
      when Array
      when Symbol
      else
        raise "unknown class: #{ origin.class }"
      end
      @next_vtxs = Set[]
      super({})
    end

### Public Instance Methods

add_edge(genv, nvtx) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 207
    def add_edge(genv, nvtx)
      @next_vtxs << nvtx
      nvtx.on_type_added(genv, self, @types.keys) unless @types.empty?
    end

inspect()
Alias for: to_s
new_vertex(genv, origin) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 201
    def new_vertex(genv, origin)
      nvtx = Vertex.new(origin)
      add_edge(genv, nvtx)
      nvtx
    end

on_type_added(genv, src_var, added_types) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 161
    def on_type_added(genv, src_var, added_types)
      new_added_types = []
      added_types.each do |ty|
        if @types[ty]
          @types[ty] << src_var
        else
          set = Set[]
          begin
            @types[ty] = set
          rescue
            @types_to_be_added[ty] = set
          end
          set << src_var
          new_added_types << ty
        end
      end
      unless new_added_types.empty?
        @next_vtxs.each do |nvtx|
          nvtx.on_type_added(genv, self, new_added_types)
        end
      end
    end

on_type_removed(genv, src_var, removed_types) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 184
    def on_type_removed(genv, src_var, removed_types)
      new_removed_types = []
      removed_types.each do |ty|
        raise "!!! not implemented" if @types_to_be_added[ty]
        @types[ty].delete(src_var) || raise
        if @types[ty].empty?
          @types.delete(ty) || raise
          new_removed_types << ty
        end
      end
      unless new_removed_types.empty?
        @next_vtxs.each do |nvtx|
          nvtx.on_type_removed(genv, self, new_removed_types)
        end
      end
    end

remove_edge(genv, nvtx) click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 212
    def remove_edge(genv, nvtx)
      @next_vtxs.delete(nvtx) || raise
      nvtx.on_type_removed(genv, self, @types.keys) unless @types.empty?
    end

to_s() click to toggle source

    # File typeprof-0.30.1/lib/typeprof/core/graph/vertex.rb, line 219
    def to_s
      "v#{ @id ||= $new_id += 1 }"
    end

Also aliased as: inspect