Skip to content

Commit 8901161

Browse files
DigitalBrains1kleinreact
authored andcommitted
Improve results for MaybeNumConvert to Index 0
1 parent aa93ae4 commit 8901161

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

clash-prelude/src/Clash/Class/NumConvert/Internal/MaybeNumConvert.hs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module Clash.Class.NumConvert.Internal.MaybeNumConvert where
1818

1919
import Clash.Class.BitPack
2020
import Clash.Class.Resize
21+
import Clash.Promoted.Nat
2122
import Clash.Sized.BitVector
2223
import Clash.Sized.Index
2324
import Clash.Sized.Signed
@@ -81,7 +82,10 @@ class MaybeNumConvert a b where
8182
maybeNumConvert :: a -> Maybe b
8283

8384
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Index n) (Index m) where
84-
maybeNumConvert !a = maybeResize a
85+
maybeNumConvert !a =
86+
case natToInteger @m of
87+
0 -> Nothing
88+
_ -> maybeResize a
8589

8690
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Index n) (Unsigned m) where
8791
maybeNumConvert !a = maybeResize $ bitCoerce @_ @(Unsigned (CLogWZ 2 n 0)) a
@@ -93,7 +97,10 @@ instance (KnownNat n, KnownNat m) => MaybeNumConvert (Index n) (BitVector m) whe
9397
maybeNumConvert !a = maybeResize $ pack a
9498

9599
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Unsigned n) (Index m) where
96-
maybeNumConvert !a = maybeResize $ bitCoerce @_ @(Index (2 ^ n)) a
100+
maybeNumConvert !a =
101+
case natToInteger @m of
102+
0 -> Nothing
103+
_ -> maybeResize $ bitCoerce @_ @(Index (2 ^ n)) a
97104

98105
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Unsigned n) (Unsigned m) where
99106
maybeNumConvert !a = maybeResize a
@@ -105,9 +112,11 @@ instance (KnownNat n, KnownNat m) => MaybeNumConvert (Unsigned n) (BitVector m)
105112
maybeNumConvert !a = maybeResize $ pack a
106113

107114
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Signed n) (Index m) where
108-
maybeNumConvert n
109-
| n < 0 = Nothing
110-
| otherwise = maybeResize (bitCoerce @_ @(Index (2 ^ n)) (resize n))
115+
maybeNumConvert !n =
116+
case natToInteger @m of
117+
0 -> Nothing
118+
_ | n < 0 -> Nothing
119+
| otherwise -> maybeResize (bitCoerce @_ @(Index (2 ^ n)) (resize n))
111120

112121
instance (KnownNat n, KnownNat m) => MaybeNumConvert (Signed n) (Unsigned m) where
113122
maybeNumConvert n
@@ -123,7 +132,10 @@ instance (KnownNat n, KnownNat m) => MaybeNumConvert (Signed n) (BitVector m) wh
123132
| otherwise = maybeResize (pack @(Signed (n + 1)) (extend n))
124133

125134
instance (KnownNat n, KnownNat m) => MaybeNumConvert (BitVector n) (Index m) where
126-
maybeNumConvert !a = maybeResize $ unpack @(Index (2 ^ n)) a
135+
maybeNumConvert !a =
136+
case natToInteger @m of
137+
0 -> Nothing
138+
_ -> maybeResize $ unpack @(Index (2 ^ n)) a
127139

128140
instance (KnownNat n, KnownNat m) => MaybeNumConvert (BitVector n) (Unsigned m) where
129141
maybeNumConvert !a = maybeResize $ unpack @(Unsigned n) a

0 commit comments

Comments
 (0)