@@ -28,11 +28,11 @@ import qualified Generate.JavaScript.Variable as JS
28-- GENERATE JAVASCRIPT
28-- GENERATE JAVASCRIPT
31−generate :: Obj.Graph -> Obj.Roots -> BS.Builder
31+generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
32−generate graph roots =
32+generate debug graph roots =
34− (State builders _ _ effects) =
34+ (State builders _ _ effects _) =
35− List.foldl' (crawl graph) initialState (Obj.toGlobals roots)
35+ List.foldl' (crawl graph) (initialState debug) (Obj.toGlobals roots)
37 managers =
37 managers =
38 JS.run (JsEffects.generate effects)
38 JS.run (JsEffects.generate effects)
@@ -50,12 +50,13 @@ data State =
50 , _seenDecls :: Set.Set Var.Global
50 , _seenDecls :: Set.Set Var.Global
51 , _seenKernels :: Set.Set ModuleName.Raw
51 , _seenKernels :: Set.Set ModuleName.Raw
52 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
52 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
56−initialState :: State
57+initialState :: Bool -> State
57−initialState =
58+initialState debug =
58− State [] Set.empty Set.empty Map.empty
59+ State [] Set.empty Set.empty Map.empty debug
@@ -63,7 +64,7 @@ initialState =
65crawl :: Obj.Graph -> State -> Var.Global -> State
66crawl :: 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 _) =
67 if Set.member name seenDecls then
68 if Set.member name seenDecls then
@@ -101,7 +102,7 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
102 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
103 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
104− (State builders seenDecls seenKernels effects) =
105+ (State builders seenDecls seenKernels effects debug) =
105 Set.foldl' (crawl graph) state2 direct
106 Set.foldl' (crawl graph) state2 direct
@@ -113,6 +114,7 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
113 , _seenDecls = seenDecls
114 , _seenDecls = seenDecls
114 , _seenKernels = seenKernels
115 , _seenKernels = seenKernels
115 , _effects = maybe id (Map.insert home) fx effects
116 , _effects = maybe id (Map.insert home) fx effects
118 Set.foldl' (crawl graph) state4 indirect
120 Set.foldl' (crawl graph) state4 indirect
@@ -128,17 +130,18 @@ crawlKernel graph name (Kernel.Info imports chunks) state1 =
129 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
131 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
131− (State builders seenDecls seenKernels effects) =
133+ (State builders seenDecls seenKernels effects debug) =
132 List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
134 List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
134 builder =
136 builder =
135− JS.run (foldM chunkToBuilder mempty chunks)
137+ JS.run (foldM (chunkToBuilder debug) mempty chunks)
138 { _builders = builder : builders
140 { _builders = builder : builders
139 , _seenDecls = seenDecls
141 , _seenDecls = seenDecls
140 , _seenKernels = seenKernels
142 , _seenKernels = seenKernels
141 , _effects = effects
143 , _effects = effects
@@ -147,8 +150,8 @@ toCoreGlobal (home, name) =
147 Var.Global (ModuleName.inCore home) name
150 Var.Global (ModuleName.inCore home) name
150−chunkToBuilder :: BS.Builder -> Kernel.Chunk -> JS.Generator BS.Builder
153+chunkToBuilder :: Bool -> BS.Builder -> Kernel.Chunk -> JS.Generator BS.Builder
151−chunkToBuilder builder chunk =
154+chunkToBuilder debug builder chunk =
152 case chunk of
155 case chunk of
153 Kernel.JS javascript ->
156 Kernel.JS javascript ->
154 return $ BS.byteString javascript <> builder
157 return $ BS.byteString javascript <> builder
@@ -161,9 +164,9 @@ chunkToBuilder builder chunk =
161 -- TODO generate a smaller field
164 -- TODO generate a smaller field
162 return $ Text.encodeUtf8Builder name <> builder
165 return $ Text.encodeUtf8Builder name <> builder
164− Kernel.Prod isProd ->
167+ Kernel.Debug isDebug ->
165 -- TODO pick based on what compile mode we are in
168 -- TODO pick based on what compile mode we are in
166− if isProd then
169+ if isDebug && debug then
167 return builder
170 return builder
169 return $ "_UNUSED" <> builder
172 return $ "_UNUSED" <> builder