module HJS.Parser.JavaScript where
class EmitHaskell a where
eHs :: a -> String
data Literal = LitInt Int
| LitString String
| LitNull
| LitBool Bool
deriving Show
data PrimExpr
= Literal Literal
| Ident String
| Brack Expr
| This
| Regex (String,String)
| Array ArrayLit
| Object [Either (PropName, AssignE) GetterPutter ]
| PEFuncDecl FuncDecl
deriving Show
data GetterPutter =
GetterPutter PropName FuncDecl | Putter FuncDecl deriving Show
data PropName = PropNameId String | PropNameStr String | PropNameInt Int
deriving Show
data ArrayLit = ArrSimple [AssignE]
deriving Show
data MemberExpr = MemPrimExpr PrimExpr
| ArrayExpr MemberExpr Expr
| MemberNew MemberExpr [AssignE]
| MemberCall MemberExpr String
| MemberCall2 MemberExpr MemberExpr
deriving Show
data CallExpr = CallPrim MemberExpr
| CallMember MemberExpr [AssignE]
| CallCall CallExpr [AssignE]
| CallSquare CallExpr Expr
| CallDot CallExpr String
deriving Show
data NewExpr = MemberExpr MemberExpr
| NewNewExpr NewExpr
deriving Show
data LeftExpr = NewExpr NewExpr
| CallExpr CallExpr
deriving Show
data PostFix = LeftExpr LeftExpr
| PostInc LeftExpr
| PostDec LeftExpr
deriving Show
data UExpr = PostFix PostFix
| Delete UExpr
| Void UExpr
| TypeOf UExpr
| DoublePlus UExpr
| DoubleMinus UExpr
| UnaryPlus UExpr
| UnaryMinus UExpr
| Not UExpr
| BitNot UExpr
deriving Show
data AExpr = AEUExpr UExpr | AOp String AExpr AExpr deriving Show
data CondE = AExpr AExpr
| CondIf AExpr AssignE AssignE
deriving Show
data AssignOp = AssignNormal
| AssignOpMult
| AssignOpDiv
| AssignOpMod
| AssignOpPlus
| AssignOpMinus deriving Show
data AssignE = CondE CondE
| Assign LeftExpr AssignOp AssignE
| AEFuncDecl FuncDecl
deriving Show
data Expr = AssignE AssignE
deriving Show
data VarDecl = VarDecl String (Maybe AssignE) deriving Show
data IfStmt = IfElse Expr Stmt Stmt
| IfOnly Expr Stmt
| If2 Expr
| If3
deriving Show
data ItStmt = DoWhile Stmt Expr
| While Expr Stmt
| For (Maybe Expr) (Maybe Expr) (Maybe Expr) Stmt
| ForVar [VarDecl] (Maybe Expr) (Maybe Expr) Stmt
| ForIn LeftExpr Expr Stmt
| It2 Expr
deriving Show
data TryStmt = TryBC [Stmt] [Catch]
| TryBF [Stmt] [Stmt]
| TryBCF [Stmt] [Catch] [Stmt]
| TryTry [Stmt] [Catch] [Stmt]
deriving Show
data Catch = Catch String [Stmt] | CatchIf String [Stmt] Expr | CatchCatch String (Maybe Expr) [Stmt]
deriving Show
data Stmt = StmtPos (Int,Int) Stmt' deriving Show
data Stmt' = IfStmt IfStmt | EmptyStmt | ExprStmt Expr | ItStmt ItStmt | Block [Stmt]
| VarStmt [VarDecl ]
| TryStmt TryStmt
| ContStmt (Maybe String)
| BreakStmt (Maybe String)
| ReturnStmt (Maybe Expr)
| WithStmt Expr Stmt
| LabelledStmt String Stmt
| Switch Expr [CaseClause]
| ThrowExpr Expr
deriving Show
data Switch = SSwitch Expr [CaseClause]
deriving Show
data CaseBlock = CaseBlock [CaseClause]
deriving Show
data CaseClause = CaseClause Expr [Stmt] | DefaultClause [Stmt]
deriving Show
data FuncDecl = FuncDecl (Maybe String) [String] [SourceElement]
deriving Show
data SourceElement = Stmt Stmt | SEFuncDecl FuncDecl
deriving Show
data JSProgram = JSProgram [SourceElement]
deriving Show