@@ -91,7 +91,7 @@ import TyCon (AlgTyConRhs (..), TyCon, tyConName,
91
91
tyConArity ,
92
92
tyConDataCons , tyConKind ,
93
93
tyConName , tyConUnique , isClassTyCon )
94
- import Type (mkTvSubstPrs , substTy , coreView )
94
+ import Type (mkTvSubstPrs , substTy , coreView , piResultTys )
95
95
import TyCoRep (Coercion (.. ), TyLit (.. ), Type (.. ))
96
96
import Unique (Uniquable (.. ), Unique , getKey , hasKey )
97
97
import Var (Id , TyVar , Var , idDetails ,
@@ -288,71 +288,101 @@ coreToTerm primMap unlocs = term
288
288
, let (nm, _) = RWS. evalRWS (qualifiedNameString (varName x))
289
289
noSrcSpan
290
290
emptyGHC2CoreState
291
- = go nm args
291
+ = go nm (varType x) args
292
292
| otherwise
293
293
= term' e
294
294
where
295
295
-- Remove most Signal transformers
296
- go " Clash.Signal.Internal.mapSignal#" args
297
- | length args == 5
298
- = term (App (args!! 3 ) (args!! 4 ))
299
- go " Clash.Signal.Internal.signal#" args
300
- | length args == 3
301
- = term (args!! 2 )
302
- go " Clash.Signal.Internal.appSignal#" args
303
- | length args == 5
304
- = term (App (args!! 3 ) (args!! 4 ))
305
- go " Clash.Signal.Internal.joinSignal#" args
296
+ go " Clash.Signal.Internal.mapSignal#" pTy args
297
+ | [Type aTy, Type bTy, Type domTy, fTm, aSigTm] <- args
298
+ = do
299
+ let aSigTy = piResultTys pTy [bTy,aTy,domTy,aTy,aTy]
300
+ bSigTy = piResultTys pTy [aTy,bTy,domTy,bTy,bTy]
301
+ aTyC <- coreToType aTy
302
+ bTyC <- coreToType bTy
303
+ aSigTyC <- coreToType aSigTy
304
+ bSigTyC <- coreToType bSigTy
305
+ C. Cast <$> (C. App <$> term fTm
306
+ <*> (C. Cast <$> term aSigTm
307
+ <*> pure aSigTyC
308
+ <*> pure aTyC))
309
+ <*> pure bTyC
310
+ <*> pure bSigTyC
311
+ go " Clash.Signal.Internal.signal#" pty args
312
+ | [Type aTy, Type domTy, aTm] <- args
313
+ = let aSigTy = piResultTys pty [aTy,domTy,aTy]
314
+ in C. Cast <$> term aTm <*> coreToType aTy <*> coreToType aSigTy
315
+ go " Clash.Signal.Internal.appSignal#" pTy args
316
+ | [Type domTy, Type aTy, Type bTy, fSigTm, aSigTm] <- args
317
+ = do
318
+ let aSigTy = piResultTys pTy [domTy,bTy,aTy,aTy,aTy]
319
+ bSigTy = piResultTys pTy [domTy,aTy,bTy,bTy,bTy]
320
+ fSigTy = piResultTys pTy [domTy,aTy,FunTy aTy bTy,aTy,aTy]
321
+ aTyC <- coreToType aTy
322
+ bTyC <- coreToType bTy
323
+ aSigTyC <- coreToType aSigTy
324
+ bSigTyC <- coreToType bSigTy
325
+ fSigTyC <- coreToType fSigTy
326
+ let fTyC = C. mkFunTy aTyC bTyC
327
+ C. Cast <$> (C. App <$> (C. Cast <$> term fSigTm
328
+ <*> pure fSigTyC
329
+ <*> pure fTyC)
330
+ <*> (C. Cast <$> term aSigTm
331
+ <*> pure aSigTyC
332
+ <*> pure aTyC))
333
+ <*> pure bTyC
334
+ <*> pure bSigTyC
335
+ go " Clash.Signal.Internal.joinSignal#" _ args
306
336
| length args == 3
307
337
= term (args!! 2 )
308
- go " Clash.Signal.Bundle.vecBundle#" args
338
+ go " Clash.Signal.Bundle.vecBundle#" _ args
309
339
| length args == 4
310
340
= term (args!! 3 )
311
341
--- Remove `$`
312
- go " GHC.Base.$" args
342
+ go " GHC.Base.$" _ args
313
343
| length args == 5
314
344
= term (App (args!! 3 ) (args!! 4 ))
315
- go " GHC.Magic.noinline" args -- noinline :: forall a. a -> a
345
+ go " GHC.Magic.noinline" _ args -- noinline :: forall a. a -> a
316
346
| [_ty, x] <- args
317
347
= term x
318
348
-- Remove most CallStack logic
319
- go " GHC.Stack.Types.PushCallStack" args = term (last args)
320
- go " GHC.Stack.Types.FreezeCallStack" args = term (last args)
321
- go " GHC.Stack.withFrozenCallStack" args
349
+ go " GHC.Stack.Types.PushCallStack" _ args = term (last args)
350
+ go " GHC.Stack.Types.FreezeCallStack" _ args = term (last args)
351
+ go " GHC.Stack.withFrozenCallStack" _ args
322
352
| length args == 3
323
353
= term (App (args!! 2 ) (args!! 1 ))
324
- go " Clash.Class.BitPack.packXWith" args
354
+ go " Clash.Class.BitPack.packXWith" _ args
325
355
| [_nTy,_aTy,_kn,f] <- args
326
356
= term f
327
- go " Clash.Sized.BitVector.Internal.checkUnpackUndef" args
357
+ go " Clash.Sized.BitVector.Internal.checkUnpackUndef" _ args
328
358
| [_nTy,_aTy,_kn,_typ,f] <- args
329
359
= term f
330
- go " Clash.Magic.prefixName" args
360
+ go " Clash.Magic.prefixName" _ args
331
361
| [Type nmTy,_aTy,f] <- args
332
362
= C. Tick <$> (C. NameMod C. PrefixName <$> coreToType nmTy) <*> term f
333
- go " Clash.Magic.suffixName" args
363
+ go " Clash.Magic.suffixName" _ args
334
364
| [Type nmTy,_aTy,f] <- args
335
365
= C. Tick <$> (C. NameMod C. SuffixName <$> coreToType nmTy) <*> term f
336
- go " Clash.Magic.suffixNameFromNat" args
366
+ go " Clash.Magic.suffixNameFromNat" _ args
337
367
| [Type nmTy,_aTy,f] <- args
338
368
= C. Tick <$> (C. NameMod C. SuffixName <$> coreToType nmTy) <*> term f
339
- go " Clash.Magic.suffixNameP" args
369
+ go " Clash.Magic.suffixNameP" _ args
340
370
| [Type nmTy,_aTy,f] <- args
341
371
= C. Tick <$> (C. NameMod C. SuffixNameP <$> coreToType nmTy) <*> term f
342
- go " Clash.Magic.suffixNameFromNatP" args
372
+ go " Clash.Magic.suffixNameFromNatP" _ args
343
373
| [Type nmTy,_aTy,f] <- args
344
374
= C. Tick <$> (C. NameMod C. SuffixNameP <$> coreToType nmTy) <*> term f
345
- go " Clash.Magic.setName" args
375
+ go " Clash.Magic.setName" _ args
346
376
| [Type nmTy,_aTy,f] <- args
347
377
= C. Tick <$> (C. NameMod C. SetName <$> coreToType nmTy) <*> term f
348
- go " Clash.Magic.deDup" args
378
+ go " Clash.Magic.deDup" _ args
349
379
| [_aTy,f] <- args
350
380
= C. Tick C. DeDup <$> term f
351
- go " Clash.Magic.noDeDup" args
381
+ go " Clash.Magic.noDeDup" _ args
352
382
| [_aTy,f] <- args
353
383
= C. Tick C. NoDeDup <$> term f
354
384
355
- go _ _ = term' e
385
+ go _ _ _ = term' e
356
386
term' (Var x) = var x
357
387
term' (Lit l) = return $ C. Literal (coreToLiteral l)
358
388
term' (App eFun (Type tyArg)) = C. TyApp <$> term eFun <*> coreToType tyArg
@@ -405,7 +435,7 @@ coreToTerm primMap unlocs = term
405
435
case hasPrimCoM of
406
436
Just _ | ty1_I || ty2_I
407
437
-> C. Cast <$> term e <*> coreToType ty1 <*> coreToType ty2
408
- _ -> term e
438
+ _ -> C. Cast <$> term e <*> coreToType ty1 <*> coreToType ty2
409
439
term' (Tick (SourceNote rsp _) e) =
410
440
C. Tick (C. SrcSpan (RealSrcSpan rsp)) <$> addUsefull (RealSrcSpan rsp) (term e)
411
441
term' (Tick _ e) = term e
0 commit comments