[commit: ghc] wip/oneShot: Add GHC.Prim.oneShot (4a31d97)
git at git.haskell.org
git at git.haskell.org
Mon Oct 6 21:04:46 UTC 2014
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/oneShot
Link : http://ghc.haskell.org/trac/ghc/changeset/4a31d97d1f9ef8618f99d3b3dcc6bf0f80f0ab49/ghc
>---------------------------------------------------------------
commit 4a31d97d1f9ef8618f99d3b3dcc6bf0f80f0ab49
Author: Joachim Breitner <mail at joachim-breitner.de>
Date: Sun Jan 26 11:36:23 2014 +0000
Add GHC.Prim.oneShot
Conflicts:
compiler/basicTypes/MkId.lhs
>---------------------------------------------------------------
4a31d97d1f9ef8618f99d3b3dcc6bf0f80f0ab49
compiler/basicTypes/MkId.lhs | 17 +++++++++++++++--
compiler/prelude/PrelNames.lhs | 3 ++-
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/compiler/basicTypes/MkId.lhs b/compiler/basicTypes/MkId.lhs
index bf1c199..05dcdd5 100644
--- a/compiler/basicTypes/MkId.lhs
+++ b/compiler/basicTypes/MkId.lhs
@@ -135,7 +135,8 @@ ghcPrimIds
seqId,
magicDictId,
coerceId,
- proxyHashId
+ proxyHashId,
+ oneShotId
]
\end{code}
@@ -1016,7 +1017,7 @@ another gun with which to shoot yourself in the foot.
\begin{code}
lazyIdName, unsafeCoerceName, nullAddrName, seqName,
realWorldName, voidPrimIdName, coercionTokenName,
- magicDictName, coerceName, proxyName, dollarName :: Name
+ magicDictName, coerceName, proxyName, dollarName, oneShotName :: Name
unsafeCoerceName = mkWiredInIdName gHC_PRIM (fsLit "unsafeCoerce#") unsafeCoerceIdKey unsafeCoerceId
nullAddrName = mkWiredInIdName gHC_PRIM (fsLit "nullAddr#") nullAddrIdKey nullAddrId
seqName = mkWiredInIdName gHC_PRIM (fsLit "seq") seqIdKey seqId
@@ -1028,6 +1029,7 @@ magicDictName = mkWiredInIdName gHC_PRIM (fsLit "magicDict") magicDict
coerceName = mkWiredInIdName gHC_PRIM (fsLit "coerce") coerceKey coerceId
proxyName = mkWiredInIdName gHC_PRIM (fsLit "proxy#") proxyHashKey proxyHashId
dollarName = mkWiredInIdName gHC_BASE (fsLit "$") dollarIdKey dollarId
+oneShotName = mkWiredInIdName gHC_PRIM (fsLit "oneShot") oneShotKey oneShotId
\end{code}
\begin{code}
@@ -1119,6 +1121,17 @@ lazyId = pcMiscPrelId lazyIdName ty info
info = noCafIdInfo
ty = mkForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
+oneShotId :: Id
+oneShotId = pcMiscPrelId oneShotName ty info
+ where
+ info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
+ `setUnfoldingInfo` mkCompulsoryUnfolding rhs
+ ty = mkForAllTys [alphaTyVar, betaTyVar] (mkFunTy fun_ty fun_ty)
+ fun_ty = mkFunTy alphaTy betaTy
+ [body, x] = mkTemplateLocals [fun_ty, alphaTy]
+ x' = setOneShotLambda x
+ rhs = mkLams [alphaTyVar, betaTyVar, body, x'] $ Var body `App` Var x
+
--------------------------------------------------------------------------------
magicDictId :: Id -- See Note [magicDictId magic]
diff --git a/compiler/prelude/PrelNames.lhs b/compiler/prelude/PrelNames.lhs
index a182e9b..fc9883f 100644
--- a/compiler/prelude/PrelNames.lhs
+++ b/compiler/prelude/PrelNames.lhs
@@ -1716,10 +1716,11 @@ rootMainKey, runMainKey :: Unique
rootMainKey = mkPreludeMiscIdUnique 101
runMainKey = mkPreludeMiscIdUnique 102
-thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
+thenIOIdKey, lazyIdKey, assertErrorIdKey, oneShotKey :: Unique
thenIOIdKey = mkPreludeMiscIdUnique 103
lazyIdKey = mkPreludeMiscIdUnique 104
assertErrorIdKey = mkPreludeMiscIdUnique 105
+oneShotKey = mkPreludeMiscIdUnique 106
breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
breakpointJumpIdKey, breakpointCondJumpIdKey,
More information about the ghc-commits
mailing list