[project @ 2001-05-14 12:55:11 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / MkId.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1998
3 %
4 \section[StdIdInfo]{Standard unfoldings}
5
6 This module contains definitions for the IdInfo for things that
7 have a standard form, namely:
8
9         * data constructors
10         * record selectors
11         * method and superclass selectors
12         * primitive operations
13
14 \begin{code}
15 module MkId (
16         mkDictFunId, mkDefaultMethodId,
17         mkDictSelId,
18
19         mkDataConId, mkDataConWrapId,
20         mkRecordSelId,
21         mkPrimOpId, mkCCallOpId,
22
23         -- And some particular Ids; see below for why they are wired in
24         wiredInIds,
25         unsafeCoerceId, realWorldPrimId,
26         eRROR_ID, rEC_SEL_ERROR_ID, pAT_ERROR_ID, rEC_CON_ERROR_ID,
27         rEC_UPD_ERROR_ID, iRREFUT_PAT_ERROR_ID, nON_EXHAUSTIVE_GUARDS_ERROR_ID,
28         nO_METHOD_BINDING_ERROR_ID, aBSENT_ERROR_ID, pAR_ERROR_ID
29     ) where
30
31 #include "HsVersions.h"
32
33
34 import BasicTypes       ( Arity )
35 import TysPrim          ( openAlphaTyVars, alphaTyVar, alphaTy, 
36                           intPrimTy, realWorldStatePrimTy
37                         )
38 import TysWiredIn       ( charTy, mkListTy )
39 import PrelNames        ( pREL_ERR, pREL_GHC )
40 import PrelRules        ( primOpRule )
41 import Rules            ( addRule )
42 import Type             ( Type, ThetaType, mkDictTy, mkPredTys, mkTyConApp, mkTyVarTys,
43                           mkFunTys, mkFunTy, mkSigmaTy, splitSigmaTy, 
44                           isUnLiftedType, mkForAllTys, mkTyVarTy, tyVarsOfType,
45                           splitFunTys, splitForAllTys, mkPredTy
46                         )
47 import Module           ( Module )
48 import CoreUtils        ( exprType, mkInlineMe )
49 import CoreUnfold       ( mkTopUnfolding, mkCompulsoryUnfolding, mkOtherCon )
50 import Literal          ( Literal(..) )
51 import TyCon            ( TyCon, isNewTyCon, tyConTyVars, tyConDataCons,
52                           tyConTheta, isProductTyCon, isDataTyCon )
53 import Class            ( Class, classTyCon, classTyVars, classSelIds )
54 import Var              ( Id, TyVar )
55 import VarSet           ( isEmptyVarSet )
56 import Name             ( mkWiredInName, mkCCallName, Name )
57 import OccName          ( mkVarOcc )
58 import PrimOp           ( PrimOp(DataToTagOp, CCallOp), 
59                           primOpSig, mkPrimOpIdName,
60                           CCall, pprCCallOp
61                         )
62 import Demand           ( wwStrict, wwPrim, mkStrictnessInfo )
63 import DataCon          ( DataCon, StrictnessMark(..), 
64                           dataConFieldLabels, dataConRepArity, dataConTyCon,
65                           dataConArgTys, dataConRepType, dataConRepStrictness, 
66                           dataConInstOrigArgTys,
67                           dataConName, dataConTheta,
68                           dataConSig, dataConStrictMarks, dataConId,
69                           maybeMarkedUnboxed, splitProductType_maybe
70                         )
71 import Id               ( idType, mkGlobalId, mkVanillaGlobal,
72                           mkTemplateLocals, mkTemplateLocalsNum,
73                           mkTemplateLocal, idCprInfo
74                         )
75 import IdInfo           ( IdInfo, noCafNoTyGenIdInfo,
76                           exactArity, setUnfoldingInfo, setCprInfo,
77                           setArityInfo, setSpecInfo,  setCgInfo,
78                           mkStrictnessInfo, setStrictnessInfo,
79                           GlobalIdDetails(..), CafInfo(..), CprInfo(..), 
80                           CgInfo(..), setCgArity
81                         )
82 import FieldLabel       ( mkFieldLabel, fieldLabelName, 
83                           firstFieldLabelTag, allFieldLabelTags, fieldLabelType
84                         )
85 import CoreSyn
86 import Maybes
87 import PrelNames
88 import Maybe            ( isJust )
89 import Outputable
90 import ListSetOps       ( assoc, assocMaybe )
91 import UnicodeUtil      ( stringToUtf8 )
92 import Char             ( ord )
93 \end{code}              
94
95 %************************************************************************
96 %*                                                                      *
97 \subsection{Wired in Ids}
98 %*                                                                      *
99 %************************************************************************
100
101 \begin{code}
102 wiredInIds
103   = [   -- These error-y things are wired in because we don't yet have
104         -- a way to express in an interface file that the result type variable
105         -- is 'open'; that is can be unified with an unboxed type
106         -- 
107         -- [The interface file format now carry such information, but there's
108         -- no way yet of expressing at the definition site for these 
109         -- error-reporting
110         -- functions that they have an 'open' result type. -- sof 1/99]
111
112       aBSENT_ERROR_ID
113     , eRROR_ID
114     , iRREFUT_PAT_ERROR_ID
115     , nON_EXHAUSTIVE_GUARDS_ERROR_ID
116     , nO_METHOD_BINDING_ERROR_ID
117     , pAR_ERROR_ID
118     , pAT_ERROR_ID
119     , rEC_CON_ERROR_ID
120     , rEC_UPD_ERROR_ID
121
122         -- These three can't be defined in Haskell
123     , realWorldPrimId
124     , unsafeCoerceId
125     , getTagId
126     ]
127 \end{code}
128
129 %************************************************************************
130 %*                                                                      *
131 \subsection{Data constructors}
132 %*                                                                      *
133 %************************************************************************
134
135 \begin{code}
136 mkDataConId :: Name -> DataCon -> Id
137         -- Makes the *worker* for the data constructor; that is, the function
138         -- that takes the reprsentation arguments and builds the constructor.
139 mkDataConId work_name data_con
140   = mkGlobalId (DataConId data_con) work_name (dataConRepType data_con) info
141   where
142     info = noCafNoTyGenIdInfo
143            `setCgArity`         arity
144            `setArityInfo`       exactArity arity
145            `setStrictnessInfo`  strict_info
146            `setCprInfo`         cpr_info
147
148     arity = dataConRepArity data_con
149
150     strict_info = mkStrictnessInfo (dataConRepStrictness data_con, False)
151
152     tycon = dataConTyCon data_con
153     cpr_info | isProductTyCon tycon && 
154                isDataTyCon tycon    &&
155                arity > 0            &&
156                arity <= mAX_CPR_SIZE    = ReturnsCPR
157              | otherwise                = NoCPRInfo
158         -- ReturnsCPR is only true for products that are real data types;
159         -- that is, not unboxed tuples or newtypes
160
161 mAX_CPR_SIZE :: Arity
162 mAX_CPR_SIZE = 10
163 -- We do not treat very big tuples as CPR-ish:
164 --      a) for a start we get into trouble because there aren't 
165 --         "enough" unboxed tuple types (a tiresome restriction, 
166 --         but hard to fix), 
167 --      b) more importantly, big unboxed tuples get returned mainly
168 --         on the stack, and are often then allocated in the heap
169 --         by the caller.  So doing CPR for them may in fact make
170 --         things worse.
171 \end{code}
172
173 The wrapper for a constructor is an ordinary top-level binding that evaluates
174 any strict args, unboxes any args that are going to be flattened, and calls
175 the worker.
176
177 We're going to build a constructor that looks like:
178
179         data (Data a, C b) =>  T a b = T1 !a !Int b
180
181         T1 = /\ a b -> 
182              \d1::Data a, d2::C b ->
183              \p q r -> case p of { p ->
184                        case q of { q ->
185                        Con T1 [a,b] [p,q,r]}}
186
187 Notice that
188
189 * d2 is thrown away --- a context in a data decl is used to make sure
190   one *could* construct dictionaries at the site the constructor
191   is used, but the dictionary isn't actually used.
192
193 * We have to check that we can construct Data dictionaries for
194   the types a and Int.  Once we've done that we can throw d1 away too.
195
196 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
197   all that matters is that the arguments are evaluated.  "seq" is 
198   very careful to preserve evaluation order, which we don't need
199   to be here.
200
201   You might think that we could simply give constructors some strictness
202   info, like PrimOps, and let CoreToStg do the let-to-case transformation.
203   But we don't do that because in the case of primops and functions strictness
204   is a *property* not a *requirement*.  In the case of constructors we need to
205   do something active to evaluate the argument.
206
207   Making an explicit case expression allows the simplifier to eliminate
208   it in the (common) case where the constructor arg is already evaluated.
209
210 \begin{code}
211 mkDataConWrapId data_con
212   = wrap_id
213   where
214     wrap_id = mkGlobalId (DataConWrapId data_con) (dataConName data_con) wrap_ty info
215     work_id = dataConId data_con
216
217     info = noCafNoTyGenIdInfo
218            `setUnfoldingInfo`   mkTopUnfolding (mkInlineMe wrap_rhs)
219            `setCprInfo`         cpr_info
220                 -- The Cpr info can be important inside INLINE rhss, where the
221                 -- wrapper constructor isn't inlined
222            `setCgArity`         arity
223                 -- The NoCaf-ness is set by noCafNoTyGenIdInfo
224            `setArityInfo`       exactArity arity
225                 -- It's important to specify the arity, so that partial
226                 -- applications are treated as values
227
228     wrap_ty = mkForAllTys all_tyvars $
229               mkFunTys all_arg_tys
230               result_ty
231
232     cpr_info = idCprInfo work_id
233
234     wrap_rhs | isNewTyCon tycon
235              = ASSERT( null ex_tyvars && null ex_dict_args && length orig_arg_tys == 1 )
236                 -- No existentials on a newtype, but it can have a context
237                 -- e.g.         newtype Eq a => T a = MkT (...)
238
239                mkLams tyvars $ mkLams dict_args $ Lam id_arg1 $
240                Note (Coerce result_ty (head orig_arg_tys)) (Var id_arg1)
241
242              | null dict_args && all not_marked_strict strict_marks
243              = Var work_id      -- The common case.  Not only is this efficient,
244                                 -- but it also ensures that the wrapper is replaced
245                                 -- by the worker even when there are no args.
246                                 --              f (:) x
247                                 -- becomes 
248                                 --              f $w: x
249                                 -- This is really important in rule matching,
250                                 -- (We could match on the wrappers,
251                                 -- but that makes it less likely that rules will match
252                                 -- when we bring bits of unfoldings together.)
253                 --
254                 -- NB:  because of this special case, (map (:) ys) turns into
255                 --      (map $w: ys), and thence into (map (\x xs. $w: x xs) ys)
256                 --      in core-to-stg.  The top-level defn for (:) is never used.
257                 --      This is somewhat of a bore, but I'm currently leaving it 
258                 --      as is, so that there still is a top level curried (:) for
259                 --      the interpreter to call.
260
261              | otherwise
262              = mkLams all_tyvars $ mkLams dict_args $ 
263                mkLams ex_dict_args $ mkLams id_args $
264                foldr mk_case con_app 
265                      (zip (ex_dict_args++id_args) strict_marks) i3 []
266
267     con_app i rep_ids = mkApps (Var work_id)
268                                (map varToCoreExpr (all_tyvars ++ reverse rep_ids))
269
270     (tyvars, theta, ex_tyvars, ex_theta, orig_arg_tys, tycon) = dataConSig data_con
271     all_tyvars   = tyvars ++ ex_tyvars
272
273     dict_tys     = mkPredTys theta
274     ex_dict_tys  = mkPredTys ex_theta
275     all_arg_tys  = dict_tys ++ ex_dict_tys ++ orig_arg_tys
276     result_ty    = mkTyConApp tycon (mkTyVarTys tyvars)
277
278     mkLocals i tys = (zipWith mkTemplateLocal [i..i+n-1] tys, i+n)
279                    where
280                      n = length tys
281
282     (dict_args, i1)    = mkLocals 1  dict_tys
283     (ex_dict_args,i2)  = mkLocals i1 ex_dict_tys
284     (id_args,i3)       = mkLocals i2 orig_arg_tys
285     arity              = i3-1
286     (id_arg1:_)   = id_args             -- Used for newtype only
287
288     strict_marks  = dataConStrictMarks data_con
289     not_marked_strict NotMarkedStrict = True
290     not_marked_strict other           = False
291
292
293     mk_case 
294            :: (Id, StrictnessMark)      -- arg, strictness
295            -> (Int -> [Id] -> CoreExpr) -- body
296            -> Int                       -- next rep arg id
297            -> [Id]                      -- rep args so far
298            -> CoreExpr
299     mk_case (arg,strict) body i rep_args
300           = case strict of
301                 NotMarkedStrict -> body i (arg:rep_args)
302                 MarkedStrict 
303                    | isUnLiftedType (idType arg) -> body i (arg:rep_args)
304                    | otherwise ->
305                         Case (Var arg) arg [(DEFAULT,[], body i (arg:rep_args))]
306
307                 MarkedUnboxed con tys ->
308                    Case (Var arg) arg [(DataAlt con, con_args,
309                                         body i' (reverse con_args++rep_args))]
310                    where 
311                         (con_args,i') = mkLocals i tys
312 \end{code}
313
314
315 %************************************************************************
316 %*                                                                      *
317 \subsection{Record selectors}
318 %*                                                                      *
319 %************************************************************************
320
321 We're going to build a record selector unfolding that looks like this:
322
323         data T a b c = T1 { ..., op :: a, ...}
324                      | T2 { ..., op :: a, ...}
325                      | T3
326
327         sel = /\ a b c -> \ d -> case d of
328                                     T1 ... x ... -> x
329                                     T2 ... x ... -> x
330                                     other        -> error "..."
331
332 Similarly for newtypes
333
334         newtype N a = MkN { unN :: a->a }
335
336         unN :: N a -> a -> a
337         unN n = coerce (a->a) n
338         
339 We need to take a little care if the field has a polymorphic type:
340
341         data R = R { f :: forall a. a->a }
342
343 Then we want
344
345         f :: forall a. R -> a -> a
346         f = /\ a \ r = case r of
347                           R f -> f a
348
349 (not f :: R -> forall a. a->a, which gives the type inference mechanism 
350 problems at call sites)
351
352 Similarly for newtypes
353
354         newtype N = MkN { unN :: forall a. a->a }
355
356         unN :: forall a. N -> a -> a
357         unN = /\a -> \n:N -> coerce (a->a) n
358
359 \begin{code}
360 mkRecordSelId tycon field_label unpack_id unpackUtf8_id
361         -- Assumes that all fields with the same field label have the same type
362         --
363         -- Annoyingly, we have to pass in the unpackCString# Id, because
364         -- we can't conjure it up out of thin air
365   = sel_id
366   where
367     sel_id     = mkGlobalId (RecordSelId field_label) (fieldLabelName field_label) selector_ty info
368     field_ty   = fieldLabelType field_label
369     data_cons  = tyConDataCons tycon
370     tyvars     = tyConTyVars tycon      -- These scope over the types in 
371                                         -- the FieldLabels of constructors of this type
372     data_ty   = mkTyConApp tycon tyvar_tys
373     tyvar_tys = mkTyVarTys tyvars
374
375     tycon_theta = tyConTheta tycon      -- The context on the data decl
376                                         --   eg data (Eq a, Ord b) => T a b = ...
377     dict_tys  = [mkPredTy pred | pred <- tycon_theta, 
378                                  needed_dict pred]
379     needed_dict pred = or [ pred `elem` (dataConTheta dc) 
380                           | (DataAlt dc, _, _) <- the_alts]
381     n_dict_tys = length dict_tys
382
383     (field_tyvars,field_theta,field_tau) = splitSigmaTy field_ty
384     field_dict_tys                       = map mkPredTy field_theta
385     n_field_dict_tys                     = length field_dict_tys
386         -- If the field has a universally quantified type we have to 
387         -- be a bit careful.  Suppose we have
388         --      data R = R { op :: forall a. Foo a => a -> a }
389         -- Then we can't give op the type
390         --      op :: R -> forall a. Foo a => a -> a
391         -- because the typechecker doesn't understand foralls to the
392         -- right of an arrow.  The "right" type to give it is
393         --      op :: forall a. Foo a => R -> a -> a
394         -- But then we must generate the right unfolding too:
395         --      op = /\a -> \dfoo -> \ r ->
396         --           case r of
397         --              R op -> op a dfoo
398         -- Note that this is exactly the type we'd infer from a user defn
399         --      op (R op) = op
400
401         -- Very tiresomely, the selectors are (unnecessarily!) overloaded over
402         -- just the dictionaries in the types of the constructors that contain
403         -- the relevant field.  Urgh.  
404         -- NB: this code relies on the fact that DataCons are quantified over
405         -- the identical type variables as their parent TyCon
406
407     selector_ty :: Type
408     selector_ty  = mkForAllTys tyvars $ mkForAllTys field_tyvars $
409                    mkFunTys dict_tys  $  mkFunTys field_dict_tys $
410                    mkFunTy data_ty field_tau
411       
412     arity = 1 + n_dict_tys + n_field_dict_tys
413     info = noCafNoTyGenIdInfo
414            `setCgInfo`          (CgInfo arity caf_info)
415            `setArityInfo`       exactArity arity
416            `setUnfoldingInfo`   unfolding       
417         -- ToDo: consider adding further IdInfo
418
419     unfolding = mkTopUnfolding sel_rhs
420
421         -- Allocate Ids.  We do it a funny way round because field_dict_tys is
422         -- almost always empty.  Also note that we use length_tycon_theta
423         -- rather than n_dict_tys, because the latter gives an infinite loop:
424         -- n_dict tys depends on the_alts, which depens on arg_ids, which depends
425         -- on arity, which depends on n_dict tys.  Sigh!  Mega sigh!
426     field_dict_base    = length tycon_theta + 1
427     dict_id_base       = field_dict_base + n_field_dict_tys
428     field_base         = dict_id_base + 1
429     dict_ids           = mkTemplateLocalsNum  1               dict_tys
430     field_dict_ids     = mkTemplateLocalsNum  field_dict_base field_dict_tys
431     data_id            = mkTemplateLocal      dict_id_base    data_ty
432
433     alts      = map mk_maybe_alt data_cons
434     the_alts  = catMaybes alts
435
436     no_default = all isJust alts        -- No default needed
437     default_alt | no_default = []
438                 | otherwise  = [(DEFAULT, [], error_expr)]
439
440         -- the default branch may have CAF refs, because it calls recSelError etc.
441     caf_info    | no_default = NoCafRefs
442                 | otherwise  = MayHaveCafRefs
443
444     sel_rhs = mkLams tyvars   $ mkLams field_tyvars $ 
445               mkLams dict_ids $ mkLams field_dict_ids $
446               Lam data_id     $ sel_body
447
448     sel_body | isNewTyCon tycon = Note (Coerce field_tau data_ty) (Var data_id)
449              | otherwise        = Case (Var data_id) data_id (the_alts ++ default_alt)
450
451     mk_maybe_alt data_con 
452           = case maybe_the_arg_id of
453                 Nothing         -> Nothing
454                 Just the_arg_id -> Just (DataAlt data_con, real_args, expr)
455                   where
456                     body              = mkVarApps (mkVarApps (Var the_arg_id) field_tyvars) field_dict_ids
457                     strict_marks      = dataConStrictMarks data_con
458                     (expr, real_args) = rebuildConArgs data_con arg_ids strict_marks body
459                                                        (length arg_ids + 1)
460         where
461             arg_ids = mkTemplateLocalsNum field_base (dataConInstOrigArgTys data_con tyvar_tys)
462                                 -- arity+1 avoids all shadowing
463             maybe_the_arg_id  = assocMaybe (field_lbls `zip` arg_ids) field_label
464             field_lbls        = dataConFieldLabels data_con
465
466     error_expr = mkApps (Var rEC_SEL_ERROR_ID) [Type field_tau, err_string]
467     err_string
468         | all safeChar full_msg
469             = App (Var unpack_id) (Lit (MachStr (_PK_ full_msg)))
470         | otherwise
471             = App (Var unpackUtf8_id) (Lit (MachStr (_PK_ (stringToUtf8 (map ord full_msg)))))
472         where
473         safeChar c = c >= '\1' && c <= '\xFF'
474         -- TODO: Putting this Unicode stuff here is ugly. Find a better
475         -- generic place to make string literals. This logic is repeated
476         -- in DsUtils.
477     full_msg   = showSDoc (sep [text "No match in record selector", ppr sel_id]) 
478
479
480 -- this rather ugly function converts the unpacked data con arguments back into
481 -- their packed form.  It is almost the same as the version in DsUtils, except that
482 -- we use template locals here rather than newDsId (ToDo: merge these).
483
484 rebuildConArgs
485   :: DataCon                            -- the con we're matching on
486   -> [Id]                               -- the source-level args
487   -> [StrictnessMark]                   -- the strictness annotations (per-arg)
488   -> CoreExpr                           -- the body
489   -> Int                                -- template local
490   -> (CoreExpr, [Id])
491
492 rebuildConArgs con [] stricts body i = (body, [])
493 rebuildConArgs con (arg:args) stricts body i | isTyVar arg
494   = let (body', args') = rebuildConArgs con args stricts body i
495     in  (body',arg:args')
496 rebuildConArgs con (arg:args) (str:stricts) body i
497   = case maybeMarkedUnboxed str of
498         Just (pack_con1, _) -> 
499             case splitProductType_maybe (idType arg) of
500                 Just (_, tycon_args, pack_con, con_arg_tys) ->
501                     ASSERT( pack_con == pack_con1 )
502                     let unpacked_args = zipWith mkTemplateLocal [i..] con_arg_tys
503                         (body', real_args) = rebuildConArgs con args stricts body 
504                                                 (i + length con_arg_tys)
505                     in
506                     (
507                          Let (NonRec arg (mkConApp pack_con 
508                                                   (map Type tycon_args ++
509                                                    map Var  unpacked_args))) body', 
510                          unpacked_args ++ real_args
511                     )
512
513         _ -> let (body', args') = rebuildConArgs con args stricts body i
514              in  (body', arg:args')
515 \end{code}
516
517
518 %************************************************************************
519 %*                                                                      *
520 \subsection{Dictionary selectors}
521 %*                                                                      *
522 %************************************************************************
523
524 Selecting a field for a dictionary.  If there is just one field, then
525 there's nothing to do.  
526
527 ToDo: unify with mkRecordSelId.
528
529 \begin{code}
530 mkDictSelId :: Name -> Class -> Id
531 mkDictSelId name clas
532   = sel_id
533   where
534     ty        = exprType rhs
535     sel_id    = mkGlobalId (RecordSelId field_lbl) name ty info
536     field_lbl = mkFieldLabel name tycon ty tag
537     tag       = assoc "MkId.mkDictSelId" (classSelIds clas `zip` allFieldLabelTags) sel_id
538
539     info      = noCafNoTyGenIdInfo
540                 `setCgArity`        1
541                 `setArityInfo`      exactArity 1
542                 `setUnfoldingInfo`  unfolding
543                 
544         -- We no longer use 'must-inline' on record selectors.  They'll
545         -- inline like crazy if they scrutinise a constructor
546
547     unfolding = mkTopUnfolding rhs
548
549     tyvars  = classTyVars clas
550
551     tycon      = classTyCon clas
552     [data_con] = tyConDataCons tycon
553     tyvar_tys  = mkTyVarTys tyvars
554     arg_tys    = dataConArgTys data_con tyvar_tys
555     the_arg_id = arg_ids !! (tag - firstFieldLabelTag)
556
557     dict_ty    = mkDictTy clas tyvar_tys
558     (dict_id:arg_ids) = mkTemplateLocals (dict_ty : arg_tys)
559
560     rhs | isNewTyCon tycon = mkLams tyvars $ Lam dict_id $
561                              Note (Coerce (head arg_tys) dict_ty) (Var dict_id)
562         | otherwise        = mkLams tyvars $ Lam dict_id $
563                              Case (Var dict_id) dict_id
564                                   [(DataAlt data_con, arg_ids, Var the_arg_id)]
565 \end{code}
566
567
568 %************************************************************************
569 %*                                                                      *
570 \subsection{Primitive operations
571 %*                                                                      *
572 %************************************************************************
573
574 \begin{code}
575 mkPrimOpId :: PrimOp -> Id
576 mkPrimOpId prim_op 
577   = id
578   where
579     (tyvars,arg_tys,res_ty, arity, strict_info) = primOpSig prim_op
580     ty   = mkForAllTys tyvars (mkFunTys arg_tys res_ty)
581     name = mkPrimOpIdName prim_op
582     id   = mkGlobalId (PrimOpId prim_op) name ty info
583                 
584     info = noCafNoTyGenIdInfo
585            `setSpecInfo`        rules
586            `setCgArity`         arity
587            `setArityInfo`       exactArity arity
588            `setStrictnessInfo`  strict_info
589
590     rules = maybe emptyCoreRules (addRule emptyCoreRules id)
591                 (primOpRule prim_op)
592
593
594 -- For each ccall we manufacture a separate CCallOpId, giving it
595 -- a fresh unique, a type that is correct for this particular ccall,
596 -- and a CCall structure that gives the correct details about calling
597 -- convention etc.  
598 --
599 -- The *name* of this Id is a local name whose OccName gives the full
600 -- details of the ccall, type and all.  This means that the interface 
601 -- file reader can reconstruct a suitable Id
602
603 mkCCallOpId :: Unique -> CCall -> Type -> Id
604 mkCCallOpId uniq ccall ty
605   = ASSERT( isEmptyVarSet (tyVarsOfType ty) )
606         -- A CCallOpId should have no free type variables; 
607         -- when doing substitutions won't substitute over it
608     mkGlobalId (PrimOpId prim_op) name ty info
609   where
610     occ_str = showSDocIface (braces (pprCCallOp ccall <+> ppr ty))
611         -- The "occurrence name" of a ccall is the full info about the
612         -- ccall; it is encoded, but may have embedded spaces etc!
613
614     name    = mkCCallName uniq occ_str
615     prim_op = CCallOp ccall
616
617     info = noCafNoTyGenIdInfo
618            `setCgArity`         arity
619            `setArityInfo`       exactArity arity
620            `setStrictnessInfo`  strict_info
621
622     (_, tau)     = splitForAllTys ty
623     (arg_tys, _) = splitFunTys tau
624     arity        = length arg_tys
625     strict_info  = mkStrictnessInfo (take arity (repeat wwPrim), False)
626 \end{code}
627
628
629 %************************************************************************
630 %*                                                                      *
631 \subsection{DictFuns and default methods}
632 %*                                                                      *
633 %************************************************************************
634
635 \begin{code}
636 mkDefaultMethodId dm_name ty
637   = mkVanillaGlobal dm_name ty noCafNoTyGenIdInfo
638
639 mkDictFunId :: Name             -- Name to use for the dict fun;
640             -> Class 
641             -> [TyVar]
642             -> [Type]
643             -> ThetaType
644             -> Id
645
646 mkDictFunId dfun_name clas inst_tyvars inst_tys dfun_theta
647   = mkVanillaGlobal dfun_name dfun_ty noCafNoTyGenIdInfo
648   where
649     dfun_ty = mkSigmaTy inst_tyvars dfun_theta (mkDictTy clas inst_tys)
650
651 {-  1 dec 99: disable the Mark Jones optimisation for the sake
652     of compatibility with Hugs.
653     See `types/InstEnv' for a discussion related to this.
654
655     (class_tyvars, sc_theta, _, _) = classBigSig clas
656     not_const (clas, tys) = not (isEmptyVarSet (tyVarsOfTypes tys))
657     sc_theta' = substClasses (mkTopTyVarSubst class_tyvars inst_tys) sc_theta
658     dfun_theta = case inst_decl_theta of
659                    []    -> []  -- If inst_decl_theta is empty, then we don't
660                                 -- want to have any dict arguments, so that we can
661                                 -- expose the constant methods.
662
663                    other -> nub (inst_decl_theta ++ filter not_const sc_theta')
664                                 -- Otherwise we pass the superclass dictionaries to
665                                 -- the dictionary function; the Mark Jones optimisation.
666                                 --
667                                 -- NOTE the "nub".  I got caught by this one:
668                                 --   class Monad m => MonadT t m where ...
669                                 --   instance Monad m => MonadT (EnvT env) m where ...
670                                 -- Here, the inst_decl_theta has (Monad m); but so
671                                 -- does the sc_theta'!
672                                 --
673                                 -- NOTE the "not_const".  I got caught by this one too:
674                                 --   class Foo a => Baz a b where ...
675                                 --   instance Wob b => Baz T b where..
676                                 -- Now sc_theta' has Foo T
677 -}
678 \end{code}
679
680
681 %************************************************************************
682 %*                                                                      *
683 \subsection{Un-definable}
684 %*                                                                      *
685 %************************************************************************
686
687 These two can't be defined in Haskell.
688
689 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
690 just gets expanded into a type coercion wherever it occurs.  Hence we
691 add it as a built-in Id with an unfolding here.
692
693 The type variables we use here are "open" type variables: this means
694 they can unify with both unlifted and lifted types.  Hence we provide
695 another gun with which to shoot yourself in the foot.
696
697 \begin{code}
698 unsafeCoerceId
699   = pcMiscPrelId unsafeCoerceIdKey pREL_GHC SLIT("unsafeCoerce#") ty info
700   where
701     info = noCafNoTyGenIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
702            
703
704     ty  = mkForAllTys [openAlphaTyVar,openBetaTyVar]
705                       (mkFunTy openAlphaTy openBetaTy)
706     [x] = mkTemplateLocals [openAlphaTy]
707     rhs = mkLams [openAlphaTyVar,openBetaTyVar,x] $
708           Note (Coerce openBetaTy openAlphaTy) (Var x)
709 \end{code}
710
711
712 @getTag#@ is another function which can't be defined in Haskell.  It needs to
713 evaluate its argument and call the dataToTag# primitive.
714
715 \begin{code}
716 getTagId
717   = pcMiscPrelId getTagIdKey pREL_GHC SLIT("getTag#") ty info
718   where
719     info = noCafNoTyGenIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
720         -- We don't provide a defn for this; you must inline it
721
722     ty = mkForAllTys [alphaTyVar] (mkFunTy alphaTy intPrimTy)
723     [x,y] = mkTemplateLocals [alphaTy,alphaTy]
724     rhs = mkLams [alphaTyVar,x] $
725           Case (Var x) y [ (DEFAULT, [], mkApps (Var dataToTagId) [Type alphaTy, Var y]) ]
726
727 dataToTagId = mkPrimOpId DataToTagOp
728 \end{code}
729
730 @realWorld#@ used to be a magic literal, \tr{void#}.  If things get
731 nasty as-is, change it back to a literal (@Literal@).
732
733 \begin{code}
734 realWorldPrimId -- :: State# RealWorld
735   = pcMiscPrelId realWorldPrimIdKey pREL_GHC SLIT("realWorld#")
736                  realWorldStatePrimTy
737                  (noCafNoTyGenIdInfo `setUnfoldingInfo` mkOtherCon [])
738         -- The mkOtherCon makes it look that realWorld# is evaluated
739         -- which in turn makes Simplify.interestingArg return True,
740         -- which in turn makes INLINE things applied to realWorld# likely
741         -- to be inlined
742 \end{code}
743
744
745 %************************************************************************
746 %*                                                                      *
747 \subsection[PrelVals-error-related]{@error@ and friends; @trace@}
748 %*                                                                      *
749 %************************************************************************
750
751 GHC randomly injects these into the code.
752
753 @patError@ is just a version of @error@ for pattern-matching
754 failures.  It knows various ``codes'' which expand to longer
755 strings---this saves space!
756
757 @absentErr@ is a thing we put in for ``absent'' arguments.  They jolly
758 well shouldn't be yanked on, but if one is, then you will get a
759 friendly message from @absentErr@ (rather than a totally random
760 crash).
761
762 @parError@ is a special version of @error@ which the compiler does
763 not know to be a bottoming Id.  It is used in the @_par_@ and @_seq_@
764 templates, but we don't ever expect to generate code for it.
765
766 \begin{code}
767 eRROR_ID
768   = pc_bottoming_Id errorIdKey pREL_ERR SLIT("error") errorTy
769 pAT_ERROR_ID
770   = generic_ERROR_ID patErrorIdKey SLIT("patError")
771 rEC_SEL_ERROR_ID
772   = generic_ERROR_ID recSelErrIdKey SLIT("recSelError")
773 rEC_CON_ERROR_ID
774   = generic_ERROR_ID recConErrorIdKey SLIT("recConError")
775 rEC_UPD_ERROR_ID
776   = generic_ERROR_ID recUpdErrorIdKey SLIT("recUpdError")
777 iRREFUT_PAT_ERROR_ID
778   = generic_ERROR_ID irrefutPatErrorIdKey SLIT("irrefutPatError")
779 nON_EXHAUSTIVE_GUARDS_ERROR_ID
780   = generic_ERROR_ID nonExhaustiveGuardsErrorIdKey SLIT("nonExhaustiveGuardsError")
781 nO_METHOD_BINDING_ERROR_ID
782   = generic_ERROR_ID noMethodBindingErrorIdKey SLIT("noMethodBindingError")
783
784 aBSENT_ERROR_ID
785   = pc_bottoming_Id absentErrorIdKey pREL_ERR SLIT("absentErr")
786         (mkSigmaTy [openAlphaTyVar] [] openAlphaTy)
787
788 pAR_ERROR_ID
789   = pcMiscPrelId parErrorIdKey pREL_ERR SLIT("parError")
790     (mkSigmaTy [openAlphaTyVar] [] openAlphaTy) noCafNoTyGenIdInfo
791 \end{code}
792
793
794 %************************************************************************
795 %*                                                                      *
796 \subsection{Utilities}
797 %*                                                                      *
798 %************************************************************************
799
800 \begin{code}
801 pcMiscPrelId :: Unique{-IdKey-} -> Module -> FAST_STRING -> Type -> IdInfo -> Id
802 pcMiscPrelId key mod str ty info
803   = let
804         name = mkWiredInName mod (mkVarOcc str) key
805         imp  = mkVanillaGlobal name ty info -- the usual case...
806     in
807     imp
808     -- We lie and say the thing is imported; otherwise, we get into
809     -- a mess with dependency analysis; e.g., core2stg may heave in
810     -- random calls to GHCbase.unpackPS__.  If GHCbase is the module
811     -- being compiled, then it's just a matter of luck if the definition
812     -- will be in "the right place" to be in scope.
813
814 pc_bottoming_Id key mod name ty
815  = pcMiscPrelId key mod name ty bottoming_info
816  where
817     bottoming_info = noCafNoTyGenIdInfo 
818                      `setStrictnessInfo` mkStrictnessInfo ([wwStrict], True)
819
820         -- these "bottom" out, no matter what their arguments
821
822 generic_ERROR_ID u n = pc_bottoming_Id u pREL_ERR n errorTy
823
824 (openAlphaTyVar:openBetaTyVar:_) = openAlphaTyVars
825 openAlphaTy  = mkTyVarTy openAlphaTyVar
826 openBetaTy   = mkTyVarTy openBetaTyVar
827
828 errorTy  :: Type
829 errorTy  = mkSigmaTy [openAlphaTyVar] [] (mkFunTys [mkListTy charTy] 
830                                                    openAlphaTy)
831     -- Notice the openAlphaTyVar.  It says that "error" can be applied
832     -- to unboxed as well as boxed types.  This is OK because it never
833     -- returns, so the return type is irrelevant.
834 \end{code}
835