on master help sign in
Merge pull request #887 from raichoo/typed-laziness
23a20efEdwin Brady
src/IRTS/CodegenJavaScript.hs+10−3
@@ -129,6 +129,9 @@ compileJS (JSError exc) =
129compileJS (JSBinOp op lhs rhs) =
129compileJS (JSBinOp op lhs rhs) =
130 compileJS lhs ++ " " ++ op ++ " " ++ compileJS rhs
130 compileJS lhs ++ " " ++ op ++ " " ++ compileJS rhs
131
131
132+compileJS (JSPreOp op val) =
133+ op ++ compileJS val
134+
132compileJS (JSProj obj field)
135compileJS (JSProj obj field)
133 | JSFunction {} <- obj =
136 | JSFunction {} <- obj =
134 concat ["(", compileJS obj, ").", field]
137 concat ["(", compileJS obj, ").", field]
@@ -428,7 +431,8 @@ isJSConstantConstructor constants js
428 all (isJSConstantConstructor constants) vals
431 all (isJSConstantConstructor constants) vals
429 | JSNew "__IDRRT__Con" args <- js =
432 | JSNew "__IDRRT__Con" args <- js =
430 all (isJSConstantConstructor constants) args
433 all (isJSConstantConstructor constants) args
431− | JSIndex (JSProj (JSIdent _) "vars") (JSNum _) <- js =
434+ | JSIndex (JSProj (JSIdent name) "vars") (JSNum _) <- js
435+ , name `elem` constants =
432 True
436 True
433 | JSIdent name <- js
437 | JSIdent name <- js
434 , name `elem` constants =
438 , name `elem` constants =
@@ -1593,7 +1597,7 @@ translateExpression (SOp op vars)
1593 | (LASHR _) <- op
1597 | (LASHR _) <- op
1594 , (lhs:rhs:_) <- vars = translateBinaryOp ">>" rhs lhs
1598 , (lhs:rhs:_) <- vars = translateBinaryOp ">>" rhs lhs
1595 | (LCompl _) <- op
1599 | (LCompl _) <- op
1596− , (arg:_) <- vars = JSRaw $ '~' : translateVariableName arg
1600+ , (arg:_) <- vars = JSPreOp "~" (JSVar arg)
1597
1601
1598 | LStrConcat <- op
1602 | LStrConcat <- op
1599 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
1603 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
@@ -1662,7 +1666,10 @@ translateExpression (SOp op vars)
1662 , (lhs:rhs:_) <- vars = JSIndex (JSVar lhs) (JSVar rhs)
1666 , (lhs:rhs:_) <- vars = JSIndex (JSVar lhs) (JSVar rhs)
1663 | LStrTail <- op
1667 | LStrTail <- op
1664 , (arg:_) <- vars = let v = translateVariableName arg in
1668 , (arg:_) <- vars = let v = translateVariableName arg in
1665− JSRaw $ v ++ ".substr(1," ++ v ++ ".length-1)"
1669+ JSApp (JSProj (JSIdent v) "substr") [
1670+ JSNum (JSInt 1),
1671+ JSBinOp "-" (JSProj (JSIdent v) "length") (JSNum (JSInt 1))
1672+ ]
1666 | LNullPtr <- op
1673 | LNullPtr <- op
1667 , (_) <- vars = JSNull
1674 , (_) <- vars = JSNull
1668
1675