summaryrefslogtreecommitdiff
path: root/compiler/GHC/Types/Id.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Types/Id.hs')
-rw-r--r--compiler/GHC/Types/Id.hs15
1 files changed, 14 insertions, 1 deletions
diff --git a/compiler/GHC/Types/Id.hs b/compiler/GHC/Types/Id.hs
index f186fc3c5b..2b1609773b 100644
--- a/compiler/GHC/Types/Id.hs
+++ b/compiler/GHC/Types/Id.hs
@@ -83,7 +83,8 @@ module GHC.Types.Id (
-- ** Inline pragma stuff
idPragmaInfo, idInlinePragma, idHasInlineable, setInlinePragma,
- setIdPragmaInfo, modifyInlinePragma, setHasInlineable,
+ idHasSpecRec, idSpecRec,
+ setIdPragmaInfo, modifyInlinePragma, setHasInlineable, setHasSpecRec,
idInlineActivation, setInlineActivation, idRuleMatchInfo,
-- ** One-shot lambdas
@@ -176,6 +177,7 @@ infixl 1 `setIdUnfolding`,
`setIdSpecialisation`,
`setInlinePragma`,
`setHasInlineable`,
+ `setHasSpecRec`,
`setIdPragmaInfo`,
`setInlineActivation`,
`idCafInfo`,
@@ -899,6 +901,12 @@ idInlinePragma id = inlinePragInfo (idInfo id)
idHasInlineable :: Id -> Bool
idHasInlineable id = inlineableInfo (idInfo id)
+idHasSpecRec :: Id -> Bool
+idHasSpecRec id = isJust $ specRecInfo (idInfo id)
+
+idSpecRec :: Id -> Maybe Activation
+idSpecRec id = specRecInfo (idInfo id)
+
idPragmaInfo :: Id -> PragInfo
idPragmaInfo id = pragInfo (idInfo id)
@@ -908,6 +916,9 @@ setInlinePragma id prag = modifyIdInfo (`setInlinePragInfo` prag) id
setHasInlineable :: Id -> Bool -> Id
setHasInlineable id inlineable = modifyIdInfo (`setHasInlineableInfo` inlineable) id
+setHasSpecRec :: Id -> (Maybe Activation) -> Id
+setHasSpecRec id spec_rec = modifyIdInfo (`setHasSpecRecInfo` spec_rec) id
+
setIdPragmaInfo :: Id -> PragInfo -> Id
setIdPragmaInfo id pragInfo = modifyIdInfo (`setPragInfo` pragInfo) id
@@ -1053,6 +1064,7 @@ transferPolyIdInfo old_id abstract_wrt new_id
old_arity = arityInfo old_info
old_inline_prag = inlinePragInfo old_info
old_unf_info = inlineableInfo old_info
+ old_spec_rec = specRecInfo old_info
old_occ_info = occInfo old_info
new_arity = old_arity + arity_increase
new_occ_info = zapOccTailCallInfo old_occ_info
@@ -1077,6 +1089,7 @@ transferPolyIdInfo old_id abstract_wrt new_id
transfer new_info = new_info `setArityInfo` new_arity
`setInlinePragInfo` old_inline_prag
`setHasInlineableInfo` old_unf_info
+ `setHasSpecRecInfo` old_spec_rec
`setOccInfo` new_occ_info
`setDmdSigInfo` new_strictness
`setCprSigInfo` new_cpr