#2875: Correct SYB's representation of Char
author'Jose Pedro Magalhaes <jpm@cs.uu.nl>
Mon, 19 Jan 2009 11:23:21 +0000 (11:23 +0000)
committer'Jose Pedro Magalhaes <jpm@cs.uu.nl>
Mon, 19 Jan 2009 11:23:21 +0000 (11:23 +0000)
compiler/utils/Serialized.hs

index 82cc065..06b92e4 100644 (file)
@@ -87,7 +87,12 @@ serializeConstr :: ConstrRep -> [Word8] -> [Word8]
 serializeConstr (AlgConstr ix)   = serializeWord8 1 . serializeInt ix
 serializeConstr (IntConstr i)    = serializeWord8 2 . serializeInteger i
 serializeConstr (FloatConstr r)  = serializeWord8 3 . serializeRational r
+#if __GLASGOW_HASKELL__ < 611
 serializeConstr (StringConstr s) = serializeWord8 4 . serializeString s
+#else
+serializeConstr (CharConstr c)   = serializeWord8 4 . serializeChar c
+#endif
+
 
 deserializeConstr :: [Word8] -> (ConstrRep -> [Word8] -> a) -> a
 deserializeConstr bytes k = deserializeWord8 bytes $ \constr_ix bytes ->
@@ -95,7 +100,11 @@ deserializeConstr bytes k = deserializeWord8 bytes $ \constr_ix bytes ->
                                 1 -> deserializeInt      bytes $ \ix -> k (AlgConstr ix)
                                 2 -> deserializeInteger  bytes $ \i  -> k (IntConstr i)
                                 3 -> deserializeRational bytes $ \r  -> k (FloatConstr r)
+#if __GLASGOW_HASKELL__ >= 611
+                                4 -> deserializeChar     bytes $ \c  -> k (CharConstr c)
+#else
                                 4 -> deserializeString   bytes $ \s  -> k (StringConstr s)
+#endif
                                 x -> error $ "deserializeConstr: unrecognised serialized constructor type " ++ show x ++ " in context " ++ show bytes
 
 
@@ -154,6 +163,15 @@ deserializeInteger :: [Word8] -> (Integer -> [Word8] -> a) -> a
 deserializeInteger bytes k = deserializeString bytes (k . read)
 
 
+#if __GLASGOW_HASKELL__ >= 611
+serializeChar :: Char -> [Word8] -> [Word8]
+serializeChar = serializeString . show
+
+deserializeChar :: [Word8] -> (Char -> [Word8] -> a) -> a
+deserializeChar bytes k = deserializeString bytes (k . read)
+#endif
+
+
 serializeString :: String -> [Word8] -> [Word8]
 serializeString = serializeList serializeEnum