on master help sign in
Generate different shaped data for `main` programs
df2ec9bEvan Czaplicki
src/Generate/JavaScript/Expression.hs+23−9
@@ -10,6 +10,7 @@ import AST.Expression.General as Expr (Main(..))
10import AST.Expression.Optimized as Opt
10import AST.Expression.Optimized as Opt
11import qualified AST.Literal as L
11import qualified AST.Literal as L
12import qualified AST.Module.Name as ModuleName
12import qualified AST.Module.Name as ModuleName
13+import qualified AST.Type as Type
13import qualified AST.Variable as Var
14import qualified AST.Variable as Var
14import Generate.JavaScript.Helpers as Help
15import Generate.JavaScript.Helpers as Help
15import qualified Generate.JavaScript.BuiltIn as BuiltIn
16import qualified Generate.JavaScript.BuiltIn as BuiltIn
@@ -216,15 +217,7 @@ generateCode expr =
216 jsExpr $ BuiltIn.foreignSub name jsDecoder
217 jsExpr $ BuiltIn.foreignSub name jsDecoder
217
218
218 Program kind body ->
219 Program kind body ->
219− case kind of
220+ generateProgram kind body
220− Expr.VDom ->
221− generateCode (Data "vdom" [body])
222−
223− Expr.NoFlags ->
224− generateCode (Data "no-flags" [body])
225−
226− Expr.Flags tipe ->
227− generateCode (Data "flags" [body, Foreign.decode tipe])
228
221
229 GLShader _uid src _tipe ->
222 GLShader _uid src _tipe ->
230 jsExpr $ ObjectLit () [(PropString () "src", Literal.literal (L.Str src))]
223 jsExpr $ ObjectLit () [(PropString () "src", Literal.literal (L.Str src))]
@@ -235,6 +228,27 @@ generateCode expr =
235
228
236
229
237
230
231+-- PROGRAMS
232+
233+
234+generateProgram :: Expr.Main Type.Canonical -> Opt.Expr -> State Int Code
235+generateProgram kind body =
236+ let
237+ gen fields =
238+ generateCode $ Record (("main", body) : fields)
239+ in
240+ case kind of
241+ Expr.VDom ->
242+ gen []
243+
244+ Expr.NoFlags ->
245+ gen []
246+
247+ Expr.Flags tipe ->
248+ gen [ ("flags", Foreign.decode tipe) ]
249+
250+
251+
238-- FUNCTIONS
252-- FUNCTIONS
239
253
240
254