[llvm-commits] [llvm] r91620 - in /llvm/trunk: include/llvm/System/Path.h lib/CompilerDriver/CompilationGraph.cpp lib/System/Path.cpp lib/System/Unix/Path.inc lib/System/Win32/Path.inc

Jeffrey Yasskin jyasskin at google.com
Thu Dec 17 13:02:40 PST 2009


Author: jyasskin
Date: Thu Dec 17 15:02:39 2009
New Revision: 91620

URL: http://llvm.org/viewvc/llvm-project?rev=91620&view=rev
Log:
Make Path use StringRef instead of std::string where possible.

Modified:
    llvm/trunk/include/llvm/System/Path.h
    llvm/trunk/lib/CompilerDriver/CompilationGraph.cpp
    llvm/trunk/lib/System/Path.cpp
    llvm/trunk/lib/System/Unix/Path.inc
    llvm/trunk/lib/System/Win32/Path.inc

Modified: llvm/trunk/include/llvm/System/Path.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Path.h?rev=91620&r1=91619&r2=91620&view=diff

==============================================================================
--- llvm/trunk/include/llvm/System/Path.h (original)
+++ llvm/trunk/include/llvm/System/Path.h Thu Dec 17 15:02:39 2009
@@ -14,6 +14,7 @@
 #ifndef LLVM_SYSTEM_PATH_H
 #define LLVM_SYSTEM_PATH_H
 
+#include "llvm/ADT/StringRef.h"
 #include "llvm/System/TimeValue.h"
 #include <set>
 #include <string>
@@ -159,7 +160,7 @@
       /// between processes.
       /// @returns The dynamic link library suffix for the current platform.
       /// @brief Return the dynamic link library suffix.
-      static std::string GetDLLSuffix();
+      static StringRef GetDLLSuffix();
 
       /// GetMainExecutable - Return the path to the main executable, given the
       /// value of argv[0] from program startup and the address of main itself.
@@ -174,12 +175,12 @@
       Path() : path() {}
       Path(const Path &that) : path(that.path) {}
 
-      /// This constructor will accept a std::string as a path. No checking is
-      /// done on this path to determine if it is valid. To determine validity
-      /// of the path, use the isValid method.
+      /// This constructor will accept a char* or std::string as a path. No
+      /// checking is done on this path to determine if it is valid. To
+      /// determine validity of the path, use the isValid method.
       /// @param p The path to assign.
       /// @brief Construct a Path from a string.
-      explicit Path(const std::string& p);
+      explicit Path(StringRef p);
 
       /// This constructor will accept a character range as a path.  No checking
       /// is done on this path to determine if it is valid.  To determine
@@ -202,10 +203,10 @@
       }
 
       /// Makes a copy of \p that to \p this.
-      /// @param \p that A std::string denoting the path
+      /// @param \p that A StringRef denoting the path
       /// @returns \p this
       /// @brief Assignment Operator
-      Path &operator=(const std::string &that);
+      Path &operator=(StringRef that);
 
       /// Compares \p this Path with \p that Path for equality.
       /// @returns true if \p this and \p that refer to the same thing.
@@ -251,28 +252,28 @@
       /// component is the file or directory name occuring after the last
       /// directory separator. If no directory separator is present, the entire
       /// path name is returned (i.e. same as toString).
-      /// @returns std::string containing the last component of the path name.
+      /// @returns StringRef containing the last component of the path name.
       /// @brief Returns the last component of the path name.
-      std::string getLast() const;
+      StringRef getLast() const;
 
       /// This function strips off the path and suffix of the file or directory
       /// name and returns just the basename. For example /a/foo.bar would cause
       /// this function to return "foo".
-      /// @returns std::string containing the basename of the path
+      /// @returns StringRef containing the basename of the path
       /// @brief Get the base name of the path
-      std::string getBasename() const;
+      StringRef getBasename() const;
 
       /// This function strips off the suffix of the path beginning with the
       /// path separator ('/' on Unix, '\' on Windows) and returns the result.
-      std::string getDirname() const;
+      StringRef getDirname() const;
 
       /// This function strips off the path and basename(up to and
       /// including the last dot) of the file or directory name and
       /// returns just the suffix. For example /a/foo.bar would cause
       /// this function to return "bar".
