@@ -28,11 +28,11 @@ import qualified Generate.JavaScript.Variable as JS
2828-- GENERATE JAVASCRIPT
2929
3030
31−generate :: Obj.Graph -> Obj.Roots -> BS.Builder
32−generate graph roots =
31+generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
32+generate debug graph roots =
3333 let
34− (State builders _ _ effects) =
35− List.foldl' (crawl graph) initialState (Obj.toGlobals roots)
34+ (State builders _ _ effects _) =
35+ List.foldl' (crawl graph) (initialState debug) (Obj.toGlobals roots)
3636
3737 managers =
3838 JS.run (JsEffects.generate effects)
@@ -50,12 +50,13 @@ data State =
5050 , _seenDecls :: Set.Set Var.Global
5151 , _seenKernels :: Set.Set ModuleName.Raw
5252 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
53+ , _debug :: Bool
5354 }
5455
5556
56−initialState :: State
57−initialState =
58− State [] Set.empty Set.empty Map.empty
57+initialState :: Bool -> State
58+initialState debug =
59+ State [] Set.empty Set.empty Map.empty debug
5960
6061
6162
@@ -63,7 +64,7 @@ initialState =
6364
6465
6566crawl :: Obj.Graph -> State -> Var.Global -> State
66−crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _) name@(Var.Global home _) =
67+crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _) name@(Var.Global home _) =
6768 if Set.member name seenDecls then
6869 state
6970
@@ -101,7 +102,7 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
101102 state2 =
102103 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
103104
104− (State builders seenDecls seenKernels effects) =
105+ (State builders seenDecls seenKernels effects debug) =
105106 Set.foldl' (crawl graph) state2 direct
106107
107108 stmt =
@@ -113,6 +114,7 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
113114 , _seenDecls = seenDecls
114115 , _seenKernels = seenKernels
115116 , _effects = maybe id (Map.insert home) fx effects
117+ , _debug = debug
116118 }
117119 in
118120 Set.foldl' (crawl graph) state4 indirect
@@ -128,17 +130,18 @@ crawlKernel graph name (Kernel.Info imports chunks) state1 =
128130 state2 =
129131 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
130132
131− (State builders seenDecls seenKernels effects) =
133+ (State builders seenDecls seenKernels effects debug) =
132134 List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
133135
134136 builder =
135− JS.run (foldM chunkToBuilder mempty chunks)
137+ JS.run (foldM (chunkToBuilder debug) mempty chunks)
136138 in
137139 State
138140 { _builders = builder : builders
139141 , _seenDecls = seenDecls
140142 , _seenKernels = seenKernels
141143 , _effects = effects
144+ , _debug = debug
142145 }
143146
144147
@@ -147,8 +150,8 @@ toCoreGlobal (home, name) =
147150 Var.Global (ModuleName.inCore home) name
148151
149152
150−chunkToBuilder :: BS.Builder -> Kernel.Chunk -> JS.Generator BS.Builder
151−chunkToBuilder builder chunk =
153+chunkToBuilder :: Bool -> BS.Builder -> Kernel.Chunk -> JS.Generator BS.Builder
154+chunkToBuilder debug builder chunk =
152155 case chunk of
153156 Kernel.JS javascript ->
154157 return $ BS.byteString javascript <> builder
@@ -161,9 +164,9 @@ chunkToBuilder builder chunk =
161164 -- TODO generate a smaller field
162165 return $ Text.encodeUtf8Builder name <> builder
163166
164− Kernel.Prod isProd ->
167+ Kernel.Debug isDebug ->
165168 -- TODO pick based on what compile mode we are in
166− if isProd then
169+ if isDebug && debug then
167170 return builder
168171 else
169172 return $ "_UNUSED" <> builder