class TypeProf::Core::AST::ConstantReadNode
Attributes
cbase[R]
cname[R]
cname_code_range[R]
toplevel[R]
Public Class Methods
new(raw_node, 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 4 def initialize(raw_node, lenv) super(raw_node, lenv) case raw_node.type when :constant_read_node, :constant_operator_write_node, :constant_or_write_node, :constant_and_write_node @cbase = nil @toplevel = false @cname = raw_node.name @cname_code_range = TypeProf::CodeRange.from_node(raw_node.location) when :constant_path_node, :constant_path_target_node if raw_node.parent @cbase = AST.create_node(raw_node.parent, lenv) @toplevel = false else @cbase = nil @toplevel = true end # temporarily support old Prism https://bugs.ruby-lang.org/issues/20467 if raw_node.respond_to?(:name) @cname = raw_node.name @cname_code_range = TypeProf::CodeRange.from_node(raw_node.name_loc) else @cname = raw_node.child.name @cname_code_range = TypeProf::CodeRange.from_node(raw_node.child.location) end else raise raw_node.type.to_s end end
Public Instance Methods
attrs(= { cname:, toplevel: })
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 35 def attrs = { cname:, toplevel: } def subnodes = { cbase: } def define0(genv) if @cbase ScopedConstRead.new(@cname, @cbase.define(genv)) else BaseConstRead.new(genv, @cname, @toplevel ? CRef::Toplevel : @lenv.cref) end end def undefine0(genv) @static_ret.destroy(genv) end def install0(genv) @cbase.install(genv) if @cbase box = @changes.add_const_read_box(genv, @static_ret) box.ret end end class ConstantWriteNode < Node 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 attr_reader :cpath, :rhs, :static_cpath, :cname_code_range 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
define0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 38 def define0(genv) if @cbase ScopedConstRead.new(@cname, @cbase.define(genv)) else BaseConstRead.new(genv, @cname, @toplevel ? CRef::Toplevel : @lenv.cref) end end
install0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 50 def install0(genv) @cbase.install(genv) if @cbase box = @changes.add_const_read_box(genv, @static_ret) box.ret end
subnodes(= { cbase: })
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 36 def subnodes = { cbase: } def define0(genv) if @cbase ScopedConstRead.new(@cname, @cbase.define(genv)) else BaseConstRead.new(genv, @cname, @toplevel ? CRef::Toplevel : @lenv.cref) end end def undefine0(genv) @static_ret.destroy(genv) end def install0(genv) @cbase.install(genv) if @cbase box = @changes.add_const_read_box(genv, @static_ret) box.ret end end
undefine0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/const.rb, line 46 def undefine0(genv) @static_ret.destroy(genv) end