[llvm-commits] [llvm] r121149 - in /llvm/trunk: include/llvm/Support/PathV2.h lib/Support/PathV2.cpp lib/Support/Unix/PathV2.inc lib/Support/Windows/PathV2.inc unittests/Support/Path.cpp

Michael J. Spencer bigcheesegs at gmail.com
Tue Dec 7 09:04:04 PST 2010


Author: mspencer
Date: Tue Dec  7 11:04:04 2010
New Revision: 121149

URL: http://llvm.org/viewvc/llvm-project?rev=121149&view=rev
Log:
Support/PathV2: Change most functions in the path namespace to return their work
via their return value instead of an out parameter.

Modified:
    llvm/trunk/include/llvm/Support/PathV2.h
    llvm/trunk/lib/Support/PathV2.cpp
    llvm/trunk/lib/Support/Unix/PathV2.inc
    llvm/trunk/lib/Support/Windows/PathV2.inc
    llvm/trunk/unittests/Support/Path.cpp

Modified: llvm/trunk/include/llvm/Support/PathV2.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=121149&r1=121148&r2=121149&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/PathV2.h (original)
+++ llvm/trunk/include/llvm/Support/PathV2.h Tue Dec  7 11:04:04 2010
@@ -11,8 +11,6 @@
 // TR2/boost filesystem (v3), but modified to remove exception handling and the
 // path class.
 //
-// All functions return void and their actual work via the last out argument.
-//
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_SUPPORT_PATHV2_H
@@ -126,8 +124,7 @@
 /// @param extension The extension to be added. It may be empty. It may also
 ///                  optionally start with a '.', if it does not, one will be
 ///                  prepended.
-void replace_extension(SmallVectorImpl<char> &path,
-                             const Twine &extension);
+void replace_extension(SmallVectorImpl<char> &path, const Twine &extension);
 
 /// @brief Append to path.
 ///
@@ -138,9 +135,9 @@
 /// @param path Set to \a path + \a component.
 /// @param component The component to be appended to \a path.
 void append(SmallVectorImpl<char> &path, const Twine &a,
-                                               const Twine &b = "",
-                                               const Twine &c = "",
-                                               const Twine &d = "");
+                                         const Twine &b = "",
+                                         const Twine &c = "",
+                                         const Twine &d = "");
 
 /// @brief Append to path.
 ///
@@ -152,7 +149,7 @@
 /// @param begin Start of components to append.
 /// @param end One past the end of components to append.
 void append(SmallVectorImpl<char> &path,
-                  const_iterator begin, const_iterator end);
+            const_iterator begin, const_iterator end);
 
 /// @}
 /// @name Transforms (or some other better name)
@@ -177,8 +174,8 @@
 /// /hello      => <empty>
 ///
 /// @param path Input path.
-/// @param result Set to the root name of \a path if it has one, otherwise "".
-void root_name(const StringRef &path, StringRef &result);
+/// @result The root name of \a path if it has one, otherwise "".
+const StringRef root_name(const StringRef &path);
 
 /// @brief Get root directory.
 ///
@@ -187,17 +184,17 @@
 /// d/file.txt => <empty>
 ///
 /// @param path Input path.
-/// @param result Set to the root directory of \a path if it has one, otherwise
+/// @result The root directory of \a path if it has one, otherwise
 ///               "".
-void root_directory(const StringRef &path, StringRef &result);
+const StringRef root_directory(const StringRef &path);
 
 /// @brief Get root path.
 ///
 /// Equivalent to root_name + root_directory.
 ///
 /// @param path Input path.
-/// @param result Set to the root path of \a path if it has one, otherwise "".
-void root_path(const StringRef &path, StringRef &result);
+/// @result The root path of \a path if it has one, otherwise "".
+const StringRef root_path(const StringRef &path);
 
 /// @brief Get relative path.
 ///
@@ -206,9 +203,8 @@
 /// /foo/bar       => foo/bar
 ///
 /// @param path Input path.
-/// @param result Set to the path starting after root_path if one exists,
-///               otherwise "".
-void relative_path(const StringRef &path, StringRef &result);
+/// @result The path starting after root_path if one exists, otherwise "".
+const StringRef relative_path(const StringRef &path);
 
 /// @brief Get parent path.
 ///