-      /// @returns std::string containing the suffix of the path
+      /// @returns StringRef containing the suffix of the path
       /// @brief Get the suffix of the path
-      std::string getSuffix() const;
+      StringRef getSuffix() const;
 
       /// Obtain a 'C' string for the path name.
       /// @returns a 'C' string containing the path name.
@@ -315,7 +316,7 @@
       /// cases (file not found, file not accessible, etc.) it returns false.
       /// @returns true if the magic number of the file matches \p magic.
       /// @brief Determine if file has a specific magic number
-      bool hasMagicNumber(const std::string& magic) const;
+      bool hasMagicNumber(StringRef magic) const;
 
       /// This function retrieves the first \p len bytes of the file associated
       /// with \p this. These bytes are returned as the "magic number" in the
@@ -422,8 +423,8 @@
       /// Path object takes on the path value of \p unverified_path
       /// @returns true if the path was set, false otherwise.
       /// @param unverified_path The path to be set in Path object.
-      /// @brief Set a full path from a std::string
-      bool set(const std::string& unverified_path);
+      /// @brief Set a full path from a StringRef
+      bool set(StringRef unverified_path);
 
       /// One path component is removed from the Path. If only one component is
       /// present in the path, the Path object becomes empty. If the Path object
@@ -437,7 +438,7 @@
       /// needed.
       /// @returns false if the path component could not be added.
       /// @brief Appends one path component to the Path.
-      bool appendComponent( const std::string& component );
+      bool appendComponent(StringRef component);
 
       /// A period and the \p suffix are appended to the end of the pathname.
       /// The precondition for this function is that the Path reference a file
@@ -446,7 +447,7 @@
       /// become invalid for the host operating system, false is returned.
       /// @returns false if the suffix could not be added, true if it was.
       /// @brief Adds a period and the \p suffix to the end of the pathname.
-      bool appendSuffix(const std::string& suffix);
+      bool appendSuffix(StringRef suffix);
 
       /// The suffix of the filename is erased. The suffix begins with and
       /// includes the last . character in the filename after the last directory
@@ -620,12 +621,12 @@
       PathWithStatus(const Path &other)
         : Path(other), status(), fsIsValid(false) {}
 
-      /// This constructor will accept a std::string as a path. No checking is
-      /// done on this path to determine if it is valid. To determine validity
-      /// of the path, use the isValid method.
+      /// This constructor will accept a char* or std::string as a path. No
+      /// checking is done on this path to determine if it is valid. To
+      /// determine validity of the path, use the isValid method.
       /// @brief Construct a Path from a string.
       explicit PathWithStatus(
-        const std::string& p ///< The path to assign.
+        StringRef p ///< The path to assign.
       ) : Path(p), status(), fsIsValid(false) {}
 
       /// This constructor will accept a character range as a path.  No checking

Modified: llvm/trunk/lib/CompilerDriver/CompilationGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/CompilationGraph.cpp?rev=91620&r1=91619&r2=91620&view=diff

==============================================================================
--- llvm/trunk/lib/CompilerDriver/CompilationGraph.cpp (original)
+++ llvm/trunk/lib/CompilerDriver/CompilationGraph.cpp Thu Dec 17 15:02:39 2009
@@ -35,7 +35,7 @@
   const std::string& LanguageMap::GetLanguage(const sys::Path& File) const {
     LanguageMap::const_iterator Lang = this->find(File.getSuffix());
     if (Lang == this->end())
-      throw std::runtime_error("Unknown suffix: " + File.getSuffix());
+      throw std::runtime_error(("Unknown suffix: " + File.getSuffix()).str());
     return Lang->second;
   }
 }

Modified: llvm/trunk/lib/System/Path.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Path.cpp?rev=91620&r1=91619&r2=91620&view=diff

==============================================================================
--- llvm/trunk/lib/System/Path.cpp (original)
+++ llvm/trunk/lib/System/Path.cpp Thu Dec 17 15:02:39 2009
@@ -176,7 +176,7 @@
   return sys::Path();
 }
 
