emit tokens, constify the Preprocessor passed down into PCH writer.

llvm-svn: 68798
This commit is contained in:
Chris Lattner 2009-04-10 18:08:30 +00:00
parent baa52f47c1
commit 2199f5b4e5
4 changed files with 31 additions and 9 deletions

View File

@ -77,7 +77,7 @@ class PCHWriter {
pch::TypeID NextTypeID;
void WriteSourceManagerBlock(SourceManager &SourceMgr);
void WritePreprocessor(Preprocessor &PP);
void WritePreprocessor(const Preprocessor &PP);
void WriteType(const Type *T);
void WriteTypesBlock(ASTContext &Context);
uint64_t WriteDeclContextLexicalBlock(ASTContext &Context, DeclContext *DC);
@ -92,7 +92,7 @@ public:
PCHWriter(llvm::BitstreamWriter &S);
/// \brief Write a precompiled header for the given AST context.
void WritePCH(ASTContext &Context, Preprocessor &PP);
void WritePCH(ASTContext &Context, const Preprocessor &PP);
/// \brief Emit a source location.
void AddSourceLocation(SourceLocation Loc, RecordData &Record);

View File

@ -479,7 +479,7 @@ void PCHWriter::WriteSourceManagerBlock(SourceManager &SourceMgr) {
/// \brief Writes the block containing the serialized form of the
/// preprocessor.
///
void PCHWriter::WritePreprocessor(Preprocessor &PP) {
void PCHWriter::WritePreprocessor(const Preprocessor &PP) {
// Enter the preprocessor block.
S.EnterSubblock(pch::PREPROCESSOR_BLOCK_ID, 3);
@ -527,7 +527,29 @@ void PCHWriter::WritePreprocessor(Preprocessor &PP) {
S.EmitRecord(Code, Record);
Record.clear();
// FIXME: Emit the tokens array.
// Emit the tokens array.
for (unsigned TokNo = 0, e = MI->getNumTokens(); TokNo != e; ++TokNo) {
// Note that we know that the preprocessor does not have any annotation
// tokens in it because they are created by the parser, and thus can't be
// in a macro definition.
const Token &Tok = MI->getReplacementToken(TokNo);
Record.push_back(Tok.getLocation().getRawEncoding());
Record.push_back(Tok.getLength());
// FIXME: Output the identifier Info ID #!
// FIXME: When reading literal tokens, reconstruct the literal pointer if
// it is needed.
Record.push_back((intptr_t)Tok.getIdentifierInfo());
// FIXME: Should translate token kind to a stable encoding.
Record.push_back(Tok.getKind());
// FIXME: Should translate token flags to a stable encoding.
Record.push_back(Tok.getFlags());
S.EmitRecord(pch::PP_TOKEN, Record);
Record.clear();
}
}
@ -719,7 +741,7 @@ void PCHWriter::WriteDeclsBlock(ASTContext &Context) {
PCHWriter::PCHWriter(llvm::BitstreamWriter &S)
: S(S), NextTypeID(pch::NUM_PREDEF_TYPE_IDS) { }
void PCHWriter::WritePCH(ASTContext &Context, Preprocessor &PP) {
void PCHWriter::WritePCH(ASTContext &Context, const Preprocessor &PP) {
// Emit the file header.
S.Emit((unsigned)'C', 8);
S.Emit((unsigned)'P', 8);

View File

@ -68,7 +68,7 @@ ASTConsumer *CreateASTSerializer(const std::string &InFile,
const std::string &EmitDir,
Diagnostic &Diags);
ASTConsumer *CreatePCHGenerator(Preprocessor &PP,
ASTConsumer *CreatePCHGenerator(const Preprocessor &PP,
const std::string &OutFile);
ASTConsumer *CreateBlockRewriter(const std::string &InFile,

View File

@ -29,11 +29,11 @@ using namespace llvm;
namespace {
class VISIBILITY_HIDDEN PCHGenerator : public ASTConsumer {
Preprocessor &PP;
const Preprocessor &PP;
std::string OutFile;
public:
explicit PCHGenerator(Preprocessor &PP, const std::string &OutFile)
explicit PCHGenerator(const Preprocessor &PP, const std::string &OutFile)
: PP(PP), OutFile(OutFile) { }
virtual void HandleTranslationUnit(ASTContext &Ctx);
@ -68,7 +68,7 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) {
Out.flush();
}
ASTConsumer *clang::CreatePCHGenerator(Preprocessor &PP,
ASTConsumer *clang::CreatePCHGenerator(const Preprocessor &PP,
const std::string &OutFile) {
return new PCHGenerator(PP, OutFile);
}