cparsing-0.1.0.0: MiniC/Instances.hs
{-# LANGUAGE TemplateHaskell, FlexibleInstances, FlexibleContexts, MultiParamTypeClasses #-}
-- | Derived and generated instances for AST elements.
module MiniC.Instances where
import MiniC.AST
import MiniC.Representation
import MiniC.Semantics
import SourceCode.ASTNode
import SourceCode.ASTElems
import SourceCode.ToSourceTree
import SourceCode.SourceInfo
import Control.Lens
import Control.Applicative
import GHC.Generics
import Data.SmartTrav
import Data.Data.Lens (uniplate)
import Data.Data
-- * Derived type classes for AST elements
type TranslationUnitBI = TranslationUnit BI
type TranslationUnitNI = TranslationUnit NI
instance (SourceInfo a, Show a) => ToSourceRose TranslationUnit a
instance ASTNode TranslationUnit a
instance Data a => Plated (TranslationUnit a) where plate = uniplate
makeLenses ''TranslationUnit
deriveSmartTrav ''TranslationUnit
type DeclarationBI = Declaration BI
type DeclarationNI = Declaration NI
instance (SourceInfo a, Show a) => ToSourceRose Declaration a
instance ASTNode Declaration a
instance Data a => Plated (Declaration a) where plate = uniplate
makeLenses ''Declaration
deriveSmartTrav ''Declaration
type StorageSpecifierBI = StorageSpecifier BI
type StorageSpecifierNI = StorageSpecifier NI
instance (SourceInfo a, Show a) => ToSourceRose StorageSpecifier a
instance ASTNode StorageSpecifier a
instance Data a => Plated (StorageSpecifier a) where plate = uniplate
makeLenses ''StorageSpecifier
deriveSmartTrav ''StorageSpecifier
type TypeDefinitionBI = TypeDefinition BI
type TypeDefinitionNI = TypeDefinition NI
instance (SourceInfo a, Show a) => ToSourceRose TypeDefinition a
instance ASTNode TypeDefinition a
instance Data a => Plated (TypeDefinition a) where plate = uniplate
makeLenses ''TypeDefinition
deriveSmartTrav ''TypeDefinition
type FunctionDeclarationBI = FunctionDeclaration BI
type FunctionDeclarationNI = FunctionDeclaration NI
instance (SourceInfo a, Show a) => ToSourceRose FunctionDeclaration a
instance ASTNode FunctionDeclaration a
instance Data a => Plated (FunctionDeclaration a) where plate = uniplate
makeLenses ''FunctionDeclaration
deriveSmartTrav ''FunctionDeclaration
type VariableDeclarationBI = VariableDeclaration BI
type VariableDeclarationNI = VariableDeclaration NI
instance (SourceInfo a, Show a) => ToSourceRose VariableDeclaration a
instance ASTNode VariableDeclaration a
instance Data a => Plated (VariableDeclaration a) where plate = uniplate
makeLenses ''VariableDeclaration
deriveSmartTrav ''VariableDeclaration
type ParameterDeclarationBI = ParameterDeclaration BI
type ParameterDeclarationNI = ParameterDeclaration NI
instance (SourceInfo a, Show a) => ToSourceRose ParameterDeclaration a
instance ASTNode ParameterDeclaration a
instance Data a => Plated (ParameterDeclaration a) where plate = uniplate
makeLenses ''ParameterDeclaration
deriveSmartTrav ''ParameterDeclaration
type VariableDefinitionBI = VariableDefinition BI
type VariableDefinitionNI = VariableDefinition NI
instance (SourceInfo a, Show a) => ToSourceRose VariableDefinition a
instance ASTNode VariableDefinition a
instance Data a => Plated (VariableDefinition a) where plate = uniplate
makeLenses ''VariableDefinition
deriveSmartTrav ''VariableDefinition
type InlineAssemblyBI = InlineAssembly BI
type InlineAssemblyNI = InlineAssembly NI
instance (SourceInfo a, Show a) => ToSourceRose InlineAssembly a
instance ASTNode InlineAssembly a
instance Data a => Plated (InlineAssembly a) where plate = uniplate
makeLenses ''InlineAssembly
deriveSmartTrav ''InlineAssembly
type AssemblyStringBI = AssemblyString BI
type AssemblyStringNI = AssemblyString NI
instance (SourceInfo a, Show a) => ToSourceRose AssemblyString a
instance ASTNode AssemblyString a
instance Data a => Plated (AssemblyString a) where plate = uniplate
makeLenses ''AssemblyString
deriveSmartTrav ''AssemblyString
type AsmSpecifierBI = AsmSpecifier BI
type AsmSpecifierNI = AsmSpecifier NI
instance (SourceInfo a, Show a) => ToSourceRose AsmSpecifier a
instance ASTNode AsmSpecifier a
instance Data a => Plated (AsmSpecifier a) where plate = uniplate
makeLenses ''AsmSpecifier
deriveSmartTrav ''AsmSpecifier
type StatementBI = Statement BI
type StatementNI = Statement NI
instance (SourceInfo a, Show a) => ToSourceRose Statement a
instance ASTNode Statement a
instance Data a => Plated (Statement a) where plate = uniplate
makeLenses ''Statement
deriveSmartTrav ''Statement
type AssemblyParamBI = AssemblyParam BI
type AssemblyParamNI = AssemblyParam NI
instance (SourceInfo a, Show a) => ToSourceRose AssemblyParam a
instance ASTNode AssemblyParam a
instance Data a => Plated (AssemblyParam a) where plate = uniplate
makeLenses ''AssemblyParam
deriveSmartTrav ''AssemblyParam
type ExpressionBI = Expression BI
type ExpressionNI = Expression NI
instance (SourceInfo a, Show a) => ToSourceRose Expression a
instance ASTNode Expression a
instance Data a => Plated (Expression a) where plate = uniplate
makeLenses ''Expression
deriveSmartTrav ''Expression
type BinaryOpBI = BinaryOp BI
type BinaryOpNI = BinaryOp NI
instance (SourceInfo a, Show a) => ToSourceRose BinaryOp a
instance ASTNode BinaryOp a
instance Data a => Plated (BinaryOp a) where plate = uniplate
makeLenses ''BinaryOp
deriveSmartTrav ''BinaryOp
type UnaryOpBI = UnaryOp BI
type UnaryOpNI = UnaryOp NI
instance (SourceInfo a, Show a) => ToSourceRose UnaryOp a
instance ASTNode UnaryOp a
instance Data a => Plated (UnaryOp a) where plate = uniplate
makeLenses ''UnaryOp
deriveSmartTrav ''UnaryOp
type ArrayIndexBI = ArrayIndex BI
type ArrayIndexNI = ArrayIndex NI
instance (SourceInfo a, Show a) => ToSourceRose ArrayIndex a
instance ASTNode ArrayIndex a
instance Data a => Plated (ArrayIndex a) where plate = uniplate
makeLenses ''ArrayIndex
deriveSmartTrav ''ArrayIndex
type MemberDerefBI = MemberDeref BI
type MemberDerefNI = MemberDeref NI
instance (SourceInfo a, Show a) => ToSourceRose MemberDeref a
instance ASTNode MemberDeref a
instance Data a => Plated (MemberDeref a) where plate = uniplate
makeLenses ''MemberDeref
deriveSmartTrav ''MemberDeref
type LiteralBI = Literal BI
type LiteralNI = Literal NI
instance (SourceInfo a, Show a) => ToSourceRose Literal a
instance ASTNode Literal a
instance Data a => Plated (Literal a) where plate = uniplate
makeLenses ''Literal
deriveSmartTrav ''Literal
type IdentBI = Ident BI
type IdentNI = Ident NI
instance (SourceInfo a, Show a) => ToSourceRose Ident a
instance ASTNode Ident a
instance Data a => Plated (Ident a) where plate = uniplate
makeLenses ''Ident
deriveSmartTrav ''Ident
type QualifiedTypeBI = QualifiedType BI
type QualifiedTypeNI = QualifiedType NI
instance (SourceInfo a, Show a) => ToSourceRose QualifiedType a
instance ASTNode QualifiedType a
instance Data a => Plated (QualifiedType a) where plate = uniplate
makeLenses ''QualifiedType
deriveSmartTrav ''QualifiedType
type TypeBI = Type BI
type TypeNI = Type NI
instance (SourceInfo a, Show a) => ToSourceRose Type a
instance ASTNode Type a
instance Data a => Plated (Type a) where plate = uniplate
makeLenses ''Type
deriveSmartTrav ''Type
type TypeQualifierBI = TypeQualifier BI
type TypeQualifierNI = TypeQualifier NI
instance (SourceInfo a, Show a) => ToSourceRose TypeQualifier a
instance ASTNode TypeQualifier a
instance Data a => Plated (TypeQualifier a) where plate = uniplate
makeLenses ''TypeQualifier
deriveSmartTrav ''TypeQualifier
type ArrayTypeQualBI = ArrayTypeQual BI
type ArrayTypeQualNI = ArrayTypeQual NI
instance (SourceInfo a, Show a) => ToSourceRose ArrayTypeQual a
instance ASTNode ArrayTypeQual a
instance Data a => Plated (ArrayTypeQual a) where plate = uniplate
makeLenses ''ArrayTypeQual
deriveSmartTrav ''ArrayTypeQual
type StringLiteralBI = StringLiteral BI
type StringLiteralNI = StringLiteral NI
instance (SourceInfo a, Show a) => ToSourceRose StringLiteral a
instance ASTNode StringLiteral a
instance Data a => Plated (StringLiteral a) where plate = uniplate
makeLenses ''StringLiteral
deriveSmartTrav ''StringLiteral
type CompoundLitElemBI = CompoundLitElem BI
type CompoundLitElemNI = CompoundLitElem NI
instance (SourceInfo a, Show a) => ToSourceRose CompoundLitElem a
instance ASTNode CompoundLitElem a
instance Data a => Plated (CompoundLitElem a) where plate = uniplate
makeLenses ''CompoundLitElem
deriveSmartTrav ''CompoundLitElem
type DesignatorBI = Designator BI
type DesignatorNI = Designator NI
instance (SourceInfo a, Show a) => ToSourceRose Designator a
instance ASTNode Designator a
instance Data a => Plated (Designator a) where plate = uniplate
makeLenses ''Designator
deriveSmartTrav ''Designator
type StructUnionBI = StructUnion BI
type StructUnionNI = StructUnion NI
instance (SourceInfo a, Show a) => ToSourceRose StructUnion a
instance ASTNode StructUnion a
instance Data a => Plated (StructUnion a) where plate = uniplate
makeLenses ''StructUnion
deriveSmartTrav ''StructUnion
type EnumerationBI = Enumeration BI
type EnumerationNI = Enumeration NI
instance (SourceInfo a, Show a) => ToSourceRose Enumeration a
instance ASTNode Enumeration a
instance Data a => Plated (Enumeration a) where plate = uniplate
makeLenses ''Enumeration
deriveSmartTrav ''Enumeration
type VariantBI = Variant BI
type VariantNI = Variant NI
instance (SourceInfo a, Show a) => ToSourceRose Variant a
instance ASTNode Variant a
instance Data a => Plated (Variant a) where plate = uniplate
makeLenses ''Variant
deriveSmartTrav ''Variant
-- * Instances for generic AST elements
type ASTListBI e = ASTList e BI
type ASTListNI e = ASTList e NI
instance (Show a, ToSourceRose e a, Generic (e a)) => ToSourceRose (ASTList e) a
instance (ASTNode e a, Generic (e a)) => ASTNode (ASTList e) a
deriveSmartTrav ''ASTList
type ASTWrapperBI e = ASTWrapper e BI
type ASTWrappereNI e = ASTWrapper e NI
instance (Show a, ToSourceRose e a, Generic (e a)) => ToSourceRose (ASTWrapper e) a
instance (ASTNode e a, Generic (e a)) => ASTNode (ASTWrapper e) a
deriveSmartTrav ''ASTWrapper
type ASTMaybeBI e = ASTMaybe e BI
type ASTMaybeNI e = ASTMaybe e NI
instance (Show a, ToSourceRose e a, Generic (e a)) => ToSourceRose (ASTMaybe e) a
instance (ASTNode e a, Generic (e a)) => ASTNode (ASTMaybe e) a
deriveSmartTrav ''ASTMaybe
type ASTEitherBI n m = ASTEither n m BI
type ASTEitherNI n m = ASTEither n m NI
instance (Show a, ToSourceRose n a, ToSourceRose m a
, Generic (n a), Generic (m a)) => ToSourceRose (ASTEither n m) a
instance (ASTNode n a, ASTNode m a, Generic (n a), Generic (m a))
=> ASTNode (ASTEither n m) a
deriveSmartTrav ''ASTEither
type ASTPairBI n m = ASTPair n m BI
type ASTPairNI n m = ASTPair n m NI
instance (Show a, ToSourceRose n a, ToSourceRose m a
, Generic (n a), Generic (m a)) => ToSourceRose (ASTPair n m) a
instance (ASTNode n a, ASTNode m a, Generic (n a), Generic (m a))
=> ASTNode (ASTPair n m) a
deriveSmartTrav ''ASTPair
-- * AST data elements used in C AST nodes
instance ASTData Bool
instance ASTData Int
instance ASTData Char
instance ASTData String
instance ASTData Rational
instance ASTData Integer
instance ASTData IntLitSize
instance ASTData IntLitSign
instance ASTData IntLitSpec
instance ASTData FloatLitSize
instance ASTData FloatingSize
instance ASTData IntSize
instance ASTData Sign
instance ASTData a => ASTData (Maybe a)
makeLenses ''IntLitSpec