@@ -1,8 +1,9 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.JavaScript
3module Generate.JavaScript
4− ( generate
4+ ( Mode(..)
5 , Roots(..)
5 , Roots(..)
@@ -28,29 +29,34 @@ import qualified Generate.JavaScript.Name as Name
28-- GENERATE
29-- GENERATE
32+data Mode = Debug | Prod
32 = Mains [ModuleName.Canonical]
36 = Mains [ModuleName.Canonical]
33 | Value ModuleName.Canonical N.Name
37 | Value ModuleName.Canonical N.Name
36−generate :: Bool -> Name.Target -> Opt.Graph -> Roots -> Either [ModuleName.Canonical] B.Builder
40+generate :: Mode -> Name.Target -> Opt.Graph -> Roots -> Either [ModuleName.Canonical] B.Builder
37−generate debug target (Opt.Graph mains nodes fields) roots =
41+generate mode target (Opt.Graph mains nodes fields) roots =
38 case roots of
42 case roots of
39 Value home name ->
43 Value home name ->
40 Right $ stateToBuilder $
44 Right $ stateToBuilder $
41− addGlobal (toMode debug target fields) nodes emptyState (Opt.Global home name)
45+ addGlobal (toRealMode mode target fields) nodes emptyState (Opt.Global home name)
43 Mains modules ->
47 Mains modules ->
44− generateMain (toMode debug target fields) nodes
48+ generateMain (toRealMode mode target fields) nodes
45 <$> verifyMains mains modules
49 <$> verifyMains mains modules
48−toMode :: Bool -> Name.Target -> Map.Map N.Name Int -> Name.Mode
52+toRealMode :: Mode -> Name.Target -> Map.Map N.Name Int -> Name.Mode
49−toMode debug target fields =
53+toRealMode mode target fields =
50− if debug then
54+ case mode of
51− Name.Debug target
56+ Name.Debug target
53− Name.Prod target (Name.shortenFieldNames fields)
59+ Name.Prod target (Name.shortenFieldNames fields)
@@ -78,11 +84,10 @@ stateToBuilder (State revBuilders _) =
78-- ADD DEPENDENCIES
84-- ADD DEPENDENCIES
82type Graph = Map.Map Opt.Global Opt.Node
87type Graph = Map.Map Opt.Global Opt.Node
85−addGlobal :: Mode -> Graph -> State -> Opt.Global -> State
90+addGlobal :: Name.Mode -> Graph -> State -> Opt.Global -> State
86addGlobal mode graph state@(State builders seen) global =
91addGlobal mode graph state@(State builders seen) global =
87 if Set.member global seen then
92 if Set.member global seen then
@@ -91,7 +96,7 @@ addGlobal mode graph state@(State builders seen) global =
91 State builders (Set.insert global seen)
96 State builders (Set.insert global seen)
94−addGlobalHelp :: Mode -> Graph -> Opt.Global -> State -> State
99+addGlobalHelp :: Name.Mode -> Graph -> Opt.Global -> State -> State
95addGlobalHelp mode graph global state =
100addGlobalHelp mode graph global state =
97 addDeps deps someState =
102 addDeps deps someState =
@@ -163,7 +168,7 @@ var (Opt.Global home name) code =
163-- GENERATE CYCLES
168-- GENERATE CYCLES
166−generateCycle :: Mode -> Opt.Global -> [(N.Name, Opt.Expr)] -> JS.Stmt
171+generateCycle :: Name.Mode -> Opt.Global -> [(N.Name, Opt.Expr)] -> JS.Stmt
167generateCycle mode (Opt.Global home _) cycle =
172generateCycle mode (Opt.Global home _) cycle =
169 safeDefs = map (generateSafeCycle mode home) cycle
174 safeDefs = map (generateSafeCycle mode home) cycle
@@ -173,7 +178,7 @@ generateCycle mode (Opt.Global home _) cycle =
173 JS.Block (safeDefs ++ realDefs)
178 JS.Block (safeDefs ++ realDefs)
176−generateSafeCycle :: Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
181+generateSafeCycle :: Name.Mode -> ModuleName.Canonical -> (N.Name, Opt.Expr) -> JS.Stmt
177generateSafeCycle mode home (name, expr) =
182generateSafeCycle mode home (name, expr) =
178 JS.FunctionStmt (Name.fromCycle home name) [] $
183 JS.FunctionStmt (Name.fromCycle home name) [] $
179 Expr.codeToStmtList (Expr.generate mode expr)
184 Expr.codeToStmtList (Expr.generate mode expr)
@@ -196,12 +201,12 @@ generateRealCycle home (name, _) =
196-- GENERATE KERNEL
201-- GENERATE KERNEL
199−generateKernel :: Mode -> [Opt.KChunk] -> B.Builder
204+generateKernel :: Name.Mode -> [Opt.KChunk] -> B.Builder
200generateKernel mode chunks =
205generateKernel mode chunks =
201 List.foldl' (addChunk mode) mempty chunks
206 List.foldl' (addChunk mode) mempty chunks
204−addChunk :: Mode -> B.Builder -> Opt.KChunk -> B.Builder
209+addChunk :: Name.Mode -> B.Builder -> Opt.KChunk -> B.Builder
205addChunk mode builder chunk =
210addChunk mode builder chunk =
206 case chunk of
211 case chunk of
207 Opt.JS javascript ->
212 Opt.JS javascript ->
@@ -240,7 +245,7 @@ addChunk mode builder chunk =
240-- GENERATE PORTS
245-- GENERATE PORTS
243−generatePort :: Mode -> Opt.Global -> N.Name -> Opt.Expr -> JS.Stmt
248+generatePort :: Name.Mode -> Opt.Global -> N.Name -> Opt.Expr -> JS.Stmt
244generatePort mode (Opt.Global home name) makePort converter =
249generatePort mode (Opt.Global home name) makePort converter =
246 definition =
251 definition =
@@ -257,7 +262,7 @@ generatePort mode (Opt.Global home name) makePort converter =
260−generateManager :: Mode -> Graph -> Opt.Global -> Opt.EffectsType -> State -> State
265+generateManager :: Name.Mode -> Graph -> Opt.Global -> Opt.EffectsType -> State -> State
261generateManager mode graph (Opt.Global home@(ModuleName.Canonical _ moduleName) _) effectsType state =
266generateManager mode graph (Opt.Global home@(ModuleName.Canonical _ moduleName) _) effectsType state =
263 managerLVar =
268 managerLVar =
@@ -327,7 +332,7 @@ type Mains =
327 Map.Map ModuleName.Canonical Opt.Main
332 Map.Map ModuleName.Canonical Opt.Main
330−generateMain :: Mode -> Graph -> Mains -> B.Builder
335+generateMain :: Name.Mode -> Graph -> Mains -> B.Builder
331generateMain mode graph mains =
336generateMain mode graph mains =
333 [ stateToBuilder $ Map.foldrWithKey (addMain mode graph) emptyState mains
338 [ stateToBuilder $ Map.foldrWithKey (addMain mode graph) emptyState mains
@@ -335,7 +340,7 @@ generateMain mode graph mains =
338−addMain :: Mode -> Graph -> ModuleName.Canonical -> main -> State -> State
343+addMain :: Name.Mode -> Graph -> ModuleName.Canonical -> main -> State -> State
339addMain mode graph home _ state =
344addMain mode graph home _ state =
340 addGlobal mode graph state (Opt.Global home "main")
345 addGlobal mode graph state (Opt.Global home "main")