-std::string Path::GetDLLSuffix() {
+StringRef Path::GetDLLSuffix() {
   return LTDL_SHLIB_EXT;
 }
 
@@ -191,7 +191,7 @@
   return FT == Bitcode_FileType;
 }
 
-bool Path::hasMagicNumber(const std::string &Magic) const {
+bool Path::hasMagicNumber(StringRef Magic) const {
   std::string actualMagic;
   if (getMagicNumber(actualMagic, static_cast<unsigned>(Magic.size())))
     return Magic == actualMagic;
@@ -217,8 +217,9 @@
         Paths.push_back(tmpPath);
 }
 
-static std::string getDirnameCharSep(const std::string& path, char Sep) {
-  
+static StringRef getDirnameCharSep(StringRef path, const char *Sep) {
+  assert(Sep[0] != '\0' && Sep[1] == '\0' &&
+         "Sep must be a 1-character string literal.");
   if (path.empty())
     return ".";
   
@@ -227,31 +228,31 @@
   
   signed pos = static_cast<signed>(path.size()) - 1;
   
-  while (pos >= 0 && path[pos] == Sep)
+  while (pos >= 0 && path[pos] == Sep[0])
     --pos;
   
   if (pos < 0)
-    return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+    return path[0] == Sep[0] ? Sep : ".";
   
   // Any slashes left?
   signed i = 0;
   
-  while (i < pos && path[i] != Sep)
+  while (i < pos && path[i] != Sep[0])
     ++i;
   
   if (i == pos) // No slashes?  Return "."
     return ".";
   
   // There is at least one slash left.  Remove all trailing non-slashes.  
-  while (pos >= 0 && path[pos] != Sep)
+  while (pos >= 0 && path[pos] != Sep[0])
     --pos;
   
   // Remove any trailing slashes.
-  while (pos >= 0 && path[pos] == Sep)
+  while (pos >= 0 && path[pos] == Sep[0])
     --pos;
   
   if (pos < 0)
-    return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+    return path[0] == Sep[0] ? Sep : ".";
   
   return path.substr(0, pos+1);
 }

Modified: llvm/trunk/lib/System/Unix/Path.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Path.inc?rev=91620&r1=91619&r2=91620&view=diff

==============================================================================
--- llvm/trunk/lib/System/Unix/Path.inc (original)
+++ llvm/trunk/lib/System/Unix/Path.inc Thu Dec 17 15:02:39 2009
@@ -78,15 +78,15 @@
 
 const char sys::PathSeparator = ':';
 
-Path::Path(const std::string& p)
+Path::Path(StringRef p)
   : path(p) {}
 
 Path::Path(const char *StrStart, unsigned StrLen)
   : path(StrStart, StrLen) {}
 
 Path&
-Path::operator=(const std::string &that) {
-  path = that;
+Path::operator=(StringRef that) {
+  path.assign(that.data(), that.size());
   return *this;
 }
 
@@ -377,11 +377,11 @@
 }
 
 
-std::string Path::getDirname() const {
-  return getDirnameCharSep(path, '/');
+StringRef Path::getDirname() const {
+  return getDirnameCharSep(path, "/");
 }
 
-std::string
+StringRef
 Path::getBasename() const {
   // Find the last slash
   std::string::size_type slash = path.rfind('/');
@@ -392,12 +392,12 @@
 
   std::string::size_type dot = path.rfind('.');
   if (dot == std::string::npos || dot < slash)
-    return path.substr(slash);
+    return StringRef(path).substr(slash);
   else
-    return path.substr(slash, dot - slash);
+    return StringRef(path).substr(slash, dot - slash);
 }
 
-std::string
+StringRef
 Path::getSuffix() const {
   // Find the last slash
   std::string::size_type slash = path.rfind('/');
@@ -408,9 +408,9 @@
 
   std::string::size_type dot = path.rfind('.');
   if (dot == std::string::npos || dot < slash)
-    return std::string();
+    return StringRef("");
   else
-    return path.substr(dot + 1);
+    return StringRef(path).substr(dot + 1);
 }
 
 bool Path::getMagicNumber(std::string &Magic, unsigned len) const {
@@ -478,7 +478,7 @@
   return true;
 }
 
-std::string
+StringRef
 Path::getLast() const {
   // Find the last slash
   size_t pos = path.rfind('/');
@@ -492,12 +492,12 @@
     // Find the second to last slash
     size_t pos2 = path.rfind('/', pos-1);
     if (pos2 == std::string::npos)
-      return path.substr(0,pos);
+      return StringRef(path).substr(0,pos);
     else
-      return path.substr(pos2+1,pos-pos2-1);
+      return StringRef(path).substr(pos2+1,pos-pos2-1);
   }
   // Return everything after the last slash
-  return path.substr(pos+1);
+  return StringRef(path).substr(pos+1);
 }
 
 const FileStatus *
@@ -589,7 +589,7 @@
 }
 
 bool
-Path::set(const std::string& a_path) {
+Path::set(StringRef a_path) {
   if (a_path.empty())
     return false;
   std::string save(path);
@@ -602,7 +602,7 @@
 }
 
 bool
-Path::appendComponent(const std::string& name) {
+Path::appendComponent(StringRef name) {
   if (name.empty())
     return false;
   std::string save(path);
@@ -634,7 +634,7 @@
 }
 
 bool
-Path::appendSuffix(const std::string& suffix) {
+Path::appendSuffix(StringRef suffix) {
   std::string save(path);
   path.append(".");
   path.append(suffix);

Modified: llvm/trunk/lib/System/Win32/Path.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Path.inc?rev=91620&r1=91619&r2=91620&view=diff

==============================================================================
--- llvm/trunk/lib/System/Win32/Path.inc (original)
+++ llvm/trunk/lib/System/Win32/Path.inc Thu Dec 17 15:02:39 2009
@@ -58,8 +58,8 @@
 }
 
 Path&
-Path::operator=(const std::string &that) {
-  path = that;
+Path::operator=(StringRef that) {
+  path.assign(that.data(), that.size());
   FlipBackSlashes(path);
   return *this;
 }
@@ -287,11 +287,11 @@
   return len > 0 && path[len-1] == '/';
 }
 
-std::string Path::getDirname() const {
-  return getDirnameCharSep(path, '/');
+StringRef Path::getDirname() const {
+  return getDirnameCharSep(path, "/");
 }
 
-std::string
+StringRef
 Path::getBasename() const {
   // Find the last slash
   size_t slash = path.rfind('/');
@@ -302,12 +302,12 @@
 
   size_t dot = path.rfind('.');
   if (dot == std::string::npos || dot < slash)
-    return path.substr(slash);
+    return StringRef(path).substr(slash);
   else
-    return path.substr(slash, dot - slash);
+    return StringRef(path).substr(slash, dot - slash);
 }
 
-std::string
+StringRef
 Path::getSuffix() const {
   // Find the last slash
   size_t slash = path.rfind('/');
@@ -318,9 +318,9 @@
 
   size_t dot = path.rfind('.');
   if (dot == std::string::npos || dot < slash)
-    return std::string();
+    return StringRef("");
   else
-    return path.substr(dot + 1);
+    return StringRef(path).substr(dot + 1);
 }
 
 bool
@@ -364,7 +364,7 @@
   return true;
 }
 
-std::string
+StringRef
 Path::getLast() const {
   // Find the last slash
   size_t pos = path.rfind('/');
@@ -378,7 +378,7 @@
     return path;
 
   // Return everything after the last slash
-  return path.substr(pos+1);
+  return StringRef(path).substr(pos+1);
 }
 
 const FileStatus *
@@ -490,7 +490,7 @@
 }
 
 bool
-Path::set(const std::string& a_path) {
+Path::set(StringRef a_path) {
   if (a_path.empty())
     return false;
   std::string save(path);
@@ -504,7 +504,7 @@
 }
 
 bool
-Path::appendComponent(const std::string& name) {
+Path::appendComponent(StringRef name) {
   if (name.empty())
     return false;
   std::string save(path);
@@ -536,7 +536,7 @@
 }
 
 bool
-Path::appendSuffix(const std::string& suffix) {
+Path::appendSuffix(StringRef suffix) {
   std::string save(path);
   path.append(".");
   path.append(suffix);





More information about the llvm-commits mailing list