module Language.Lua.Types where
type Name = String
data Stat
= Assign [Var] [Exp]
| FunCall FunCall
| Label Name
| Break
| Goto Name
| Do Block
| While Exp Block
| Repeat Block Exp
| If [(Exp, Block)] (Maybe Block)
| ForRange Name Exp Exp (Maybe Exp) Block
| ForIn [Name] [Exp] Block
| FunAssign FunName FunBody
| LocalFunAssign Name FunBody
| LocalAssign [Name] (Maybe [Exp])
| EmptyStat
deriving (Show, Eq)
data Exp
= Nil
| Bool Bool
| Number String
| String String
| Vararg
| EFunDef FunDef
| PrefixExp PrefixExp
| TableConst Table
| Binop Binop Exp Exp
| Unop Unop Exp
deriving (Show, Eq)
data Var
= Name Name
| Select PrefixExp Exp
| SelectName PrefixExp Name
deriving (Show, Eq)
data Binop = Add | Sub | Mul | Div | Exp | Mod | Concat
| LT | LTE | GT | GTE | EQ | NEQ | And | Or
deriving (Show, Eq)
data Unop = Neg | Not | Len
deriving (Show, Eq)
data PrefixExp
= PEVar Var
| PEFunCall FunCall
| Paren Exp
deriving (Show, Eq)
data Table = Table [TableField]
deriving (Show, Eq)
data TableField
= ExpField Exp Exp
| NamedField Name Exp
| Field Exp
deriving (Show, Eq)
data Block = Block [Stat] (Maybe [Exp])
deriving (Show, Eq)
data FunName = FunName Name (Maybe Name) [Name]
deriving (Show, Eq)
data FunDef = FunDef FunBody
deriving (Show, Eq)
data FunBody = FunBody [Name] Bool Block
deriving (Show, Eq)
data FunCall
= NormalFunCall PrefixExp FunArg
| MethodCall PrefixExp Name FunArg
deriving (Show, Eq)
data FunArg
= Args [Exp]
| TableArg Table
| StringArg String
deriving (Show, Eq)