There is only one saver of strings.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 13 Aug 2015 01:07:02 +0000 (01:07 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 13 Aug 2015 01:07:02 +0000 (01:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244854 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/CommandLine.h
include/llvm/Support/StringSaver.h
lib/LibDriver/LibDriver.cpp
lib/Support/CommandLine.cpp
lib/Support/StringSaver.cpp
unittests/Support/CommandLineTest.cpp

index 379d06a65741beeece3898c5c8db90cd8c19b06c..467dc128aea75db34b69fbd5964d0a2d6ba38863 100644 (file)
@@ -33,7 +33,6 @@
 
 namespace llvm {
 
-class BumpPtrStringSaver;
 class StringSaver;
 
 /// cl Namespace - This namespace contains all of the command line option
index f3853ee91570965bf6a0754806ecaf8692a967ca..38fb7bb38339f9133bd5b5d3fe97df772e89fec9 100644 (file)
@@ -18,25 +18,15 @@ namespace llvm {
 
 /// \brief Saves strings in the inheritor's stable storage and returns a stable
 /// raw character pointer.
-class StringSaver {
-protected:
-  ~StringSaver() {}
-  virtual const char *saveImpl(StringRef S);
+class StringSaver final {
+  BumpPtrAllocator &Alloc;
 
 public:
   StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {}
   const char *save(const char *S) { return save(StringRef(S)); }
-  const char *save(StringRef S) { return saveImpl(S); }
+  const char *save(StringRef S);
   const char *save(const Twine &S) { return save(StringRef(S.str())); }
   const char *save(std::string &S) { return save(StringRef(S)); }
-
-private:
-  BumpPtrAllocator &Alloc;
-};
-
-class BumpPtrStringSaver final : public StringSaver {
-public:
-  BumpPtrStringSaver(BumpPtrAllocator &Alloc) : StringSaver(Alloc) {}
 };
 }
 #endif
index ff9c31cd9758c6d2a90994eb2264b554c1c278d3..cc5c543888c3039e1db6e195413d0f3626ffd0de 100644 (file)
@@ -102,7 +102,7 @@ static Optional<std::string> findInputFile(StringRef File,
 int llvm::libDriverMain(llvm::ArrayRef<const char*> ArgsArr) {
   SmallVector<const char *, 20> NewArgs(ArgsArr.begin(), ArgsArr.end());
   BumpPtrAllocator Alloc;
-  BumpPtrStringSaver Saver(Alloc);
+  StringSaver Saver(Alloc);
   cl::ExpandResponseFiles(Saver, cl::TokenizeWindowsCommandLine, NewArgs);
   ArgsArr = NewArgs;
 
index 17fba95ebb2b4e9e8ee852b73a9ccf09d2e523b8..11162ce0ec47361a1c89aabb883f64dc6f1fe4fe 100644 (file)
@@ -799,7 +799,7 @@ void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
   // telling us.
   SmallVector<const char *, 20> newArgv;
   BumpPtrAllocator A;
-  BumpPtrStringSaver Saver(A);
+  StringSaver Saver(A);
   newArgv.push_back(Saver.save(progName));
 
   // Parse the value of the environment variable into a "command line"
@@ -822,7 +822,7 @@ void CommandLineParser::ParseCommandLineOptions(int argc,
   // Expand response files.
   SmallVector<const char *, 20> newArgv(argv, argv + argc);
   BumpPtrAllocator A;
-  BumpPtrStringSaver Saver(A);
+  StringSaver Saver(A);
   ExpandResponseFiles(Saver, TokenizeGNUCommandLine, newArgv);
   argv = &newArgv[0];
   argc = static_cast<int>(newArgv.size());
index d6b84e53dccd89cd7db35aab76871963c7fa4fbc..bbc1fd276266c3d3a47104a28cc33b1ce5e6f608 100644 (file)
@@ -11,7 +11,7 @@
 
 using namespace llvm;
 
-const char *StringSaver::saveImpl(StringRef S) {
+const char *StringSaver::save(StringRef S) {
   char *P = Alloc.Allocate<char>(S.size() + 1);
   memcpy(P, S.data(), S.size());
   P[S.size()] = '\0';
index e0fbf5b09e5787f030beedc8957e586db6cbdede..2ae30c21ec4e904545a7ca5f632b3d7572c9503f 100644 (file)
@@ -155,7 +155,7 @@ void testCommandLineTokenizer(ParserFunction *parse, const char *Input,
                               const char *const Output[], size_t OutputSize) {
   SmallVector<const char *, 0> Actual;
   BumpPtrAllocator A;
-  BumpPtrStringSaver Saver(A);
+  StringSaver Saver(A);
   parse(Input, Saver, Actual, /*MarkEOLs=*/false);
   EXPECT_EQ(OutputSize, Actual.size());
   for (unsigned I = 0, E = Actual.size(); I != E; ++I) {