class TypeProf::Core::AST::ConstantReadNode::ConstantWriteNode

Attributes

cname_code_range[R]
cpath[R]
rhs[R]
static_cpath[R]

Public Class Methods

new(raw_node, rhs, lenv) click to toggle source
Calls superclass method TypeProf::Core::AST::Node::new
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 58
def initialize(raw_node, rhs, lenv)
  super(raw_node, lenv)
  case raw_node.type
  when :constant_write_node, :constant_target_node, :constant_operator_write_node, :constant_or_write_node, :constant_and_write_node
    # C = expr
    @cpath = nil
    @static_cpath = lenv.cref.cpath + [raw_node.name]
    @cname_code_range = TypeProf::CodeRange.from_node(raw_node.respond_to?(:name_loc) ? raw_node.name_loc : raw_node)
  when :constant_path_write_node, :constant_path_operator_write_node, :constant_path_or_write_node, :constant_path_and_write_node
    # expr::C = expr
    @cpath = AST.create_node(raw_node.target, lenv)
    @static_cpath = AST.parse_cpath(raw_node.target, lenv.cref)
    @cname_code_range = TypeProf::CodeRange.from_node(raw_node.target)
  when :constant_path_target_node
    # expr::C, * = ary
    @cpath = ConstantReadNode.new(raw_node, lenv)
    @static_cpath = AST.parse_cpath(raw_node, lenv.cref)
    @cname_code_range = TypeProf::CodeRange.from_node(raw_node)
  else
    raise
  end
  @rhs = rhs
end

Public Instance Methods

attrs(= { static_cpath: }) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 85
  def attrs = { static_cpath: }

  def define0(genv)
    @cpath.define(genv) if @cpath
    @rhs.define(genv) if @rhs
    if @static_cpath
      mod = genv.resolve_const(@static_cpath)
      mod.add_def(self)
      mod
    else
      nil
    end
  end

  def define_copy(genv)
    if @static_cpath
      mod = genv.resolve_const(@static_cpath)
      mod.add_def(self)
      mod.remove_def(@prev_node)
    end
    super(genv)
  end

  def undefine0(genv)
    if @static_cpath
      genv.resolve_const(@static_cpath).remove_def(self)
    end
    @rhs.undefine(genv) if @rhs
    @cpath.undefine(genv) if @cpath
  end

  def install0(genv)
    @cpath.install(genv) if @cpath
    val = @rhs.install(genv)
    if @static_cpath
      @changes.add_edge(genv, val, @static_ret.vtx)
    end
    val
  end
end
define0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 87
def define0(genv)
  @cpath.define(genv) if @cpath
  @rhs.define(genv) if @rhs
  if @static_cpath
    mod = genv.resolve_const(@static_cpath)
    mod.add_def(self)
    mod
  else
    nil
  end
end
define_copy(genv) click to toggle source
Calls superclass method TypeProf::Core::AST::Node#define_copy
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 99
def define_copy(genv)
  if @static_cpath
    mod = genv.resolve_const(@static_cpath)
    mod.add_def(self)
    mod.remove_def(@prev_node)
  end
  super(genv)
end
install0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 116
def install0(genv)
  @cpath.install(genv) if @cpath
  val = @rhs.install(genv)
  if @static_cpath
    @changes.add_edge(genv, val, @static_ret.vtx)
  end
  val
end
subnodes(= { cpath:, rhs: }) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 84
    def subnodes = { cpath:, rhs: }
    def attrs = { static_cpath: }

    def define0(genv)
      @cpath.define(genv) if @cpath
      @rhs.define(genv) if @rhs
      if @static_cpath
        mod = genv.resolve_const(@static_cpath)
        mod.add_def(self)
        mod
      else
        nil
      end
    end

    def define_copy(genv)
      if @static_cpath
        mod = genv.resolve_const(@static_cpath)
        mod.add_def(self)
        mod.remove_def(@prev_node)
      end
      super(genv)
    end

    def undefine0(genv)
      if @static_cpath
        genv.resolve_const(@static_cpath).remove_def(self)
      end
      @rhs.undefine(genv) if @rhs
      @cpath.undefine(genv) if @cpath
    end

    def install0(genv)
      @cpath.install(genv) if @cpath
      val = @rhs.install(genv)
      if @static_cpath
        @changes.add_edge(genv, val, @static_ret.vtx)
      end
      val
    end
  end
end
undefine0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 108
def undefine0(genv)
  if @static_cpath
    genv.resolve_const(@static_cpath).remove_def(self)
  end
  @rhs.undefine(genv) if @rhs
  @cpath.undefine(genv) if @cpath
end