{-# LANGUAGE DeriveDataTypeable #-}
module ABI.Itanium.Types (
DecodedName(..),
CVQualifier(..),
CXXType(..),
Name(..),
Prefix(..),
UnqualifiedName(..),
UName(..),
CtorDtor(..),
Operator(..),
Expression(..),
CallOffset(..),
Substitution(..),
TemplateArg(..),
TemplateParam(..)
) where
import Data.Data
data DecodedName = Function Name [CXXType]
| Data Name
| VirtualTable CXXType
| VTTStructure CXXType
| TypeInfo CXXType
| TypeInfoName CXXType
| GuardVariable Name
| OverrideThunk CallOffset DecodedName
| OverrideThunkCovariant CallOffset CallOffset DecodedName
deriving (Eq, Ord, Show, Data, Typeable)
data CallOffset = VirtualOffset Int Int
| NonVirtualOffset Int
deriving (Eq, Ord, Show, Data, Typeable)
data CVQualifier = Restrict
| Volatile
| Const
deriving (Eq, Ord, Show, Data, Typeable)
data Substitution = Substitution (Maybe String)
| SubStdNamespace
| SubStdAllocator
| SubBasicString
| SubBasicStringArgs
| SubBasicIstream
| SubBasicOstream
| SubBasicIostream
deriving (Eq, Ord, Show, Data, Typeable)
data CXXType = QualifiedType [CVQualifier] CXXType
| PointerToType CXXType
| ReferenceToType CXXType
| RValueReferenceToType CXXType
| ComplexPairType CXXType
| ImaginaryType CXXType
| ParameterPack CXXType
| VendorTypeQualifier String CXXType
| VoidType
| Wchar_tType
| BoolType
| CharType
| SignedCharType
| UnsignedCharType
| ShortType
| UnsignedShortType
| IntType
| UnsignedIntType
| LongType
| UnsignedLongType
| LongLongType
| UnsignedLongLongType
| Int128Type
| UnsignedInt128Type
| FloatType
| DoubleType
| LongDoubleType
| Float128Type
| EllipsisType
| Char32Type
| Char16Type
| AutoType
| NullPtrType
| VendorBuiltinType String
| FunctionType [CXXType]
| ExternCFunctionType [CXXType]
| ArrayTypeN (Maybe Int) CXXType
| ArrayTypeE Expression
| PtrToMemberType CXXType CXXType
| ClassEnumType Name
| SubstitutionType Substitution
| TemplateParamType TemplateParam
| TemplateTemplateParamType TemplateParam [TemplateArg]
| TemplateTemplateParamSubstitutionType Substitution [TemplateArg]
deriving (Eq, Ord, Show, Data, Typeable)
data Expression = Expression
deriving (Eq, Ord, Show, Data, Typeable)
data Name = NestedName [CVQualifier] [Prefix] UnqualifiedName
| NestedTemplateName [CVQualifier] [Prefix] [TemplateArg]
| UnscopedName UName
| UnscopedTemplateName UName [TemplateArg]
| UnscopedTemplateSubstitution Substitution [TemplateArg]
deriving (Eq, Ord, Show, Data, Typeable)
data UName = UName UnqualifiedName
| UStdName UnqualifiedName
deriving (Eq, Ord, Show, Data, Typeable)
data Prefix = DataMemberPrefix String
| UnqualifiedPrefix UnqualifiedName
| SubstitutionPrefix Substitution
| TemplateParamPrefix TemplateParam
| TemplateArgsPrefix [TemplateArg]
deriving (Eq, Ord, Show, Data, Typeable)
data TemplateArg = TypeTemplateArg CXXType
deriving (Eq, Ord, Show, Data, Typeable)
data TemplateParam = TemplateParam (Maybe Int)
deriving (Eq, Ord, Show, Data, Typeable)
data UnqualifiedName = OperatorName Operator
| CtorDtorName CtorDtor
| SourceName String
deriving (Eq, Ord, Show, Data, Typeable)
data CtorDtor = C1
| C2
| C3
| D0
| D1
| D2
deriving (Eq, Ord, Show, Data, Typeable)
data Operator = OpNew
| OpNewArray
| OpDelete
| OpDeleteArray
| OpUPlus
| OpUMinus
| OpAddressOf
| OpDeref
| OpBitNot
| OpPlus
| OpMinus
| OpMul
| OpDiv
| OpMod
| OpBitAnd
| OpBitOr
| OpBitXor
| OpAssign
| OpPlusAssign
| OpMinusAssign
| OpMulAssign
| OpDivAssign
| OpModAssign
| OpAndAssign
| OpOrAssign
| OpXorAssign
| OpShl
| OpShr
| OpShlAssign
| OpShrAssign
| OpEquals
| OpNotEquals
| OpLt
| OpGt
| OpLte
| OpGte
| OpNot
| OpAnd
| OpOr
| OpPlusPlus
| OpMinusMinus
| OpComma
| OpArrowStar
| OpArrow
| OpCall
| OpIndex
| OpQuestion
| OpSizeofType
| OpSizeofExpr
| OpAlignofType
| OpAlignofExpr
| OpCast CXXType
| OpVendor Int String
deriving (Eq, Ord, Show, Data, Typeable)