on master help sign in
Thread the --debug flag through a bit differently
b3569f7Evan Czaplicki
src/AST/Kernel.hs+5−5
@@ -29,7 +29,7 @@ data Chunk
29 = JS BS.ByteString
29 = JS BS.ByteString
30 | Var ModuleName.Raw Text.Text
30 | Var ModuleName.Raw Text.Text
31 | Field Text.Text
31 | Field Text.Text
32− | Prod Bool
32+ | Debug Bool
33
33
34
34
35
35
@@ -56,10 +56,10 @@ instance Binary Chunk where
56 Field field ->
56 Field field ->
57 putWord8 2 >> put field
57 putWord8 2 >> put field
58
58
59− Prod True ->
59+ Debug True ->
60 putWord8 3
60 putWord8 3
61
61
62− Prod False ->
62+ Debug False ->
63 putWord8 4
63 putWord8 4
64
64
65 get =
65 get =
@@ -68,6 +68,6 @@ instance Binary Chunk where
68 0 -> liftM JS get
68 0 -> liftM JS get
69 1 -> liftM2 Var get get
69 1 -> liftM2 Var get get
70 2 -> liftM Field get
70 2 -> liftM Field get
71− 3 -> return (Prod True)
71+ 3 -> return (Debug True)
72− 4 -> return (Prod False)
72+ 4 -> return (Debug False)
73 _ -> error "problem deserializing Parse.Kernel.Chunk"
73 _ -> error "problem deserializing Parse.Kernel.Chunk"
src/Elm/Compiler.hs+1−1
@@ -111,7 +111,7 @@ docsGen isExposed (Module.Module name info) =
111-- CODE GENERATION
111-- CODE GENERATION
112
112
113
113
114−generate :: Obj.Graph -> Obj.Roots -> BS.Builder
114+generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
115generate =
115generate =
116 JS.generate
116 JS.generate
117
117
src/Generate/JavaScript.hs+18−15
@@ -28,11 +28,11 @@ import qualified Generate.JavaScript.Variable as JS
28-- GENERATE JAVASCRIPT
28-- GENERATE JAVASCRIPT
29
29
30
30
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 =
33 let
33 let
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)
36
36
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
53+ , _debug :: Bool
53 }
54 }
54
55
55
56
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
59
60
60
61
61
62
@@ -63,7 +64,7 @@ initialState =
63
64
64
65
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
68 state
69 state
69
70
@@ -101,7 +102,7 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
101 state2 =
102 state2 =
102 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
103 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
103
104
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
106
107
107 stmt =
108 stmt =
@@ -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
117+ , _debug = debug
116 }
118 }
117 in
119 in
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 =
128 state2 =
130 state2 =
129 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
131 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
130
132
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)
133
135
134 builder =
136 builder =
135− JS.run (foldM chunkToBuilder mempty chunks)
137+ JS.run (foldM (chunkToBuilder debug) mempty chunks)
136 in
138 in
137 State
139 State
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
144+ , _debug = debug
142 }
145 }
143
146
144
147
@@ -147,8 +150,8 @@ toCoreGlobal (home, name) =
147 Var.Global (ModuleName.inCore home) name
150 Var.Global (ModuleName.inCore home) name
148
151
149
152
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
163
166
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
168 else
171 else
169 return $ "_UNUSED" <> builder
172 return $ "_UNUSED" <> builder
src/Parse/Kernel.hs+2−2
@@ -47,8 +47,8 @@ parserHelp imports enums fields chunks =
47
47
48 Just tag ->
48 Just tag ->
49 case tag of
49 case tag of
50− Parse.KernelProd isProd ->
50+ Parse.KernelDebug isDebug ->
51− parserHelp imports enums fields (Kernel.Prod isProd : Kernel.JS javascript : chunks)
51+ parserHelp imports enums fields (Kernel.Debug isDebug : Kernel.JS javascript : chunks)
52
52
53 Parse.KernelImport var ->
53 Parse.KernelImport var ->
54 case Map.lookup var imports of
54 case Map.lookup var imports of
src/Parse/Primitives.hs+4−4
@@ -1416,7 +1416,7 @@ eatShader array offset length row col =
1416
1416
1417data ChunkTag
1417data ChunkTag
1418 = KernelEnum Word8 Text
1418 = KernelEnum Word8 Text
1419− | KernelProd Bool
1419+ | KernelDebug Bool
1420 | KernelImport Text
1420 | KernelImport Text
1421 | KernelJsField Text
1421 | KernelJsField Text
1422 | KernelElmField Text
1422 | KernelElmField Text
@@ -1481,11 +1481,11 @@ chompChunkTag array jsOffset offset length row col =
1481 else if 0x0061 {- a -} <= word && word <= 0x007A {- z -} then
1481 else if 0x0061 {- a -} <= word && word <= 0x007A {- z -} then
1482 KernelJsField chunk
1482 KernelJsField chunk
1483
1483
1484− else if chunk == "DEV" then
1484+ else if chunk == "DEBUG" then
1485− KernelProd False
1485+ KernelDebug False
1486
1486
1487 else if chunk == "PROD" then
1487 else if chunk == "PROD" then
1488− KernelProd True
1488+ KernelDebug True
1489
1489
1490 else
1490 else
1491 KernelImport chunk
1491 KernelImport chunk