2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[PrelVals]{Prelude values the compiler ``knows about''}
9 #include "HsVersions.h"
11 import {-# SOURCE #-} CoreUnfold ( mkUnfolding )
13 import Id ( Id, mkVanillaId, setIdInfo, mkTemplateLocals )
21 import CoreSyn -- quite a bit
22 import IdInfo -- quite a bit
23 import PrimOp ( PrimOp(..) )
24 import Const ( Con(..) )
25 import Module ( Module )
26 import Name ( mkWiredInIdName, mkSrcVarOcc )
29 import Demand ( wwStrict )
30 import Unique -- lots of *Keys
35 %************************************************************************
37 \subsection{Un-definable}
39 %************************************************************************
41 These two can't be defined in Haskell.
44 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
45 just gets expanded into a type coercion wherever it occurs. Hence we
46 add it as a built-in Id with an unfolding here.
48 The type variables we use here are "open" type variables: this means
49 they can unify with both unlifted and lifted types. Hence we provide
50 another gun with which to shoot yourself in the foot.
54 = pcMiscPrelId unsafeCoerceIdKey pREL_GHC SLIT("unsafeCoerce#") ty
55 (mk_inline_unfolding template)
57 (alphaTyVar:betaTyVar:_) = openAlphaTyVars
58 alphaTy = mkTyVarTy alphaTyVar
59 betaTy = mkTyVarTy betaTyVar
60 ty = mkForAllTys [alphaTyVar,betaTyVar] (mkFunTy alphaTy betaTy)
61 [x] = mkTemplateLocals [alphaTy]
62 template = mkLams [alphaTyVar,betaTyVar,x] $
63 Note (Coerce betaTy alphaTy) (Var x)
66 @getTag#@ is another function which can't be defined in Haskell. It needs to
67 evaluate its argument and call the dataToTag# primitive.
71 = pcMiscPrelId getTagIdKey pREL_GHC SLIT("getTag#") ty
72 (mk_inline_unfolding template)
74 ty = mkForAllTys [alphaTyVar] (mkFunTy alphaTy intPrimTy)
75 [x,y] = mkTemplateLocals [alphaTy,alphaTy]
76 template = mkLams [alphaTyVar,x] $
77 Case (Var x) y [ (DEFAULT, [],
78 Con (PrimOp DataToTagOp) [Type alphaTy, Var y]) ]
82 @realWorld#@ used to be a magic literal, \tr{void#}. If things get
83 nasty as-is, change it back to a literal (@Literal@).
87 = pcMiscPrelId realWorldPrimIdKey pREL_GHC SLIT("realWorld#")
93 %************************************************************************
95 \subsection[PrelVals-error-related]{@error@ and friends; @trace@}
97 %************************************************************************
99 GHC randomly injects these into the code.
101 @patError@ is just a version of @error@ for pattern-matching
102 failures. It knows various ``codes'' which expand to longer
103 strings---this saves space!
105 @absentErr@ is a thing we put in for ``absent'' arguments. They jolly
106 well shouldn't be yanked on, but if one is, then you will get a
107 friendly message from @absentErr@ (rather than a totally random
110 @parError@ is a special version of @error@ which the compiler does
111 not know to be a bottoming Id. It is used in the @_par_@ and @_seq_@
112 templates, but we don't ever expect to generate code for it.
115 pc_bottoming_Id key mod name ty
116 = pcMiscPrelId key mod name ty bottoming_info
118 bottoming_info = mkStrictnessInfo ([wwStrict], True) `setStrictnessInfo` noCafIdInfo
119 -- these "bottom" out, no matter what their arguments
122 = pc_bottoming_Id errorIdKey pREL_ERR SLIT("error") errorTy
125 = pc_bottoming_Id u pREL_ERR n errorTy
128 = generic_ERROR_ID recSelErrIdKey SLIT("patError")
130 = generic_ERROR_ID patErrorIdKey SLIT("patError")
132 = generic_ERROR_ID recConErrorIdKey SLIT("recConError")
134 = generic_ERROR_ID recUpdErrorIdKey SLIT("recUpdError")
136 = generic_ERROR_ID irrefutPatErrorIdKey SLIT("irrefutPatError")
137 nON_EXHAUSTIVE_GUARDS_ERROR_ID
138 = generic_ERROR_ID nonExhaustiveGuardsErrorIdKey SLIT("nonExhaustiveGuardsError")
139 nO_METHOD_BINDING_ERROR_ID
140 = generic_ERROR_ID noMethodBindingErrorIdKey SLIT("noMethodBindingError")
143 = pc_bottoming_Id absentErrorIdKey pREL_ERR SLIT("absentErr")
144 (mkSigmaTy [openAlphaTyVar] [] openAlphaTy)
147 = pcMiscPrelId parErrorIdKey pREL_ERR SLIT("parError")
148 (mkSigmaTy [openAlphaTyVar] [] openAlphaTy) noCafIdInfo
150 openAlphaTy = mkTyVarTy openAlphaTyVar
153 errorTy = mkSigmaTy [openAlphaTyVar] [] (mkFunTys [mkListTy charTy] openAlphaTy)
154 -- Notice the openAlphaTyVar. It says that "error" can be applied
155 -- to unboxed as well as boxed types. This is OK because it never
156 -- returns, so the return type is irrelevant.
160 %************************************************************************
162 \subsection{Utilities}
164 %************************************************************************
166 Note IMustBeINLINEd below. These things have the same status as
167 constructor functions, i.e. they will *always* be inlined, wherever
171 mk_inline_unfolding expr = setUnfoldingInfo (mkUnfolding expr) $
172 setInlinePragInfo IMustBeINLINEd noIdInfo
174 exactArityInfo n = exactArity n `setArityInfo` noIdInfo
176 pcMiscPrelId :: Unique{-IdKey-} -> Module -> FAST_STRING -> Type -> IdInfo -> Id
178 pcMiscPrelId key mod str ty info
180 name = mkWiredInIdName key mod (mkSrcVarOcc str) imp
181 imp = mkVanillaId name ty `setIdInfo` info -- the usual case...
184 -- We lie and say the thing is imported; otherwise, we get into
185 -- a mess with dependency analysis; e.g., core2stg may heave in
186 -- random calls to GHCbase.unpackPS__. If GHCbase is the module
187 -- being compiled, then it's just a matter of luck if the definition
188 -- will be in "the right place" to be in scope.
191 noCafIdInfo = NoCafRefs `setCafInfo` noIdInfo