123456789_123456789_123456789_123456789_123456789_

Class: TypeProf::AttrMethodDef

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, MethodDef
Instance Chain:
Inherits: TypeProf::MethodDef
Defined in: lib/typeprof/method.rb

Class Method Summary

Instance Attribute Summary

MethodDef - Inherited

Instance Method Summary

Constructor Details

.new(ivar, kind, pub_meth) ⇒ AttrMethodDef

[ GitHub ]

  
# File 'lib/typeprof/method.rb', line 181

def initialize(ivar, kind, pub_meth)
  @ivar = ivar
  @kind = kind # :reader | :writer
  @pub_meth = pub_meth
end

Instance Attribute Details

#ivar (readonly)

[ GitHub ]

  
# File 'lib/typeprof/method.rb', line 187

attr_reader :ivar, :kind

#kind (readonly)

[ GitHub ]

  
# File 'lib/typeprof/method.rb', line 187

attr_reader :ivar, :kind

Instance Method Details

#do_send(recv, mid, aargs, caller_ep, caller_env, scratch, &ctn)

[ GitHub ]

  
# File 'lib/typeprof/method.rb', line 189

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