From: panne Date: Mon, 5 Jun 2000 20:57:58 +0000 (+0000) Subject: [project @ 2000-06-05 20:57:58 by panne] X-Git-Tag: Approximately_9120_patches~4319 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=44b23802911814737773f4ed21dabddca515afa5;p=ghc-hetmet.git [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 --- diff --git a/ghc/lib/std/PrelBase.lhs b/ghc/lib/std/PrelBase.lhs index e87bfb9..7f2a8a9 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)