class Yadriggy::MethodType

Type of methods.

Public Class Methods

new(method_def=nil, param_type_array, result_type) click to toggle source

@param [Parameters|nil] method_def method definition. @param [Array<Type|Module>|DynType] param_type_array parameter types.

`param_type_array` can be {DynType}.

@param [Type|Module|DynType] result_type the result type.

# File lib/yadriggy/type.rb, line 477
def initialize(method_def=nil, param_type_array, result_type)
  @param_types = if param_type_array.is_a?(Array)
                   param_type_array.map do |t|
                     t.is_a?(Type) ? t : RubyClass[t]
                   end
                 else
                   param_type_array
                 end
  @result_type = if result_type.is_a?(Type)
                   result_type
                 else
                   RubyClass[result_type]
                 end
  @method_def = method_def
end

Public Instance Methods

<=(t) click to toggle source

@api private

# File lib/yadriggy/type.rb, line 515
def <= (t)
  if t.is_super_of?(self)
    true
  else
    mt = MethodType.role(t)
    !mt.nil? && @result_type <= mt.result_type &&
      compare_params(mt.params, @param_types)
  end
end
==(t) click to toggle source

@api private

# File lib/yadriggy/type.rb, line 504
def == (t)
  mt = MethodType.role(t)
  !mt.nil? && @result_type == mt.result_type && @param_types == mt.params
end
hash() click to toggle source

@api private

# File lib/yadriggy/type.rb, line 510
def hash
  @result_type.hash + @param_types.hash
end
method_def() click to toggle source

@return [Parameters] the method definition.

# File lib/yadriggy/type.rb, line 501
def method_def() @method_def end
name() click to toggle source

Obtains the name of this type. @return [String] the type name.

# File lib/yadriggy/type.rb, line 533
def name
  name = ''
  if @param_types.is_a?(Array)
    name << '(' << @param_types.map{|e| e.name }.join(',') << ')'
  else
    name << @param_types.name
  end
  name  << '->' << @result_type.name
  name
end
params() click to toggle source

Gets an array of the parameter types. @return [Array<Type>|DynType] the parameter types.

# File lib/yadriggy/type.rb, line 495
def params() @param_types end
result() click to toggle source

@return [ResultType] the result type. Note that a {ResultType} object

is always returned.
# File lib/yadriggy/type.rb, line 527
def result()
  ResultType.new(@result_type, @method_def)
end
result_type() click to toggle source

@return [Type] the result type.

# File lib/yadriggy/type.rb, line 498
def result_type() @result_type end

Private Instance Methods

compare_params(p, q) click to toggle source

@return [Boolean] true if p <= q

# File lib/yadriggy/type.rb, line 547
def compare_params(p, q)
  if p.is_a?(Array) && q.is_a?(Array)
    p.size == q.size &&
      (0...p.size).reduce(true) {|b,i| b && p[i] <= q[i] }
  else
    DynType == q
  end
end