{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
module Language.Cimple.AST
( AssignOp (..)
, BinaryOp (..)
, UnaryOp (..)
, LiteralType (..)
, Node (..)
, Scope (..)
) where
import Data.Aeson (FromJSON, ToJSON)
import GHC.Generics (Generic)
data Node lexeme
= PreprocInclude lexeme
| PreprocDefine lexeme
| PreprocDefineConst lexeme (Node lexeme)
| PreprocDefineMacro lexeme [Node lexeme] (Node lexeme)
| PreprocIf (Node lexeme) [Node lexeme] (Node lexeme)
| PreprocIfdef lexeme [Node lexeme] (Node lexeme)
| PreprocIfndef lexeme [Node lexeme] (Node lexeme)
| PreprocElse [Node lexeme]
| PreprocElif (Node lexeme) [Node lexeme] (Node lexeme)
| PreprocError lexeme
| PreprocUndef lexeme
| PreprocDefined lexeme
| PreprocScopedDefine (Node lexeme) [Node lexeme] (Node lexeme)
| MacroBodyStmt [Node lexeme]
| MacroBodyFunCall (Node lexeme)
| MacroParam lexeme
| Comment [Node lexeme]
| CommentBlock lexeme
| CommentWord lexeme
| Commented (Node lexeme) (Node lexeme)
| ExternC [Node lexeme]
| Class Scope lexeme [Node lexeme] [Node lexeme]
| Namespace Scope lexeme [Node lexeme]
| CompoundStmt [Node lexeme]
| Break
| Goto lexeme
| Continue
| Return (Maybe (Node lexeme))
| Switch (Node lexeme) [Node lexeme]
| IfStmt (Node lexeme) [Node lexeme] (Maybe (Node lexeme))
| ForStmt (Maybe (Node lexeme)) (Maybe (Node lexeme)) (Maybe (Node lexeme)) [Node lexeme]
| WhileStmt (Node lexeme) [Node lexeme]
| DoWhileStmt [Node lexeme] (Node lexeme)
| Case (Node lexeme) (Node lexeme)
| Default (Node lexeme)
| Label lexeme (Node lexeme)
| VLA (Node lexeme) lexeme (Node lexeme)
| VarDecl (Node lexeme) [Node lexeme]
| Declarator (Node lexeme) (Maybe (Node lexeme))
| DeclSpecVar lexeme
| DeclSpecArray (Node lexeme) (Maybe (Node lexeme))
| InitialiserList [Node lexeme]
| UnaryExpr UnaryOp (Node lexeme)
| BinaryExpr (Node lexeme) BinaryOp (Node lexeme)
| TernaryExpr (Node lexeme) (Node lexeme) (Node lexeme)
| AssignExpr (Node lexeme) AssignOp (Node lexeme)
| ParenExpr (Node lexeme)
| CastExpr (Node lexeme) (Node lexeme)
| SizeofExpr (Node lexeme)
| LiteralExpr LiteralType lexeme
| VarExpr lexeme
| MemberAccess (Node lexeme) lexeme
| PointerAccess (Node lexeme) lexeme
| ArrayAccess (Node lexeme) (Node lexeme)
| FunctionCall (Node lexeme) [Node lexeme]
| CommentExpr (Node lexeme) (Node lexeme)
| EnumClass lexeme [Node lexeme]
| EnumConsts (Maybe lexeme) [Node lexeme]
| EnumDecl lexeme [Node lexeme] lexeme
| Enumerator lexeme (Maybe (Node lexeme))
| ClassForward lexeme [Node lexeme]
| Typedef (Node lexeme) lexeme
| TypedefFunction (Node lexeme)
| Struct lexeme [Node lexeme]
| Union lexeme [Node lexeme]
| MemberDecl (Node lexeme) (Node lexeme) (Maybe lexeme)
| TyConst (Node lexeme)
| TyPointer (Node lexeme)
| TyStruct lexeme
| TyFunc lexeme
| TyStd lexeme
| TyVar lexeme
| TyUserDefined lexeme
| FunctionDecl Scope (Node lexeme) (Maybe (Node lexeme))
| FunctionDefn Scope (Node lexeme) [Node lexeme]
| FunctionPrototype (Node lexeme) lexeme [Node lexeme]
| FunctionParam (Node lexeme) (Node lexeme)
| Event lexeme (Node lexeme)
| EventParams [Node lexeme]
| Property (Node lexeme) (Node lexeme) [Node lexeme]
| Accessor lexeme [Node lexeme] (Maybe (Node lexeme))
| ErrorDecl lexeme [Node lexeme]
| ErrorList [Node lexeme]
| ErrorFor lexeme
| Ellipsis
| ConstDecl (Node lexeme) lexeme
| ConstDefn Scope (Node lexeme) lexeme (Node lexeme)
deriving (Show, Eq, Generic, Functor, Foldable, Traversable)
instance FromJSON lexeme => FromJSON (Node lexeme)
instance ToJSON lexeme => ToJSON (Node lexeme)
data AssignOp
= AopEq
| AopMul
| AopDiv
| AopPlus
| AopMinus
| AopBitAnd
| AopBitOr
| AopBitXor
| AopMod
| AopLsh
| AopRsh
deriving (Show, Eq, Generic)
instance FromJSON AssignOp
instance ToJSON AssignOp
data BinaryOp
= BopNe
| BopEq
| BopOr
| BopBitXor
| BopBitOr
| BopAnd
| BopBitAnd
| BopDiv
| BopMul
| BopMod
| BopPlus
| BopMinus
| BopLt
| BopLe
| BopLsh
| BopGt
| BopGe
| BopRsh
deriving (Show, Eq, Generic)
instance FromJSON BinaryOp
instance ToJSON BinaryOp
data UnaryOp
= UopNot
| UopNeg
| UopMinus
| UopAddress
| UopDeref
| UopIncr
| UopDecr
deriving (Show, Eq, Generic)
instance FromJSON UnaryOp
instance ToJSON UnaryOp
data LiteralType
= Char
| Int
| Bool
| String
| ConstId
deriving (Show, Eq, Generic)
instance FromJSON LiteralType
instance ToJSON LiteralType
data Scope
= Global
| Static
deriving (Show, Eq, Generic)
instance FromJSON Scope
instance ToJSON Scope