class TypeProf::AttrMethodDef

Attributes

def_ep[R]
ivar[R]
kind[R]

Public Class Methods

new(ivar, kind, pub_meth, def_ep) click to toggle source
# File typeprof-0.15.2/lib/typeprof/method.rb, line 176
def initialize(ivar, kind, pub_meth, def_ep)
  @ivar = ivar
  @kind = kind # :reader | :writer
  @pub_meth = pub_meth
  @def_ep = def_ep
end

Public Instance Methods

do_send(recv, mid, aargs, caller_ep, caller_env, scratch, &ctn) click to toggle source
# File typeprof-0.15.2/lib/typeprof/method.rb, line 185
def do_send(recv, mid, aargs, caller_ep, caller_env, scratch, &ctn)
  case @kind
  when :reader
    if aargs.lead_tys.size == 0
      scratch.add_ivar_read!(recv, @ivar, caller_ep) do |ty, _ep|
        ctn[ty, caller_ep, caller_env]
      end
    else
      ctn[Type.any, caller_ep, caller_env]
    end
  when :writer
    if aargs.lead_tys.size == 1
      ty = aargs.lead_tys[0]
      scratch.set_instance_variable(recv, @ivar, ty, caller_ep, caller_env)
      ctn[ty, caller_ep, caller_env]
    else
      ctn[Type.any, caller_ep, caller_env]
    end
  end
end