module Language.Slice.Syntax.AST
( IncludeDelimiters(..)
, SliceType(..)
, SliceVal(..)
, SliceDecl(..)
, Annotation(..)
, FieldDecl(..)
, MethodDecl(..)
, MethodOrFieldDecl(..)
) where
data IncludeDelimiters = AngleBrackets | Quotes deriving (Show, Read, Eq)
data SliceType = STVoid
| STBool | STByte | STShort | STInt | STLong
| STFloat | STDouble
| STString
| STUserDefined String
| STUserDefinedPrx String
deriving (Show, Read, Eq)
data SliceVal = SliceBool Bool
| SliceStr String
| SliceInteger Integer
| SliceDouble Double
| SliceIdentifier String
deriving (Show, Read, Eq)
data SliceDecl = ModuleDecl String [SliceDecl]
| IncludeDecl IncludeDelimiters String
| EnumDecl String [String]
| StructDecl String [FieldDecl]
| ClassDecl String (Maybe String) [MethodOrFieldDecl]
| InterfaceDecl String [String] [MethodDecl]
| InterfaceFDecl String
| SequenceDecl SliceType String
| DictionaryDecl SliceType SliceType String
| ExceptionDecl String [String] [FieldDecl]
| ConstDecl SliceType String SliceVal
deriving (Show, Read, Eq)
data Annotation = Idempotent deriving (Show, Read, Eq)
data FieldDecl = FieldDecl SliceType String (Maybe SliceVal) deriving (Show, Read, Eq)
data MethodDecl = MethodDecl SliceType String [FieldDecl] [String] (Maybe Annotation) deriving (Show, Read, Eq)
data MethodOrFieldDecl = MDecl MethodDecl | FDecl FieldDecl deriving (Show, Read, Eq)