Store Char in interchange literals

The serialization is the same, but this is a bit less strange as a
representation.
This commit is contained in:
Dan Doel 2023-09-07 02:20:45 -04:00
parent 9c9654d0b4
commit 9da57e92e9
3 changed files with 5 additions and 5 deletions

View File

@ -1525,7 +1525,7 @@ data BLit
| BArr PA.ByteArray
| Pos Word64
| Neg Word64
| Char Word64
| Char Char
| Float Double
deriving (Show)

View File

@ -657,7 +657,7 @@ putBLit (Code g) = putTag CodeT *> putGroup mempty mempty g
putBLit (BArr a) = putTag BArrT *> putByteArray a
putBLit (Pos n) = putTag PosT *> putPositive n
putBLit (Neg n) = putTag NegT *> putPositive n
putBLit (Char n) = putTag CharT *> putWord64be n
putBLit (Char c) = putTag CharT *> putChar c
putBLit (Float d) = putTag FloatT *> putFloat d
getBLit :: (MonadGet m) => Version -> m BLit
@ -673,7 +673,7 @@ getBLit v =
BArrT -> BArr <$> getByteArray
PosT -> Pos <$> getPositive
NegT -> Neg <$> getPositive
CharT -> Char <$> getWord64be
CharT -> Char <$> getChar
FloatT -> Float <$> getFloat
putRefs :: (MonadPut m) => [Reference] -> m ()

View File

@ -2125,7 +2125,7 @@ reflectValue rty = goV
reflectUData :: Word64 -> Int -> IO ANF.BLit
reflectUData t v
| t == natTag = pure $ ANF.Pos (fromIntegral v)
| t == charTag = pure $ ANF.Char (fromIntegral v)
| t == charTag = pure $ ANF.Char (toEnum v)
| t == intTag, v >= 0 = pure $ ANF.Pos (fromIntegral v)
| t == intTag, v < 0 = pure $ ANF.Neg (fromIntegral (- v))
| t == floatTag = pure $ ANF.Float (intToDouble v)
@ -2204,7 +2204,7 @@ reifyValue0 (rty, rtm) = goV
goL (ANF.Quote v) = pure . Foreign $ Wrap Rf.valueRef v
goL (ANF.Code g) = pure . Foreign $ Wrap Rf.codeRef g
goL (ANF.BArr a) = pure . Foreign $ Wrap Rf.ibytearrayRef a
goL (ANF.Char w) = pure $ DataU1 Rf.charRef charTag (fromIntegral w)
goL (ANF.Char c) = pure $ DataU1 Rf.charRef charTag (fromEnum c)
goL (ANF.Pos w) =
pure $ DataU1 Rf.natRef natTag (fromIntegral w)
goL (ANF.Neg w) =