diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-13 22:18:37 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-13 22:18:37 +0000 |
commit | 92f056fadf7913416ce1813fdb3695ca8eead06e (patch) | |
tree | 30e9ad2f76283d507f1104f4a147b644e20da5dc /clang/lib/Frontend/PCHWriter.cpp | |
parent | 59dbbb2bb4ef49b4995c1535a75c0aea5512384e (diff) | |
download | bcm5719-llvm-92f056fadf7913416ce1813fdb3695ca8eead06e.tar.gz bcm5719-llvm-92f056fadf7913416ce1813fdb3695ca8eead06e.zip |
PCH support for functions and their parameters.
llvm-svn: 68997
Diffstat (limited to 'clang/lib/Frontend/PCHWriter.cpp')
-rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 6758a506998..83841776218 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -257,8 +257,11 @@ namespace { void VisitRecordDecl(RecordDecl *D); void VisitValueDecl(ValueDecl *D); void VisitEnumConstantDecl(EnumConstantDecl *D); + void VisitFunctionDecl(FunctionDecl *D); void VisitFieldDecl(FieldDecl *D); void VisitVarDecl(VarDecl *D); + void VisitParmVarDecl(ParmVarDecl *D); + void VisitOriginalParmVarDecl(OriginalParmVarDecl *D); void VisitDeclContext(DeclContext *DC, uint64_t LexicalOffset, uint64_t VisibleOffset); }; @@ -327,6 +330,25 @@ void PCHDeclWriter::VisitEnumConstantDecl(EnumConstantDecl *D) { Code = pch::DECL_ENUM_CONSTANT; } +void PCHDeclWriter::VisitFunctionDecl(FunctionDecl *D) { + VisitValueDecl(D); + // FIXME: function body + Writer.AddDeclRef(D->getPreviousDeclaration(), Record); + Record.push_back(D->getStorageClass()); // FIXME: stable encoding + Record.push_back(D->isInline()); + Record.push_back(D->isVirtual()); + Record.push_back(D->isPure()); + Record.push_back(D->inheritedPrototype()); + Record.push_back(D->hasPrototype() && !D->inheritedPrototype()); + Record.push_back(D->isDeleted()); + Writer.AddSourceLocation(D->getTypeSpecStartLoc(), Record); + Record.push_back(D->param_size()); + for (FunctionDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(); + P != PEnd; ++P) + Writer.AddDeclRef(*P, Record); + Code = pch::DECL_FUNCTION; +} + void PCHDeclWriter::VisitFieldDecl(FieldDecl *D) { VisitValueDecl(D); Record.push_back(D->isMutable()); @@ -336,7 +358,7 @@ void PCHDeclWriter::VisitFieldDecl(FieldDecl *D) { void PCHDeclWriter::VisitVarDecl(VarDecl *D) { VisitValueDecl(D); - Record.push_back(D->getStorageClass()); + Record.push_back(D->getStorageClass()); // FIXME: stable encoding Record.push_back(D->isThreadSpecified()); Record.push_back(D->hasCXXDirectInitializer()); Record.push_back(D->isDeclaredInCondition()); @@ -346,6 +368,21 @@ void PCHDeclWriter::VisitVarDecl(VarDecl *D) { Code = pch::DECL_VAR; } +void PCHDeclWriter::VisitParmVarDecl(ParmVarDecl *D) { + VisitVarDecl(D); + Record.push_back(D->getObjCDeclQualifier()); // FIXME: stable encoding + // FIXME: emit default argument + // FIXME: why isn't the "default argument" just stored as the initializer + // in VarDecl? + Code = pch::DECL_PARM_VAR; +} + +void PCHDeclWriter::VisitOriginalParmVarDecl(OriginalParmVarDecl *D) { + VisitParmVarDecl(D); + Writer.AddTypeRef(D->getOriginalType(), Record); + Code = pch::DECL_ORIGINAL_PARM_VAR; +} + /// \brief Emit the DeclContext part of a declaration context decl. /// /// \param LexicalOffset the offset at which the DECL_CONTEXT_LEXICAL |