[project @ 1999-06-07 17:22:31 by sewardj]
[ghc-hetmet.git] / ghc / interpreter / link.h
1
2 extern Cell conCons;
3
4 extern Name nameRunIO;
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 #ifdef PROVIDE_STABLE
20 extern Name nameMkStable;    
21 #endif
22
23 /* The following data constructors are used to make boxed but 
24  * unpointed values pointed and require no special treatment
25  * by the code generator.
26  */
27 extern Name nameMkInteger;
28 extern Name nameMkPrimArray;            
29 extern Name nameMkPrimByteArray;
30 extern Name nameMkRef;                  
31 extern Name nameMkPrimMutableArray;     
32 extern Name nameMkPrimMutableByteArray; 
33 #ifdef PROVIDE_FOREIGN
34 extern Name nameMkForeign;   
35 #endif
36 #ifdef PROVIDE_WEAK
37 extern Name nameMkWeak;
38 #endif
39 #ifdef PROVIDE_CONCURRENT
40 extern Name nameMkThreadId;  
41 extern Name nameMkMVar;  
42 #endif
43
44 /* For every primitive type provided by the runtime system,
45  * we construct a Haskell type using a declaration of the form:
46  *
47  *   data Int  -- no constructors given
48  */
49 extern Type typeChar;
50 extern Type typeInt;
51 extern Type typeInteger;
52 extern Type typeWord;
53 extern Type typeAddr;
54 extern Type typePrimArray;            
55 extern Type typePrimByteArray;
56 extern Type typeRef;                  
57 extern Type typePrimMutableArray;     
58 extern Type typePrimMutableByteArray; 
59 extern Type typeFloat;
60 extern Type typeDouble;
61 #ifdef PROVIDE_STABLE
62 extern Type typeStable;
63 #endif
64 #ifdef PROVIDE_WEAK
65 extern Type typeWeak;
66 #endif
67 #ifdef PROVIDE_FOREIGN
68 extern Type typeForeign;
69 #endif
70 #ifdef PROVIDE_CONCURRENT
71 extern Type typeThreadId;
72 extern Type typeMVar;
73 #endif
74
75 /* And a smaller number of types defined in plain Haskell */
76 extern Type typeList;
77 extern Type typeUnit;
78 extern Type typeString;
79 extern Type typeBool;
80 extern Type typeST;
81 extern Type typeIO;
82 extern Type typeException;
83
84 /* used while desugaring */
85 extern Name nameId;
86 extern Name nameOtherwise;
87 extern Name nameUndefined;              /* generic undefined value         */
88
89 /* used in pattern match */
90 #if NPLUSK
91 extern Name namePmSub; 
92 #endif
93 extern Name nameSel;
94
95 /* used in translation */
96 extern Name nameEq;     
97 extern Name namePMFail;
98 extern Name nameEqChar;
99 extern Name nameEqInt;
100 extern Name nameEqInteger;
101 extern Name nameEqDouble;
102 extern Name namePmInt;
103 extern Name namePmInteger;
104 extern Name namePmDouble;
105 extern Name namePmLe;
106 extern Name namePmSubtract;
107 extern Name namePmFromInteger;
108 extern Name nameMkIO;
109 extern Name nameUnpackString;
110 extern Name namePrimSeq;
111 extern Name nameMap;
112 extern Name nameMinus;
113
114
115 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
116 extern Type  listof;                    /* [ mkOffset(0) ]                 */
117 extern Cell  predNum;                   /* Num (mkOffset(0))               */
118 extern Cell  predFractional;            /* Fractional (mkOffset(0))        */
119 extern Cell  predIntegral;              /* Integral (mkOffset(0))          */
120 extern Cell  predMonad;                 /* Monad (mkOffset(0))             */
121
122
123 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
124 extern       Type  boundPair;;                 /* (mkOffset(0),mkOffset(0))       */
125 extern       Type  listof;;                    /* [ mkOffset(0) ]                 */
126 extern       Type  typeVarToVar;;              /* mkOffset(0) -> mkOffset(0)      */
127
128 extern       Cell  predNum;;                   /* Num (mkOffset(0))               */
129 extern       Cell  predFractional;;            /* Fractional (mkOffset(0))        */
130 extern       Cell  predIntegral;;              /* Integral (mkOffset(0))          */
131 extern       Kind  starToStar;;                /* Type -> Type                    */
132 extern       Cell  predMonad;;                 /* Monad (mkOffset(0))             */
133
134