forked from OSchip/llvm-project
StmtPrinter: Print floating point literals with the right suffix to disambiguate them from integers.
Based on a patch by Olaf Krzikalla, UDL fixes by me. llvm-svn: 164303
This commit is contained in:
parent
acbea3a2b4
commit
8a52676b85
|
@ -734,10 +734,30 @@ void StmtPrinter::VisitIntegerLiteral(IntegerLiteral *Node) {
|
|||
case BuiltinType::UInt128: OS << "Ui128"; break;
|
||||
}
|
||||
}
|
||||
void StmtPrinter::VisitFloatingLiteral(FloatingLiteral *Node) {
|
||||
|
||||
static void PrintFloatingLiteral(raw_ostream &OS, FloatingLiteral *Node,
|
||||
bool PrintSuffix) {
|
||||
SmallString<16> Str;
|
||||
Node->getValue().toString(Str);
|
||||
OS << Str;
|
||||
if (Str.find_first_not_of("-0123456789") == StringRef::npos)
|
||||
OS << '.'; // Trailing dot in order to separate from ints.
|
||||
|
||||
if (!PrintSuffix)
|
||||
return;
|
||||
|
||||
// Emit suffixes. Float literals are always a builtin float type.
|
||||
switch (Node->getType()->getAs<BuiltinType>()->getKind()) {
|
||||
default: llvm_unreachable("Unexpected type for float literal!");
|
||||
case BuiltinType::Half: break; // FIXME: suffix?
|
||||
case BuiltinType::Double: break; // no suffix.
|
||||
case BuiltinType::Float: OS << 'F'; break;
|
||||
case BuiltinType::LongDouble: OS << 'L'; break;
|
||||
}
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitFloatingLiteral(FloatingLiteral *Node) {
|
||||
PrintFloatingLiteral(OS, Node, /*PrintSuffix=*/true);
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitImaginaryLiteral(ImaginaryLiteral *Node) {
|
||||
|
@ -1217,7 +1237,12 @@ void StmtPrinter::VisitUserDefinedLiteral(UserDefinedLiteral *Node) {
|
|||
OS << Int->getValue().toString(10, /*isSigned*/false);
|
||||
break;
|
||||
}
|
||||
case UserDefinedLiteral::LOK_Floating:
|
||||
case UserDefinedLiteral::LOK_Floating: {
|
||||
// Print floating literal without suffix.
|
||||
FloatingLiteral *Float = cast<FloatingLiteral>(Node->getCookedLiteral());
|
||||
PrintFloatingLiteral(OS, Float, /*PrintSuffix=*/false);
|
||||
break;
|
||||
}
|
||||
case UserDefinedLiteral::LOK_String:
|
||||
case UserDefinedLiteral::LOK_Character:
|
||||
PrintExpr(Node->getCookedLiteral());
|
||||
|
|
|
@ -66,7 +66,7 @@ int main(int argc, const char *argv[]) {
|
|||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(id, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), (42U));
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(id, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), (42L));
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(id, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), (42LL));
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), (3.1415927));
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), (3.1415927F));
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(id, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), (3.1415926535));
|
||||
// CHECK: NSNumber *nsb = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)(b));
|
||||
// CHECK: NSString *duplicateString = ((NSString *(*)(id, SEL, const char *))(void *)objc_msgSend)(objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), (const char *)(strdup("Hello")));
|
||||
|
|
|
@ -61,7 +61,7 @@ int main(int argc, const char *argv[]) {
|
|||
// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(id, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), 42U);
|
||||
// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(id, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), 42L);
|
||||
// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(id, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), 42LL);
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), 3.1415927);
|
||||
// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), 3.1415927F);
|
||||
// CHECK: NSNumber *piDouble = ((NSNumber *(*)(id, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), 3.1415926535);
|
||||
// CHECK: NSNumber *yesNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), true);
|
||||
// CHECK: NSNumber *noNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), false);
|
||||
|
|
Loading…
Reference in New Issue