Skip to content

Commit

Permalink
[objcopy][NFC] Move NameOrPattern::create() into CommonConfig.h
Browse files Browse the repository at this point in the history
While moving objcopy into separate library(D88827), NameOrPattern::create()
was mistakenly placed into ObjcopyOptions.cpp. This patch moves
the NameOrPattern::create() into CommonConfig.h. Additionally it adds
test for using NameOrPattern.

Differential Revision: https://reviews.llvm.org/D121005
  • Loading branch information
avl-llvm committed Mar 9, 2022
1 parent e0cc28d commit 2dc4a80
Show file tree
Hide file tree
Showing 4 changed files with 320 additions and 273 deletions.
1 change: 1 addition & 0 deletions llvm/lib/ObjCopy/CMakeLists.txt
Expand Up @@ -37,6 +37,7 @@ source_group("Source Files\\XCOFF" REGULAR_EXPRESSION

add_llvm_component_library(LLVMObjCopy
Archive.cpp
CommonConfig.cpp
ObjCopy.cpp
ConfigManager.cpp
COFF/COFFObjcopy.cpp
Expand Down
50 changes: 50 additions & 0 deletions llvm/lib/ObjCopy/CommonConfig.cpp
@@ -0,0 +1,50 @@
//===- CommonConfig.cpp ---------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "llvm/ObjCopy/CommonConfig.h"

namespace llvm {
namespace objcopy {

Expected<NameOrPattern>
NameOrPattern::create(StringRef Pattern, MatchStyle MS,
function_ref<Error(Error)> ErrorCallback) {
switch (MS) {
case MatchStyle::Literal:
return NameOrPattern(Pattern);
case MatchStyle::Wildcard: {
SmallVector<char, 32> Data;
bool IsPositiveMatch = true;
if (Pattern[0] == '!') {
IsPositiveMatch = false;
Pattern = Pattern.drop_front();
}
Expected<GlobPattern> GlobOrErr = GlobPattern::create(Pattern);

// If we couldn't create it as a glob, report the error, but try again
// with a literal if the error reporting is non-fatal.
if (!GlobOrErr) {
if (Error E = ErrorCallback(GlobOrErr.takeError()))
return std::move(E);
return create(Pattern, MatchStyle::Literal, ErrorCallback);
}

return NameOrPattern(std::make_shared<GlobPattern>(*GlobOrErr),
IsPositiveMatch);
}
case MatchStyle::Regex: {
SmallVector<char, 32> Data;
return NameOrPattern(std::make_shared<Regex>(
("^" + Pattern.ltrim('^').rtrim('$') + "$").toStringRef(Data)));
}
}
llvm_unreachable("Unhandled llvm.objcopy.MatchStyle enum");
}

} // end namespace objcopy
} // end namespace llvm
35 changes: 0 additions & 35 deletions llvm/tools/llvm-objcopy/ObjcopyOptions.cpp
Expand Up @@ -367,41 +367,6 @@ static Error addSymbolsFromFile(NameMatcher &Symbols, BumpPtrAllocator &Alloc,
return Error::success();
}

Expected<NameOrPattern>
NameOrPattern::create(StringRef Pattern, MatchStyle MS,
function_ref<Error(Error)> ErrorCallback) {
switch (MS) {
case MatchStyle::Literal:
return NameOrPattern(Pattern);
case MatchStyle::Wildcard: {
SmallVector<char, 32> Data;
bool IsPositiveMatch = true;
if (Pattern[0] == '!') {
IsPositiveMatch = false;
Pattern = Pattern.drop_front();
}
Expected<GlobPattern> GlobOrErr = GlobPattern::create(Pattern);

// If we couldn't create it as a glob, report the error, but try again with
// a literal if the error reporting is non-fatal.
if (!GlobOrErr) {
if (Error E = ErrorCallback(GlobOrErr.takeError()))
return std::move(E);
return create(Pattern, MatchStyle::Literal, ErrorCallback);
}

return NameOrPattern(std::make_shared<GlobPattern>(*GlobOrErr),
IsPositiveMatch);
}
case MatchStyle::Regex: {
SmallVector<char, 32> Data;
return NameOrPattern(std::make_shared<Regex>(
("^" + Pattern.ltrim('^').rtrim('$') + "$").toStringRef(Data)));
}
}
llvm_unreachable("Unhandled llvm.objcopy.MatchStyle enum");
}

static Error addSymbolsToRenameFromFile(StringMap<StringRef> &SymbolsToRename,
BumpPtrAllocator &Alloc,
StringRef Filename) {
Expand Down

0 comments on commit 2dc4a80

Please sign in to comment.