@@ -217,8 +213,8 @@
 /// foo/../bar => foo/..
 ///
 /// @param path Input path.
-/// @param result Set to the parent path of \a path if one exists, otherwise "".
-void parent_path(const StringRef &path, StringRef &result);
+/// @result The parent path of \a path if one exists, otherwise "".
+const StringRef parent_path(const StringRef &path);
 
 /// @brief Get filename.
 ///
@@ -228,9 +224,9 @@
 /// /          => /
 ///
 /// @param path Input path.
-/// @param result Set to the filename part of \a path. This is defined as the
-///               last component of \a path.
-void filename(const StringRef &path, StringRef &result);
+/// @result The filename part of \a path. This is defined as the last component
+///         of \a path.
+const StringRef filename(const StringRef &path);
 
 /// @brief Get stem.
 ///
@@ -245,8 +241,8 @@
 /// /foo/..      => ..
 ///
 /// @param path Input path.
-/// @param result Set to the stem of \a path.
-void stem(const StringRef &path, StringRef &result);
+/// @result The stem of \a path.
+const StringRef stem(const StringRef &path);
 
 /// @brief Get extension.
 ///
@@ -259,84 +255,84 @@
 /// /foo/.txt    => .txt
 ///
 /// @param path Input path.
-/// @param result Set to the extension of \a path.
-void extension(const StringRef &path, StringRef &result);
+/// @result The extension of \a path.
+const StringRef extension(const StringRef &path);
 
 /// @brief Has root name?
 ///
 /// root_name != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a root name, false otherwise.
-void has_root_name(const Twine &path, bool &result);
+/// @result True if the path has a root name, false otherwise.
+const bool has_root_name(const Twine &path);
 
 /// @brief Has root directory?
 ///
 /// root_directory != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a root directory, false otherwise.
-void has_root_directory(const Twine &path, bool &result);
+/// @result True if the path has a root directory, false otherwise.
+const bool has_root_directory(const Twine &path);
 
 /// @brief Has root path?
 ///
 /// root_path != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a root path, false otherwise.
-void has_root_path(const Twine &path, bool &result);
+/// @result True if the path has a root path, false otherwise.
+const bool has_root_path(const Twine &path);
 
 /// @brief Has relative path?
 ///
 /// relative_path != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a relative path, false otherwise.
-void has_relative_path(const Twine &path, bool &result);
+/// @result True if the path has a relative path, false otherwise.
+const bool has_relative_path(const Twine &path);
 
 /// @brief Has parent path?
 ///
 /// parent_path != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a parent path, false otherwise.
-void has_parent_path(const Twine &path, bool &result);
+/// @result True if the path has a parent path, false otherwise.
+const bool has_parent_path(const Twine &path);
 
 /// @brief Has filename?
 ///
 /// filename != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a filename, false otherwise.
-void has_filename(const Twine &path, bool &result);
+/// @result True if the path has a filename, false otherwise.
+const bool has_filename(const Twine &path);
 
 /// @brief Has stem?
 ///
 /// stem != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a stem, false otherwise.
-void has_stem(const Twine &path, bool &result);
+/// @result True if the path has a stem, false otherwise.
+const bool has_stem(const Twine &path);
 
 /// @brief Has extension?
 ///
 /// extension != ""
 ///
 /// @param path Input path.
-/// @param result Set to true if the path has a extension, false otherwise.
-void has_extension(const Twine &path, bool &result);
+/// @result True if the path has a extension, false otherwise.
+const bool has_extension(const Twine &path);
 
 /// @brief Is path absolute?
 ///
 /// @param path Input path.
-/// @param result Set to true if the path is absolute, false if it is not.
-void is_absolute(const Twine &path, bool &result);
+/// @result True if the path is absolute, false if it is not.
+const bool is_absolute(const Twine &path);
 
 /// @brief Is path relative?
 ///
 /// @param path Input path.
-/// @param result Set to true if the path is relative, false if it is not.
-void is_relative(const Twine &path, bool &result);
+/// @result True if the path is relative, false if it is not.
+const bool is_relative(const Twine &path);
 
 } // end namespace path
 } // end namespace sys

Modified: llvm/trunk/lib/Support/PathV2.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PathV2.cpp?rev=121149&r1=121148&r2=121149&view=diff
==============================================================================
--- llvm/trunk/lib/Support/PathV2.cpp (original)
+++ llvm/trunk/lib/Support/PathV2.cpp Tue Dec  7 11:04:04 2010
@@ -279,7 +279,7 @@
   return Position - RHS.Position;
 }
 
