The most basic container type for default type parameter class
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 58
def initialize(elems, base_type)
raise if !elems.is_a?(Cell::Elements)
@elems = elems # Cell::Elements
raise unless base_type
@base_type = base_type
if base_type.klass.type_params.size != elems.elems.size
raise
end
end
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 106
def generate_substitution
subst = {}
tyvars = @base_type.klass.type_params.map {|name,| Type::Var.new(name) }
tyvars.zip(@elems.elems) do |tyvar, elem|
if subst[tyvar]
subst[tyvar] = subst[tyvar].union(elem)
else
subst[tyvar] = elem
end
end
subst
end
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 70
def inspect
"Type::Cell[#{ @elems.inspect }, base_type: #{ @base_type.inspect }]"
end
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 91
def limit_size(limit)
return Type.any if limit <= 0
Cell.new(@elems.limit_size(limit - 1), @base_type)
end
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 82
def localize(env, alloc_site, depth)
return env, Type.any if depth <= 0
alloc_site = alloc_site.add_id(:cell).add_id(@base_type)
env, elems = @elems.localize(env, alloc_site, depth)
ty = Local.new(Cell, alloc_site, @base_type)
env = env.deploy_type(alloc_site, elems)
return env, ty
end
# File typeprof-0.12.0/lib/typeprof/container-type.rb, line 96
def method_dispatch_info
raise
end