Skip to content

Commit 6df337c

Browse files
Merge pull request #1444 from DeeSee/refactor_clang_extra_flags
NFC: Refactor clang extra args addition
2 parents 4ea5aea + 5484364 commit 6df337c

File tree

2 files changed

+39
-51
lines changed

2 files changed

+39
-51
lines changed

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.cpp

+39-47
Original file line numberDiff line numberDiff line change
@@ -1448,39 +1448,66 @@ void ApplyWorkingDir(SmallString &clang_argument, StringRef cur_working_dir) {
14481448
llvm::sys::path::append(clang_argument, cur_working_dir, rel_path);
14491449
llvm::sys::path::remove_dots(clang_argument);
14501450
}
1451+
1452+
std::array<StringRef, 2> macro_flags = { "-D", "-U" };
1453+
1454+
bool IsMultiArgClangFlag(StringRef arg) {
1455+
for (auto &flag : macro_flags)
1456+
if (flag == arg)
1457+
return true;
1458+
return arg == "-working-directory";
1459+
}
1460+
1461+
bool IsMacroDefinition(StringRef arg) {
1462+
for (auto &flag : macro_flags)
1463+
if (arg.startswith(flag))
1464+
return true;
1465+
return false;
1466+
}
1467+
1468+
bool ShouldUnique(StringRef arg) {
1469+
return IsMacroDefinition(arg);
1470+
}
14511471
} // namespace
14521472

14531473
void SwiftASTContext::AddExtraClangArgs(std::vector<std::string> ExtraArgs) {
1474+
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
1475+
llvm::DenseSet<StringRef> unique_flags;
1476+
for (auto &arg : importer_options.ExtraArgs)
1477+
unique_flags.insert(arg);
1478+
14541479
llvm::SmallString<128> cur_working_dir;
14551480
llvm::SmallString<128> clang_argument;
14561481
for (const std::string &arg : ExtraArgs) {
1457-
// Join multi-arg -D and -U options for uniquing.
1482+
// Join multi-arg options for uniquing.
14581483
clang_argument += arg;
1459-
if (clang_argument == "-D" || clang_argument == "-U" ||
1460-
clang_argument == "-working-directory")
1484+
if (IsMultiArgClangFlag(clang_argument))
14611485
continue;
14621486

14631487
auto clear_arg = llvm::make_scope_exit([&] { clang_argument.clear(); });
14641488

1465-
// Enable uniquing for -D and -U options.
1466-
bool is_macro = (clang_argument.size() >= 2 && clang_argument[0] == '-' &&
1467-
(clang_argument[1] == 'D' || clang_argument[1] == 'U'));
1468-
bool unique = is_macro;
1469-
14701489
// Consume any -working-directory arguments.
14711490
StringRef cwd(clang_argument);
14721491
if (cwd.consume_front("-working-directory")) {
14731492
cur_working_dir = cwd;
14741493
continue;
14751494
}
14761495
// Drop -Werror; it would only cause trouble in the debugger.
1477-
if (clang_argument.startswith("-Werror")) {
1496+
if (clang_argument.startswith("-Werror"))
14781497
continue;
1479-
}
1498+
1499+
if (clang_argument.empty())
1500+
continue;
1501+
14801502
// Otherwise add the argument to the list.
1481-
if (!is_macro)
1503+
if (!IsMacroDefinition(clang_argument))
14821504
ApplyWorkingDir(clang_argument, cur_working_dir);
1483-
AddClangArgument(clang_argument.str(), unique);
1505+
1506+
auto clang_arg_str = clang_argument.str();
1507+
if (!ShouldUnique(clang_argument) || !unique_flags.count(clang_arg_str)) {
1508+
importer_options.ExtraArgs.push_back(clang_arg_str);
1509+
unique_flags.insert(clang_arg_str);
1510+
}
14841511
}
14851512
}
14861513

@@ -3387,41 +3414,6 @@ swift::DWARFImporterDelegate *SwiftASTContext::GetDWARFImporterDelegate() {
33873414
return m_dwarf_importer_delegate_up.get();
33883415
}
33893416

3390-
bool SwiftASTContext::AddClangArgument(std::string clang_arg, bool unique) {
3391-
if (clang_arg.empty())
3392-
return false;
3393-
3394-
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
3395-
// Avoid inserting the same option twice.
3396-
if (unique)
3397-
for (std::string &arg : importer_options.ExtraArgs)
3398-
if (arg == clang_arg)
3399-
return false;
3400-
3401-
importer_options.ExtraArgs.push_back(clang_arg);
3402-
return true;
3403-
}
3404-
3405-
bool SwiftASTContext::AddClangArgumentPair(StringRef clang_arg_1,
3406-
StringRef clang_arg_2) {
3407-
if (clang_arg_1.empty() || clang_arg_2.empty())
3408-
return false;
3409-
3410-
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
3411-
bool add_hmap = true;
3412-
for (ssize_t ai = 0, ae = importer_options.ExtraArgs.size() -
3413-
1; // -1 because we look at the next one too
3414-
ai < ae; ++ai) {
3415-
if (clang_arg_1.equals(importer_options.ExtraArgs[ai]) &&
3416-
clang_arg_2.equals(importer_options.ExtraArgs[ai + 1]))
3417-
return false;
3418-
}
3419-
3420-
importer_options.ExtraArgs.push_back(clang_arg_1);
3421-
importer_options.ExtraArgs.push_back(clang_arg_2);
3422-
return true;
3423-
}
3424-
34253417
const swift::SearchPathOptions *SwiftASTContext::GetSearchPathOptions() const {
34263418
VALID_OR_RETURN(0);
34273419

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.h

-4
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,6 @@ class SwiftASTContext : public TypeSystemSwift {
215215

216216
bool AddModuleSearchPath(llvm::StringRef path);
217217

218-
bool AddClangArgument(std::string arg, bool unique = true);
219-
220-
bool AddClangArgumentPair(llvm::StringRef arg1, llvm::StringRef arg2);
221-
222218
/// Add a list of Clang arguments to the ClangImporter options and
223219
/// apply the working directory to any relative paths.
224220
void AddExtraClangArgs(std::vector<std::string> ExtraArgs);

0 commit comments

Comments
 (0)