def self.method_missing(type, *args)
raise "Unknown type Type.#{type}" unless KNOWN_TYPES.has_key?(type)
case type
when :unknown then
return self.new(type)
when :function then
if args.size == 2 then
$stderr.puts "\nWARNING: adding Type.unknown for #{caller[0]}" if $DEBUG
args.unshift Type.unknown
end
return self.new(FunctionType.new(*args))
else
if type.to_s =~ /(.*)_list$/ then
TYPES[type] = self.new($1.intern, true) unless TYPES.has_key?(type)
return TYPES[type]
else
TYPES[type] = self.new(type) unless TYPES.has_key?(type)
return TYPES[type]
end
end
end