on 144a15a help sign in
87 lines 1.9 kB history raw
1module Generate.JavaScript.BuiltIn where
3import qualified Language.ECMAScript3.Syntax as JS
5import Generate.JavaScript.Helpers
6import qualified Reporting.Region as R
9utils :: String -> [JS.Expression ()] -> JS.Expression ()
10utils func args =
11 error "TODO"
14-- LITERALS
16character :: Char -> JS.Expression ()
17character char =
18 utils "chr" [ JS.StringLit () [char] ]
21string :: String -> JS.Expression ()
22string str =
23 JS.StringLit () str
26-- LISTS
28list :: [JS.Expression ()] -> JS.Expression ()
29list elements =
30 utils "list" [ JS.ArrayLit () elements ]
33range :: JS.Expression () -> JS.Expression () -> JS.Expression ()
34range low high =
35 utils "range" [ low, high ]
38-- RECORDS
40recordUpdate :: JS.Expression () -> [(String, JS.Expression ())] -> JS.Expression ()
41recordUpdate record fields =
42 utils "update" [ record, JS.ArrayLit () (map toKeyValue fields) ]
45toKeyValue :: (String, JS.Expression ()) -> JS.Expression ()
46toKeyValue (key, value) =
47 JS.ArrayLit () [ JS.StringLit () key, value ]
50-- COMPARISIONS
52eq :: JS.Expression () -> JS.Expression () -> JS.Expression ()
53eq left right =
54 utils "eq" [ left, right ]
57compare :: JS.Expression () -> JS.Expression () -> JS.Expression ()
58compare left right =
59 utils "compare" [ left, right ]
62-- CRASH
64crash :: R.Region -> Maybe String -> JS.Expression ()
65crash region maybeCaseCrashValue =
66 case maybeCaseCrashValue of
67 Nothing ->
68 utils "crash" [ regionToJs region ]
70 Just crashValue ->
71 utils "caseCrash" [ regionToJs region, ref crashValue ]
74regionToJs :: R.Region -> JS.Expression ()
75regionToJs (R.Region start end) =
76 JS.ObjectLit ()
77 [ ( prop "start", positionToJs start )
78 , ( prop "end", positionToJs end )
79 ]
82positionToJs :: R.Position -> JS.Expression ()
83positionToJs (R.Position line column) =
84 JS.ObjectLit ()
85 [ ( prop "line", JS.IntLit () line )
86 , ( prop "column", JS.IntLit () column )
87 ]