diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-09-20 13:55:04 +0100 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-09-20 13:55:29 +0100 |
commit | a735d6eae2847b039d12c75d4c794862dad59bc1 (patch) | |
tree | dd2a86661fe6a9ae1ac1537f88fa679a6990b1e6 /clang/lib/Tooling/JSONCompilationDatabase.cpp | |
parent | 2990518b0324eedca455b2bbf93b69f287dd6d52 (diff) | |
download | llvm-a735d6eae2847b039d12c75d4c794862dad59bc1.zip llvm-a735d6eae2847b039d12c75d4c794862dad59bc1.tar.gz llvm-a735d6eae2847b039d12c75d4c794862dad59bc1.tar.bz2 |
JSONCompilationDatabase.cpp - cleanup key parsing error checks. NFCI.
Merge the key + sequence/value checks with the key handling code.
Reduces the number of key string comparisons and avoids a number of clang static analyzer null dereference warnings.
Diffstat (limited to 'clang/lib/Tooling/JSONCompilationDatabase.cpp')
-rw-r--r-- | clang/lib/Tooling/JSONCompilationDatabase.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/clang/lib/Tooling/JSONCompilationDatabase.cpp b/clang/lib/Tooling/JSONCompilationDatabase.cpp index 4af361f..67a42d3 100644 --- a/clang/lib/Tooling/JSONCompilationDatabase.cpp +++ b/clang/lib/Tooling/JSONCompilationDatabase.cpp @@ -369,16 +369,11 @@ bool JSONCompilationDatabase::parse(std::string &ErrorMessage) { } auto *ValueString = dyn_cast<llvm::yaml::ScalarNode>(Value); auto *SequenceString = dyn_cast<llvm::yaml::SequenceNode>(Value); - if (KeyValue == "arguments" && !SequenceString) { - ErrorMessage = "Expected sequence as value."; - return false; - } else if (KeyValue != "arguments" && !ValueString) { - ErrorMessage = "Expected string as value."; - return false; - } - if (KeyValue == "directory") { - Directory = ValueString; - } else if (KeyValue == "arguments") { + if (KeyValue == "arguments") { + if (!SequenceString) { + ErrorMessage = "Expected sequence as value."; + return false; + } Command = std::vector<llvm::yaml::ScalarNode *>(); for (auto &Argument : *SequenceString) { auto *Scalar = dyn_cast<llvm::yaml::ScalarNode>(&Argument); @@ -388,17 +383,25 @@ bool JSONCompilationDatabase::parse(std::string &ErrorMessage) { } Command->push_back(Scalar); } - } else if (KeyValue == "command") { - if (!Command) - Command = std::vector<llvm::yaml::ScalarNode *>(1, ValueString); - } else if (KeyValue == "file") { - File = ValueString; - } else if (KeyValue == "output") { - Output = ValueString; } else { - ErrorMessage = ("Unknown key: \"" + - KeyString->getRawValue() + "\"").str(); - return false; + if (!ValueString) { + ErrorMessage = "Expected string as value."; + return false; + } + if (KeyValue == "directory") { + Directory = ValueString; + } else if (KeyValue == "command") { + if (!Command) + Command = std::vector<llvm::yaml::ScalarNode *>(1, ValueString); + } else if (KeyValue == "file") { + File = ValueString; + } else if (KeyValue == "output") { + Output = ValueString; + } else { + ErrorMessage = + ("Unknown key: \"" + KeyString->getRawValue() + "\"").str(); + return false; + } } } if (!File) { |