summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaFixItUtils.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-01-13 19:34:55 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-01-13 19:34:55 +0000
commitd7d5790cb66241dd97b68b56cbf3ee6f7c84860a (patch)
treeea2aab70fa796bc3a20626d490d2ba57176135dc /clang/lib/Sema/SemaFixItUtils.cpp
parent7066d28043499eca71460ba4da0cf46c4e1c7e94 (diff)
downloadbcm5719-llvm-d7d5790cb66241dd97b68b56cbf3ee6f7c84860a.tar.gz
bcm5719-llvm-d7d5790cb66241dd97b68b56cbf3ee6f7c84860a.zip
Refactor for clarity.
llvm-svn: 148135
Diffstat (limited to 'clang/lib/Sema/SemaFixItUtils.cpp')
-rw-r--r--clang/lib/Sema/SemaFixItUtils.cpp42
1 files changed, 24 insertions, 18 deletions
diff --git a/clang/lib/Sema/SemaFixItUtils.cpp b/clang/lib/Sema/SemaFixItUtils.cpp
index 0f7530b415c..3b76213e20a 100644
--- a/clang/lib/Sema/SemaFixItUtils.cpp
+++ b/clang/lib/Sema/SemaFixItUtils.cpp
@@ -159,26 +159,32 @@ bool ConversionFixItGenerator::tryToFixConversion(const Expr *FullExpr,
return false;
}
+static bool isMacroDefined(const Sema &S, StringRef Name) {
+ return S.PP.getMacroInfo(&S.getASTContext().Idents.get(Name));
+}
+
const char *Sema::getFixItZeroInitializerForType(QualType T) const {
- // Suggest 'nil' if it's defined and appropriate.
- if ((T->isObjCObjectPointerType() || T->isBlockPointerType()) &&
- PP.getMacroInfo(&getASTContext().Idents.get("nil")))
- return " = nil";
- if (T->isRealFloatingType())
- return " = 0.0";
- if (T->isBooleanType() && LangOpts.CPlusPlus)
- return " = false";
- if (T->isPointerType() || T->isMemberPointerType()) {
- if (LangOpts.CPlusPlus0x)
- return " = nullptr";
- // Check if 'NULL' is defined.
- else if (PP.getMacroInfo(&getASTContext().Idents.get("NULL")))
- return " = NULL";
- }
- if (T->isEnumeralType())
- return 0;
- if (T->isScalarType())
+ if (T->isScalarType()) {
+ // Suggest " = 0" for non-enumeration scalar types, unless we can find a
+ // better initializer.
+ if (T->isEnumeralType())
+ return 0;
+ if ((T->isObjCObjectPointerType() || T->isBlockPointerType()) &&
+ isMacroDefined(*this, "nil"))
+ return " = nil";
+ if (T->isRealFloatingType())
+ return " = 0.0";
+ if (T->isBooleanType() && LangOpts.CPlusPlus)
+ return " = false";
+ if (T->isPointerType() || T->isMemberPointerType()) {
+ if (LangOpts.CPlusPlus0x)
+ return " = nullptr";
+ else if (isMacroDefined(*this, "NULL"))
+ return " = NULL";
+ }
return " = 0";
+ }
+
const CXXRecordDecl *RD = T->getAsCXXRecordDecl();
if (!RD || !RD->hasDefinition())
return 0;
OpenPOWER on IntegriCloud