on master help sign in
Only have = in generated JS, no possibility of +=, *=, etc.

Essentially doing dead code elimination here.

commitc756a8391c65cee47bca3bfdd99b4d71959b26b5 authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 22 Mar 2017, 15:42 (10 years ago) parent700055c
4 files changed+7−43
src/Generate/JavaScript.hs+1−1 src/Generate/JavaScript/Builder.hs+4−40 src/Generate/JavaScript/Expression.hs+1−1 src/Generate/JavaScript/Variable.hs+1−1
src/Generate/JavaScript.hs+1−1
@@ -79,7 +79,7 @@ generateEffectManager moduleName effects =
7979 [ "tag" ==> "fx", entry "cmdMap", entry "subMap" ]
8080
8181 addManager =
82− JS.Assign JS.OpAssign
82+ JS.Assign
8383 (JS.LBracket managers managerName)
8484 (JS.Object (managerEntries ++ otherEntries))
8585 in
src/Generate/JavaScript/Builder.hs+4−40
@@ -3,7 +3,7 @@
33module Generate.JavaScript.Builder
44 ( Expr(..), Id(..), Prop(..), LValue(..)
55 , Stmt(..), Case(..), VarDecl(..)
6− , InfixOp(..), AssignOp(..), PrefixOp(..)
6+ , InfixOp(..), PrefixOp(..)
77 , stmtsToText
88 )
99 where
@@ -41,7 +41,7 @@ data Expr
4141 | Prefix PrefixOp Expr
4242 | Infix InfixOp Expr Expr
4343 | If Expr Expr Expr
44− | Assign AssignOp LValue Expr
44+ | Assign LValue Expr
4545 | Call Expr [Expr] -- ^ @f(x,y,z)@, spec 11.2.3
4646 | Function (Maybe Id) [Id] [Stmt]
4747
@@ -120,29 +120,12 @@ data InfixOp
120120 | OpAdd -- +
121121
122122
123−data AssignOp
124− = OpAssign -- =
125− | OpAssignAdd -- +=
126− | OpAssignSub -- -=
127− | OpAssignMul -- *=
128− | OpAssignDiv -- /=
129− | OpAssignMod -- %=
130− | OpAssignLShift -- <<=
131− | OpAssignSpRShift -- >>=
132− | OpAssignZfRShift -- >>>=
133− | OpAssignBAnd -- &=
134− | OpAssignBXor -- ^=
135− | OpAssignBOr -- |=
136−
137−
138123data PrefixOp
139124 = PrefixLNot -- !
140125 | PrefixBNot -- ~
141126 | PrefixPlus -- +
142127 | PrefixMinus -- -
143128 | PrefixTypeof -- typeof
144− | PrefixVoid -- void
145− | PrefixDelete -- delete
146129
147130
148131
@@ -435,7 +418,7 @@ fromExpr indent grouping expression =
435418 , parensFor grouping (condB <> " ? " <> thenB <> " : " <> elseB)
436419 )
437420
438− Assign op lValue expr ->
421+ Assign lValue expr ->
439422 let
440423 (leftLines, left) =
441424 fromLValue indent lValue
@@ -444,7 +427,7 @@ fromExpr indent grouping expression =
444427 fromExpr indent Whatever expr
445428 in
446429 ( merge leftLines rightLines
447− , parensFor grouping (left <> fromAssign op <> right)
430+ , parensFor grouping (left <> " = " <> right)
448431 )
449432
450433 Call function args ->
@@ -563,25 +546,6 @@ fromPrefix op =
563546 PrefixPlus -> "+"
564547 PrefixMinus -> "-"
565548 PrefixTypeof -> "typeof "
566− PrefixVoid -> "void "
567− PrefixDelete -> "delete "
568−
569−
570−fromAssign :: AssignOp -> Builder
571−fromAssign op =
572− case op of
573− OpAssign -> " = "
574− OpAssignAdd -> " += "
575− OpAssignSub -> " -= "
576− OpAssignMul -> " *= "
577− OpAssignDiv -> " /= "
578− OpAssignMod -> " %= "
579− OpAssignLShift -> " <<= "
580− OpAssignSpRShift -> " >>= "
581− OpAssignZfRShift -> " >>>= "
582− OpAssignBAnd -> " &= "
583− OpAssignBXor -> " ^= "
584− OpAssignBOr -> " |= "
585549
586550
587551fromInfix :: InfixOp -> Builder
src/Generate/JavaScript/Expression.hs+1−1
@@ -153,7 +153,7 @@ generateCode expr =
153153 let
154154 reassign name tempName =
155155 JS.ExprStmt $
156− JS.Assign JS.OpAssign (JS.LVar (Var.safe name)) (ref tempName)
156+ JS.Assign (JS.LVar (Var.safe name)) (ref tempName)
157157 in
158158 do args' <- mapM generateJsExpr args
159159 tempNames <- mapM (\_ -> Var.fresh) args
src/Generate/JavaScript/Variable.hs+1−1
@@ -64,7 +64,7 @@ define maybeHome name body =
6464 JS.LBracket (JS.ref opsDictName) (JS.String name)
6565 in
6666 [ JS.VarDeclStmt [ JS.varDecl opsDictName (JS.refOrObject opsDictName) ]
67− , JS.ExprStmt (JS.Assign JS.OpAssign lvalue body)
67+ , JS.ExprStmt (JS.Assign lvalue body)
6868 ]
6969
7070