add sema support for complex integer types

llvm-svn: 41232
This commit is contained in:
Chris Lattner 2007-08-21 17:02:28 +00:00
parent 96d7256d62
commit 755a5a9933
1 changed files with 21 additions and 12 deletions

View File

@ -38,36 +38,45 @@ static QualType ConvertDeclSpecToType(const DeclSpec &DS, ASTContext &Ctx) {
return Ctx.UnsignedCharTy;
}
case DeclSpec::TST_unspecified: // Unspecific typespec defaults to int.
case DeclSpec::TST_int:
case DeclSpec::TST_int: {
QualType Result;
if (DS.getTypeSpecSign() != DeclSpec::TSS_unsigned) {
switch (DS.getTypeSpecWidth()) {
case DeclSpec::TSW_unspecified: return Ctx.IntTy;
case DeclSpec::TSW_short: return Ctx.ShortTy;
case DeclSpec::TSW_long: return Ctx.LongTy;
case DeclSpec::TSW_longlong: return Ctx.LongLongTy;
case DeclSpec::TSW_unspecified: Result = Ctx.IntTy; break;
case DeclSpec::TSW_short: Result = Ctx.ShortTy; break;
case DeclSpec::TSW_long: Result = Ctx.LongTy; break;
case DeclSpec::TSW_longlong: Result = Ctx.LongLongTy; break;
}
} else {
switch (DS.getTypeSpecWidth()) {
case DeclSpec::TSW_unspecified: return Ctx.UnsignedIntTy;
case DeclSpec::TSW_short: return Ctx.UnsignedShortTy;
case DeclSpec::TSW_long: return Ctx.UnsignedLongTy;
case DeclSpec::TSW_longlong: return Ctx.UnsignedLongLongTy;
case DeclSpec::TSW_unspecified: Result = Ctx.UnsignedIntTy; break;
case DeclSpec::TSW_short: Result = Ctx.UnsignedShortTy; break;
case DeclSpec::TSW_long: Result = Ctx.UnsignedLongTy; break;
case DeclSpec::TSW_longlong: Result = Ctx.UnsignedLongLongTy; break;
}
}
// Handle complex integer types.
if (DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified)
return Result;
assert(DS.getTypeSpecComplex() == DeclSpec::TSC_complex &&
"FIXME: imaginary types not supported yet!");
return Ctx.getComplexType(Result);
}
case DeclSpec::TST_float:
if (DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified)
return Ctx.FloatTy;
assert(DS.getTypeSpecComplex() == DeclSpec::TSC_complex &&
"FIXME: imaginary types not supported yet!");
return Ctx.FloatComplexTy;
return Ctx.getComplexType(Ctx.FloatTy);
case DeclSpec::TST_double: {
bool isLong = DS.getTypeSpecWidth() == DeclSpec::TSW_long;
QualType T = isLong ? Ctx.LongDoubleTy : Ctx.DoubleTy;
if (DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified)
return isLong ? Ctx.LongDoubleTy : Ctx.DoubleTy;
return T;
assert(DS.getTypeSpecComplex() == DeclSpec::TSC_complex &&
"FIXME: imaginary types not supported yet!");
return isLong ? Ctx.LongDoubleComplexTy : Ctx.DoubleComplexTy;
return Ctx.getComplexType(T);
}
case DeclSpec::TST_bool: // _Bool or bool
return Ctx.BoolTy;