class IDL::Delegator

def parse_literal(_typestring, _value)

def parse_literal(_typestring, _value)
  k = Expression::Value
  case _typestring
  when :boolean
    k.new(Type::Boolean.new, _value)
  when :integer
    _type = [
      Type::Octet,
      Type::TinyShort,
      Type::Short,
      Type::Long,
      Type::LongLong,
      Type::UTinyShort,
      Type::ULongLong
    ].detect { |t| t::Range === _value }
    if _type.nil?
      raise "it's not a valid integer: #{v.to_s}"
    end
    k.new(_type.new, _value)
  when :string
    k.new(Type::String.new, _value)
  when :wstring
    k.new(Type::WString.new, _value)
  when :char
    k.new(Type::Char.new, _value)
  when :wchar
    k.new(Type::WChar.new, _value)
  when :fixed
    k.new(Type::Fixed.new, _value)
  when :float
    k.new(Type::Float.new, _value)
  else
    raise ParseError, "unknown literal type: #{type}"
  end
end