on master help sign in
Add some operators from F#: |>, <|, <<, and >>
29384b7evancz
compiler/Gen/CompileToJS.hs+4
@@ -325,7 +325,11 @@ binop (o:p) e1 e2
325 "::" -> jsCons e1 e2
325 "::" -> jsCons e1 e2
326 "++" -> "_L.append" ++ parens (e1 ++ "," ++ e2)
326 "++" -> "_L.append" ++ parens (e1 ++ "," ++ e2)
327 "$" -> e1 ++ parens e2
327 "$" -> e1 ++ parens e2
328+ "<|" -> e1 ++ parens e2
329+ "|>" -> e2 ++ parens e1
328 "." -> jsFunc "x" . ret $ e1 ++ parens (e2 ++ parens "x")
330 "." -> jsFunc "x" . ret $ e1 ++ parens (e2 ++ parens "x")
331+ "<<" -> jsFunc "x" . ret $ e1 ++ parens (e2 ++ parens "x")
332+ ">>" -> jsFunc "x" . ret $ e2 ++ parens (e1 ++ parens "x")
329 "^" -> "Math.pow(" ++ e1 ++ "," ++ e2 ++ ")"
333 "^" -> "Math.pow(" ++ e1 ++ "," ++ e2 ++ ")"
330 "==" -> "_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
334 "==" -> "_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
331 "/=" -> "!_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
335 "/=" -> "!_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
compiler/Parse/Binops.hs+2−1
@@ -17,7 +17,7 @@ data Assoc = L | N | R deriving (Eq,Show)
17type OpTable = [(Int, Assoc, String)]
17type OpTable = [(Int, Assoc, String)]
18
18
19table :: OpTable
19table :: OpTable
20−table = [ (9, R, ".")
20+table = [ (9, R, "."), (9, R, "<<"), (9, L, ">>")
21 , (8, R, "^")
21 , (8, R, "^")
22 , (7, L, "*"), (7, L, "/"), (7, L, "mod"), (7, L, "div"), (7, L, "rem")
22 , (7, L, "*"), (7, L, "/"), (7, L, "mod"), (7, L, "div"), (7, L, "rem")
23 , (6, L, "+"), (6, L, "-")
23 , (6, L, "+"), (6, L, "-")
@@ -28,6 +28,7 @@ table = [ (9, R, ".")
28 , (3, R, "&&")
28 , (3, R, "&&")
29 , (2, R, "||")
29 , (2, R, "||")
30 , (0, R, "$")
30 , (0, R, "$")
31+ , (0, R, "<|"), (0, L, "|>")
31 ]
32 ]
32
33
33opLevel op = Map.findWithDefault 9 op dict
34opLevel op = Map.findWithDefault 9 op dict