@@ -171,6 +171,7 @@ mkSizeOfExpr headTy constructors =
171mkDeserializeExprOne :: DataCon -> Q Exp
171mkDeserializeExprOne :: DataCon -> Q Exp
172mkDeserializeExprOne (DataCon cname _ _ fields) =
172mkDeserializeExprOne (DataCon cname _ _ fields) =
173 case fields of
173 case fields of
174+ -- Only tag is serialized for unit fields, no actual value
174 [] -> [|pure ($(varE (mkName "i0")), $(conE cname))|]
175 [] -> [|pure ($(varE (mkName "i0")), $(conE cname))|]
@@ -203,12 +204,15 @@ mkDeserializeExpr headTy cons =
204 ("Attempting to peek type with no constructors (" ++
205 ("Attempting to peek type with no constructors (" ++
205 $(lift (pprint headTy)) ++ ")")|]
206 $(lift (pprint headTy)) ++ ")")|]
206 [(DataCon cname _ _ [])] ->
208 [(DataCon cname _ _ [])] ->
207 [|pure ($(varE _initialOffset) + 1, $(conE cname))|]
209 [|pure ($(varE _initialOffset) + 1, $(conE cname))|]
210 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
213 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
211 (mkDeserializeExprOne con)
214 (mkDeserializeExprOne con)
@@ -228,6 +232,7 @@ mkDeserializeExpr headTy cons =
235+ -- XXX Print the tag
232 ("Found invalid tag while peeking (" ++
237 ("Found invalid tag while peeking (" ++
233 $(lift (pprint headTy)) ++ ")")|])
238 $(lift (pprint headTy)) ++ ")")|])
@@ -247,6 +252,7 @@ mkSerializeExprTag tagType tagVal =
247mkSerializeExprFields :: [Field] -> Q Exp
252mkSerializeExprFields :: [Field] -> Q Exp
248mkSerializeExprFields fields =
253mkSerializeExprFields fields =
249 case fields of
254 case fields of
255+ -- Unit constructor, do nothing just tag is enough
250 [] -> [|pure ($(varE (mkName "i0")))|]
256 [] -> [|pure ($(varE (mkName "i0")))|]
@@ -266,7 +272,9 @@ mkSerializeExpr headTy cons =
267 ("Attempting to poke type with no constructors (" ++
273 ("Attempting to poke type with no constructors (" ++
268 $(lift (pprint headTy)) ++ ")")|]
274 $(lift (pprint headTy)) ++ ")")|]
269 [(DataCon _ _ _ [])] -> [|pure ($(varE _initialOffset) + 1)|]
276 [(DataCon _ _ _ [])] -> [|pure ($(varE _initialOffset) + 1)|]
270 [(DataCon cname _ _ fields)] ->
278 [(DataCon cname _ _ fields)] ->
272 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
280 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
@@ -277,6 +285,7 @@ mkSerializeExpr headTy cons =
277 (length fields)
285 (length fields)
278 (mkSerializeExprFields fields)
286 (mkSerializeExprFields fields)
282 (varE _val)
291 (varE _val)