@@ -2,12 +2,20 @@ module Generate.JavaScript.BuiltIn where
3import qualified Language.ECMAScript3.Syntax as JS
3import qualified Language.ECMAScript3.Syntax as JS
5+import Generate.JavaScript.Helpers
6+import qualified Reporting.Region as R
9+utils :: String -> [JS.Expression ()] -> JS.Expression ()
6-- LITERALS
14-- LITERALS
8character :: Char -> JS.Expression ()
16character :: Char -> JS.Expression ()
9character char =
17character char =
10− error "TODO - utils.chr" JS.StringLit () [char]
18+ utils "chr" [ JS.StringLit () [char] ]
13string :: String -> JS.Expression ()
21string :: String -> JS.Expression ()
@@ -19,28 +27,61 @@ string str =
20list :: [JS.Expression ()] -> JS.Expression ()
28list :: [JS.Expression ()] -> JS.Expression ()
21list elements =
29list elements =
22− error "TODO - utils.list" (JS.ArrayLit () elements)
30+ utils "list" [ JS.ArrayLit () elements ]
25range :: JS.Expression () -> JS.Expression () -> JS.Expression ()
33range :: JS.Expression () -> JS.Expression () -> JS.Expression ()
26range low high =
34range low high =
27− error "TODO - utils.range" low high
35+ utils "range" [ low, high ]
32recordUpdate :: JS.Expression () -> [(String, JS.Expression ())] -> JS.Expression ()
40recordUpdate :: JS.Expression () -> [(String, JS.Expression ())] -> JS.Expression ()
33recordUpdate record fields =
41recordUpdate record fields =
34− error "TODO - utils.update" record fields
42+ utils "update" [ record, JS.ArrayLit () (map toKeyValue fields) ]
45+toKeyValue :: (String, JS.Expression ()) -> JS.Expression ()
46+toKeyValue (key, value) =
47+ JS.ArrayLit () [ JS.StringLit () key, value ]
37-- COMPARISIONS
50-- COMPARISIONS
39eq :: JS.Expression () -> JS.Expression () -> JS.Expression ()
52eq :: JS.Expression () -> JS.Expression () -> JS.Expression ()
40eq left right =
53eq left right =
41− error "TODO - utils.eq" left right
54+ utils "eq" [ left, right ]
44compare :: JS.Expression () -> JS.Expression () -> JS.Expression ()
57compare :: JS.Expression () -> JS.Expression () -> JS.Expression ()
45compare left right =
58compare left right =
46− error "TODO - utils.compare" left right
59+ utils "compare" [ left, right ]
64+crash :: R.Region -> Maybe String -> JS.Expression ()
65+crash region maybeCaseCrashValue =
66+ case maybeCaseCrashValue of
68+ utils "crash" [ regionToJs region ]
71+ utils "caseCrash" [ regionToJs region, ref crashValue ]
74+regionToJs :: R.Region -> JS.Expression ()
75+regionToJs (R.Region start end) =
77+ [ ( prop "start", positionToJs start )
78+ , ( prop "end", positionToJs end )
82+positionToJs :: R.Position -> JS.Expression ()
83+positionToJs (R.Position line column) =
85+ [ ( prop "line", JS.IntLit () line )
86+ , ( prop "column", JS.IntLit () column )