class TypeProf::Type::Array

Do not insert Array type to local environment, stack, etc.

Attributes

base_type[R]
elems[R]

Public Class Methods

new(elems, base_type) click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 214
def initialize(elems, base_type)
  raise unless elems.is_a?(Array::Elements)
  @elems = elems # Array::Elements
  raise unless base_type
  @base_type = base_type
end

Public Instance Methods

generate_substitution() click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 261
def generate_substitution
  { Type::Var.new(:Elem) => @elems.squash }
end
inspect() click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 223
def inspect
  "Type::Array[#{ @elems.inspect }, base_type: #{ @base_type.inspect }]"
  #@base_type.inspect
end
limit_size(limit) click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 246
def limit_size(limit)
  return Type.any if limit <= 0
  Array.new(@elems.limit_size(limit - 1), @base_type)
end
localize(env, alloc_site, depth) click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 237
def localize(env, alloc_site, depth)
  return env, Type.any if depth <= 0
  alloc_site = alloc_site.add_id(:ary).add_id(@base_type)
  env, elems = @elems.localize(env, alloc_site, depth - 1)
  ty = Local.new(Array, alloc_site, @base_type)
  env = env.deploy_type(alloc_site, elems)
  return env, ty
end
method_dispatch_info() click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 251
def method_dispatch_info
  raise
end
screen_name(scratch) click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 228
def screen_name(scratch)
  str = @elems.screen_name(scratch)
  if str =~ /\A\*\[(.*)\]\z/
    str = @base_type.klass.type_params.map {|var_name,| var_name == :Elem ? $1 : "untyped" }.join(", ")
    str = "#{ @base_type.screen_name(scratch) }[#{ str }]"
  end
  str
end
substitute(subst, depth) click to toggle source
# File typeprof-0.21.9/lib/typeprof/container-type.rb, line 255
def substitute(subst, depth)
  return Type.any if depth <= 0
  elems = @elems.substitute(subst, depth - 1)
  Array.new(elems, @base_type)
end