[cfe-commits] r74012 - in /cfe/trunk: include/clang/Frontend/CommandLineSourceLoc.h tools/clang-cc/clang-cc.cpp

Argiris Kirtzidis akyrtzi at gmail.com
Tue Jun 23 15:01:39 PDT 2009


Author: akirtzidis
Date: Tue Jun 23 17:01:39 2009
New Revision: 74012

URL: http://llvm.org/viewvc/llvm-project?rev=74012&view=rev
Log:
Move the command line source location parsing from clang-cc.cpp into "include/Frontend/CommandLineSourceLoc.h".

Added:
    cfe/trunk/include/clang/Frontend/CommandLineSourceLoc.h
Modified:
    cfe/trunk/tools/clang-cc/clang-cc.cpp

Added: cfe/trunk/include/clang/Frontend/CommandLineSourceLoc.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CommandLineSourceLoc.h?rev=74012&view=auto

==============================================================================
--- cfe/trunk/include/clang/Frontend/CommandLineSourceLoc.h (added)
+++ cfe/trunk/include/clang/Frontend/CommandLineSourceLoc.h Tue Jun 23 17:01:39 2009
@@ -0,0 +1,84 @@
+//===--- CommandLineSourceLoc.h - Parsing for source locations-*- C++ -*---===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Command line parsing for source locations.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_FRONTEND_COMMANDLINESOURCELOC_H
+#define LLVM_CLANG_FRONTEND_COMMANDLINESOURCELOC_H
+
+#include "llvm/Support/CommandLine.h"
+
+namespace clang {
+
+/// \brief A source location that has been parsed on the command line.
+struct ParsedSourceLocation {
+  std::string FileName;
+  unsigned Line;
+  unsigned Column;
+};
+
+}
+
+namespace llvm {
+  namespace cl {
+    /// \brief Command-line option parser that parses source locations.
+    ///
+    /// Source locations are of the form filename:line:column.
+    template<>
+    class parser<clang::ParsedSourceLocation> 
+      : public basic_parser<clang::ParsedSourceLocation> {
+    public:
+      bool parse(Option &O, const char *ArgName, 
+                 const std::string &ArgValue,
+                 clang::ParsedSourceLocation &Val);
+    };
+
+    bool 
+    parser<clang::ParsedSourceLocation>::
+    parse(Option &O, const char *ArgName, const std::string &ArgValue, 
+          clang::ParsedSourceLocation &Val) {
+      using namespace clang;
+
+      const char *ExpectedFormat 
+        = "source location must be of the form filename:line:column";
+      std::string::size_type SecondColon = ArgValue.rfind(':');
+      if (SecondColon == std::string::npos) {
+        std::fprintf(stderr, "%s\n", ExpectedFormat);
+        return true;
+      }
+      char *EndPtr;
+      long Column 
+        = std::strtol(ArgValue.c_str() + SecondColon + 1, &EndPtr, 10);
+      if (EndPtr != ArgValue.c_str() + ArgValue.size()) {
+        std::fprintf(stderr, "%s\n", ExpectedFormat);
+        return true;
+      }
+
+      std::string::size_type FirstColon = ArgValue.rfind(':', SecondColon-1);
+      if (FirstColon == std::string::npos) {
+        std::fprintf(stderr, "%s\n", ExpectedFormat);
+        return true;
+      }
+      long Line = std::strtol(ArgValue.c_str() + FirstColon + 1, &EndPtr, 10);
+      if (EndPtr != ArgValue.c_str() + SecondColon) {
+        std::fprintf(stderr, "%s\n", ExpectedFormat);
+        return true;
+      }
+      
+      Val.FileName = ArgValue.substr(0, FirstColon);
+      Val.Line = Line;
+      Val.Column = Column;
+      return false;
+    }
+  }
+}
+
+#endif

Modified: cfe/trunk/tools/clang-cc/clang-cc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/clang-cc.cpp?rev=74012&r1=74011&r2=74012&view=diff

==============================================================================
--- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
+++ cfe/trunk/tools/clang-cc/clang-cc.cpp Tue Jun 23 17:01:39 2009
@@ -33,6 +33,7 @@
 #include "clang/Frontend/PCHReader.h"
 #include "clang/Frontend/TextDiagnosticBuffer.h"
 #include "clang/Frontend/TextDiagnosticPrinter.h"
