@@ -118,10 +118,10 @@ bs8SDoc :: (?ienv :: ImplicitEnv) => GHC.SDoc -> BS8.ByteString
118
118
bs8SDoc = BS8. pack . GHC. showSDoc (ieDflags ? ienv)
119
119
120
120
uniqueKey :: GHC. Uniquable a => a -> Int
121
- uniqueKey = GHC. getKey . GHC. getUnique
121
+ uniqueKey = fromIntegral . GHC. getKey . GHC. getUnique
122
122
123
123
cvtUnique :: GHC. Unique -> Unique
124
- cvtUnique u = Unique a b
124
+ cvtUnique u = Unique a ( fromIntegral b)
125
125
where (a,b) = GHC. unpkUnique u
126
126
127
127
-- name conversion
@@ -172,13 +172,15 @@ cvtUnhelpfulSpanReason = \case
172
172
GHC. UnhelpfulOther s -> UnhelpfulOther $ GHC. bytesFS s
173
173
174
174
-- tickish conversion
175
+ cvtLexicalFastString :: GHC. LexicalFastString -> BS8. ByteString
176
+ cvtLexicalFastString (GHC. LexicalFastString fs) = GHC. bytesFS fs
175
177
176
178
cvtTickish :: GHC. StgTickish -> Tickish
177
179
cvtTickish = \ case
178
180
GHC. ProfNote {} -> ProfNote
179
181
GHC. HpcTick {} -> HpcTick
180
182
GHC. Breakpoint {} -> Breakpoint
181
- GHC. SourceNote {.. } -> SourceNote (cvtRealSrcSpan sourceSpan) (BS8. pack sourceName)
183
+ GHC. SourceNote {.. } -> SourceNote (cvtRealSrcSpan sourceSpan) (cvtLexicalFastString sourceName)
182
184
183
185
-- data con conversion
184
186
@@ -303,17 +305,22 @@ cvtTypeNormal t
303
305
| GHC. isUnboxedSumType t || GHC. isUnboxedTupleType t
304
306
= UnboxedTuple (map cvtPrimRep $ GHC. typePrimRep t)
305
307
306
- | [rep] <- GHC. typePrimRepArgs t
308
+ | [rep] <- GHC. typePrimRep t
307
309
= SingleValue (cvtPrimRep rep)
308
310
309
311
| otherwise
310
312
= error $ " could not convert type: " ++ ppr t
311
313
314
+ cvtPrimRepOrVoidRep :: GHC. PrimOrVoidRep -> PrimRep
315
+ cvtPrimRepOrVoidRep = \ case
316
+ GHC. VoidRep -> VoidRep
317
+ GHC. NVRep r -> cvtPrimRep r
318
+
312
319
cvtPrimRep :: GHC. PrimRep -> PrimRep
313
320
cvtPrimRep = \ 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
317
324
GHC. Int8Rep -> Int8Rep
318
325
GHC. Int16Rep -> Int16Rep
319
326
GHC. Int32Rep -> Int32Rep
@@ -401,6 +408,7 @@ cvtIdDetails i = case GHC.idDetails i of
401
408
GHC. DataConWorkId d -> DataConWorkId <$> cvtDataCon d
402
409
GHC. DataConWrapId d -> DataConWrapId <$> cvtDataCon d
403
410
GHC. ClassOpId {} -> pure ClassOpId
411
+ GHC. RepPolyId {} -> pure RepPolyId
404
412
GHC. PrimOpId {} -> pure PrimOpId
405
413
GHC. FCallId {} -> pure FCallId
406
414
GHC. TickBoxOpId {} -> pure TickBoxOpId
@@ -419,7 +427,7 @@ cvtBinderIdClosureParam details msg v
419
427
| GHC. isId v = SBinder
420
428
{ sbinderName = cvtOccName $ GHC. getOccName v
421
429
, 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
423
431
, sbinderTypeSig = BS8. pack . ppr $ GHC. idType v
424
432
, sbinderScope = cvtScope v
425
433
, sbinderDetails = details
@@ -460,7 +468,7 @@ cvtBinderIdM msg i = do
460
468
461
469
cvtSourceText :: GHC. SourceText -> SourceText
462
470
cvtSourceText = \ case
463
- GHC. SourceText s -> SourceText (BS8. pack s)
471
+ GHC. SourceText s -> SourceText (GHC. bytesFS s)
464
472
GHC. NoSourceText -> NoSourceText
465
473
466
474
cvtCCallTarget :: GHC. CCallTarget -> CCallTarget
@@ -529,11 +537,18 @@ cvtConAppTypeArgs tys = pure . unsafePerformIO $ catch (evaluate $ map (cvtType
529
537
-> pure []
530
538
e -> throw e
531
539
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
+
532
547
cvtExpr :: (? ienv :: ImplicitEnv ) => GHC. CgStgExpr -> M SExpr
533
548
cvtExpr = \ case
534
549
GHC. StgApp f ps -> StgApp <$> cvtOccId f <*> mapM cvtArg ps
535
550
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
537
552
GHC. StgOpApp o ps t -> StgOpApp (cvtOp o) <$> mapM cvtArg ps <*> pure (cvtType " StgOpApp" t) <*> cvtDataTyConIdFromType t
538
553
GHC. StgCase e b at al -> StgCase <$> cvtExpr e <*> cvtBinderIdM " StgCase" b <*> cvtAltType at <*> mapM cvtAlt al
539
554
GHC. StgLet _ b e -> StgLet <$> cvtBind b <*> cvtExpr e
@@ -551,8 +566,8 @@ cvtUpdateFlag = \case
551
566
552
567
cvtRhs :: (? ienv :: ImplicitEnv ) => GHC. CgStgRhs -> M SRhs
553
568
cvtRhs = \ 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
556
571
557
572
-- bind and top-bind conversion
558
573
@@ -713,7 +728,7 @@ mkSDataCon dc = SDataCon
713
728
-- dcpp msg f a = trace ("mkSDataCon " ++ msg ++ " : " ++ ppr a) $ f a
714
729
n = GHC. getName dc
715
730
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
717
732
r -> [cvtPrimRep r]
718
733
719
734
topBindIds :: GHC. CgStgTopBinding -> [GHC. Id ]
0 commit comments