//
//===----------------------------------------------------------------------===//
-#ifndef TGSOURCEMGR_H
-#define TGSOURCEMGR_H
+#ifndef SUPPORT_SOURCEMGR_H
+#define SUPPORT_SOURCEMGR_H
#include <string>
#include <vector>
namespace llvm {
class MemoryBuffer;
- class TGSourceMgr;
+ class SourceMgr;
class SMLoc {
const char *Ptr;
}
};
-/// TGSourceMgr - This owns the files read by tblgen, handles include stacks,
+/// SourceMgr - This owns the files read by tblgen, handles include stacks,
/// and handles printing of diagnostics.
-class TGSourceMgr {
+class SourceMgr {
struct SrcBuffer {
/// Buffer - The memory buffer for the file.
MemoryBuffer *Buffer;
/// Buffers - This is all of the buffers that we are reading from.
std::vector<SrcBuffer> Buffers;
- TGSourceMgr(const TGSourceMgr&); // DO NOT IMPLEMENT
- void operator=(const TGSourceMgr&); // DO NOT IMPLEMENT
+ // IncludeDirectories - This is the list of directories we should search for
+ // include files in.
+ std::vector<std::string> IncludeDirectories;
+
+ SourceMgr(const SourceMgr&); // DO NOT IMPLEMENT
+ void operator=(const SourceMgr&); // DO NOT IMPLEMENT
public:
- TGSourceMgr() {}
- ~TGSourceMgr();
+ SourceMgr() {}
+ ~SourceMgr();
+
+ void setIncludeDirs(const std::vector<std::string> &Dirs) {
+ IncludeDirectories = Dirs;
+ }
const SrcBuffer &getBufferInfo(unsigned i) const {
assert(i < Buffers.size() && "Invalid Buffer ID!");
return Buffers.size()-1;
}
+ /// AddIncludeFile - Search for a file with the specified name in the current
+ /// directory or in one of the IncludeDirs. If no file is found, this returns
+ /// ~0, otherwise it returns the buffer ID of the stacked file.
+ unsigned AddIncludeFile(const std::string &Filename, SMLoc IncludeLoc);
+
/// FindBufferContainingLoc - Return the ID of the buffer containing the
/// specified location, returning -1 if not found.
int FindBufferContainingLoc(SMLoc Loc) const;
/// specified file. This is not a fast method.
unsigned FindLineNumber(SMLoc Loc, int BufferID = -1) const;
-
- /// PrintError - Emit an error message about the specified location with the
+ /// PrintMessage - Emit a message about the specified location with the
/// specified string.
- void PrintError(SMLoc ErrorLoc, const std::string &Msg) const;
+ void PrintMessage(SMLoc Loc, const std::string &Msg) const;
private:
void PrintIncludeStack(SMLoc IncludeLoc) const;