+#include "clang/Frontend/CommandLineSourceLoc.h"
 #include "clang/Frontend/Utils.h"
 #include "clang/Analysis/PathDiagnostic.h"
 #include "clang/CodeGen/ModuleBuilder.h"
@@ -79,85 +80,19 @@
 // Source Location Parser
 //===----------------------------------------------------------------------===//
 
-/// \brief A source location that has been parsed on the command line.
-struct ParsedSourceLocation {
-  std::string FileName;
-  unsigned Line;
-  unsigned Column;
-
-  /// \brief Try to resolve the file name of a parsed source location.
-  ///
-  /// \returns true if there was an error, false otherwise.
-  bool ResolveLocation(FileManager &FileMgr, RequestedSourceLocation &Result);
-};
-
-bool
-ParsedSourceLocation::ResolveLocation(FileManager &FileMgr, 
-                                      RequestedSourceLocation &Result) {
-  const FileEntry *File = FileMgr.getFile(FileName);
+static bool ResolveParsedLocation(ParsedSourceLocation &ParsedLoc,
+                                  FileManager &FileMgr,
+                                  RequestedSourceLocation &Result) {
+  const FileEntry *File = FileMgr.getFile(ParsedLoc.FileName);
   if (!File)
     return true;
 
   Result.File = File;
-  Result.Line = Line;
-  Result.Column = Column;
+  Result.Line = ParsedLoc.Line;
+  Result.Column = ParsedLoc.Column;
   return false;
 }
 
-namespace llvm {
-  namespace cl {
-    /// \brief Command-line option parser that parses source locations.
-    ///
-    /// Source locations are of the form filename:line:column.
-    template<>
-    class parser<ParsedSourceLocation> 
-      : public basic_parser<ParsedSourceLocation> {
-    public:
-      bool parse(Option &O, const char *ArgName, 
-                 const std::string &ArgValue,
-                 ParsedSourceLocation &Val);
-    };
-
-    bool 
-    parser<ParsedSourceLocation>::
-    parse(Option &O, const char *ArgName, const std::string &ArgValue, 
-          ParsedSourceLocation &Val) {
-      using namespace clang;
-
-      const char *ExpectedFormat 
-        = "source location must be of the form filename:line:column";
-      std::string::size_type SecondColon = ArgValue.rfind(':');
-      if (SecondColon == std::string::npos) {
-        std::fprintf(stderr, "%s\n", ExpectedFormat);
-        return true;
-      }
-      char *EndPtr;
-      long Column 
-        = std::strtol(ArgValue.c_str() + SecondColon + 1, &EndPtr, 10);
-      if (EndPtr != ArgValue.c_str() + ArgValue.size()) {
-        std::fprintf(stderr, "%s\n", ExpectedFormat);
-        return true;
-      }
-
-      std::string::size_type FirstColon = ArgValue.rfind(':', SecondColon-1);
-      if (FirstColon == std::string::npos) {
-        std::fprintf(stderr, "%s\n", ExpectedFormat);
-        return true;
-      }
-      long Line = std::strtol(ArgValue.c_str() + FirstColon + 1, &EndPtr, 10);
-      if (EndPtr != ArgValue.c_str() + SecondColon) {
-        std::fprintf(stderr, "%s\n", ExpectedFormat);
-        return true;
-      }
-      
-      Val.FileName = ArgValue.substr(0, FirstColon);
-      Val.Line = Line;
-      Val.Column = Column;
-      return false;
-    }
-  }
-}
-
 //===----------------------------------------------------------------------===//
 // Global options.
 //===----------------------------------------------------------------------===//
@@ -1979,8 +1914,8 @@
     for (unsigned Idx = 0, Last = FixItAtLocations.size(); 
          Idx != Last; ++Idx) {
       RequestedSourceLocation Requested;
-      if (FixItAtLocations[Idx].ResolveLocation(PP.getFileManager(), 
-                                                Requested)) {
+      if (ResolveParsedLocation(FixItAtLocations[Idx],
+                                PP.getFileManager(), Requested)) {
         fprintf(stderr, "FIX-IT could not find file \"%s\"\n",
                 FixItAtLocations[Idx].FileName.c_str());
       } else {





More information about the cfe-commits mailing list