[project @ 2000-01-10 16:27:03 by sewardj]
[ghc-hetmet.git] / ghc / interpreter / link.h
1
2 extern Cell conCons;
3
4 extern Name nameRunIO_toplevel;
5
6 /* The following data constructors are used to box unboxed
7  * arguments and are treated differently by the code generator.
8  * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
9  */
10 #define boxingConRep(con) ((AsmRep)(name(con).primop))
11 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
12
13 extern Name nameMkC;
14 extern Name nameMkI;
15 extern Name nameMkW;
16 extern Name nameMkA;
17 extern Name nameMkF;
18 extern Name nameMkD;
19 extern Name nameMkStable;    
20
21 /* The following data constructors are used to make boxed but 
22  * unpointed values pointed and require no special treatment
23  * by the code generator.
24  */
25 extern Name nameMkInteger;
26 extern Name nameMkPrimArray;            
27 extern Name nameMkPrimByteArray;
28 extern Name nameMkRef;                  
29 extern Name nameMkPrimMutableArray;     
30 extern Name nameMkPrimMutableByteArray; 
31 extern Name nameMkThreadId;  
32 extern Name nameMkPrimMVar;  
33 #ifdef PROVIDE_FOREIGN
34 extern Name nameMkForeign;   
35 #endif
36 #ifdef PROVIDE_WEAK
37 extern Name nameMkWeak;
38 #endif
39
40
41 /* For every primitive type provided by the runtime system,
42  * we construct a Haskell type using a declaration of the form:
43  *
44  *   data Int  -- no constructors given
45  */
46 extern Type typeChar;
47 extern Type typeInt;
48 extern Type typeInteger;
49 extern Type typeWord;
50 extern Type typeAddr;
51 extern Type typePrimArray;            
52 extern Type typePrimByteArray;
53 extern Type typeRef;                  
54 extern Type typePrimMutableArray;     
55 extern Type typePrimMutableByteArray; 
56 extern Type typeFloat;
57 extern Type typeDouble;
58 extern Type typeStable;
59 extern Type typeThreadId;
60 extern Type typeMVar;
61 #ifdef PROVIDE_WEAK
62 extern Type typeWeak;
63 #endif
64 #ifdef PROVIDE_FOREIGN
65 extern Type typeForeign;
66 #endif
67
68 /* And a smaller number of types defined in plain Haskell */
69 extern Type typeList;
70 extern Type typeUnit;
71 extern Type typeString;
72 extern Type typeBool;
73 extern Type typeST;
74 extern Type typeIO;
75 extern Type typeException;
76
77 /* used while desugaring */
78 extern Name nameId;
79 extern Name nameOtherwise;
80 extern Name nameUndefined;              /* generic undefined value         */
81
82 /* used in pattern match */
83 #if NPLUSK
84 extern Name namePmSub; 
85 #endif
86 extern Name nameSel;
87
88 /* used in translation */
89 extern Name nameEq;     
90 extern Name namePMFail;
91 extern Name nameEqChar;
92 extern Name nameEqInteger;
93 extern Name namePmInt;
94 extern Name namePmInteger;
95 extern Name namePmDouble;
96 extern Name namePmLe;
97 extern Name namePmSubtract;
98 extern Name namePmFromInteger;
99 extern Name nameMkIO;
100 extern Name nameUnpackString;
101 extern Name namePrimSeq;
102 extern Name nameMap;
103 extern Name nameMinus;
104
105
106 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
107 extern Type  listof;                    /* [ mkOffset(0) ]                 */
108 extern Cell  predNum;                   /* Num (mkOffset(0))               */
109 extern Cell  predFractional;            /* Fractional (mkOffset(0))        */
110 extern Cell  predIntegral;              /* Integral (mkOffset(0))          */
111 extern Cell  predMonad;                 /* Monad (mkOffset(0))             */
112
113
114 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
115 extern       Type  boundPair;;                 /* (mkOffset(0),mkOffset(0))       */
116 extern       Type  listof;;                    /* [ mkOffset(0) ]                 */
117 extern       Type  typeVarToVar;;              /* mkOffset(0) -> mkOffset(0)      */
118
119 extern       Cell  predNum;;                   /* Num (mkOffset(0))               */
120 extern       Cell  predFractional;;            /* Fractional (mkOffset(0))        */
121 extern       Cell  predIntegral;;              /* Integral (mkOffset(0))          */
122 extern       Kind  starToStar;;                /* Type -> Type                    */
123 extern       Cell  predMonad;;                 /* Monad (mkOffset(0))             */
124
125