From 48d05e6d776f4b68f3db4016eb5680ac041c2b7d Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 2 Oct 2012 20:42:16 +0000 Subject: [PATCH] Refactor clients of AnalyzerOptions::getBooleanOption() to have an intermediate helper method to query and populate the Optional value. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165043 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../StaticAnalyzer/Core/AnalyzerOptions.h | 4 ++ lib/StaticAnalyzer/Core/AnalyzerOptions.cpp | 48 +++++++++---------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h index 091155ca60..4c11a675af 100644 --- a/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ b/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -194,6 +194,10 @@ private: /// If an option value is not provided, returns the given \p DefaultVal. bool getBooleanOption(StringRef Name, bool DefaultVal); + /// Variant that accepts a Optional value to cache the result. + bool getBooleanOption(llvm::Optional &V, StringRef Name, + bool DefaultVal); + /// Interprets an option's string value as an integer value. int getOptionAsInteger(llvm::StringRef Name, int DefaultVal); diff --git a/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp index 6fbd2e1c6d..2b957c419a 100644 --- a/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ b/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -64,44 +64,42 @@ bool AnalyzerOptions::getBooleanOption(StringRef Name, bool DefaultVal) { .Default(DefaultVal); } +bool AnalyzerOptions::getBooleanOption(llvm::Optional &V, + StringRef Name, + bool DefaultVal) { + if (!V.hasValue()) + V = getBooleanOption(Name, DefaultVal); + return V.getValue(); +} + bool AnalyzerOptions::includeTemporaryDtorsInCFG() { - if (!IncludeTemporaryDtorsInCFG.hasValue()) - const_cast &>(IncludeTemporaryDtorsInCFG) = - getBooleanOption("cfg-temporary-dtors", /*Default=*/false); - - return *IncludeTemporaryDtorsInCFG; + return getBooleanOption(IncludeTemporaryDtorsInCFG, + "cfg-temporary-dtors", + /* Default = */ false); } bool AnalyzerOptions::mayInlineCXXStandardLibrary() { - if (!InlineCXXStandardLibrary.hasValue()) - const_cast &>(InlineCXXStandardLibrary) = - getBooleanOption("c++-stdlib-inlining", /*Default=*/true); - - return *InlineCXXStandardLibrary; + return getBooleanOption(InlineCXXStandardLibrary, + "c++-stdlib-inlining", + /*Default=*/true); } bool AnalyzerOptions::mayInlineTemplateFunctions() { - if (!InlineTemplateFunctions.hasValue()) - const_cast &>(InlineTemplateFunctions) = - getBooleanOption("c++-template-inlining", /*Default=*/true); - - return *InlineTemplateFunctions; + return getBooleanOption(InlineTemplateFunctions, + "c++-template-inlining", + /*Default=*/true); } bool AnalyzerOptions::mayInlineObjCMethod() { - if (!ObjCInliningMode.hasValue()) - const_cast &>(ObjCInliningMode) = - getBooleanOption("objc-inlining", /*Default=*/true); - - return *ObjCInliningMode; + return getBooleanOption(ObjCInliningMode, + "objc-inlining", + /* Default = */ true); } bool AnalyzerOptions::shouldPruneNullReturnPaths() { - if (!PruneNullReturnPaths.hasValue()) - const_cast &>(PruneNullReturnPaths) = - getBooleanOption("suppress-null-return-paths", /*Default=*/true); - - return *PruneNullReturnPaths; + return getBooleanOption(PruneNullReturnPaths, + "suppress-null-return-paths", + /* Default = */ true); } int AnalyzerOptions::getOptionAsInteger(StringRef Name, int DefaultVal) { -- 2.40.0