on d163289 help sign in
89 lines 1.7 kB history raw
1module Generate.JavaScript.Helpers where
3import Language.ECMAScript3.Syntax
6localRuntime :: String
7localRuntime =
8 "_elm"
11varDecl :: String -> Expression () -> VarDecl ()
12varDecl x expr =
13 VarDecl () (var x) (Just expr)
16make :: [String] -> Expression ()
17make moduleName =
18 obj (moduleName ++ ["make"]) <| ref localRuntime
21useLazy :: [String] -> String -> Expression ()
22useLazy moduleName functionName =
23 DotRef () (make moduleName) (var functionName)
26-- Creating Variables
28var :: String -> Id ()
29var name =
30 Id () name
33ref :: String -> Expression ()
34ref name =
35 VarRef () (var name)
38prop :: String -> Prop ()
39prop name =
40 PropId () (var name)
43obj :: [String] -> Expression ()
44obj vars =
45 case vars of
46 x:xs ->
47 foldl (DotRef ()) (ref x) (map var xs)
49 [] ->
50 error "dotSep must be called on a non-empty list of variables"
53-- Function Calls
55(<|) :: Expression () -> Expression () -> Expression ()
56(<|) f x =
57 CallExpr () f [x]
60function :: [String] -> [Statement ()] -> Expression ()
61function args stmts =
62 FuncExpr () Nothing (map var args) stmts
65call :: Expression () -> [Expression ()] -> Expression ()
66call =
67 CallExpr ()
70-- Checks
72equal :: Expression () -> Expression () -> Expression ()
73equal a b =
74 InfixExpr () OpStrictEq a b
77instanceof :: String -> Expression () -> Expression ()
78instanceof tipe x =
79 InfixExpr () OpLAnd (typeof "object" x) (InfixExpr () OpInstanceof x (ref tipe))
82typeof :: String -> Expression () -> Expression ()
83typeof tipe x =
84 equal (PrefixExpr () PrefixTypeof x) (StringLit () tipe)
87member :: String -> Expression () -> Expression ()
88member field x =
89 InfixExpr () OpIn (StringLit () field) x