on master help sign in
Fix generation of top level definitions
commit61db436c2ea5ae88143ae41aa63e0043038f0b02 authorEvan Czaplicki <info@elm-lang.org> dateThu 10 Sep 2015, 13:00 (11 years ago) parenta783564
2 files changed+27−8
src/Generate/JavaScript.hs+7−3 src/Generate/JavaScript/Variable.hs+20−5
src/Generate/JavaScript.hs+7−3
@@ -29,10 +29,13 @@ generate module_ =
2929 definitions =
3030 Module.program (Module.body module_)
3131
32+ setup =
33+ Var.define (Just (Module.name module_)) "_op" (ObjectLit () [])
34+
3235 stmts =
3336 State.evalState (mapM generateDef definitions) 0
3437 in
35− PP.displayS (PP.renderPretty 0.4 120 (ES.prettyPrint stmts)) ""
38+ PP.displayS (PP.renderPretty 0.4 120 (ES.prettyPrint (setup:stmts))) ""
3639
3740
3841-- CODE CHUNKS
@@ -101,7 +104,7 @@ generateDef def =
101104 Opt.Def (Opt.Facts home _) name body ->
102105 (,,) home name <$> generateJsExpr body
103106
104− return (VarDeclStmt () [ varDecl (Var.defName home name) jsBody ])
107+ return (Var.define home name jsBody)
105108
106109
107110-- EXPRESSIONS
@@ -255,8 +258,9 @@ generateTailFunction name args body =
255258
256259
257260generateFunctionWithArity :: [String] -> Code -> Expression ()
258−generateFunctionWithArity args code =
261+generateFunctionWithArity rawArgs code =
259262 let
263+ args = map Var.safe rawArgs
260264 arity = length args
261265 in
262266 if 2 <= arity && arity <= 9 then
src/Generate/JavaScript/Variable.hs+20−5
@@ -1,4 +1,4 @@
1−module Generate.JavaScript.Variable (fresh, canonical, defName, safe) where
1+module Generate.JavaScript.Variable (fresh, canonical, define, safe) where
22
33import qualified Control.Monad.State as State
44import qualified Data.List as List
@@ -23,14 +23,29 @@ fresh =
2323
2424-- DEF NAMES
2525
26−defName :: Maybe ModuleName.Canonical -> String -> String
27−defName maybeHome name =
26+define :: Maybe ModuleName.Canonical -> String -> JS.Expression () -> JS.Statement ()
27+define maybeHome name body =
28+ let
29+ varDecl safeName =
30+ JS.VarDeclStmt () [ JS.VarDecl () (JS.Id () safeName) (Just body) ]
31+ in
2832 case maybeHome of
2933 Nothing ->
30− safe name
34+ varDecl (safe name)
3135
3236 Just home ->
33− canonicalPrefix home (safe name)
37+ if Help.isOp name then
38+ let
39+ root =
40+ JS.VarRef () (JS.Id () (canonicalPrefix home "_op"))
41+
42+ lvalue =
43+ JS.LBracket () root (JS.StringLit () name)
44+ in
45+ JS.ExprStmt () (JS.AssignExpr () JS.OpAssign lvalue body)
46+
47+ else
48+ varDecl (canonicalPrefix home (safe name))
3449
3550
3651-- INSTANTIATE VARIABLES