Current Path : /compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/Basic/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/Basic/ABI.h |
//===----- ABI.h - ABI related declarations ---------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // These enums/classes describe ABI related information about constructors, // destructors and thunks. // //===----------------------------------------------------------------------===// #ifndef CLANG_BASIC_ABI_H #define CLANG_BASIC_ABI_H #include "llvm/Support/DataTypes.h" namespace clang { /// CXXCtorType - C++ constructor types enum CXXCtorType { Ctor_Complete, // Complete object ctor Ctor_Base, // Base object ctor Ctor_CompleteAllocating // Complete object allocating ctor }; /// CXXDtorType - C++ destructor types enum CXXDtorType { Dtor_Deleting, // Deleting dtor Dtor_Complete, // Complete object dtor Dtor_Base // Base object dtor }; /// ReturnAdjustment - A return adjustment. struct ReturnAdjustment { /// NonVirtual - The non-virtual adjustment from the derived object to its /// nearest virtual base. int64_t NonVirtual; /// VBaseOffsetOffset - The offset (in bytes), relative to the address point /// of the virtual base class offset. int64_t VBaseOffsetOffset; ReturnAdjustment() : NonVirtual(0), VBaseOffsetOffset(0) { } bool isEmpty() const { return !NonVirtual && !VBaseOffsetOffset; } friend bool operator==(const ReturnAdjustment &LHS, const ReturnAdjustment &RHS) { return LHS.NonVirtual == RHS.NonVirtual && LHS.VBaseOffsetOffset == RHS.VBaseOffsetOffset; } friend bool operator<(const ReturnAdjustment &LHS, const ReturnAdjustment &RHS) { if (LHS.NonVirtual < RHS.NonVirtual) return true; return LHS.NonVirtual == RHS.NonVirtual && LHS.VBaseOffsetOffset < RHS.VBaseOffsetOffset; } }; /// ThisAdjustment - A 'this' pointer adjustment. struct ThisAdjustment { /// NonVirtual - The non-virtual adjustment from the derived object to its /// nearest virtual base. int64_t NonVirtual; /// VCallOffsetOffset - The offset (in bytes), relative to the address point, /// of the virtual call offset. int64_t VCallOffsetOffset; ThisAdjustment() : NonVirtual(0), VCallOffsetOffset(0) { } bool isEmpty() const { return !NonVirtual && !VCallOffsetOffset; } friend bool operator==(const ThisAdjustment &LHS, const ThisAdjustment &RHS) { return LHS.NonVirtual == RHS.NonVirtual && LHS.VCallOffsetOffset == RHS.VCallOffsetOffset; } friend bool operator<(const ThisAdjustment &LHS, const ThisAdjustment &RHS) { if (LHS.NonVirtual < RHS.NonVirtual) return true; return LHS.NonVirtual == RHS.NonVirtual && LHS.VCallOffsetOffset < RHS.VCallOffsetOffset; } }; /// ThunkInfo - The 'this' pointer adjustment as well as an optional return /// adjustment for a thunk. struct ThunkInfo { /// This - The 'this' pointer adjustment. ThisAdjustment This; /// Return - The return adjustment. ReturnAdjustment Return; ThunkInfo() { } ThunkInfo(const ThisAdjustment &This, const ReturnAdjustment &Return) : This(This), Return(Return) { } friend bool operator==(const ThunkInfo &LHS, const ThunkInfo &RHS) { return LHS.This == RHS.This && LHS.Return == RHS.Return; } friend bool operator<(const ThunkInfo &LHS, const ThunkInfo &RHS) { if (LHS.This < RHS.This) return true; return LHS.This == RHS.This && LHS.Return < RHS.Return; } bool isEmpty() const { return This.isEmpty() && Return.isEmpty(); } }; } // end namespace clang #endif // CLANG_BASIC_ABI_H