projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
27992bf
)
Fix #2759: add ability to serialize Rational
author
'Jose Pedro Magalhaes
<jpm@cs.uu.nl>
Tue, 9 Dec 2008 12:55:51 +0000
(12:55 +0000)
committer
'Jose Pedro Magalhaes
<jpm@cs.uu.nl>
Tue, 9 Dec 2008 12:55:51 +0000
(12:55 +0000)
compiler/utils/Serialized.hs
patch
|
blob
|
history
diff --git
a/compiler/utils/Serialized.hs
b/compiler/utils/Serialized.hs
index
9a0e4c5
..
82cc065
100644
(file)
--- a/
compiler/utils/Serialized.hs
+++ b/
compiler/utils/Serialized.hs
@@
-86,16
+86,16
@@
deserializeWithData' bytes = deserializeConstr bytes $ \constr_rep bytes ->
serializeConstr :: ConstrRep -> [Word8] -> [Word8]
serializeConstr (AlgConstr ix) = serializeWord8 1 . serializeInt ix
serializeConstr (IntConstr i) = serializeWord8 2 . serializeInteger i
serializeConstr :: ConstrRep -> [Word8] -> [Word8]
serializeConstr (AlgConstr ix) = serializeWord8 1 . serializeInt ix
serializeConstr (IntConstr i) = serializeWord8 2 . serializeInteger i
-serializeConstr (FloatConstr d) = serializeWord8 3 . serializeDouble d
+serializeConstr (FloatConstr r) = serializeWord8 3 . serializeRational r
serializeConstr (StringConstr s) = serializeWord8 4 . serializeString s
deserializeConstr :: [Word8] -> (ConstrRep -> [Word8] -> a) -> a
deserializeConstr bytes k = deserializeWord8 bytes $ \constr_ix bytes ->
case constr_ix of
serializeConstr (StringConstr s) = serializeWord8 4 . serializeString s
deserializeConstr :: [Word8] -> (ConstrRep -> [Word8] -> a) -> a
deserializeConstr bytes k = deserializeWord8 bytes $ \constr_ix bytes ->
case constr_ix of
- 1 -> deserializeInt bytes $ \ix -> k (AlgConstr ix)
- 2 -> deserializeInteger bytes $ \i -> k (IntConstr i)
- 3 -> deserializeDouble bytes $ \d -> k (FloatConstr d)
- 4 -> deserializeString bytes $ \s -> k (StringConstr s)
+ 1 -> deserializeInt bytes $ \ix -> k (AlgConstr ix)
+ 2 -> deserializeInteger bytes $ \i -> k (IntConstr i)
+ 3 -> deserializeRational bytes $ \r -> k (FloatConstr r)
+ 4 -> deserializeString bytes $ \s -> k (StringConstr s)
x -> error $ "deserializeConstr: unrecognised serialized constructor type " ++ show x ++ " in context " ++ show bytes
x -> error $ "deserializeConstr: unrecognised serialized constructor type " ++ show x ++ " in context " ++ show bytes
@@
-140,11
+140,11
@@
deserializeInt :: [Word8] -> (Int -> [Word8] -> a) -> a
deserializeInt = deserializeFixedWidthNum
deserializeInt = deserializeFixedWidthNum
-serializeDouble :: Double -> [Word8] -> [Word8]
-serializeDouble = serializeString . show
+serializeRational :: (Real a) => a -> [Word8] -> [Word8]
+serializeRational = serializeString . show . toRational
-deserializeDouble :: [Word8] -> (Double -> [Word8] -> a) -> a
-deserializeDouble bytes k = deserializeString bytes (k . read)
+deserializeRational :: (Fractional a) => [Word8] -> (a -> [Word8] -> b) -> b
+deserializeRational bytes k = deserializeString bytes (k . fromRational . read)
serializeInteger :: Integer -> [Word8] -> [Word8]
serializeInteger :: Integer -> [Word8] -> [Word8]
@@
-171,4
+171,5
@@
deserializeList deserialize_element bytes k = deserializeInt bytes $ \len bytes
go :: Int -> [Word8] -> ([a] -> [Word8] -> b) -> b
go len bytes k
| len <= 0 = k [] bytes
go :: Int -> [Word8] -> ([a] -> [Word8] -> b) -> b
go len bytes k
| len <= 0 = k [] bytes
- | otherwise = deserialize_element bytes (\elt bytes -> go (len - 1) bytes (k . (elt:)))
\ No newline at end of file
+ | otherwise = deserialize_element bytes (\elt bytes -> go (len - 1) bytes (k . (elt:)))
+