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