on master help sign in
No longer need to carry table of names around
3dcae17Evan Czaplicki
src/Generate/JavaScript.hs+10−13
@@ -30,11 +30,11 @@ import qualified Generate.JavaScript.Variable as JS
30generate :: Obj.Graph -> Obj.Roots -> BS.Builder
30generate :: Obj.Graph -> Obj.Roots -> BS.Builder
31generate graph roots =
31generate graph roots =
32 let
32 let
33− (State builders _ _ effects table) =
33+ (State builders _ _ effects) =
34 List.foldl' (crawl graph) initialState (Obj.toGlobals roots)
34 List.foldl' (crawl graph) initialState (Obj.toGlobals roots)
35
35
36 managers =
36 managers =
37− fst $ JS.run table (JsEffects.generate effects)
37+ JS.run (JsEffects.generate effects)
38 in
38 in
39 List.foldl' (\rest stmt -> stmt <> rest) managers builders
39 List.foldl' (\rest stmt -> stmt <> rest) managers builders
40
40
@@ -49,13 +49,12 @@ data State =
49 , _seenDecls :: Set.Set Var.Global
49 , _seenDecls :: Set.Set Var.Global
50 , _seenKernels :: Set.Set ModuleName.Raw
50 , _seenKernels :: Set.Set ModuleName.Raw
51 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
51 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
52− , _table :: JS.Table
53 }
52 }
54
53
55
54
56initialState :: State
55initialState :: State
57initialState =
56initialState =
58− State [] Set.empty Set.empty Map.empty JS.emptyTable
57+ State [] Set.empty Set.empty Map.empty
59
58
60
59
61
60
@@ -63,7 +62,7 @@ initialState =
63
62
64
63
65crawl :: Obj.Graph -> State -> Var.Global -> State
64crawl :: Obj.Graph -> State -> Var.Global -> State
66−crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _) name@(Var.Global home _) =
65+crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _) name@(Var.Global home _) =
67 if Set.member name seenDecls then
66 if Set.member name seenDecls then
68 state
67 state
69
68
@@ -101,11 +100,11 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
101 state2 =
100 state2 =
102 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
101 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
103
102
104− (State builders seenDecls seenKernels effects table) =
103+ (State builders seenDecls seenKernels effects) =
105 Set.foldl' (crawl graph) state2 direct
104 Set.foldl' (crawl graph) state2 direct
106
105
107− (stmt, newTable) =
106+ stmt =
108− JS.run table (JsExpr.generateDecl home name body)
107+ JS.run (JsExpr.generateDecl home name body)
109
108
110 state4 =
109 state4 =
111 State
110 State
@@ -113,7 +112,6 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
113 , _seenDecls = seenDecls
112 , _seenDecls = seenDecls
114 , _seenKernels = seenKernels
113 , _seenKernels = seenKernels
115 , _effects = maybe id (Map.insert home) fx effects
114 , _effects = maybe id (Map.insert home) fx effects
116− , _table = newTable
117 }
115 }
118 in
116 in
119 Set.foldl' (crawl graph) state4 indirect
117 Set.foldl' (crawl graph) state4 indirect
@@ -129,18 +127,17 @@ crawlKernel graph name (Kernel.Info imports chunks) state1 =
129 state2 =
127 state2 =
130 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
128 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
131
129
132− (State builders seenDecls seenKernels effects table) =
130+ (State builders seenDecls seenKernels effects) =
133 List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
131 List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
134
132
135− (builder, newTable) =
133+ builder =
136− JS.run table (foldM chunkToBuilder mempty chunks)
134+ JS.run (foldM chunkToBuilder mempty chunks)
137 in
135 in
138 State
136 State
139 { _builders = builder : builders
137 { _builders = builder : builders
140 , _seenDecls = seenDecls
138 , _seenDecls = seenDecls
141 , _seenKernels = seenKernels
139 , _seenKernels = seenKernels
142 , _effects = effects
140 , _effects = effects
143− , _table = newTable
144 }
141 }
145
142
146
143