on master help sign in
javascript: make folding002 pass
3f40461raichoo
src/IRTS/CodegenJavaScript.hs+23−5
@@ -1843,7 +1843,7 @@ translateExpression (SOp op vars)
1843
1843
1844 | (LLSHR (ITFixed IT64)) <- op
1844 | (LLSHR (ITFixed IT64)) <- op
1845 , (lhs:rhs:_) <- vars =
1845 , (lhs:rhs:_) <- vars =
1846− jsMeth (jsMeth (JSVar lhs) "shiftRight" [JSVar rhs]) "intValue" []
1846+ jsMeth (JSVar lhs) "shiftRight" [JSVar rhs]
1847
1847
1848 | (LZExt _ ITBig) <- op = jsBigInt $ jsCall "String" [JSVar (last vars)]
1848 | (LZExt _ ITBig) <- op = jsBigInt $ jsCall "String" [JSVar (last vars)]
1849 | (LPlus (ATInt ITBig)) <- op
1849 | (LPlus (ATInt ITBig)) <- op
@@ -1898,15 +1898,33 @@ translateExpression (SOp op vars)
1898
1898
1899 | (LTrunc (ITFixed IT16) (ITFixed IT8)) <- op
1899 | (LTrunc (ITFixed IT16) (ITFixed IT8)) <- op
1900 , (arg:_) <- vars =
1900 , (arg:_) <- vars =
1901− JSBinOp "&" (JSVar arg) (JSNum (JSInt 0xFF))
1901+ JSParens $ JSBinOp "&" (JSVar arg) (JSNum (JSInt 0xFF))
1902
1902
1903 | (LTrunc (ITFixed IT32) (ITFixed IT16)) <- op
1903 | (LTrunc (ITFixed IT32) (ITFixed IT16)) <- op
1904 , (arg:_) <- vars =
1904 , (arg:_) <- vars =
1905− JSBinOp "&" (JSVar arg) (JSNum (JSInt 0xFFFF))
1905+ JSParens $ JSBinOp "&" (JSVar arg) (JSNum (JSInt 0xFFFF))
1906
1906
1907 | (LTrunc (ITFixed IT64) (ITFixed IT32)) <- op
1907 | (LTrunc (ITFixed IT64) (ITFixed IT32)) <- op
1908 , (arg:_) <- vars =
1908 , (arg:_) <- vars =
1909+ jsMeth (jsMeth (JSVar arg) "and" [
1910+ jsBigInt (JSString $ show 0xFFFFFFFF)
1911+ ]) "intValue" []
1912+
1913+ | (LTrunc ITBig (ITFixed IT64)) <- op
1914+ , (arg:_) <- vars =
1915+ jsMeth (JSVar arg) "and" [
1909− jsMeth (JSVar arg) "and" [jsBigInt (JSString $ show 0xFFFFFFFF)]
1916+ jsBigInt (JSString $ show 0xFFFFFFFF)
1917+ ]
1918+
1919+ | (LAnd (ITFixed IT64)) <- op
1920+ , (lhs:rhs:_) <- vars =
1921+ jsMeth (JSVar lhs) "and" [JSVar rhs]
1922+
1923+ | (LPlus (ATInt (ITFixed IT64))) <- op
1924+ , (lhs:rhs:_) <- vars =
1925+ jsMeth (jsMeth (JSVar lhs) "add" [JSVar rhs]) "and" [
1926+ jsBigInt (JSString $ show 0xFFFFFFFFFFFFFFFF)
1927+ ]
1910
1928
1911 | (LPlus _) <- op
1929 | (LPlus _) <- op
1912 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
1930 , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
@@ -2017,7 +2035,7 @@ translateExpression (SOp op vars)
2017
2035
2018 where
2036 where
2019 translateBinaryOp :: String -> LVar -> LVar -> JS
2037 translateBinaryOp :: String -> LVar -> LVar -> JS
2020− translateBinaryOp f lhs rhs = JSBinOp f (JSVar lhs) (JSVar rhs)
2038+ translateBinaryOp f lhs rhs = JSParens $ JSBinOp f (JSVar lhs) (JSVar rhs)
2021
2039
2022
2040
2023 invokeMeth :: LVar -> String -> [LVar] -> JS
2041 invokeMeth :: LVar -> String -> [LVar] -> JS
test/Makefile+1−1
@@ -11,7 +11,7 @@ test_java:
11 perl ./runtest.pl without sugar004 buffer001 --codegen Java
11 perl ./runtest.pl without sugar004 buffer001 --codegen Java
12
12
13test_js:
13test_js:
14− @perl ./runtest.pl without sugar004 reg029 io001 dsl002 io003 effects001 effects002 buffer001 folding002 --codegen node
14+ @perl ./runtest.pl without sugar004 reg029 io001 dsl002 io003 effects001 effects002 buffer001 --codegen node
15
15
16test_llvm:
16test_llvm:
17 @perl ./runtest.pl without sugar004 io003 buffer001 --codegen llvm
17 @perl ./runtest.pl without sugar004 io003 buffer001 --codegen llvm