on master help sign in
Fix generation of integer literals in the C backend

Negative bignum literals were being generated as Ints. Fixes #4142.

commit242dfc78b6ca34296080d59ec3f29b47342a04c7 authorAlex Queiroz <asandroq@gmail.com> dateMon 23 Oct 2017, 02:04 (9 years ago) parent443e2d9
3 files changed+3−1
src/IRTS/CodegenC.hs+1−1 test/bignum002/bignum002.idr+1 test/bignum002/expected+1
src/IRTS/CodegenC.hs+1−1
@@ -179,7 +179,7 @@ bcc i (ASSIGNCONST l c)
179179 = indent i ++ creg l ++ " = " ++ mkConst c ++ ";\n"
180180 where
181181 mkConst (I i) = "MKINT(" ++ show i ++ ")"
182− mkConst (BI i) | i < (2^30) = "MKINT(" ++ show i ++ ")"
182+ mkConst (BI i) | i > ((-2)^30) && i < (2^30) = "MKINT(" ++ show i ++ ")"
183183 | otherwise = "MKBIGC(vm,\"" ++ show i ++ "\")"
184184 mkConst (Fl f) = "MKFLOAT(vm, " ++ (map toUpper $ show f) ++ ")"
185185 mkConst (Ch c) = "MKINT(" ++ show (fromEnum c) ++ ")"
test/bignum002/bignum002.idr+1
@@ -3,3 +3,4 @@ module Main
33main : IO ()
44main = do
55 putStrLn $ show $ divNat 1809022195644390369852458 91238741987
6+ putStrLn $ show $ div (-432642342742368327462378462387) 36473264372
test/bignum002/expected+1
@@ -1 +1,2 @@
1119827346982734
2+-11861903511836511836