From dbc5daf05882c1c1934b35d5899b6ca53ce4cff9 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 7 Nov 2008 20:08:42 +0000 Subject: Parsing, ASTs, and semantic analysis for the declaration of conversion functions in C++, e.g., struct X { operator bool() const; }; Note that these conversions don't actually do anything, since we don't yet have the ability to use them for implicit or explicit conversions. llvm-svn: 58860 --- clang/lib/AST/DeclCXX.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'clang/lib/AST/DeclCXX.cpp') diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index b0df75b404d..b2878b667aa 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -48,6 +48,11 @@ void CXXRecordDecl::Destroy(ASTContext &C) { if (isDefinition()) Destructor->Destroy(C); + for (OverloadedFunctionDecl::function_iterator func + = Conversions.function_begin(); + func != Conversions.function_end(); ++func) + (*func)->Destroy(C); + RecordDecl::Destroy(C); } @@ -101,6 +106,11 @@ CXXRecordDecl::addConstructor(ASTContext &Context, Constructors.addOverload(ConDecl); } +void CXXRecordDecl::addConversionFunction(ASTContext &Context, + CXXConversionDecl *ConvDecl) { + Conversions.addOverload(ConvDecl); +} + CXXMethodDecl * CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD, SourceLocation L, IdentifierInfo *Id, @@ -232,6 +242,14 @@ CXXDestructorDecl::Create(ASTContext &C, CXXRecordDecl *RD, isImplicitlyDeclared); } +CXXConversionDecl * +CXXConversionDecl::Create(ASTContext &C, CXXRecordDecl *RD, + SourceLocation L, IdentifierInfo *Id, + QualType T, bool isInline, bool isExplicit) { + void *Mem = C.getAllocator().Allocate(); + return new (Mem) CXXConversionDecl(RD, L, Id, T, isInline, isExplicit); +} + CXXClassVarDecl *CXXClassVarDecl::Create(ASTContext &C, CXXRecordDecl *RD, SourceLocation L, IdentifierInfo *Id, QualType T, ScopedDecl *PrevDecl) { -- cgit v1.2.3