[project @ 2003-01-24 14:04:40 by simonmar]
[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, mkFCallId,
22
23         mkReboxingAlt, mkNewTypeBody,
24
25         -- And some particular Ids; see below for why they are wired in
26         wiredInIds, ghcPrimIds,
27         unsafeCoerceId, realWorldPrimId, voidArgId, nullAddrId, seqId,
28         lazyId, lazyIdUnfolding, lazyIdKey,
29
30         mkRuntimeErrorApp,
31         rEC_CON_ERROR_ID, iRREFUT_PAT_ERROR_ID, rUNTIME_ERROR_ID,
32         nON_EXHAUSTIVE_GUARDS_ERROR_ID, nO_METHOD_BINDING_ERROR_ID,
33         pAT_ERROR_ID
34     ) where
35
36 #include "HsVersions.h"
37
38
39 import BasicTypes       ( Arity, StrictnessMark(..), isMarkedUnboxed, isMarkedStrict )
40 import TysPrim          ( openAlphaTyVars, alphaTyVar, alphaTy, betaTyVar, betaTy,
41                           intPrimTy, realWorldStatePrimTy, addrPrimTy
42                         )
43 import TysWiredIn       ( charTy, mkListTy )
44 import PrelRules        ( primOpRules )
45 import Rules            ( addRule )
46 import TcType           ( Type, ThetaType, mkDictTy, mkPredTys, mkTyConApp,
47                           mkTyVarTys, mkClassPred, tcEqPred,
48                           mkFunTys, mkFunTy, mkSigmaTy, tcSplitSigmaTy, 
49                           isUnLiftedType, mkForAllTys, mkTyVarTy, tyVarsOfType,
50                           tcSplitFunTys, tcSplitForAllTys, mkPredTy
51                         )
52 import CoreUtils        ( exprType )
53 import CoreUnfold       ( mkTopUnfolding, mkCompulsoryUnfolding, mkOtherCon )
54 import Literal          ( Literal(..), nullAddrLit )
55 import TyCon            ( TyCon, isNewTyCon, tyConTyVars, tyConDataCons,
56                           tyConTheta, isProductTyCon, isDataTyCon, isRecursiveTyCon )
57 import Class            ( Class, classTyCon, classTyVars, classSelIds )
58 import Var              ( Id, TyVar, Var )
59 import VarSet           ( isEmptyVarSet )
60 import Name             ( mkFCallName, Name )
61 import PrimOp           ( PrimOp(DataToTagOp), primOpSig, mkPrimOpIdName )
62 import ForeignCall      ( ForeignCall )
63 import DataCon          ( DataCon, 
64                           dataConFieldLabels, dataConRepArity, dataConTyCon,
65                           dataConArgTys, dataConRepType, 
66                           dataConOrigArgTys,
67                           dataConName, dataConTheta,
68                           dataConSig, dataConStrictMarks, dataConWorkId,
69                           splitProductType
70                         )
71 import Id               ( idType, mkGlobalId, mkVanillaGlobal, mkSysLocal, mkLocalId,
72                           mkTemplateLocals, mkTemplateLocalsNum, setIdLocalExported,
73                           mkTemplateLocal, idNewStrictness, idName
74                         )
75 import IdInfo           ( IdInfo, noCafIdInfo, hasCafIdInfo,
76                           setUnfoldingInfo, 
77                           setArityInfo, setSpecInfo, setCafInfo,
78                           setAllStrictnessInfo,
79                           GlobalIdDetails(..), CafInfo(..)
80                         )
81 import NewDemand        ( mkStrictSig, strictSigResInfo, DmdResult(..),
82                           mkTopDmdType, topDmd, evalDmd, lazyDmd, retCPR,
83                           Demand(..), Demands(..) )
84 import FieldLabel       ( mkFieldLabel, fieldLabelName, 
85                           firstFieldLabelTag, allFieldLabelTags, fieldLabelType
86                         )
87 import DmdAnal          ( dmdAnalTopRhs )
88 import CoreSyn
89 import Unique           ( mkBuiltinUnique )
90 import Maybes
91 import PrelNames
92 import Maybe            ( isJust )
93 import Util             ( dropList, isSingleton )
94 import Outputable
95 import FastString
96 import ListSetOps       ( assoc, assocMaybe )
97 import UnicodeUtil      ( stringToUtf8 )
98 import List             ( nubBy )
99 \end{code}              
100
101 %************************************************************************
102 %*                                                                      *
103 \subsection{Wired in Ids}
104 %*                                                                      *
105 %************************************************************************
106
107 \begin{code}
108 wiredInIds
109   = [   -- These error-y things are wired in because we don't yet have
110         -- a way to express in an interface file that the result type variable
111         -- is 'open'; that is can be unified with an unboxed type
112         -- 
113         -- [The interface file format now carry such information, but there's
114         -- no way yet of expressing at the definition site for these 
115         -- error-reporting functions that they have an 'open' 
116         -- result type. -- sof 1/99]
117
118     eRROR_ID,   -- This one isn't used anywhere else in the compiler
119                 -- But we still need it in wiredInIds so that when GHC
120                 -- compiles a program that mentions 'error' we don't
121                 -- import its type from the interface file; we just get
122                 -- the Id defined here.  Which has an 'open-tyvar' type.
123
124     rUNTIME_ERROR_ID,
125     iRREFUT_PAT_ERROR_ID,
126     nON_EXHAUSTIVE_GUARDS_ERROR_ID,
127     nO_METHOD_BINDING_ERROR_ID,
128     pAT_ERROR_ID,
129     rEC_CON_ERROR_ID,
130
131     lazyId
132     ] ++ ghcPrimIds
133
134 -- These Ids are exported from GHC.Prim
135 ghcPrimIds
136   = [   -- These can't be defined in Haskell, but they have
137         -- perfectly reasonable unfoldings in Core
138     realWorldPrimId,
139     unsafeCoerceId,
140     nullAddrId,
141     seqId
142     ]
143 \end{code}
144
145 %************************************************************************
146 %*                                                                      *
147 \subsection{Data constructors}
148 %*                                                                      *
149 %************************************************************************
150
151 \begin{code}
152 mkDataConId :: Name -> DataCon -> Id
153         -- Makes the *worker* for the data constructor; that is, the function
154         -- that takes the reprsentation arguments and builds the constructor.
155 mkDataConId work_name data_con
156   = mkGlobalId (DataConId data_con) work_name (dataConRepType data_con) info
157   where
158     info = noCafIdInfo
159            `setArityInfo`               arity
160            `setAllStrictnessInfo`       Just strict_sig
161
162     arity      = dataConRepArity data_con
163
164     strict_sig = mkStrictSig (mkTopDmdType (replicate arity topDmd) cpr_info)
165         -- Notice that we do *not* say the worker is strict
166         -- even if the data constructor is declared strict
167         --      e.g.    data T = MkT !(Int,Int)
168         -- Why?  Because the *wrapper* is strict (and its unfolding has case
169         -- expresssions that do the evals) but the *worker* itself is not.
170         -- If we pretend it is strict then when we see
171         --      case x of y -> $wMkT y
172         -- the simplifier thinks that y is "sure to be evaluated" (because
173         -- $wMkT is strict) and drops the case.  No, $wMkT is not strict.
174         --
175         -- When the simplifer sees a pattern 
176         --      case e of MkT x -> ...
177         -- it uses the dataConRepStrictness of MkT to mark x as evaluated;
178         -- but that's fine... dataConRepStrictness comes from the data con
179         -- not from the worker Id.
180
181     tycon = dataConTyCon data_con
182     cpr_info | isProductTyCon tycon && 
183                isDataTyCon tycon    &&
184                arity > 0            &&
185                arity <= mAX_CPR_SIZE    = retCPR
186              | otherwise                = TopRes
187         -- RetCPR is only true for products that are real data types;
188         -- that is, not unboxed tuples or [non-recursive] newtypes
189
190 mAX_CPR_SIZE :: Arity
191 mAX_CPR_SIZE = 10
192 -- We do not treat very big tuples as CPR-ish:
193 --      a) for a start we get into trouble because there aren't 
194 --         "enough" unboxed tuple types (a tiresome restriction, 
195 --         but hard to fix), 
196 --      b) more importantly, big unboxed tuples get returned mainly
197 --         on the stack, and are often then allocated in the heap
198 --         by the caller.  So doing CPR for them may in fact make
199 --         things worse.
200 \end{code}
201
202 The wrapper for a constructor is an ordinary top-level binding that evaluates
203 any strict args, unboxes any args that are going to be flattened, and calls
204 the worker.
205
206 We're going to build a constructor that looks like:
207
208         data (Data a, C b) =>  T a b = T1 !a !Int b
209
210         T1 = /\ a b -> 
211              \d1::Data a, d2::C b ->
212              \p q r -> case p of { p ->
213                        case q of { q ->
214                        Con T1 [a,b] [p,q,r]}}
215
216 Notice that
217
218 * d2 is thrown away --- a context in a data decl is used to make sure
219   one *could* construct dictionaries at the site the constructor
220   is used, but the dictionary isn't actually used.
221
222 * We have to check that we can construct Data dictionaries for
223   the types a and Int.  Once we've done that we can throw d1 away too.
224
225 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
226   all that matters is that the arguments are evaluated.  "seq" is 
227   very careful to preserve evaluation order, which we don't need
228   to be here.
229
230   You might think that we could simply give constructors some strictness
231   info, like PrimOps, and let CoreToStg do the let-to-case transformation.
232   But we don't do that because in the case of primops and functions strictness
233   is a *property* not a *requirement*.  In the case of constructors we need to
234   do something active to evaluate the argument.
235
236   Making an explicit case expression allows the simplifier to eliminate
237   it in the (common) case where the constructor arg is already evaluated.
238
239 \begin{code}
240 mkDataConWrapId data_con
241   = mkGlobalId (DataConWrapId data_con) (dataConName data_con) wrap_ty info
242   where
243     work_id = dataConWorkId data_con
244
245     info = noCafIdInfo
246            `setUnfoldingInfo`   wrap_unf
247                 -- The NoCaf-ness is set by noCafIdInfo
248            `setArityInfo`       arity
249                 -- It's important to specify the arity, so that partial
250                 -- applications are treated as values
251            `setAllStrictnessInfo`       Just wrap_sig
252
253     wrap_sig = mkStrictSig (mkTopDmdType arg_dmds res_info)
254     res_info = strictSigResInfo (idNewStrictness work_id)
255     arg_dmds = map mk_dmd strict_marks
256     mk_dmd str | isMarkedStrict str = evalDmd
257                | otherwise          = lazyDmd
258         -- The Cpr info can be important inside INLINE rhss, where the
259         -- wrapper constructor isn't inlined.
260         -- And the argument strictness can be important too; we
261         -- may not inline a contructor when it is partially applied.
262         -- For example:
263         --      data W = C !Int !Int !Int
264         --      ...(let w = C x in ...(w p q)...)...
265         -- we want to see that w is strict in its two arguments
266
267     wrap_unf | isNewTyCon tycon
268              = ASSERT( null ex_tyvars && null ex_dict_args && isSingleton orig_arg_tys )
269                 -- No existentials on a newtype, but it can have a context
270                 -- e.g.         newtype Eq a => T a = MkT (...)
271                 mkTopUnfolding $ Note InlineMe $
272                 mkLams tyvars $ Lam id_arg1 $ 
273                 mkNewTypeBody tycon result_ty (Var id_arg1)
274
275              | not (any isMarkedStrict strict_marks)
276              = mkCompulsoryUnfolding (Var work_id)
277                         -- The common case.  Not only is this efficient,
278                         -- but it also ensures that the wrapper is replaced
279                         -- by the worker even when there are no args.
280                         --              f (:) x
281                         -- becomes 
282                         --              f $w: x
283                         -- This is really important in rule matching,
284                         -- (We could match on the wrappers,
285                         -- but that makes it less likely that rules will match
286                         -- when we bring bits of unfoldings together.)
287                 --
288                 -- NB:  because of this special case, (map (:) ys) turns into
289                 --      (map $w: ys).  The top-level defn for (:) is never used.
290                 --      This is somewhat of a bore, but I'm currently leaving it 
291                 --      as is, so that there still is a top level curried (:) for
292                 --      the interpreter to call.
293
294              | otherwise
295              = mkTopUnfolding $ Note InlineMe $
296                mkLams all_tyvars $ 
297                mkLams ex_dict_args $ mkLams id_args $
298                foldr mk_case con_app 
299                      (zip (ex_dict_args++id_args) strict_marks) i3 []
300
301     con_app i rep_ids = mkApps (Var work_id)
302                                (map varToCoreExpr (all_tyvars ++ reverse rep_ids))
303
304     (tyvars, _, ex_tyvars, ex_theta, orig_arg_tys, tycon) = dataConSig data_con
305     all_tyvars   = tyvars ++ ex_tyvars
306
307     ex_dict_tys  = mkPredTys ex_theta
308     all_arg_tys  = ex_dict_tys ++ orig_arg_tys
309     result_ty    = mkTyConApp tycon (mkTyVarTys tyvars)
310
311     wrap_ty = mkForAllTys all_tyvars (mkFunTys all_arg_tys result_ty)
312         -- We used to include the stupid theta in the wrapper's args
313         -- but now we don't.  Instead the type checker just injects these
314         -- extra constraints where necessary.
315
316     mkLocals i tys = (zipWith mkTemplateLocal [i..i+n-1] tys, i+n)
317                    where
318                      n = length tys
319
320     (ex_dict_args,i2)  = mkLocals 1  ex_dict_tys
321     (id_args,i3)       = mkLocals i2 orig_arg_tys
322     arity              = i3-1
323     (id_arg1:_)   = id_args             -- Used for newtype only
324
325     strict_marks  = dataConStrictMarks data_con
326
327     mk_case 
328            :: (Id, StrictnessMark)      -- Arg, strictness
329            -> (Int -> [Id] -> CoreExpr) -- Body
330            -> Int                       -- Next rep arg id
331            -> [Id]                      -- Rep args so far, reversed
332            -> CoreExpr
333     mk_case (arg,strict) body i rep_args
334           = case strict of
335                 NotMarkedStrict -> body i (arg:rep_args)
336                 MarkedStrict 
337                    | isUnLiftedType (idType arg) -> body i (arg:rep_args)
338                    | otherwise ->
339                         Case (Var arg) arg [(DEFAULT,[], body i (arg:rep_args))]
340
341                 MarkedUnboxed
342                    -> case splitProductType "do_unbox" (idType arg) of
343                            (tycon, tycon_args, con, tys) ->
344                                    Case (Var arg) arg [(DataAlt con, con_args,
345                                         body i' (reverse con_args ++ rep_args))]
346                               where 
347                                 (con_args, i') = mkLocals i tys
348 \end{code}
349
350
351 %************************************************************************
352 %*                                                                      *
353 \subsection{Record selectors}
354 %*                                                                      *
355 %************************************************************************
356
357 We're going to build a record selector unfolding that looks like this:
358
359         data T a b c = T1 { ..., op :: a, ...}
360                      | T2 { ..., op :: a, ...}
361                      | T3
362
363         sel = /\ a b c -> \ d -> case d of
364                                     T1 ... x ... -> x
365                                     T2 ... x ... -> x
366                                     other        -> error "..."
367
368 Similarly for newtypes
369
370         newtype N a = MkN { unN :: a->a }
371
372         unN :: N a -> a -> a
373         unN n = coerce (a->a) n
374         
375 We need to take a little care if the field has a polymorphic type:
376
377         data R = R { f :: forall a. a->a }
378
379 Then we want
380
381         f :: forall a. R -> a -> a
382         f = /\ a \ r = case r of
383                           R f -> f a
384
385 (not f :: R -> forall a. a->a, which gives the type inference mechanism 
386 problems at call sites)
387
388 Similarly for (recursive) newtypes
389
390         newtype N = MkN { unN :: forall a. a->a }
391
392         unN :: forall b. N -> b -> b
393         unN = /\b -> \n:N -> (coerce (forall a. a->a) n)
394
395 \begin{code}
396 mkRecordSelId tycon field_label
397         -- Assumes that all fields with the same field label have the same type
398         --
399         -- Annoyingly, we have to pass in the unpackCString# Id, because
400         -- we can't conjure it up out of thin air
401   = sel_id
402   where
403     sel_id     = mkGlobalId (RecordSelId field_label) (fieldLabelName field_label) selector_ty info
404     field_ty   = fieldLabelType field_label
405     data_cons  = tyConDataCons tycon
406     tyvars     = tyConTyVars tycon      -- These scope over the types in 
407                                         -- the FieldLabels of constructors of this type
408     data_ty   = mkTyConApp tycon tyvar_tys
409     tyvar_tys = mkTyVarTys tyvars
410
411         -- Very tiresomely, the selectors are (unnecessarily!) overloaded over
412         -- just the dictionaries in the types of the constructors that contain
413         -- the relevant field.  [The Report says that pattern matching on a
414         -- constructor gives the same constraints as applying it.]  Urgh.  
415         --
416         -- However, not all data cons have all constraints (because of
417         -- TcTyDecls.thinContext).  So we need to find all the data cons 
418         -- involved in the pattern match and take the union of their constraints.
419         --
420         -- NB: this code relies on the fact that DataCons are quantified over
421         -- the identical type variables as their parent TyCon
422     tycon_theta  = tyConTheta tycon     -- The context on the data decl
423                                         --   eg data (Eq a, Ord b) => T a b = ...
424     needed_preds = [pred | (DataAlt dc, _, _) <- the_alts, pred <- dataConTheta dc]
425     dict_tys     = map mkPredTy (nubBy tcEqPred needed_preds)
426     n_dict_tys   = length dict_tys
427
428     (field_tyvars,field_theta,field_tau) = tcSplitSigmaTy field_ty
429     field_dict_tys                       = map mkPredTy field_theta
430     n_field_dict_tys                     = length field_dict_tys
431         -- If the field has a universally quantified type we have to 
432         -- be a bit careful.  Suppose we have
433         --      data R = R { op :: forall a. Foo a => a -> a }
434         -- Then we can't give op the type
435         --      op :: R -> forall a. Foo a => a -> a
436         -- because the typechecker doesn't understand foralls to the
437         -- right of an arrow.  The "right" type to give it is
438         --      op :: forall a. Foo a => R -> a -> a
439         -- But then we must generate the right unfolding too:
440         --      op = /\a -> \dfoo -> \ r ->
441         --           case r of
442         --              R op -> op a dfoo
443         -- Note that this is exactly the type we'd infer from a user defn
444         --      op (R op) = op
445
446     selector_ty :: Type
447     selector_ty  = mkForAllTys tyvars $ mkForAllTys field_tyvars $
448                    mkFunTys dict_tys  $  mkFunTys field_dict_tys $
449                    mkFunTy data_ty field_tau
450       
451     arity = 1 + n_dict_tys + n_field_dict_tys
452
453     (strict_sig, rhs_w_str) = dmdAnalTopRhs sel_rhs
454         -- Use the demand analyser to work out strictness.
455         -- With all this unpackery it's not easy!
456
457     info = noCafIdInfo
458            `setCafInfo`           caf_info
459            `setArityInfo`         arity
460            `setUnfoldingInfo`     mkTopUnfolding rhs_w_str
461            `setAllStrictnessInfo` Just strict_sig
462
463         -- Allocate Ids.  We do it a funny way round because field_dict_tys is
464         -- almost always empty.  Also note that we use length_tycon_theta
465         -- rather than n_dict_tys, because the latter gives an infinite loop:
466         -- n_dict tys depends on the_alts, which depens on arg_ids, which depends
467         -- on arity, which depends on n_dict tys.  Sigh!  Mega sigh!
468     field_dict_base    = length tycon_theta + 1
469     dict_id_base       = field_dict_base + n_field_dict_tys
470     field_base         = dict_id_base + 1
471     dict_ids           = mkTemplateLocalsNum  1               dict_tys
472     field_dict_ids     = mkTemplateLocalsNum  field_dict_base field_dict_tys
473     data_id            = mkTemplateLocal      dict_id_base    data_ty
474
475     alts      = map mk_maybe_alt data_cons
476     the_alts  = catMaybes alts
477
478     no_default = all isJust alts        -- No default needed
479     default_alt | no_default = []
480                 | otherwise  = [(DEFAULT, [], error_expr)]
481
482         -- The default branch may have CAF refs, because it calls recSelError etc.
483     caf_info    | no_default = NoCafRefs
484                 | otherwise  = MayHaveCafRefs
485
486     sel_rhs = mkLams tyvars   $ mkLams field_tyvars $ 
487               mkLams dict_ids $ mkLams field_dict_ids $
488               Lam data_id     $ sel_body
489
490     sel_body | isNewTyCon tycon = mk_result (mkNewTypeBody tycon field_ty (Var data_id))
491              | otherwise        = Case (Var data_id) data_id (default_alt ++ the_alts)
492
493     mk_result poly_result = mkVarApps (mkVarApps poly_result field_tyvars) field_dict_ids
494         -- We pull the field lambdas to the top, so we need to 
495         -- apply them in the body.  For example:
496         --      data T = MkT { foo :: forall a. a->a }
497         --
498         --      foo :: forall a. T -> a -> a
499         --      foo = /\a. \t:T. case t of { MkT f -> f a }
500
501     mk_maybe_alt data_con 
502         = case maybe_the_arg_id of
503                 Nothing         -> Nothing
504                 Just the_arg_id -> Just (mkReboxingAlt uniqs data_con arg_ids body)
505                                 where
506                                    body = mk_result (Var the_arg_id)
507         where
508             arg_ids = mkTemplateLocalsNum field_base (dataConOrigArgTys data_con)
509                         -- No need to instantiate; same tyvars in datacon as tycon
510
511             unpack_base = field_base + length arg_ids
512             uniqs = map mkBuiltinUnique [unpack_base..]
513
514                                 -- arity+1 avoids all shadowing
515             maybe_the_arg_id  = assocMaybe (field_lbls `zip` arg_ids) field_label
516             field_lbls        = dataConFieldLabels data_con
517
518     error_expr = mkRuntimeErrorApp rEC_SEL_ERROR_ID field_tau full_msg
519     full_msg   = showSDoc (sep [text "No match in record selector", ppr sel_id]) 
520
521
522 -- (mkReboxingAlt us con xs rhs) basically constructs the case
523 -- alternative  (con, xs, rhs)
524 -- but it does the reboxing necessary to construct the *source* 
525 -- arguments, xs, from the representation arguments ys.
526 -- For example:
527 --      data T = MkT !(Int,Int) Bool
528 --
529 -- mkReboxingAlt MkT [x,b] r 
530 --      = (DataAlt MkT, [y::Int,z::Int,b], let x = (y,z) in r)
531 --
532 -- mkDataAlt should really be in DataCon, but it can't because
533 -- it manipulates CoreSyn.
534
535 mkReboxingAlt
536   :: [Unique]                   -- Uniques for the new Ids
537   -> DataCon
538   -> [Var]                      -- Source-level args
539   -> CoreExpr                   -- RHS
540   -> CoreAlt
541
542 mkReboxingAlt us con args rhs
543   | not (any isMarkedUnboxed stricts)
544   = (DataAlt con, args, rhs)
545
546   | otherwise
547   = let
548         (binds, args') = go args stricts us
549     in
550     (DataAlt con, args', mkLets binds rhs)
551
552   where
553     stricts = dataConStrictMarks con
554
555     go [] stricts us = ([], [])
556
557         -- Type variable case
558     go (arg:args) stricts us 
559       | isTyVar arg
560       = let (binds, args') = go args stricts us
561         in  (binds, arg:args')
562
563         -- Term variable case
564     go (arg:args) (str:stricts) us
565       | isMarkedUnboxed str
566       = let
567           (_, tycon_args, pack_con, con_arg_tys)
568                  = splitProductType "mkReboxingAlt" (idType arg)
569
570           unpacked_args  = zipWith (mkSysLocal FSLIT("rb")) us con_arg_tys
571           (binds, args') = go args stricts (dropList con_arg_tys us)
572           con_app        = mkConApp pack_con (map Type tycon_args ++ map Var unpacked_args)
573         in
574         (NonRec arg con_app : binds, unpacked_args ++ args')
575
576       | otherwise
577       = let (binds, args') = go args stricts us
578         in  (binds, arg:args')
579 \end{code}
580
581
582 %************************************************************************
583 %*                                                                      *
584 \subsection{Dictionary selectors}
585 %*                                                                      *
586 %************************************************************************
587
588 Selecting a field for a dictionary.  If there is just one field, then
589 there's nothing to do.  
590
591 Dictionary selectors may get nested forall-types.  Thus:
592
593         class Foo a where
594           op :: forall b. Ord b => a -> b -> b
595
596 Then the top-level type for op is
597
598         op :: forall a. Foo a => 
599               forall b. Ord b => 
600               a -> b -> b
601
602 This is unlike ordinary record selectors, which have all the for-alls
603 at the outside.  When dealing with classes it's very convenient to
604 recover the original type signature from the class op selector.
605
606 ToDo: unify with mkRecordSelId?
607
608 \begin{code}
609 mkDictSelId :: Name -> Class -> Id
610 mkDictSelId name clas
611   = mkGlobalId (RecordSelId field_lbl) name sel_ty info
612   where
613     sel_ty = mkForAllTys tyvars (mkFunTy (idType dict_id) (idType the_arg_id))
614         -- We can't just say (exprType rhs), because that would give a type
615         --      C a -> C a
616         -- for a single-op class (after all, the selector is the identity)
617         -- But it's type must expose the representation of the dictionary
618         -- to gat (say)         C a -> (a -> a)
619
620     field_lbl = mkFieldLabel name tycon sel_ty tag
621     tag       = assoc "MkId.mkDictSelId" (map idName (classSelIds clas) `zip` allFieldLabelTags) name
622
623     info      = noCafIdInfo
624                 `setArityInfo`          1
625                 `setUnfoldingInfo`      mkTopUnfolding rhs
626                 `setAllStrictnessInfo`  Just strict_sig
627
628         -- We no longer use 'must-inline' on record selectors.  They'll
629         -- inline like crazy if they scrutinise a constructor
630
631         -- The strictness signature is of the form U(AAAVAAAA) -> T
632         -- where the V depends on which item we are selecting
633         -- It's worth giving one, so that absence info etc is generated
634         -- even if the selector isn't inlined
635     strict_sig = mkStrictSig (mkTopDmdType [arg_dmd] TopRes)
636     arg_dmd | isNewTyCon tycon = evalDmd
637             | otherwise        = Eval (Prod [ if the_arg_id == id then evalDmd else Abs
638                                             | id <- arg_ids ])
639
640     tyvars  = classTyVars clas
641
642     tycon      = classTyCon clas
643     [data_con] = tyConDataCons tycon
644     tyvar_tys  = mkTyVarTys tyvars
645     arg_tys    = dataConArgTys data_con tyvar_tys
646     the_arg_id = arg_ids !! (tag - firstFieldLabelTag)
647
648     pred              = mkClassPred clas tyvar_tys
649     (dict_id:arg_ids) = mkTemplateLocals (mkPredTy pred : arg_tys)
650
651     rhs | isNewTyCon tycon = mkLams tyvars $ Lam dict_id $ 
652                              mkNewTypeBody tycon (head arg_tys) (Var dict_id)
653         | otherwise        = mkLams tyvars $ Lam dict_id $
654                              Case (Var dict_id) dict_id
655                                   [(DataAlt data_con, arg_ids, Var the_arg_id)]
656
657 mkNewTypeBody tycon result_ty result_expr
658         -- Adds a coerce where necessary
659         -- Used for both wrapping and unwrapping
660   | isRecursiveTyCon tycon      -- Recursive case; use a coerce
661   = Note (Coerce result_ty (exprType result_expr)) result_expr
662   | otherwise                   -- Normal case
663   = result_expr
664 \end{code}
665
666
667 %************************************************************************
668 %*                                                                      *
669 \subsection{Primitive operations
670 %*                                                                      *
671 %************************************************************************
672
673 \begin{code}
674 mkPrimOpId :: PrimOp -> Id
675 mkPrimOpId prim_op 
676   = id
677   where
678     (tyvars,arg_tys,res_ty, arity, strict_sig) = primOpSig prim_op
679     ty   = mkForAllTys tyvars (mkFunTys arg_tys res_ty)
680     name = mkPrimOpIdName prim_op
681     id   = mkGlobalId (PrimOpId prim_op) name ty info
682                 
683     info = noCafIdInfo
684            `setSpecInfo`        rules
685            `setArityInfo`       arity
686            `setAllStrictnessInfo` Just strict_sig
687
688     rules = foldl (addRule id) emptyCoreRules (primOpRules prim_op)
689
690
691 -- For each ccall we manufacture a separate CCallOpId, giving it
692 -- a fresh unique, a type that is correct for this particular ccall,
693 -- and a CCall structure that gives the correct details about calling
694 -- convention etc.  
695 --
696 -- The *name* of this Id is a local name whose OccName gives the full
697 -- details of the ccall, type and all.  This means that the interface 
698 -- file reader can reconstruct a suitable Id
699
700 mkFCallId :: Unique -> ForeignCall -> Type -> Id
701 mkFCallId uniq fcall ty
702   = ASSERT( isEmptyVarSet (tyVarsOfType ty) )
703         -- A CCallOpId should have no free type variables; 
704         -- when doing substitutions won't substitute over it
705     mkGlobalId (FCallId fcall) name ty info
706   where
707     occ_str = showSDoc (braces (ppr fcall <+> ppr ty))
708         -- The "occurrence name" of a ccall is the full info about the
709         -- ccall; it is encoded, but may have embedded spaces etc!
710
711     name = mkFCallName uniq occ_str
712
713     info = noCafIdInfo
714            `setArityInfo`               arity
715            `setAllStrictnessInfo`       Just strict_sig
716
717     (_, tau)     = tcSplitForAllTys ty
718     (arg_tys, _) = tcSplitFunTys tau
719     arity        = length arg_tys
720     strict_sig   = mkStrictSig (mkTopDmdType (replicate arity evalDmd) TopRes)
721 \end{code}
722
723
724 %************************************************************************
725 %*                                                                      *
726 \subsection{DictFuns and default methods}
727 %*                                                                      *
728 %************************************************************************
729
730 Important notes about dict funs and default methods
731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
732 Dict funs and default methods are *not* ImplicitIds.  Their definition
733 involves user-written code, so we can't figure out their strictness etc
734 based on fixed info, as we can for constructors and record selectors (say).
735
736 We build them as GlobalIds, but when in the module where they are
737 bound, we turn the Id at the *binding site* into an exported LocalId.
738 This ensures that they are taken to account by free-variable finding
739 and dependency analysis (e.g. CoreFVs.exprFreeVars).   The simplifier
740 will propagate the LocalId to all occurrence sites. 
741
742 Why shouldn't they be bound as GlobalIds?  Because, in particular, if
743 they are globals, the specialiser floats dict uses above their defns,
744 which prevents good simplifications happening.  Also the strictness
745 analyser treats a occurrence of a GlobalId as imported and assumes it
746 contains strictness in its IdInfo, which isn't true if the thing is
747 bound in the same module as the occurrence.
748
749 It's OK for dfuns to be LocalIds, because we form the instance-env to
750 pass on to the next module (md_insts) in CoreTidy, afer tidying
751 and globalising the top-level Ids.
752
753 BUT make sure they are *exported* LocalIds (setIdLocalExported) so 
754 that they aren't discarded by the occurrence analyser.
755
756 \begin{code}
757 mkDefaultMethodId dm_name ty 
758   = setIdLocalExported (mkLocalId dm_name ty)
759
760 mkDictFunId :: Name             -- Name to use for the dict fun;
761             -> [TyVar]
762             -> ThetaType
763             -> Class 
764             -> [Type]
765             -> Id
766
767 mkDictFunId dfun_name inst_tyvars dfun_theta clas inst_tys
768   = setIdLocalExported (mkLocalId dfun_name dfun_ty)
769   where
770     dfun_ty = mkSigmaTy inst_tyvars dfun_theta (mkDictTy clas inst_tys)
771
772 {-  1 dec 99: disable the Mark Jones optimisation for the sake
773     of compatibility with Hugs.
774     See `types/InstEnv' for a discussion related to this.
775
776     (class_tyvars, sc_theta, _, _) = classBigSig clas
777     not_const (clas, tys) = not (isEmptyVarSet (tyVarsOfTypes tys))
778     sc_theta' = substClasses (mkTopTyVarSubst class_tyvars inst_tys) sc_theta
779     dfun_theta = case inst_decl_theta of
780                    []    -> []  -- If inst_decl_theta is empty, then we don't
781                                 -- want to have any dict arguments, so that we can
782                                 -- expose the constant methods.
783
784                    other -> nub (inst_decl_theta ++ filter not_const sc_theta')
785                                 -- Otherwise we pass the superclass dictionaries to
786                                 -- the dictionary function; the Mark Jones optimisation.
787                                 --
788                                 -- NOTE the "nub".  I got caught by this one:
789                                 --   class Monad m => MonadT t m where ...
790                                 --   instance Monad m => MonadT (EnvT env) m where ...
791                                 -- Here, the inst_decl_theta has (Monad m); but so
792                                 -- does the sc_theta'!
793                                 --
794                                 -- NOTE the "not_const".  I got caught by this one too:
795                                 --   class Foo a => Baz a b where ...
796                                 --   instance Wob b => Baz T b where..
797                                 -- Now sc_theta' has Foo T
798 -}
799 \end{code}
800
801
802 %************************************************************************
803 %*                                                                      *
804 \subsection{Un-definable}
805 %*                                                                      *
806 %************************************************************************
807
808 These Ids can't be defined in Haskell.  They could be defined in
809 unfoldings in the wired-in GHC.Prim interface file, but we'd have to
810 ensure that they were definitely, definitely inlined, because there is
811 no curried identifier for them.  That's what mkCompulsoryUnfolding
812 does.  If we had a way to get a compulsory unfolding from an interface
813 file, we could do that, but we don't right now.
814
815 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
816 just gets expanded into a type coercion wherever it occurs.  Hence we
817 add it as a built-in Id with an unfolding here.
818
819 The type variables we use here are "open" type variables: this means
820 they can unify with both unlifted and lifted types.  Hence we provide
821 another gun with which to shoot yourself in the foot.
822
823 \begin{code}
824 -- unsafeCoerce# :: forall a b. a -> b
825 unsafeCoerceId
826   = pcMiscPrelId unsafeCoerceName ty info
827   where
828     info = noCafIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
829            
830
831     ty  = mkForAllTys [openAlphaTyVar,openBetaTyVar]
832                       (mkFunTy openAlphaTy openBetaTy)
833     [x] = mkTemplateLocals [openAlphaTy]
834     rhs = mkLams [openAlphaTyVar,openBetaTyVar,x] $
835           Note (Coerce openBetaTy openAlphaTy) (Var x)
836
837 -- nullAddr# :: Addr#
838 -- The reason is is here is because we don't provide 
839 -- a way to write this literal in Haskell.
840 nullAddrId 
841   = pcMiscPrelId nullAddrName addrPrimTy info
842   where
843     info = noCafIdInfo `setUnfoldingInfo` 
844            mkCompulsoryUnfolding (Lit nullAddrLit)
845
846 seqId
847   = pcMiscPrelId seqName ty info
848   where
849     info = noCafIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
850            
851
852     ty  = mkForAllTys [alphaTyVar,openBetaTyVar]
853                       (mkFunTy alphaTy (mkFunTy openBetaTy openBetaTy))
854     [x,y] = mkTemplateLocals [alphaTy, openBetaTy]
855     rhs = mkLams [alphaTyVar,openBetaTyVar,x,y] (Case (Var x) x [(DEFAULT, [], Var y)])
856
857 -- lazy :: forall a?. a? -> a?   (i.e. works for unboxed types too)
858 -- Used to lazify pseq:         pseq a b = a `seq` lazy b
859 -- No unfolding: it gets "inlined" by the worker/wrapper pass
860 -- Also, no strictness: by being a built-in Id, it overrides all
861 -- the info in PrelBase.hi.  This is important, because the strictness
862 -- analyser will spot it as strict!
863 lazyId
864   = pcMiscPrelId lazyIdName ty info
865   where
866     info = noCafIdInfo
867     ty  = mkForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
868
869 lazyIdUnfolding :: CoreExpr     -- Used to expand LazyOp after strictness anal
870 lazyIdUnfolding = mkLams [openAlphaTyVar,x] (Var x)
871                 where
872                   [x] = mkTemplateLocals [openAlphaTy]
873 \end{code}
874
875 @realWorld#@ used to be a magic literal, \tr{void#}.  If things get
876 nasty as-is, change it back to a literal (@Literal@).
877
878 voidArgId is a Local Id used simply as an argument in functions
879 where we just want an arg to avoid having a thunk of unlifted type.
880 E.g.
881         x = \ void :: State# RealWorld -> (# p, q #)
882
883 This comes up in strictness analysis
884
885 \begin{code}
886 realWorldPrimId -- :: State# RealWorld
887   = pcMiscPrelId realWorldName realWorldStatePrimTy
888                  (noCafIdInfo `setUnfoldingInfo` mkOtherCon [])
889         -- The mkOtherCon makes it look that realWorld# is evaluated
890         -- which in turn makes Simplify.interestingArg return True,
891         -- which in turn makes INLINE things applied to realWorld# likely
892         -- to be inlined
893
894 voidArgId       -- :: State# RealWorld
895   = mkSysLocal FSLIT("void") voidArgIdKey realWorldStatePrimTy
896 \end{code}
897
898
899 %************************************************************************
900 %*                                                                      *
901 \subsection[PrelVals-error-related]{@error@ and friends; @trace@}
902 %*                                                                      *
903 %************************************************************************
904
905 GHC randomly injects these into the code.
906
907 @patError@ is just a version of @error@ for pattern-matching
908 failures.  It knows various ``codes'' which expand to longer
909 strings---this saves space!
910
911 @absentErr@ is a thing we put in for ``absent'' arguments.  They jolly
912 well shouldn't be yanked on, but if one is, then you will get a
913 friendly message from @absentErr@ (rather than a totally random
914 crash).
915
916 @parError@ is a special version of @error@ which the compiler does
917 not know to be a bottoming Id.  It is used in the @_par_@ and @_seq_@
918 templates, but we don't ever expect to generate code for it.
919
920 \begin{code}
921 mkRuntimeErrorApp 
922         :: Id           -- Should be of type (forall a. Addr# -> a)
923                         --      where Addr# points to a UTF8 encoded string
924         -> Type         -- The type to instantiate 'a'
925         -> String       -- The string to print
926         -> CoreExpr
927
928 mkRuntimeErrorApp err_id res_ty err_msg 
929   = mkApps (Var err_id) [Type res_ty, err_string]
930   where
931     err_string = Lit (MachStr (mkFastString (stringToUtf8 err_msg)))
932
933 rEC_SEL_ERROR_ID                = mkRuntimeErrorId recSelErrorName
934 rUNTIME_ERROR_ID                = mkRuntimeErrorId runtimeErrorName
935 iRREFUT_PAT_ERROR_ID            = mkRuntimeErrorId irrefutPatErrorName
936 rEC_CON_ERROR_ID                = mkRuntimeErrorId recConErrorName
937 nON_EXHAUSTIVE_GUARDS_ERROR_ID  = mkRuntimeErrorId nonExhaustiveGuardsErrorName
938 pAT_ERROR_ID                    = mkRuntimeErrorId patErrorName
939 nO_METHOD_BINDING_ERROR_ID      = mkRuntimeErrorId noMethodBindingErrorName
940
941 -- The runtime error Ids take a UTF8-encoded string as argument
942 mkRuntimeErrorId name = pc_bottoming_Id name runtimeErrorTy
943 runtimeErrorTy        = mkSigmaTy [openAlphaTyVar] [] (mkFunTy addrPrimTy openAlphaTy)
944 \end{code}
945
946 \begin{code}
947 eRROR_ID = pc_bottoming_Id errorName errorTy
948
949 errorTy  :: Type
950 errorTy  = mkSigmaTy [openAlphaTyVar] [] (mkFunTys [mkListTy charTy] openAlphaTy)
951     -- Notice the openAlphaTyVar.  It says that "error" can be applied
952     -- to unboxed as well as boxed types.  This is OK because it never
953     -- returns, so the return type is irrelevant.
954 \end{code}
955
956
957 %************************************************************************
958 %*                                                                      *
959 \subsection{Utilities}
960 %*                                                                      *
961 %************************************************************************
962
963 \begin{code}
964 pcMiscPrelId :: Name -> Type -> IdInfo -> Id
965 pcMiscPrelId name ty info
966   = mkVanillaGlobal name ty info
967     -- We lie and say the thing is imported; otherwise, we get into
968     -- a mess with dependency analysis; e.g., core2stg may heave in
969     -- random calls to GHCbase.unpackPS__.  If GHCbase is the module
970     -- being compiled, then it's just a matter of luck if the definition
971     -- will be in "the right place" to be in scope.
972
973 pc_bottoming_Id name ty
974  = pcMiscPrelId name ty bottoming_info
975  where
976     bottoming_info = hasCafIdInfo `setAllStrictnessInfo` Just strict_sig
977         -- Do *not* mark them as NoCafRefs, because they can indeed have
978         -- CAF refs.  For example, pAT_ERROR_ID calls GHC.Err.untangle,
979         -- which has some CAFs
980         -- In due course we may arrange that these error-y things are
981         -- regarded by the GC as permanently live, in which case we
982         -- can give them NoCaf info.  As it is, any function that calls
983         -- any pc_bottoming_Id will itself have CafRefs, which bloats
984         -- SRTs.
985
986     strict_sig     = mkStrictSig (mkTopDmdType [evalDmd] BotRes)
987         -- These "bottom" out, no matter what their arguments
988
989 (openAlphaTyVar:openBetaTyVar:_) = openAlphaTyVars
990 openAlphaTy  = mkTyVarTy openAlphaTyVar
991 openBetaTy   = mkTyVarTy openBetaTyVar
992 \end{code}
993