-void root_path(const StringRef &path, StringRef &result) {
+const StringRef root_path(const StringRef &path) {
   const_iterator b = begin(path),
                  pos = b,
                  e = end(path);
@@ -295,26 +295,23 @@
     if (has_net || has_drive) {
       if ((++pos != e) && is_separator((*pos)[0])) {
         // {C:/,//net/}, so get the first two components.
-        result = StringRef(path.begin(), b->size() + pos->size());
-        return;
+        return StringRef(path.begin(), b->size() + pos->size());
       } else {
         // just {C:,//net}, return the first component.
-        result = *b;
-        return;
+        return *b;
       }
     }
 
     // POSIX style root directory.
     if (is_separator((*b)[0])) {
-      result = *b;
-      return;
+      return *b;
     }
   }
 
-  result = StringRef();
+  return StringRef();
 }
 
-void root_name(const StringRef &path, StringRef &result) {
+const StringRef root_name(const StringRef &path) {
   const_iterator b = begin(path),
                  e = end(path);
   if (b != e) {
@@ -328,17 +325,15 @@
 
     if (has_net || has_drive) {
       // just {C:,//net}, return the first component.
-      result = *b;
-      return;
+      return *b;
     }
   }
 
   // No path or no name.
-  result = StringRef();
-  return;
+  return StringRef();
 }
 
-void root_directory(const StringRef &path, StringRef &result) {
+const StringRef root_directory(const StringRef &path) {
   const_iterator b = begin(path),
                  pos = b,
                  e = end(path);
@@ -354,27 +349,22 @@
     if ((has_net || has_drive) &&
         // {C:,//net}, skip to the next component.
         (++pos != e) && is_separator((*pos)[0])) {
-      result = *pos;
-      return;
+      return *pos;
     }
 
     // POSIX style root directory.
     if (!has_net && is_separator((*b)[0])) {
-      result = *b;
-      return;
+      return *b;
     }
   }
 
   // No path or no root.
-  result = StringRef();
-  return;
+  return StringRef();
 }
 
-void relative_path(const StringRef &path, StringRef &result) {
-  StringRef root;
-  root_path(path, root);
-  result = StringRef(path.begin() + root.size(), path.size() - root.size());
-  return;
+const StringRef relative_path(const StringRef &path) {
+  StringRef root = root_path(path);
+  return StringRef(path.begin() + root.size(), path.size() - root.size());
 }
 
 void append(SmallVectorImpl<char> &path, const Twine &a,
@@ -397,8 +387,7 @@
                                                   i != e; ++i) {
     bool path_has_sep = !path.empty() && is_separator(path[path.size() - 1]);
     bool component_has_sep = !i->empty() && is_separator((*i)[0]);
-    bool is_root_name = false;
-    has_root_name(*i, is_root_name);
+    bool is_root_name = has_root_name(*i);
 
     if (path_has_sep) {
       // Strip separators from beginning of component.
@@ -419,12 +408,12 @@
   }
 }
 
-void parent_path(const StringRef &path, StringRef &result) {
+const StringRef parent_path(const StringRef &path) {
   size_t end_pos = parent_path_end(path);
   if (end_pos == StringRef::npos)
-    result = StringRef();
+    return StringRef();
   else
-    result = StringRef(path.data(), end_pos);
+    return StringRef(path.data(), end_pos);
 }
 
 void remove_filename(SmallVectorImpl<char> &path) {
@@ -433,8 +422,7 @@
     path.set_size(end_pos);
 }
 
-void replace_extension(SmallVectorImpl<char> &path,
-                             const Twine &extension) {
+void replace_extension(SmallVectorImpl<char> &path, const Twine &extension) {
   StringRef p(path.begin(), path.size());
   SmallString<32> ext_storage;
   StringRef ext = extension.toStringRef(ext_storage);
@@ -473,121 +461,101 @@
 #endif
 }
 
-void filename(const StringRef &path, StringRef &result) {
-  result = *(--end(path));
+const StringRef filename(const StringRef &path) {
+  return *(--end(path));
 }
 
-void stem(const StringRef &path, StringRef &result) {
-  StringRef fname;
-  filename(path, fname);
+const StringRef stem(const StringRef &path) {
+  StringRef fname = filename(path);
   size_t pos = fname.find_last_of('.');
   if (pos == StringRef::npos)
-    result = fname;
+    return fname;
   else
     if ((fname.size() == 1 && fname == ".") ||
         (fname.size() == 2 && fname == ".."))
-      result = fname;
+      return fname;
     else
-      result = StringRef(fname.begin(), pos);
+      return StringRef(fname.begin(), pos);
 }
 
-void extension(const StringRef &path, StringRef &result) {
-  StringRef fname;
-  filename(path, fname);
+const StringRef extension(const StringRef &path) {
+  StringRef fname = filename(path);
   size_t pos = fname.find_last_of('.');
   if (pos == StringRef::npos)
-    result = StringRef();
+    return StringRef();
   else
     if ((fname.size() == 1 && fname == ".") ||
         (fname.size() == 2 && fname == ".."))
-      result = StringRef();
+      return StringRef();
     else
-      result = StringRef(fname.begin() + pos, fname.size() - pos);
+      return StringRef(fname.begin() + pos, fname.size() - pos);
 }
 
-void has_root_name(const Twine &path, bool &result) {
+const bool has_root_name(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  root_name(p, p);
-
-  result = !p.empty();
+  return !root_name(p).empty();
 }
 
-void has_root_directory(const Twine &path, bool &result) {
+const bool has_root_directory(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  root_directory(p, p);
-
-  result = !p.empty();
+  return !root_directory(p).empty();
 }
 
-void has_root_path(const Twine &path, bool &result) {
+const bool has_root_path(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  root_path(p, p);
-
-  result = !p.empty();
+  return !root_path(p).empty();
 }
 
-void has_filename(const Twine &path, bool &result) {
+const bool has_filename(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  filename(p, p);
-
-  result = !p.empty();
+  return !filename(p).empty();
 }
 
-void has_parent_path(const Twine &path, bool &result) {
+const bool has_parent_path(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  parent_path(p, p);
-
-  result = !p.empty();
+  return !parent_path(p).empty();
 }
 
-void has_stem(const Twine &path, bool &result) {
+const bool has_stem(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  stem(p, p);
-
-  result = !p.empty();
+  return !stem(p).empty();
 }
 
-void has_extension(const Twine &path, bool &result) {
+const bool has_extension(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  extension(p, p);
-
-  result = !p.empty();
+  return !extension(p).empty();
 }
 
-void is_absolute(const Twine &path, bool &result) {
+const bool is_absolute(const Twine &path) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  bool rootDir = false,
-       rootName = false;
-  has_root_directory(p, rootDir);
+  bool rootDir = has_root_directory(p),
 #ifdef LLVM_ON_WIN32
-  has_root_name(p, rootName);
+       rootName = has_root_name(p);
 #else
-  rootName = true;
+       rootName = true;
 #endif
 
-  result = rootDir && rootName;
+  return rootDir && rootName;
 }
 
-void is_relative(const Twine &path, bool &result) {
-  bool res;
-  is_absolute(path, res);
-  result = !res;
+const bool is_relative(const Twine &path) {
+  return !is_absolute(path);
 }
 
 } // end namespace path
@@ -597,9 +565,8 @@
 error_code make_absolute(SmallVectorImpl<char> &path) {
   StringRef p(path.data(), path.size());
 
-  bool rootName = false, rootDirectory = false;
-  path::has_root_name(p, rootName);
-  path::has_root_directory(p, rootDirectory);
+  bool rootName      = path::has_root_name(p),
+       rootDirectory = path::has_root_directory(p);
 
   // Already absolute.
   if (rootName && rootDirectory)
@@ -619,8 +586,7 @@
   }
 
   if (!rootName && rootDirectory) {
-    StringRef cdrn;
-    path::root_name(current_dir, cdrn);
+    StringRef cdrn = path::root_name(current_dir);
     SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
     path::append(curDirRootName, p);
     // Set path to the result.
@@ -629,14 +595,10 @@
   }
 
   if (rootName && !rootDirectory) {
-    StringRef pRootName;
-    StringRef bRootDirectory;
-    StringRef bRelativePath;
-    StringRef pRelativePath;
-    path::root_name(p, pRootName);
-    path::root_directory(current_dir, bRootDirectory);
-    path::relative_path(current_dir, bRelativePath);
-    path::relative_path(p, pRelativePath);
+    StringRef pRootName      = path::root_name(p);
+    StringRef bRootDirectory = path::root_directory(current_dir);
+    StringRef bRelativePath  = path::relative_path(current_dir);
+    StringRef pRelativePath  = path::relative_path(p);
 
     SmallString<128> res;
     path::append(res, pRootName, bRootDirectory, bRelativePath, pRelativePath);
@@ -652,9 +614,9 @@
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);
 
-  StringRef parent;
+  StringRef parent = path::parent_path(p);
   bool parent_exists;
-  path::parent_path(p, parent);
+
   if (error_code ec = fs::exists(parent, parent_exists)) return ec;
 
   if (!parent_exists)

Modified: llvm/trunk/lib/Support/Unix/PathV2.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/PathV2.inc?rev=121149&r1=121148&r2=121149&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Unix/PathV2.inc (original)
+++ llvm/trunk/lib/Support/Unix/PathV2.inc Tue Dec  7 11:04:04 2010
@@ -324,8 +324,7 @@
   Model.c_str();
 
   // Make model absolute by prepending a temp directory if it's not already.
-  bool absolute;
-  path::is_absolute(Twine(Model), absolute);
+  bool absolute = path::is_absolute(Twine(Model));
   if (!absolute) {
     SmallString<128> TDir;
     if (error_code ec = TempDir(TDir)) return ec;

Modified: llvm/trunk/lib/Support/Windows/PathV2.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/PathV2.inc?rev=121149&r1=121148&r2=121149&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Windows/PathV2.inc (original)
+++ llvm/trunk/lib/Support/Windows/PathV2.inc Tue Dec  7 11:04:04 2010
@@ -489,8 +489,7 @@
   if (error_code ec = UTF8ToUTF16(m, model_utf16)) return ec;
 
   // Make model absolute by prepending a temp directory if it's not already.
-  bool absolute;
-  path::is_absolute(m, absolute);
+  bool absolute = path::is_absolute(m);
 
   if (!absolute) {
     SmallVector<wchar_t, 64> temp_dir;

Modified: llvm/trunk/unittests/Support/Path.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=121149&r1=121148&r2=121149&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/Path.cpp (original)
+++ llvm/trunk/unittests/Support/Path.cpp Tue Dec  7 11:04:04 2010
@@ -83,24 +83,22 @@
     outs() << "]\n";
 #endif
 
-    bool      bres;
-    StringRef sfres;
-    path::has_root_path(*i, bres);
-    path::root_path(*i, sfres);
-    path::has_root_name(*i, bres);
-    path::root_name(*i, sfres);
-    path::has_root_directory(*i, bres);
-    path::root_directory(*i, sfres);
-    path::has_parent_path(*i, bres);
-    path::parent_path(*i, sfres);
-    path::has_filename(*i, bres);
-    path::filename(*i, sfres);
-    path::has_stem(*i, bres);
-    path::stem(*i, sfres);
-    path::has_extension(*i, bres);
-    path::extension(*i, sfres);
-    path::is_absolute(*i, bres);
-    path::is_relative(*i, bres);
+    path::has_root_path(*i);
+    path::root_path(*i);
+    path::has_root_name(*i);
+    path::root_name(*i);
+    path::has_root_directory(*i);
+    path::root_directory(*i);
+    path::has_parent_path(*i);
+    path::parent_path(*i);
+    path::has_filename(*i);
+    path::filename(*i);
+    path::has_stem(*i);
+    path::stem(*i);
+    path::has_extension(*i);
+    path::extension(*i);
+    path::is_absolute(*i);
+    path::is_relative(*i);
 
     SmallString<16> temp_store;
     temp_store = *i;
@@ -111,8 +109,8 @@
     temp_store = *i;
     path::replace_extension(temp_store, "ext");
     StringRef filename(temp_store.begin(), temp_store.size()), stem, ext;
-    path::stem(filename, stem);
-    path::extension(filename, ext);
+    stem = path::stem(filename);
+    ext  = path::extension(filename);
     EXPECT_EQ(*(--sys::path::end(filename)), (stem + ext).str());
 
     path::native(*i, temp_store);





More information about the llvm-commits mailing list