@@ -12,8 +12,8 @@ module Streamly.Internal.Data.Serialize.TH.RecHeader
1212 ( mkSerializeExpr
1313 , mkDeserializeExpr
1414 , mkSizeOfExpr
15− , conUpdateFuncExpr
16− , mkDeserializeKeysExpr
15+ , conUpdateFuncDec
16+ , mkDeserializeKeysDec
1717 ) where
1818
1919--------------------------------------------------------------------------------
@@ -255,8 +255,8 @@ deserializeWithSize ::
255255 Serialize a => Int -> MutableByteArray -> Int -> IO (Int, a)
256256deserializeWithSize off arr endOff = deserialize (off + 4) arr endOff
257257
258−conUpdateFuncExpr :: Name -> Type -> [Field] -> Q [Dec]
259−conUpdateFuncExpr funcName headTy fields = do
258+conUpdateFuncDec :: Name -> Type -> [Field] -> Q [Dec]
259+conUpdateFuncDec funcName headTy fields = do
260260 prevRec <- newName "prevRec"
261261 curOff <- newName "curOff"
262262 endOff <- newName "endOff"
@@ -317,20 +317,36 @@ conUpdateFuncExpr funcName headTy fields = do
317317 , $(varE newOff))|])
318318 []
319319
320−mkDeserializeKeysExpr ::
321− Name -> Name -> Name -> Name -> Name -> SimpleDataCon -> Q Exp
322−mkDeserializeKeysExpr
323− hOff finalOff arr endOff updateFunc (SimpleDataCon cname fields) = do
324−
325− [|do (dataOff, hlist :: CompactList (CompactList Word8)) <-
326− deserialize $(varE hOff) $(varE arr) $(varE endOff)
327− let keys = wListToString . unCompactList <$> unCompactList hlist
328− (finalRec, _) <-
329− foldlM
330− ($(varE updateFunc) $(varE arr) $(varE endOff))
331− ($(emptyConExpr), dataOff)
332− keys
333− pure ($(varE finalOff), finalRec)|]
320+mkDeserializeKeysDec :: Name -> Name -> SimpleDataCon -> Q [Dec]
321+mkDeserializeKeysDec funcName updateFunc (SimpleDataCon cname fields) = do
322+ hOff <- newName "hOff"
323+ finalOff <- newName "finalOff"
324+ arr <- newName "arr"
325+ endOff <- newName "endOff"
326+ method <-
327+ [|do (dataOff, hlist :: CompactList (CompactList Word8)) <-
328+ deserialize $(varE hOff) $(varE arr) $(varE endOff)
329+ let keys = wListToString . unCompactList <$> unCompactList hlist
330+ (finalRec, _) <-
331+ foldlM
332+ ($(varE updateFunc) $(varE arr) $(varE endOff))
333+ ($(emptyConExpr), dataOff)
334+ keys
335+ pure ($(varE finalOff), finalRec)|]
336+ pure
337+ [ PragmaD (InlineP funcName NoInline FunLike AllPhases)
338+ , FunD
339+ funcName
340+ [ Clause
341+ [ VarP hOff
342+ , VarP finalOff
343+ , VarP arr
344+ , VarP endOff
345+ ]
346+ (NormalB method)
347+ []
348+ ]
349+ ]
334350
335351 where
336352
@@ -362,9 +378,13 @@ mkDeserializeExpr initialOff endOff deserializeWithKeys con = do
362378 else $(varE deserializeWithKeys)
363379 $(varE hOff)
364380 ($(varE initialOff) + w32_int encLen)
381+ $(varE _arr)
382+ $(varE endOff)
365383 else $(varE deserializeWithKeys)
366384 $(varE hOff)
367− ($(varE initialOff) + w32_int encLen)|]
385+ ($(varE initialOff) + w32_int encLen)
386+ $(varE _arr)
387+ $(varE endOff)|]
368388
369389 where
370390