class TypeProf::Core::AST::SigModuleBaseNode::SigClassNode

Attributes

superclass_args[R]
superclass_cpath[R]
superclass_toplevel[R]

Public Class Methods

new(raw_decl, lenv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 124
def initialize(raw_decl, lenv)
  super(raw_decl, lenv)
  superclass = raw_decl.super_class
  if superclass
    name = superclass.name
    @superclass_cpath = name.namespace.path + [name.name]
    @superclass_toplevel = name.namespace.absolute?
    @superclass_args = superclass.args.map {|arg| AST.create_rbs_type(arg, lenv) }
  else
    @superclass_cpath = nil
    @superclass_toplevel = nil
    @superclass_args = nil
  end
end

Public Instance Methods

attrs() click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 144
def attrs
  super.merge!({ superclass_cpath:, superclass_toplevel: })
end
define0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 148
def define0(genv)
  static_ret = super(genv)
  const_reads = []
  if @superclass_cpath
    @superclass_args.each {|arg| arg.define(genv) }
    const_read = BaseConstRead.new(genv, @superclass_cpath.first, @superclass_toplevel ? CRef::Toplevel : @lenv.cref)
    const_reads << const_read
    @superclass_cpath[1..].each do |cname|
      const_read = ScopedConstRead.new(cname, const_read)
      const_reads << const_read
    end
    mod = genv.resolve_cpath(@cpath)
    const_read.followers << mod
  end
  static_ret[:superclass_cpath] = const_reads
  static_ret
end
subnodes() click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 141
def subnodes
  super.merge!({ superclass_args: })
end
undefine0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 166
def undefine0(genv)
  super(genv)
  if @static_ret
    @static_ret[:superclass_cpath].each do |const_read|
      const_read.destroy(genv)
    end
  end
  if @superclass_args
    @superclass_args.each {|arg| arg.undefine(genv) }
  end
end