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