diff options
author | Ed Schouten <ed@FreeBSD.org> | 2009-06-27 10:45:02 +0000 |
---|---|---|
committer | Ed Schouten <ed@FreeBSD.org> | 2009-06-27 10:45:02 +0000 |
commit | 4ebdf5c4f587daef4e0be499802eac3a7a49bf2f (patch) | |
tree | 2c5a83521a20c02e7805581a174008aa9bc23579 /include/clang/Frontend | |
parent | f698f7e71940663e26a4806a96fb0bdfa160c886 (diff) |
Notes
Diffstat (limited to 'include/clang/Frontend')
-rw-r--r-- | include/clang/Frontend/Analyses.def | 4 | ||||
-rw-r--r-- | include/clang/Frontend/CommandLineSourceLoc.h | 85 | ||||
-rw-r--r-- | include/clang/Frontend/PCHBitCodes.h | 4 | ||||
-rw-r--r-- | include/clang/Frontend/Utils.h | 31 |
4 files changed, 119 insertions, 5 deletions
diff --git a/include/clang/Frontend/Analyses.def b/include/clang/Frontend/Analyses.def index 3492d09c10aa4..ad799c3a8b25b 100644 --- a/include/clang/Frontend/Analyses.def +++ b/include/clang/Frontend/Analyses.def @@ -41,13 +41,9 @@ ANALYSIS(WarnObjCDealloc, "warn-objc-missing-dealloc", ANALYSIS(WarnObjCUnusedIvars, "warn-objc-unused-ivars", "Warn about private ivars that are never used", ObjCImplementation) -ANALYSIS(CheckerSimple, "checker-simple", - "Perform simple path-sensitive checks.", Code) - ANALYSIS(CheckerCFRef, "checker-cfref", "Run the [Core] Foundation reference count checker", Code) - #ifndef ANALYSIS_STORE #define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) #endif diff --git a/include/clang/Frontend/CommandLineSourceLoc.h b/include/clang/Frontend/CommandLineSourceLoc.h new file mode 100644 index 0000000000000..1eaa958995f54 --- /dev/null +++ b/include/clang/Frontend/CommandLineSourceLoc.h @@ -0,0 +1,85 @@ +//===--- 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" +#include <cstdio> + +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 diff --git a/include/clang/Frontend/PCHBitCodes.h b/include/clang/Frontend/PCHBitCodes.h index e546a12c49e98..63222725d529e 100644 --- a/include/clang/Frontend/PCHBitCodes.h +++ b/include/clang/Frontend/PCHBitCodes.h @@ -387,7 +387,9 @@ namespace clang { /// \brief An ObjCQualifiedInterfaceType record. TYPE_OBJC_QUALIFIED_INTERFACE = 22, /// \brief An ObjCObjectPointerType record. - TYPE_OBJC_OBJECT_POINTER = 23 + TYPE_OBJC_OBJECT_POINTER = 23, + /// \brief a DecltypeType record. + TYPE_DECLTYPE = 24 }; /// \brief The type IDs for special types constructed by semantic diff --git a/include/clang/Frontend/Utils.h b/include/clang/Frontend/Utils.h index 41eb31a0fc357..77df60cd7210a 100644 --- a/include/clang/Frontend/Utils.h +++ b/include/clang/Frontend/Utils.h @@ -32,6 +32,10 @@ class IdentifierTable; class SourceManager; class PreprocessorFactory; class LangOptions; +class Decl; +class Stmt; +class ASTContext; +class SourceLocation; /// ProcessWarningOptions - Initialize the diagnostic client and process the /// warning options specified on the command line. @@ -74,6 +78,33 @@ void AttachDependencyFileGen(Preprocessor *PP, llvm::raw_ostream *OS, /// a seekable stream. void CacheTokens(Preprocessor& PP, llvm::raw_fd_ostream* OS); +/// \brief Returns the AST node that a source location points to. +/// +/// Returns a pair of Decl* and Stmt*. If no AST node is found for the source +/// location, the pair will contain null pointers. +/// +/// If the source location points to just a declaration, the statement part of +/// the pair will be null, e.g., +/// @code +/// int foo; +/// @endcode +/// If the source location points at 'foo', the pair will contain the VarDecl +/// of foo and a null Stmt. +/// +/// If the source location points to a statement node, the returned declaration +/// will be the immediate 'parent' declaration of the statement node, e.g., +/// @code +/// void f() { +/// int foo = 100; +/// ++foo; +/// } +/// @endcode +/// Pointing at '100' will return a <VarDecl 'foo', IntegerLiteral '100'> pair. +/// Pointing at '++foo' will return a <FunctionDecl 'f', UnaryOperator> pair. +/// +std::pair<Decl *, Stmt *> ResolveLocationInAST(ASTContext &Ctx, + SourceLocation Loc); + } // end namespace clang #endif |