[project @ 2000-01-11 14:21:43 by sewardj]
[ghc-hetmet.git] / ghc / interpreter / link.h
1
2 extern Cell conCons;
3
4 extern Name nameShow;
5 extern Name namePutStr;
6 extern Name nameRunIO_toplevel;
7
8
9 /* The following data constructors are used to box unboxed
10  * arguments and are treated differently by the code generator.
11  * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
12  */
13 #define boxingConRep(con) ((AsmRep)(name(con).primop))
14 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
15
16 extern Name nameMkC;
17 extern Name nameMkI;
18 extern Name nameMkW;
19 extern Name nameMkA;
20 extern Name nameMkF;
21 extern Name nameMkD;
22 extern Name nameMkStable;    
23
24 /* The following data constructors are used to make boxed but 
25  * unpointed values pointed and require no special treatment
26  * by the code generator.
27  */
28 extern Name nameMkInteger;
29 extern Name nameMkPrimArray;            
30 extern Name nameMkPrimByteArray;
31 extern Name nameMkRef;                  
32 extern Name nameMkPrimMutableArray;     
33 extern Name nameMkPrimMutableByteArray; 
34 extern Name nameMkThreadId;  
35 extern Name nameMkPrimMVar;  
36 #ifdef PROVIDE_FOREIGN
37 extern Name nameMkForeign;   
38 #endif
39 #ifdef PROVIDE_WEAK
40 extern Name nameMkWeak;
41 #endif
42
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 extern Type typeStable;
62 extern Type typeThreadId;
63 extern Type typeMVar;
64 #ifdef PROVIDE_WEAK
65 extern Type typeWeak;
66 #endif
67 #ifdef PROVIDE_FOREIGN
68 extern Type typeForeign;
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 nameEqInteger;
96 extern Name namePmInt;
97 extern Name namePmInteger;
98 extern Name namePmDouble;
99 extern Name namePmLe;
100 extern Name namePmSubtract;
101 extern Name namePmFromInteger;
102 extern Name nameMkIO;
103 extern Name nameUnpackString;
104 extern Name namePrimSeq;
105 extern Name nameMap;
106 extern Name nameMinus;
107
108
109 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
110 extern Type  listof;                    /* [ mkOffset(0) ]                 */
111 extern Cell  predNum;                   /* Num (mkOffset(0))               */
112 extern Cell  predFractional;            /* Fractional (mkOffset(0))        */
113 extern Cell  predIntegral;              /* Integral (mkOffset(0))          */
114 extern Cell  predMonad;                 /* Monad (mkOffset(0))             */
115
116
117 extern Type  arrow;                     /* mkOffset(0) -> mkOffset(1)      */
118 extern       Type  boundPair;;                 /* (mkOffset(0),mkOffset(0))       */
119 extern       Type  listof;;                    /* [ mkOffset(0) ]                 */
120 extern       Type  typeVarToVar;;              /* mkOffset(0) -> mkOffset(0)      */
121
122 extern       Cell  predNum;;                   /* Num (mkOffset(0))               */
123 extern       Cell  predFractional;;            /* Fractional (mkOffset(0))        */
124 extern       Cell  predIntegral;;              /* Integral (mkOffset(0))          */
125 extern       Kind  starToStar;;                /* Type -> Type                    */
126 extern       Cell  predMonad;;                 /* Monad (mkOffset(0))             */
127
128