summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpanne <unknown>2000-06-05 20:57:58 +0000
committerpanne <unknown>2000-06-05 20:57:58 +0000
commit44b23802911814737773f4ed21dabddca515afa5 (patch)
tree68c8dbc7ec0e3ebca3e7f6fbe1f85b58c58e4f16
parentde1c2461be3ce74cb277a5c6e3d7aa54e9671808 (diff)
downloadhaskell-44b23802911814737773f4ed21dabddca515afa5.tar.gz
[project @ 2000-06-05 20:57:58 by panne]
The n-th attempt to get GCD right, this time negative Int arguments in combination with zero. Another bug in this area and I'll leap out of the window immediately... :-P
-rw-r--r--ghc/lib/std/PrelBase.lhs15
1 files changed, 10 insertions, 5 deletions
diff --git a/ghc/lib/std/PrelBase.lhs b/ghc/lib/std/PrelBase.lhs
index e87bfb9253..7f2a8a926a 100644
--- a/ghc/lib/std/PrelBase.lhs
+++ b/ghc/lib/std/PrelBase.lhs
@@ -575,11 +575,16 @@ timesInt(I# x) (I# y) = I# (x *# y)
quotInt (I# x) (I# y) = I# (quotInt# x y)
remInt (I# x) (I# y) = I# (remInt# x y)
-gcdInt (I# 0#) (I# 0#) = error "PrelBase.gcdInt: gcd 0 0 is undefined"
-gcdInt a (I# 0#) = a
-gcdInt (I# 0#) b = b
-gcdInt (I# a) (I# b) = I# (gcdInt# (absInt a) (absInt b))
- where absInt x = if x <# 0# then negateInt# x else x
+gcdInt (I# a) (I# b) = g a b
+ where g 0# 0# = error "PrelBase.gcdInt: gcd 0 0 is undefined"
+ g 0# _ = I# absB
+ g _ 0# = I# absA
+ g _ _ = I# (gcdInt# absA absB)
+
+ absInt x = if x <# 0# then negateInt# x else x
+
+ absA = absInt a
+ absB = absInt b
negateInt :: Int -> Int
negateInt (I# x) = I# (negateInt# x)