{-# LANGUAGE NoMonomorphismRestriction #-}
module Language.ECMAScript3.Syntax.CodeGen where
import Language.ECMAScript3.Syntax
import Data.Default.Class
import Data.String
script :: Default a => [Statement a] -> JavaScript a
script :: [Statement a] -> JavaScript a
script = a -> [Statement a] -> JavaScript a
forall a. a -> [Statement a] -> JavaScript a
Script a
forall a. Default a => a
def
instance Default a => IsString (Id a) where
fromString :: String -> Id a
fromString = a -> String -> Id a
forall a. a -> String -> Id a
Id a
forall a. Default a => a
def
instance Default a => IsString (Prop a) where
fromString :: String -> Prop a
fromString = a -> String -> Prop a
forall a. a -> String -> Prop a
PropString a
forall a. Default a => a
def
ident :: Default a => String -> Id a
ident :: String -> Id a
ident = a -> String -> Id a
forall a. a -> String -> Id a
Id a
forall a. Default a => a
def
propId :: Default a => Id a -> Prop a
propId :: Id a -> Prop a
propId = a -> Id a -> Prop a
forall a. a -> Id a -> Prop a
PropId a
forall a. Default a => a
def
propS :: Default a => String -> Prop a
propS :: String -> Prop a
propS = a -> String -> Prop a
forall a. a -> String -> Prop a
PropString a
forall a. Default a => a
def
propN :: Default a => Integer -> Prop a
propN :: Integer -> Prop a
propN = a -> Integer -> Prop a
forall a. a -> Integer -> Prop a
PropNum a
forall a. Default a => a
def
instance Default a => IsString (LValue a) where
fromString :: String -> LValue a
fromString = a -> String -> LValue a
forall a. a -> String -> LValue a
LVar a
forall a. Default a => a
def
lvar :: Default a => String -> LValue a
lvar :: String -> LValue a
lvar = a -> String -> LValue a
forall a. a -> String -> LValue a
LVar a
forall a. Default a => a
def
ldot :: Default a => Expression a -> String -> LValue a
ldot :: Expression a -> String -> LValue a
ldot = a -> Expression a -> String -> LValue a
forall a. a -> Expression a -> String -> LValue a
LDot a
forall a. Default a => a
def
lbrack :: Default a => Expression a -> Expression a -> LValue a
lbrack :: Expression a -> Expression a -> LValue a
lbrack = a -> Expression a -> Expression a -> LValue a
forall a. a -> Expression a -> Expression a -> LValue a
LBracket a
forall a. Default a => a
def
instance Default a => IsString (Expression a) where
fromString :: String -> Expression a
fromString = a -> String -> Expression a
forall a. a -> String -> Expression a
StringLit a
forall a. Default a => a
def
string :: Default a => String -> Expression a
string :: String -> Expression a
string = a -> String -> Expression a
forall a. a -> String -> Expression a
StringLit a
forall a. Default a => a
def
regexp :: Default a => String -> Bool -> Bool -> Expression a
regexp :: String -> Bool -> Bool -> Expression a
regexp = a -> String -> Bool -> Bool -> Expression a
forall a. a -> String -> Bool -> Bool -> Expression a
RegexpLit a
forall a. Default a => a
def
number :: Default a => Double -> Expression a
number :: Double -> Expression a
number = a -> Double -> Expression a
forall a. a -> Double -> Expression a
NumLit a
forall a. Default a => a
def
bool :: Default a => Bool -> Expression a
bool :: Bool -> Expression a
bool = a -> Bool -> Expression a
forall a. a -> Bool -> Expression a
BoolLit a
forall a. Default a => a
def
int :: Default a => Int -> Expression a
int :: Int -> Expression a
int = a -> Int -> Expression a
forall a. a -> Int -> Expression a
IntLit a
forall a. Default a => a
def
null_ :: Default a => Expression a
null_ :: Expression a
null_ = a -> Expression a
forall a. a -> Expression a
NullLit a
forall a. Default a => a
def
array :: Default a => [Expression a] -> Expression a
array :: [Expression a] -> Expression a
array = a -> [Expression a] -> Expression a
forall a. a -> [Expression a] -> Expression a
ArrayLit a
forall a. Default a => a
def
object :: Default a => [(Prop a, Expression a)] -> Expression a
object :: [(Prop a, Expression a)] -> Expression a
object = a -> [(Prop a, Expression a)] -> Expression a
forall a. a -> [(Prop a, Expression a)] -> Expression a
ObjectLit a
forall a. Default a => a
def
this :: Default a => Expression a
this :: Expression a
this = a -> Expression a
forall a. a -> Expression a
ThisRef a
forall a. Default a => a
def
var :: Default a => Id a -> Expression a
var :: Id a -> Expression a
var = a -> Id a -> Expression a
forall a. a -> Id a -> Expression a
VarRef a
forall a. Default a => a
def
dot :: Default a => Expression a -> Id a -> Expression a
dot :: Expression a -> Id a -> Expression a
dot = a -> Expression a -> Id a -> Expression a
forall a. a -> Expression a -> Id a -> Expression a
DotRef a
forall a. Default a => a
def
brack :: Default a => Expression a -> Expression a -> Expression a
brack :: Expression a -> Expression a -> Expression a
brack = a -> Expression a -> Expression a -> Expression a
forall a. a -> Expression a -> Expression a -> Expression a
BracketRef a
forall a. Default a => a
def
new :: Default a => Expression a -> [Expression a] -> Expression a
new :: Expression a -> [Expression a] -> Expression a
new = a -> Expression a -> [Expression a] -> Expression a
forall a. a -> Expression a -> [Expression a] -> Expression a
NewExpr a
forall a. Default a => a
def
prefix :: Default a => PrefixOp -> Expression a -> Expression a
prefix :: PrefixOp -> Expression a -> Expression a
prefix = a -> PrefixOp -> Expression a -> Expression a
forall a. a -> PrefixOp -> Expression a -> Expression a
PrefixExpr a
forall a. Default a => a
def
lnot :: Default a => Expression a -> Expression a
lnot :: Expression a -> Expression a
lnot = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixLNot
bnot :: Default a => Expression a -> Expression a
bnot :: Expression a -> Expression a
bnot = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixBNot
plus :: Default a => Expression a -> Expression a
plus :: Expression a -> Expression a
plus = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixPlus
minus :: Default a => Expression a -> Expression a
minus :: Expression a -> Expression a
minus = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixMinus
typeof :: Default a => Expression a -> Expression a
typeof :: Expression a -> Expression a
typeof = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixTypeof
void :: Default a => Expression a -> Expression a
void :: Expression a -> Expression a
void = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixVoid
delete :: Default a => Expression a -> Expression a
delete :: Expression a -> Expression a
delete = PrefixOp -> Expression a -> Expression a
forall a. Default a => PrefixOp -> Expression a -> Expression a
prefix PrefixOp
PrefixDelete
uassign :: Default a => UnaryAssignOp -> LValue a -> Expression a
uassign :: UnaryAssignOp -> LValue a -> Expression a
uassign = a -> UnaryAssignOp -> LValue a -> Expression a
forall a. a -> UnaryAssignOp -> LValue a -> Expression a
UnaryAssignExpr a
forall a. Default a => a
def
preinc :: Default a => LValue a -> Expression a
preinc :: LValue a -> Expression a
preinc = UnaryAssignOp -> LValue a -> Expression a
forall a. Default a => UnaryAssignOp -> LValue a -> Expression a
uassign UnaryAssignOp
PrefixInc
predec :: Default a => LValue a -> Expression a
predec :: LValue a -> Expression a
predec = UnaryAssignOp -> LValue a -> Expression a
forall a. Default a => UnaryAssignOp -> LValue a -> Expression a
uassign UnaryAssignOp
PrefixDec
postinc :: Default a => LValue a -> Expression a
postinc :: LValue a -> Expression a
postinc = UnaryAssignOp -> LValue a -> Expression a
forall a. Default a => UnaryAssignOp -> LValue a -> Expression a
uassign UnaryAssignOp
PostfixInc
postdec :: Default a => LValue a -> Expression a
postdec :: LValue a -> Expression a
postdec = UnaryAssignOp -> LValue a -> Expression a
forall a. Default a => UnaryAssignOp -> LValue a -> Expression a
uassign UnaryAssignOp
PostfixDec
infixe
:: Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe :: InfixOp -> Expression a -> Expression a -> Expression a
infixe = a -> InfixOp -> Expression a -> Expression a -> Expression a
forall a.
a -> InfixOp -> Expression a -> Expression a -> Expression a
InfixExpr a
forall a. Default a => a
def
lt :: Default a => Expression a -> Expression a -> Expression a
lt :: Expression a -> Expression a -> Expression a
lt = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpLT
le :: Default a => Expression a -> Expression a -> Expression a
le :: Expression a -> Expression a -> Expression a
le = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpLEq
gt :: Default a => Expression a -> Expression a -> Expression a
gt :: Expression a -> Expression a -> Expression a
gt = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpGT
ge :: Default a => Expression a -> Expression a -> Expression a
ge :: Expression a -> Expression a -> Expression a
ge = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpGEq
in_ :: Default a => Expression a -> Expression a -> Expression a
in_ :: Expression a -> Expression a -> Expression a
in_= InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpIn
instanceof
:: Default a => Expression a -> Expression a -> Expression a
instanceof :: Expression a -> Expression a -> Expression a
instanceof = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpInstanceof
eq :: Default a => Expression a -> Expression a -> Expression a
eq :: Expression a -> Expression a -> Expression a
eq = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpEq
neq :: Default a => Expression a -> Expression a -> Expression a
neq :: Expression a -> Expression a -> Expression a
neq = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpNEq
steq :: Default a => Expression a -> Expression a -> Expression a
steq :: Expression a -> Expression a -> Expression a
steq = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpStrictEq
stneq :: Default a => Expression a -> Expression a -> Expression a
stneq :: Expression a -> Expression a -> Expression a
stneq = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpStrictNEq
land :: Default a => Expression a -> Expression a -> Expression a
land :: Expression a -> Expression a -> Expression a
land = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpLAnd
lor :: Default a => Expression a -> Expression a -> Expression a
lor :: Expression a -> Expression a -> Expression a
lor = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpLOr
mul :: Default a => Expression a -> Expression a -> Expression a
mul :: Expression a -> Expression a -> Expression a
mul = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpMul
div :: Default a => Expression a -> Expression a -> Expression a
div :: Expression a -> Expression a -> Expression a
div = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpDiv
mod :: Default a => Expression a -> Expression a -> Expression a
mod :: Expression a -> Expression a -> Expression a
mod = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpMod
sub :: Default a => Expression a -> Expression a -> Expression a
sub :: Expression a -> Expression a -> Expression a
sub = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpSub
lshift :: Default a => Expression a -> Expression a -> Expression a
lshift :: Expression a -> Expression a -> Expression a
lshift = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpLShift
srshift
:: Default a => Expression a -> Expression a -> Expression a
srshift :: Expression a -> Expression a -> Expression a
srshift = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpSpRShift
zrshift
:: Default a => Expression a -> Expression a -> Expression a
zrshift :: Expression a -> Expression a -> Expression a
zrshift = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpZfRShift
band :: Default a => Expression a -> Expression a -> Expression a
band :: Expression a -> Expression a -> Expression a
band = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpBAnd
bor :: Default a => Expression a -> Expression a -> Expression a
bor :: Expression a -> Expression a -> Expression a
bor = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpBOr
xor :: Default a => Expression a -> Expression a -> Expression a
xor :: Expression a -> Expression a -> Expression a
xor = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpBXor
add :: Default a => Expression a -> Expression a -> Expression a
add :: Expression a -> Expression a -> Expression a
add = InfixOp -> Expression a -> Expression a -> Expression a
forall a.
Default a =>
InfixOp -> Expression a -> Expression a -> Expression a
infixe InfixOp
OpAdd
cond
:: Default a =>
Expression a -> Expression a -> Expression a -> Expression a
cond :: Expression a -> Expression a -> Expression a -> Expression a
cond = a -> Expression a -> Expression a -> Expression a -> Expression a
forall a.
a -> Expression a -> Expression a -> Expression a -> Expression a
CondExpr a
forall a. Default a => a
def
assignop :: Default a => AssignOp -> LValue a -> Expression a -> Expression a
assignop :: AssignOp -> LValue a -> Expression a -> Expression a
assignop = a -> AssignOp -> LValue a -> Expression a -> Expression a
forall a. a -> AssignOp -> LValue a -> Expression a -> Expression a
AssignExpr a
forall a. Default a => a
def
assign
:: Default a => LValue a -> Expression a -> Expression a
assign :: LValue a -> Expression a -> Expression a
assign = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssign
assignadd :: Default a => LValue a -> Expression a -> Expression a
assignadd :: LValue a -> Expression a -> Expression a
assignadd = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignAdd
assignsub :: Default a => LValue a -> Expression a -> Expression a
assignsub :: LValue a -> Expression a -> Expression a
assignsub = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignSub
assignmul :: Default a => LValue a -> Expression a -> Expression a
assignmul :: LValue a -> Expression a -> Expression a
assignmul = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignMul
assigndiv :: Default a => LValue a -> Expression a -> Expression a
assigndiv :: LValue a -> Expression a -> Expression a
assigndiv = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignDiv
assignmod :: Default a => LValue a -> Expression a -> Expression a
assignmod :: LValue a -> Expression a -> Expression a
assignmod = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignMod
assignlshift
:: Default a => LValue a -> Expression a -> Expression a
assignlshift :: LValue a -> Expression a -> Expression a
assignlshift = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignLShift
assignsrshift
:: Default a => LValue a -> Expression a -> Expression a
assignsrshift :: LValue a -> Expression a -> Expression a
assignsrshift = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignSpRShift
assignzrshift
:: Default a => LValue a -> Expression a -> Expression a
assignzrshift :: LValue a -> Expression a -> Expression a
assignzrshift = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignZfRShift
assignband :: Default a => LValue a -> Expression a -> Expression a
assignband :: LValue a -> Expression a -> Expression a
assignband = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignBAnd
assignxor :: Default a => LValue a -> Expression a -> Expression a
assignxor :: LValue a -> Expression a -> Expression a
assignxor = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignBXor
assignbor :: Default a => LValue a -> Expression a -> Expression a
assignbor :: LValue a -> Expression a -> Expression a
assignbor = AssignOp -> LValue a -> Expression a -> Expression a
forall a.
Default a =>
AssignOp -> LValue a -> Expression a -> Expression a
assignop AssignOp
OpAssignBOr
list :: Default a => [Expression a] -> Expression a
list :: [Expression a] -> Expression a
list = a -> [Expression a] -> Expression a
forall a. a -> [Expression a] -> Expression a
ListExpr a
forall a. Default a => a
def
call :: Default a => Expression a -> [Expression a] -> Expression a
call :: Expression a -> [Expression a] -> Expression a
call = a -> Expression a -> [Expression a] -> Expression a
forall a. a -> Expression a -> [Expression a] -> Expression a
CallExpr a
forall a. Default a => a
def
func
:: Default a => Id a -> [Id a] -> [Statement a] -> Expression a
func :: Id a -> [Id a] -> [Statement a] -> Expression a
func Id a
id = a -> Maybe (Id a) -> [Id a] -> [Statement a] -> Expression a
forall a.
a -> Maybe (Id a) -> [Id a] -> [Statement a] -> Expression a
FuncExpr a
forall a. Default a => a
def (Id a -> Maybe (Id a)
forall a. a -> Maybe a
Just Id a
id)
lambda :: Default a => [Id a] -> [Statement a] -> Expression a
lambda :: [Id a] -> [Statement a] -> Expression a
lambda = a -> Maybe (Id a) -> [Id a] -> [Statement a] -> Expression a
forall a.
a -> Maybe (Id a) -> [Id a] -> [Statement a] -> Expression a
FuncExpr a
forall a. Default a => a
def Maybe (Id a)
forall a. Maybe a
Nothing
casee :: Default a => Expression a -> [Statement a] -> CaseClause a
casee :: Expression a -> [Statement a] -> CaseClause a
casee = a -> Expression a -> [Statement a] -> CaseClause a
forall a. a -> Expression a -> [Statement a] -> CaseClause a
CaseClause a
forall a. Default a => a
def
defaultc :: Default a => [Statement a] -> CaseClause a
defaultc :: [Statement a] -> CaseClause a
defaultc = a -> [Statement a] -> CaseClause a
forall a. a -> [Statement a] -> CaseClause a
CaseDefault a
forall a. Default a => a
def
catch :: Default a => Id a -> Statement a -> CatchClause a
catch :: Id a -> Statement a -> CatchClause a
catch = a -> Id a -> Statement a -> CatchClause a
forall a. a -> Id a -> Statement a -> CatchClause a
CatchClause a
forall a. Default a => a
def
vardecl :: Default a => Id a -> VarDecl a
vardecl :: Id a -> VarDecl a
vardecl Id a
id = a -> Id a -> Maybe (Expression a) -> VarDecl a
forall a. a -> Id a -> Maybe (Expression a) -> VarDecl a
VarDecl a
forall a. Default a => a
def Id a
id Maybe (Expression a)
forall a. Maybe a
Nothing
varinit :: Default a => Id a -> Expression a -> VarDecl a
varinit :: Id a -> Expression a -> VarDecl a
varinit Id a
id = a -> Id a -> Maybe (Expression a) -> VarDecl a
forall a. a -> Id a -> Maybe (Expression a) -> VarDecl a
VarDecl a
forall a. Default a => a
def Id a
id (Maybe (Expression a) -> VarDecl a)
-> (Expression a -> Maybe (Expression a))
-> Expression a
-> VarDecl a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Expression a -> Maybe (Expression a)
forall a. a -> Maybe a
Just
block :: Default a => [Statement a] -> Statement a
block :: [Statement a] -> Statement a
block = a -> [Statement a] -> Statement a
forall a. a -> [Statement a] -> Statement a
BlockStmt a
forall a. Default a => a
def
empty :: Default a => Statement a
empty :: Statement a
empty = a -> Statement a
forall a. a -> Statement a
EmptyStmt a
forall a. Default a => a
def
expr :: Default a => Expression a -> Statement a
expr :: Expression a -> Statement a
expr = a -> Expression a -> Statement a
forall a. a -> Expression a -> Statement a
ExprStmt a
forall a. Default a => a
def
ifte
:: Default a =>
Expression a -> Statement a -> Statement a -> Statement a
ifte :: Expression a -> Statement a -> Statement a -> Statement a
ifte = a -> Expression a -> Statement a -> Statement a -> Statement a
forall a.
a -> Expression a -> Statement a -> Statement a -> Statement a
IfStmt a
forall a. Default a => a
def
ift :: Default a => Expression a -> Statement a -> Statement a
ift :: Expression a -> Statement a -> Statement a
ift = a -> Expression a -> Statement a -> Statement a
forall a. a -> Expression a -> Statement a -> Statement a
IfSingleStmt a
forall a. Default a => a
def
switch
:: Default a => Expression a -> [CaseClause a] -> Statement a
switch :: Expression a -> [CaseClause a] -> Statement a
switch = a -> Expression a -> [CaseClause a] -> Statement a
forall a. a -> Expression a -> [CaseClause a] -> Statement a
SwitchStmt a
forall a. Default a => a
def
while :: Default a => Expression a -> Statement a -> Statement a
while :: Expression a -> Statement a -> Statement a
while = a -> Expression a -> Statement a -> Statement a
forall a. a -> Expression a -> Statement a -> Statement a
WhileStmt a
forall a. Default a => a
def
dowhile :: Default a => Statement a -> Expression a -> Statement a
dowhile :: Statement a -> Expression a -> Statement a
dowhile = a -> Statement a -> Expression a -> Statement a
forall a. a -> Statement a -> Expression a -> Statement a
DoWhileStmt a
forall a. Default a => a
def
break :: Default a => Maybe (Id a) -> Statement a
break :: Maybe (Id a) -> Statement a
break = a -> Maybe (Id a) -> Statement a
forall a. a -> Maybe (Id a) -> Statement a
BreakStmt a
forall a. Default a => a
def
continue :: Default a => Maybe (Id a) -> Statement a
continue :: Maybe (Id a) -> Statement a
continue = a -> Maybe (Id a) -> Statement a
forall a. a -> Maybe (Id a) -> Statement a
ContinueStmt a
forall a. Default a => a
def
label :: Default a => Id a -> Statement a -> Statement a
label :: Id a -> Statement a -> Statement a
label = a -> Id a -> Statement a -> Statement a
forall a. a -> Id a -> Statement a -> Statement a
LabelledStmt a
forall a. Default a => a
def
forin
:: Default a =>
ForInInit a -> Expression a -> Statement a -> Statement a
forin :: ForInInit a -> Expression a -> Statement a -> Statement a
forin = a -> ForInInit a -> Expression a -> Statement a -> Statement a
forall a.
a -> ForInInit a -> Expression a -> Statement a -> Statement a
ForInStmt a
forall a. Default a => a
def
for
:: Default a =>
ForInit a
-> Maybe (Expression a)
-> Maybe (Expression a)
-> Statement a
-> Statement a
for :: ForInit a
-> Maybe (Expression a)
-> Maybe (Expression a)
-> Statement a
-> Statement a
for = a
-> ForInit a
-> Maybe (Expression a)
-> Maybe (Expression a)
-> Statement a
-> Statement a
forall a.
a
-> ForInit a
-> Maybe (Expression a)
-> Maybe (Expression a)
-> Statement a
-> Statement a
ForStmt a
forall a. Default a => a
def
try :: Default a => Statement a -> Statement a
try :: Statement a -> Statement a
try Statement a
b = a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
forall a.
a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
TryStmt a
forall a. Default a => a
def Statement a
b Maybe (CatchClause a)
forall a. Maybe a
Nothing Maybe (Statement a)
forall a. Maybe a
Nothing
trycatch
:: Default a =>
Statement a -> CatchClause a -> Maybe (Statement a) -> Statement a
trycatch :: Statement a -> CatchClause a -> Maybe (Statement a) -> Statement a
trycatch Statement a
b CatchClause a
c = a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
forall a.
a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
TryStmt a
forall a. Default a => a
def Statement a
b (CatchClause a -> Maybe (CatchClause a)
forall a. a -> Maybe a
Just CatchClause a
c)
tryfinally
:: Default a => Statement a -> Statement a -> Statement a
tryfinally :: Statement a -> Statement a -> Statement a
tryfinally Statement a
b Statement a
f = a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
forall a.
a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
TryStmt a
forall a. Default a => a
def Statement a
b Maybe (CatchClause a)
forall a. Maybe a
Nothing (Statement a -> Maybe (Statement a)
forall a. a -> Maybe a
Just Statement a
f)
trycatchfinally
:: Default a =>
Statement a -> CatchClause a -> Statement a -> Statement a
trycatchfinally :: Statement a -> CatchClause a -> Statement a -> Statement a
trycatchfinally Statement a
b CatchClause a
c Statement a
f = a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
forall a.
a
-> Statement a
-> Maybe (CatchClause a)
-> Maybe (Statement a)
-> Statement a
TryStmt a
forall a. Default a => a
def Statement a
b (CatchClause a -> Maybe (CatchClause a)
forall a. a -> Maybe a
Just CatchClause a
c) (Statement a -> Maybe (Statement a)
forall a. a -> Maybe a
Just Statement a
f)
throw :: Default a => Expression a -> Statement a
throw :: Expression a -> Statement a
throw = a -> Expression a -> Statement a
forall a. a -> Expression a -> Statement a
ThrowStmt a
forall a. Default a => a
def
returns :: Default a => Expression a -> Statement a
returns :: Expression a -> Statement a
returns = a -> Maybe (Expression a) -> Statement a
forall a. a -> Maybe (Expression a) -> Statement a
ReturnStmt a
forall a. Default a => a
def (Maybe (Expression a) -> Statement a)
-> (Expression a -> Maybe (Expression a))
-> Expression a
-> Statement a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Expression a -> Maybe (Expression a)
forall a. a -> Maybe a
Just
ret :: Default a => Statement a
ret :: Statement a
ret = a -> Maybe (Expression a) -> Statement a
forall a. a -> Maybe (Expression a) -> Statement a
ReturnStmt a
forall a. Default a => a
def Maybe (Expression a)
forall a. Maybe a
Nothing
with :: Default a => Expression a -> Statement a -> Statement a
with :: Expression a -> Statement a -> Statement a
with = a -> Expression a -> Statement a -> Statement a
forall a. a -> Expression a -> Statement a -> Statement a
WithStmt a
forall a. Default a => a
def
vardecls :: Default a => [VarDecl a] -> Statement a
vardecls :: [VarDecl a] -> Statement a
vardecls = a -> [VarDecl a] -> Statement a
forall a. a -> [VarDecl a] -> Statement a
VarDeclStmt a
forall a. Default a => a
def
function
:: Default a => Id a -> [Id a] -> [Statement a] -> Statement a
function :: Id a -> [Id a] -> [Statement a] -> Statement a
function = a -> Id a -> [Id a] -> [Statement a] -> Statement a
forall a. a -> Id a -> [Id a] -> [Statement a] -> Statement a
FunctionStmt a
forall a. Default a => a
def
id2string :: Id a -> Expression a
id2string :: Id a -> Expression a
id2string (Id a
a String
s) = a -> String -> Expression a
forall a. a -> String -> Expression a
StringLit a
a String
s
lv2e :: LValue a -> Expression a
lv2e :: LValue a -> Expression a
lv2e LValue a
lval = case LValue a
lval of
LVar a
a String
vname -> a -> Id a -> Expression a
forall a. a -> Id a -> Expression a
VarRef a
a (a -> String -> Id a
forall a. a -> String -> Id a
Id a
a String
vname)
LDot a
a Expression a
obj String
fname -> a -> Expression a -> Id a -> Expression a
forall a. a -> Expression a -> Id a -> Expression a
DotRef a
a Expression a
obj (a -> String -> Id a
forall a. a -> String -> Id a
Id a
a String
fname)
LBracket a
a Expression a
obj Expression a
field -> a -> Expression a -> Expression a -> Expression a
forall a. a -> Expression a -> Expression a -> Expression a
BracketRef a
a Expression a
obj Expression a
field
e2lv :: Expression a -> LValue a
e2lv :: Expression a -> LValue a
e2lv Expression a
e = case Expression a
e of
VarRef a
a (Id a
_ String
vname) -> a -> String -> LValue a
forall a. a -> String -> LValue a
LVar a
a String
vname
DotRef a
a Expression a
obj (Id a
_ String
fname) -> a -> Expression a -> String -> LValue a
forall a. a -> Expression a -> String -> LValue a
LDot a
a Expression a
obj String
fname
BracketRef a
a Expression a
obj Expression a
field -> a -> Expression a -> Expression a -> LValue a
forall a. a -> Expression a -> Expression a -> LValue a
LBracket a
a Expression a
obj Expression a
field
Expression a
_ -> String -> LValue a
forall a. HasCallStack => String -> a
error String
"expr2LVal: Can't convert an expression to an LValue"
forInInit2lv :: ForInInit a -> LValue a
forInInit2lv :: ForInInit a -> LValue a
forInInit2lv ForInInit a
i = case ForInInit a
i of
ForInVar (Id a
a String
s) -> a -> String -> LValue a
forall a. a -> String -> LValue a
LVar a
a String
s
ForInLVal LValue a
lv -> LValue a
lv