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 | 3a2f7e42514ddbec983c61826ce85d3071e23e8e (patch) | |
tree | aed92dce2f9f61e77479495cb419c57e7dc956cf /lib/Frontend/PCHWriter.cpp | |
parent | 0f59312e7b625fa5821a63db65377d4b3b667e99 (diff) |
PCH support for functions and their parameters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68997 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriter.cpp')
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 6758a50699..8384177621 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/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 |