@@ -118,10 +118,10 @@ bs8SDoc :: (?ienv :: ImplicitEnv) => GHC.SDoc -> BS8.ByteString
118118bs8SDoc = BS8. pack . GHC. showSDoc (ieDflags ? ienv)
119119
120120uniqueKey :: GHC. Uniquable a => a -> Int
121- uniqueKey = GHC. getKey . GHC. getUnique
121+ uniqueKey = fromIntegral . GHC. getKey . GHC. getUnique
122122
123123cvtUnique :: GHC. Unique -> Unique
124- cvtUnique u = Unique a b
124+ cvtUnique u = Unique a ( fromIntegral b)
125125 where (a,b) = GHC. unpkUnique u
126126
127127-- name conversion
@@ -172,13 +172,15 @@ cvtUnhelpfulSpanReason = \case
172172 GHC. UnhelpfulOther s -> UnhelpfulOther $ GHC. bytesFS s
173173
174174-- tickish conversion
175+ cvtLexicalFastString :: GHC. LexicalFastString -> BS8. ByteString
176+ cvtLexicalFastString (GHC. LexicalFastString fs) = GHC. bytesFS fs
175177
176178cvtTickish :: GHC. StgTickish -> Tickish
177179cvtTickish = \ case
178180 GHC. ProfNote {} -> ProfNote
179181 GHC. HpcTick {} -> HpcTick
180182 GHC. Breakpoint {} -> Breakpoint
181- GHC. SourceNote {.. } -> SourceNote (cvtRealSrcSpan sourceSpan) (BS8. pack sourceName)
183+ GHC. SourceNote {.. } -> SourceNote (cvtRealSrcSpan sourceSpan) (cvtLexicalFastString sourceName)
182184
183185-- data con conversion
184186
@@ -303,17 +305,22 @@ cvtTypeNormal t
303305 | GHC. isUnboxedSumType t || GHC. isUnboxedTupleType t
304306 = UnboxedTuple (map cvtPrimRep $ GHC. typePrimRep t)
305307
306- | [rep] <- GHC. typePrimRepArgs t
308+ | [rep] <- GHC. typePrimRep t
307309 = SingleValue (cvtPrimRep rep)
308310
309311 | otherwise
310312 = error $ " could not convert type: " ++ ppr t
311313
314+ cvtPrimRepOrVoidRep :: GHC. PrimOrVoidRep -> PrimRep
315+ cvtPrimRepOrVoidRep = \ case
316+ GHC. VoidRep -> VoidRep
317+ GHC. NVRep r -> cvtPrimRep r
318+
312319cvtPrimRep :: GHC. PrimRep -> PrimRep
313320cvtPrimRep = \ case
314- GHC. VoidRep -> VoidRep
315- GHC. LiftedRep -> LiftedRep
316- GHC. UnliftedRep -> UnliftedRep
321+ GHC. BoxedRep levity -> case levity of
322+ Just GHC. Unlifted -> UnliftedRep
323+ _ -> LiftedRep
317324 GHC. Int8Rep -> Int8Rep
318325 GHC. Int16Rep -> Int16Rep
319326 GHC. Int32Rep -> Int32Rep
@@ -401,6 +408,7 @@ cvtIdDetails i = case GHC.idDetails i of
401408 GHC. DataConWorkId d -> DataConWorkId <$> cvtDataCon d
402409 GHC. DataConWrapId d -> DataConWrapId <$> cvtDataCon d
403410 GHC. ClassOpId {} -> pure ClassOpId
411+ GHC. RepPolyId {} -> pure RepPolyId
404412 GHC. PrimOpId {} -> pure PrimOpId
405413 GHC. FCallId {} -> pure FCallId
406414 GHC. TickBoxOpId {} -> pure TickBoxOpId
@@ -419,7 +427,7 @@ cvtBinderIdClosureParam details msg v
419427 | GHC. isId v = SBinder
420428 { sbinderName = cvtOccName $ GHC. getOccName v
421429 , sbinderId = BinderId . cvtUnique . GHC. idUnique $ v
422- , sbinderType = SingleValue . cvtPrimRep . {- trpp (unwords [msg, "cvtBinderIdClosureParam", ppr v])-} GHC. typePrimRep1 $ GHC. idType v
430+ , sbinderType = SingleValue . cvtPrimRepOrVoidRep . {- trpp (unwords [msg, "cvtBinderIdClosureParam", ppr v])-} GHC. typePrimRep1 $ GHC. idType v
423431 , sbinderTypeSig = BS8. pack . ppr $ GHC. idType v
424432 , sbinderScope = cvtScope v
425433 , sbinderDetails = details
@@ -460,7 +468,7 @@ cvtBinderIdM msg i = do
460468
461469cvtSourceText :: GHC. SourceText -> SourceText
462470cvtSourceText = \ case
463- GHC. SourceText s -> SourceText (BS8. pack s)
471+ GHC. SourceText s -> SourceText (GHC. bytesFS s)
464472 GHC. NoSourceText -> NoSourceText
465473
466474cvtCCallTarget :: GHC. CCallTarget -> CCallTarget
@@ -529,11 +537,18 @@ cvtConAppTypeArgs tys = pure . unsafePerformIO $ catch (evaluate $ map (cvtType
529537 -> pure []
530538 e -> throw e
531539
540+ cvtConAppTypeArgs2 :: (? ienv :: ImplicitEnv ) => [[GHC. PrimRep ]] -> M [Type ]
541+ cvtConAppTypeArgs2 tys = pure . unsafePerformIO $ catch (evaluate [UnboxedTuple $ map cvtPrimRep l | l <- tys]) $ \ case
542+ GHC. Panic msg
543+ | " mkSeqs shouldn't use the type arg" `isInfixOf` msg
544+ -> pure []
545+ e -> throw e
546+
532547cvtExpr :: (? ienv :: ImplicitEnv ) => GHC. CgStgExpr -> M SExpr
533548cvtExpr = \ case
534549 GHC. StgApp f ps -> StgApp <$> cvtOccId f <*> mapM cvtArg ps
535550 GHC. StgLit l -> pure $ StgLit (cvtLit l)
536- GHC. StgConApp dc _ ps ts -> StgConApp <$> cvtDataCon dc <*> mapM cvtArg ps <*> cvtConAppTypeArgs ts
551+ GHC. StgConApp dc _ ps ts -> StgConApp <$> cvtDataCon dc <*> mapM cvtArg ps <*> cvtConAppTypeArgs2 ts
537552 GHC. StgOpApp o ps t -> StgOpApp (cvtOp o) <$> mapM cvtArg ps <*> pure (cvtType " StgOpApp" t) <*> cvtDataTyConIdFromType t
538553 GHC. StgCase e b at al -> StgCase <$> cvtExpr e <*> cvtBinderIdM " StgCase" b <*> cvtAltType at <*> mapM cvtAlt al
539554 GHC. StgLet _ b e -> StgLet <$> cvtBind b <*> cvtExpr e
@@ -551,8 +566,8 @@ cvtUpdateFlag = \case
551566
552567cvtRhs :: (? ienv :: ImplicitEnv ) => GHC. CgStgRhs -> M SRhs
553568cvtRhs = \ case
554- GHC. StgRhsClosure _ _ u bs e -> StgRhsClosure [] (cvtUpdateFlag u) <$> mapM (cvtBinderIdClosureParamM " StgRhsClosure" ) bs <*> cvtExpr e
555- GHC. StgRhsCon _ dc _ _ args -> StgRhsCon <$> cvtDataCon dc <*> mapM cvtArg args
569+ GHC. StgRhsClosure _ _ u bs e _ -> StgRhsClosure [] (cvtUpdateFlag u) <$> mapM (cvtBinderIdClosureParamM " StgRhsClosure" ) bs <*> cvtExpr e
570+ GHC. StgRhsCon _ dc _ _ args _ -> StgRhsCon <$> cvtDataCon dc <*> mapM cvtArg args
556571
557572-- bind and top-bind conversion
558573
@@ -713,7 +728,7 @@ mkSDataCon dc = SDataCon
713728 -- dcpp msg f a = trace ("mkSDataCon " ++ msg ++ " : " ++ ppr a) $ f a
714729 n = GHC. getName dc
715730 getConArgRep = \ case
716- GHC. VoidRep -> [] -- HINT: drop VoidRep arguments, the STG constructor builder code also ignores them
731+ -- GHC.VoidRep -> [] -- HINT: drop VoidRep arguments, the STG constructor builder code also ignores them
717732 r -> [cvtPrimRep r]
718733
719734topBindIds :: GHC. CgStgTopBinding -> [GHC. Id ]
0 commit comments