@@ -7,59 +7,91 @@ import Language.ECMAScript3.Syntax
7-- Creating Variables
7-- Creating Variables
9var :: String -> Id ()
9var :: String -> Id ()
10−var name = Id () name
10+var name =
12ref :: String -> Expression ()
14ref :: String -> Expression ()
13−ref name = VarRef () (var name)
16+ VarRef () (var name)
15prop :: String -> Prop ()
19prop :: String -> Prop ()
16−prop name = PropId () (var name)
21+ PropId () (var name)
18string = StringLit ()
24string = StringLit ()
20obj :: [String] -> Expression ()
27obj :: [String] -> Expression ()
22 case vars of
29 case vars of
23 x:xs -> foldl (DotRef ()) (ref x) (map var xs)
30 x:xs -> foldl (DotRef ()) (ref x) (map var xs)
24 [] -> error "dotSep must be called on a non-empty list of variables"
31 [] -> error "dotSep must be called on a non-empty list of variables"
26-- Specific Utilities
34-- Specific Utilities
28localModuleName :: String
36localModuleName :: String
29−localModuleName = "$moduleName"
37+localModuleName =
31throw :: String -> Region -> Expression ()
41throw :: String -> Region -> Expression ()
32throw kind region =
42throw kind region =
44+ [ ref localModuleName
33− obj ["_U",kind] `call` [ ref localModuleName, string (PP.renderPretty region) ]
45+ , string (PP.renderPretty region)
48+ obj ["_U",kind] `call` args
35-- Function Calls
51-- Function Calls
37(<|) :: Expression () -> Expression () -> Expression ()
53(<|) :: Expression () -> Expression () -> Expression ()
38−(<|) f x = CallExpr () f [x]
55+ CallExpr () f [x]
40ret :: Expression () -> Statement ()
58ret :: Expression () -> Statement ()
41−ret e = ReturnStmt () (Just e)
60+ ReturnStmt () (Just e)
43(==>) :: [String] -> Expression () -> Expression ()
63(==>) :: [String] -> Expression () -> Expression ()
44−(==>) args e = FuncExpr () Nothing (map var args) [ ret e ]
65+ FuncExpr () Nothing (map var args) [ ret e ]
46function :: [String] -> [Statement ()] -> Expression ()
68function :: [String] -> [Statement ()] -> Expression ()
47−function args stmts = FuncExpr () Nothing (map var args) stmts
70+ FuncExpr () Nothing (map var args) stmts
49call :: Expression () -> [Expression ()] -> Expression ()
73call :: Expression () -> [Expression ()] -> Expression ()
50−call = CallExpr ()
75+ CallExpr ()
54equal :: Expression () -> Expression () -> Expression ()
80equal :: Expression () -> Expression () -> Expression ()
55−equal a b = InfixExpr () OpStrictEq a b
82+ InfixExpr () OpStrictEq a b
57instanceof :: String -> Expression () -> Expression ()
85instanceof :: String -> Expression () -> Expression ()
58instanceof tipe x =
86instanceof tipe x =
59 InfixExpr () OpLAnd (typeof "object" x) (InfixExpr () OpInstanceof x (ref tipe))
87 InfixExpr () OpLAnd (typeof "object" x) (InfixExpr () OpInstanceof x (ref tipe))
61typeof :: String -> Expression () -> Expression ()
90typeof :: String -> Expression () -> Expression ()
62−typeof tipe x = equal (PrefixExpr () PrefixTypeof x) (string tipe)
92+ equal (PrefixExpr () PrefixTypeof x) (string tipe)
64member :: String -> Expression () -> Expression ()
95member :: String -> Expression () -> Expression ()
65−member field x = InfixExpr () OpIn (string field) x
97+ InfixExpr () OpIn (string field) x