forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===----- CXXABI.h - Interface to C++ ABIs ---------------------*- C++ -*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This provides an abstract class for C++ AST support. Concrete
 | |
| // subclasses of this implement AST support for specific C++ ABIs.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_CLANG_LIB_AST_CXXABI_H
 | |
| #define LLVM_CLANG_LIB_AST_CXXABI_H
 | |
| 
 | |
| #include "clang/AST/Type.h"
 | |
| 
 | |
| namespace clang {
 | |
| 
 | |
| class ASTContext;
 | |
| class CXXConstructorDecl;
 | |
| class DeclaratorDecl;
 | |
| class Expr;
 | |
| class MemberPointerType;
 | |
| class MangleNumberingContext;
 | |
| 
 | |
| /// Implements C++ ABI-specific semantic analysis functions.
 | |
| class CXXABI {
 | |
| public:
 | |
|   virtual ~CXXABI();
 | |
| 
 | |
|   struct MemberPointerInfo {
 | |
|     uint64_t Width;
 | |
|     unsigned Align;
 | |
|     bool HasPadding;
 | |
|   };
 | |
| 
 | |
|   /// Returns the width and alignment of a member pointer in bits, as well as
 | |
|   /// whether it has padding.
 | |
|   virtual MemberPointerInfo
 | |
|   getMemberPointerInfo(const MemberPointerType *MPT) const = 0;
 | |
| 
 | |
|   /// Returns the default calling convention for C++ methods.
 | |
|   virtual CallingConv getDefaultMethodCallConv(bool isVariadic) const = 0;
 | |
| 
 | |
|   /// Returns whether the given class is nearly empty, with just virtual
 | |
|   /// pointers and no data except possibly virtual bases.
 | |
|   virtual bool isNearlyEmpty(const CXXRecordDecl *RD) const = 0;
 | |
| 
 | |
|   /// Returns a new mangling number context for this C++ ABI.
 | |
|   virtual std::unique_ptr<MangleNumberingContext>
 | |
|   createMangleNumberingContext() const = 0;
 | |
| 
 | |
|   /// Adds a mapping from class to copy constructor for this C++ ABI.
 | |
|   virtual void addCopyConstructorForExceptionObject(CXXRecordDecl *,
 | |
|                                                     CXXConstructorDecl *) = 0;
 | |
| 
 | |
|   /// Retrieves the mapping from class to copy constructor for this C++ ABI.
 | |
|   virtual const CXXConstructorDecl *
 | |
|   getCopyConstructorForExceptionObject(CXXRecordDecl *) = 0;
 | |
| 
 | |
|   virtual void addTypedefNameForUnnamedTagDecl(TagDecl *TD,
 | |
|                                                TypedefNameDecl *DD) = 0;
 | |
| 
 | |
|   virtual TypedefNameDecl *
 | |
|   getTypedefNameForUnnamedTagDecl(const TagDecl *TD) = 0;
 | |
| 
 | |
|   virtual void addDeclaratorForUnnamedTagDecl(TagDecl *TD,
 | |
|                                               DeclaratorDecl *DD) = 0;
 | |
| 
 | |
|   virtual DeclaratorDecl *getDeclaratorForUnnamedTagDecl(const TagDecl *TD) = 0;
 | |
| };
 | |
| 
 | |
| /// Creates an instance of a C++ ABI class.
 | |
| CXXABI *CreateItaniumCXXABI(ASTContext &Ctx);
 | |
| CXXABI *CreateMicrosoftCXXABI(ASTContext &Ctx);
 | |
| }
 | |
| 
 | |
| #endif
 |