llvm-hs-6.1.0: src/LLVM/Internal/FFI/PtrHierarchy.hs
{-# LANGUAGE
ForeignFunctionInterface,
MultiParamTypeClasses,
FunctionalDependencies,
UndecidableInstances
#-}
-- | This module defines typeclasses to represent the relationships of an object-oriented inheritance hierarchy
module LLVM.Internal.FFI.PtrHierarchy where
import LLVM.Prelude
import Foreign.Ptr
-- | a class to represent safe casting of pointers to objects of descendant-classes to ancestor-classes.
class DescendentOf a b where
upCast :: Ptr b -> Ptr a
upCast = castPtr
-- | trivial casts
instance {-# OVERLAPPING #-} DescendentOf a a where
upCast = id
-- | a class to represent direct parent-child relationships
class ChildOf b c | c -> b
-- | ancestor-descentant relationships are build out of parent-child relationships
instance (DescendentOf a b, ChildOf b c) => DescendentOf a c
-- | <http://llvm.org/doxygen/classllvm_1_1Value.html>
data Value
-- | <http://llvm.org/doxygen/classllvm_1_1Constant.html>
data Constant
instance ChildOf User Constant
-- | <http://llvm.org/doxygen/classllvm_1_1GlobalValue.html>
data GlobalValue
instance ChildOf Constant GlobalValue
-- | <http://llvm.org/doxygen/classllvm_1_1GlobalObject.html>
data GlobalObject
instance ChildOf GlobalValue GlobalObject
-- | <http://llvm.org/doxygen/classllvm_1_1GlobalVariable.html>
data GlobalVariable
instance ChildOf GlobalObject GlobalVariable
-- | <http://llvm.org/doxygen/classllvm_1_1GlobalAlias.html>
data GlobalAlias
instance ChildOf GlobalValue GlobalAlias
-- | <http://llvm.org/doxygen/classllvm_1_1Function.html>
data Function
instance ChildOf GlobalObject Function
-- | <http://llvm.org/doxygen/classllvm_1_1BasicBlock.html>
data BasicBlock
instance ChildOf Value BasicBlock
-- | <http://llvm.org/doxygen/classllvm_1_1Argument.html>
data Parameter
instance ChildOf Value Parameter
-- | <http://llvm.org/doxygen/classllvm_1_1Instruction.html>
data Instruction
instance ChildOf User Instruction
-- | <http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html>
data BinaryOperator
instance ChildOf Instruction BinaryOperator
-- | <http://llvm.org/doxygen/classllvm_1_1User.html>
data User
instance ChildOf Value User
-- | <http://llvm.org/doxygen/classllvm_1_1MDNode.html>
data MDNode
instance ChildOf Metadata MDNode
data MDTuple
instance ChildOf MDNode MDTuple
-- | <http://llvm.org/doxygen/classllvm_1_1MDString.html>
data MDString
instance ChildOf Metadata MDString
-- | http://llvm.org/doxygen/classllvm_1_1ValueAsMetadata.html
data MDValue
instance ChildOf Metadata MDValue
-- | https://llvm.org/doxygen/classllvm_1_1DIExpression.html
data DIExpression
instance ChildOf MDNode DIExpression
-- | https://llvm.org/doxygen/classllvm_1_1DIGlobalVariableExpression.html
data DIGlobalVariableExpression
instance ChildOf MDNode DIGlobalVariableExpression
-- | https://llvm.org/doxygen/classllvm_1_1DILocation.html
data DILocation
instance ChildOf MDNode DILocation
-- | https://llvm.org/doxygen/classllvm_1_1DINode.html
data DINode
instance ChildOf MDNode DINode
-- | https://llvm.org/doxygen/classllvm_1_1DIImportedEntity.html
data DIImportedEntity
instance ChildOf DINode DIImportedEntity
-- | https://llvm.org/doxygen/classllvm_1_1DIObjCProperty.html
data DIObjCProperty
instance ChildOf DINode DIObjCProperty
-- | https://llvm.org/doxygen/classllvm_1_1DISubrange.html
data DISubrange
instance ChildOf DINode DISubrange
-- | https://llvm.org/doxygen/classllvm_1_1DIEnumerator.html
data DIEnumerator
instance ChildOf DINode DIEnumerator
-- | https://llvm.org/doxygen/classllvm_1_1DIVariable.html
data DIVariable
instance ChildOf DINode DIVariable
-- | https://llvm.org/doxygen/classllvm_1_1DILocalVariable.html
data DILocalVariable
instance ChildOf DIVariable DILocalVariable
-- | https://llvm.org/doxygen/classllvm_1_1DIGlobalVariable.html
data DIGlobalVariable
instance ChildOf DIVariable DIGlobalVariable
-- | https://llvm.org/doxygen/classllvm_1_1DITemplateParameter.html
data DITemplateParameter
instance ChildOf DINode DITemplateParameter
-- | https://llvm.org/doxygen/classllvm_1_1DITemplateTypeParameter.html
data DITemplateTypeParameter
instance ChildOf DITemplateParameter DITemplateTypeParameter
-- | https://llvm.org/doxygen/classllvm_1_1DITemplateValueParameter.html
data DITemplateValueParameter
instance ChildOf DITemplateParameter DITemplateValueParameter
-- | https://llvm.org/doxygen/classllvm_1_1DIScope.html
data DIScope
instance ChildOf DINode DIScope
-- | https://llvm.org/doxygen/classllvm_1_1DIModule.html
data DIModule
instance ChildOf DIScope DIModule
-- | https://llvm.org/doxygen/classllvm_1_1DINamespace.html
data DINamespace
instance ChildOf DIScope DINamespace
-- | https://llvm.org/doxygen/classllvm_1_1DIFile.html
data DIFile
instance ChildOf DIScope DIFile
-- | https://llvm.org/doxygen/classllvm_1_1DICompileUnit.html
data DICompileUnit
instance ChildOf DIScope DICompileUnit
-- | https://llvm.org/doxygen/classllvm_1_1DIType.html
data DIType
instance ChildOf DIScope DIType
-- | https://llvm.org/doxygen/classllvm_1_1DIBasicType.html
data DIBasicType
instance ChildOf DIType DIBasicType
-- | https://llvm.org/doxygen/classllvm_1_1DIDerivedType.html
data DIDerivedType
instance ChildOf DIType DIDerivedType
-- | https://llvm.org/doxygen/classllvm_1_1DISubroutineType.html
data DISubroutineType
instance ChildOf DIType DISubroutineType
-- | https://llvm.org/doxygen/classllvm_1_1DICompositeType.html
data DICompositeType
instance ChildOf DIType DICompositeType
-- | https://llvm.org/doxygen/classllvm_1_1DILocalScope.html
data DILocalScope
instance ChildOf DIScope DILocalScope
-- | <https://llvm.org/doxygen/classllvm_1_1DILexicalBlockBase.html>
data DILexicalBlockBase
instance ChildOf DILocalScope DILexicalBlockBase
-- | <https://llvm.org/doxygen/classllvm_1_1DILexicalBlock.html>
data DILexicalBlock
instance ChildOf DILexicalBlockBase DILexicalBlock
-- | <https://llvm.org/doxygen/classllvm_1_1DILexicalBlockFile.html>
data DILexicalBlockFile
instance ChildOf DILexicalBlockBase DILexicalBlockFile
-- | <https://llvm.org/doxygen/classllvm_1_1DISubprogram.html>
data DISubprogram
instance ChildOf DILocalScope DISubprogram
-- <https://llvm.org/doxygen/classllvm_1_1DIMacroNode.html>
data DIMacroNode
instance ChildOf MDNode DIMacroNode
-- <https://llvm.org/doxygen/classllvm_1_1DIMacro.html>
data DIMacro
instance ChildOf DIMacroNode DIMacro
-- <https://llvm.org/doxygen/classllvm_1_1DIMacroFile.html>
data DIMacroFile
instance ChildOf DIMacroNode DIMacroFile
-- | <http://llvm.org/doxygen/classllvm_1_1NamedMDNode.html>
data NamedMetadata
-- | <http://llvm.org/doxygen/classllvm_1_1InlineAsm.html>
data InlineAsm
instance ChildOf Value InlineAsm
-- | <http://llvm.org/doxygen/classllvm_1_1Type.html>
data Type
-- | <http://llvm.org/doxygen/classllvm_1_1Metadata.html>
data Metadata
-- | <http://www.llvm.org/docs/doxygen/html/classllvm_1_1MetadataAsValue.html>
data MetadataAsVal
instance ChildOf Value MetadataAsVal
-- | <http://llvm.org/docs/doxygen/html/classllvm_1_1raw__ostream.html>
data RawOStream
-- | <http://llvm.org/docs/doxygen/html/classllvm_1_1raw__pwrite__stream.html>
data RawPWriteStream
instance ChildOf RawOStream RawPWriteStream
-- | <https://llvm.org/doxygen/classllvm_1_1StringRef.html>
data StringRef