| //===----- CXXABI.h - Interface to C++ ABIs ---------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This provides an abstract class for C++ AST support. Concrete |
| // subclasses of this implement AST support for specific C++ ABIs. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_AST_CXXABI_H |
| #define LLVM_CLANG_AST_CXXABI_H |
| |
| #include "clang/AST/Type.h" |
| |
| namespace clang { |
| |
| class ASTContext; |
| class MemberPointerType; |
| |
| /// Implements C++ ABI-specific semantic analysis functions. |
| class CXXABI { |
| public: |
| virtual ~CXXABI(); |
| |
| /// Returns the size of a member pointer in multiples of the target |
| /// pointer size. |
| virtual unsigned getMemberPointerSize(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; |
| }; |
| |
| /// Creates an instance of a C++ ABI class. |
| CXXABI *CreateARMCXXABI(ASTContext &Ctx); |
| CXXABI *CreateItaniumCXXABI(ASTContext &Ctx); |
| CXXABI *CreateMicrosoftCXXABI(ASTContext &Ctx); |
| } |
| |
| #endif |