Skip to content
Snippets Groups Projects
Commit 30dd1991 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Define mkInteger

Now used by GHC to generate Integer literals.
parent 053ce5e5
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "MachDeps.h" #include "MachDeps.h"
module GHC.Integer ( module GHC.Integer (
Integer, Integer, mkInteger,
smallInteger, wordToInteger, integerToWord, integerToInt, smallInteger, wordToInteger, integerToWord, integerToInt,
#if WORD_SIZE_IN_BITS < 64 #if WORD_SIZE_IN_BITS < 64
integerToWord64, word64ToInteger, integerToWord64, word64ToInteger,
......
...@@ -72,6 +72,16 @@ data Integer ...@@ -72,6 +72,16 @@ data Integer
= S# Int# -- small integers = S# Int# -- small integers
| J# Int# ByteArray# -- large integers | J# Int# ByteArray# -- large integers
mkInteger :: Bool -- non-negative?
-> [Int] -- absolute value in 31 bit chunks, least significant first
-- ideally these would be Words rather than Ints, but
-- we don't have Word available at the moment.
-> Integer
mkInteger nonNegative is = let abs = f is
in if nonNegative then abs else negateInteger abs
where f [] = S# 0#
f (I# i : is') = S# i `orInteger` shiftLInteger (f is') 31#
{-# NOINLINE smallInteger #-} {-# NOINLINE smallInteger #-}
smallInteger :: Int# -> Integer smallInteger :: Int# -> Integer
smallInteger i = S# i smallInteger i = S# i
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment