@@ -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
132+compileJS (JSPreOp op val) =
132compileJS (JSProj obj field)
135compileJS (JSProj obj field)
133 | JSFunction {} <- obj =
136 | JSFunction {} <- obj =
134 concat ["(", compileJS obj, ").", field]
137 concat ["(", compileJS obj, ").", field]
@@ -432,7 +435,8 @@ isJSConstantConstructor constants js
432 all (isJSConstantConstructor constants) vals
435 all (isJSConstantConstructor constants) vals
433 | JSNew "__IDRRT__Con" args <- js =
436 | JSNew "__IDRRT__Con" args <- js =
434 all (isJSConstantConstructor constants) args
437 all (isJSConstantConstructor constants) args
435− | JSIndex (JSProj (JSIdent _) "vars") (JSNum _) <- js =
438+ | JSIndex (JSProj (JSIdent name) "vars") (JSNum _) <- js
439+ , name `elem` constants =
437 | JSIdent name <- js
441 | JSIdent name <- js
438 , name `elem` constants =
442 , name `elem` constants =
@@ -1623,7 +1627,7 @@ translateExpression (SOp op vars)
1623 | (LASHR _) <- op
1627 | (LASHR _) <- op
1624 , (lhs:rhs:_) <- vars = translateBinaryOp ">>" rhs lhs
1628 , (lhs:rhs:_) <- vars = translateBinaryOp ">>" rhs lhs
1625 | (LCompl _) <- op
1629 | (LCompl _) <- op
1626− , (arg:_) <- vars = JSRaw $ '~' : translateVariableName arg
1630+ , (arg:_) <- vars = JSPreOp "~" (JSVar arg)
1628 | LStrConcat <- op
1632 | LStrConcat <- op
1629 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
1633 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
@@ -1692,7 +1696,10 @@ translateExpression (SOp op vars)
1692 , (lhs:rhs:_) <- vars = JSIndex (JSVar lhs) (JSVar rhs)
1696 , (lhs:rhs:_) <- vars = JSIndex (JSVar lhs) (JSVar rhs)
1693 | LStrTail <- op
1697 | LStrTail <- op
1694 , (arg:_) <- vars = let v = translateVariableName arg in
1698 , (arg:_) <- vars = let v = translateVariableName arg in
1695− JSRaw $ v ++ ".substr(1," ++ v ++ ".length-1)"
1699+ JSApp (JSProj (JSIdent v) "substr") [
1701+ JSBinOp "-" (JSProj (JSIdent v) "length") (JSNum (JSInt 1))
1696 | LNullPtr <- op
1703 | LNullPtr <- op
1697 , (_) <- vars = JSNull
1704 , (_) <- vars = JSNull