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 Module ( Module )
24 import Name ( mkWiredInIdName, mkSrcVarOcc )
27 import Demand ( wwStrict )
28 import Unique -- lots of *Keys
33 %************************************************************************
35 \subsection{Un-definable}
37 %************************************************************************
39 These two can't be defined in Haskell.
42 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
43 just gets expanded into a type coercion wherever it occurs. Hence we
44 add it as a built-in Id with an unfolding here.
46 The type variables we use here are "open" type variables: this means
47 they can unify with both unlifted and lifted types. Hence we provide
48 another gun with which to shoot yourself in the foot.
52 = pcMiscPrelId unsafeCoerceIdKey pREL_GHC SLIT("unsafeCoerce#") ty
53 (mk_inline_unfolding template)
55 (alphaTyVar:betaTyVar:_) = openAlphaTyVars
56 alphaTy = mkTyVarTy alphaTyVar
57 betaTy = mkTyVarTy betaTyVar
58 ty = mkForAllTys [alphaTyVar,betaTyVar] (mkFunTy alphaTy betaTy)
59 [x] = mkTemplateLocals [alphaTy]
60 template = mkLams [alphaTyVar,betaTyVar,x] $
61 Note (Coerce betaTy alphaTy) (Var x)
65 @realWorld#@ used to be a magic literal, \tr{void#}. If things get
66 nasty as-is, change it back to a literal (@Literal@).
70 = pcMiscPrelId realWorldPrimIdKey pREL_GHC SLIT("realWorld#")
76 %************************************************************************
78 \subsection[PrelVals-error-related]{@error@ and friends; @trace@}
80 %************************************************************************
82 GHC randomly injects these into the code.
84 @patError@ is just a version of @error@ for pattern-matching
85 failures. It knows various ``codes'' which expand to longer
86 strings---this saves space!
88 @absentErr@ is a thing we put in for ``absent'' arguments. They jolly
89 well shouldn't be yanked on, but if one is, then you will get a
90 friendly message from @absentErr@ (rather than a totally random
93 @parError@ is a special version of @error@ which the compiler does
94 not know to be a bottoming Id. It is used in the @_par_@ and @_seq_@
95 templates, but we don't ever expect to generate code for it.
98 pc_bottoming_Id key mod name ty
99 = pcMiscPrelId key mod name ty bottoming_info
101 bottoming_info = mkStrictnessInfo ([wwStrict], True) `setStrictnessInfo` noCafIdInfo
102 -- these "bottom" out, no matter what their arguments
105 = pc_bottoming_Id errorIdKey pREL_ERR SLIT("error") errorTy
108 = pc_bottoming_Id u pREL_ERR n errorTy
111 = generic_ERROR_ID recSelErrIdKey SLIT("patError")
113 = generic_ERROR_ID patErrorIdKey SLIT("patError")
115 = generic_ERROR_ID recConErrorIdKey SLIT("recConError")
117 = generic_ERROR_ID recUpdErrorIdKey SLIT("recUpdError")
119 = generic_ERROR_ID irrefutPatErrorIdKey SLIT("irrefutPatError")
120 nON_EXHAUSTIVE_GUARDS_ERROR_ID
121 = generic_ERROR_ID nonExhaustiveGuardsErrorIdKey SLIT("nonExhaustiveGuardsError")
122 nO_METHOD_BINDING_ERROR_ID
123 = generic_ERROR_ID noMethodBindingErrorIdKey SLIT("noMethodBindingError")
126 = pc_bottoming_Id absentErrorIdKey pREL_ERR SLIT("absentErr")
127 (mkSigmaTy [openAlphaTyVar] [] openAlphaTy)
130 = pcMiscPrelId parErrorIdKey pREL_ERR SLIT("parError")
131 (mkSigmaTy [openAlphaTyVar] [] openAlphaTy) noCafIdInfo
133 openAlphaTy = mkTyVarTy openAlphaTyVar
136 errorTy = mkSigmaTy [openAlphaTyVar] [] (mkFunTys [mkListTy charTy] openAlphaTy)
137 -- Notice the openAlphaTyVar. It says that "error" can be applied
138 -- to unboxed as well as boxed types. This is OK because it never
139 -- returns, so the return type is irrelevant.
143 %************************************************************************
145 \subsection{Utilities}
147 %************************************************************************
149 Note IMustBeINLINEd below. These things have the same status as
150 constructor functions, i.e. they will *always* be inlined, wherever
154 mk_inline_unfolding expr = setUnfoldingInfo (mkUnfolding expr) $
155 setInlinePragInfo IMustBeINLINEd noIdInfo
157 exactArityInfo n = exactArity n `setArityInfo` noIdInfo
159 pcMiscPrelId :: Unique{-IdKey-} -> Module -> FAST_STRING -> Type -> IdInfo -> Id
161 pcMiscPrelId key mod str ty info
163 name = mkWiredInIdName key mod (mkSrcVarOcc str) imp
164 imp = mkVanillaId name ty `setIdInfo` info -- the usual case...
167 -- We lie and say the thing is imported; otherwise, we get into
168 -- a mess with dependency analysis; e.g., core2stg may heave in
169 -- random calls to GHCbase.unpackPS__. If GHCbase is the module
170 -- being compiled, then it's just a matter of luck if the definition
171 -- will be in "the right place" to be in scope.
174 noCafIdInfo = NoCafRefs `setCafInfo` noIdInfo