7 /* The following data constructors are used to box unboxed
8 * arguments and are treated differently by the code generator.
9 * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
11 #define boxingConRep(con) ((AsmRep)(name(con).primop))
12 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
17 extern Name nameMkInt64;
28 extern Name nameMkStable;
31 /* The following data constructors are used to make boxed but
32 * unpointed values pointed and require no special treatment
33 * by the code generator.
35 #ifdef PROVIDE_INTEGER
36 extern Name nameMkInteger;
39 extern Name nameMkPrimArray;
40 extern Name nameMkPrimByteArray;
41 extern Name nameMkRef;
42 extern Name nameMkPrimMutableArray;
43 extern Name nameMkPrimMutableByteArray;
45 #ifdef PROVIDE_FOREIGN
46 extern Name nameMkForeign;
49 extern Name nameMkWeak;
51 #ifdef PROVIDE_CONCURRENT
52 extern Name nameMkThreadId;
53 extern Name nameMkMVar;
56 /* For every primitive type provided by the runtime system,
57 * we construct a Haskell type using a declaration of the form:
59 * data Int -- no constructors given
64 extern Type typeInt64;
66 #ifdef PROVIDE_INTEGER
67 extern Type typeInteger;
76 extern Type typePrimArray;
77 extern Type typePrimByteArray;
79 extern Type typePrimMutableArray;
80 extern Type typePrimMutableByteArray;
82 extern Type typeFloat;
83 extern Type typeDouble;
85 extern Type typeStable;
90 #ifdef PROVIDE_FOREIGN
91 extern Type typeForeign;
93 #ifdef PROVIDE_CONCURRENT
94 extern Type typeThreadId;
98 /* And a smaller number of types defined in plain Haskell */
100 extern Type typeUnit;
101 extern Type typeString;
102 extern Type typeBool;
105 extern Type typeException;
107 /* copied out of K&R2, Appendix A */
108 #define cat(x,y) x ## y
109 #define xcat(x,y) cat(x,y)
112 #define typeBignum xcat(type,BIGNUMTYPE)
113 #define nameMkBignum xcat(nameMk,BIGNUMTYPE)
115 #warning BIGNUMTYPE undefined
118 /* used while desugaring */
120 extern Name nameOtherwise;
121 extern Name nameUndefined; /* generic undefined value */
123 /* used in pattern match */
125 extern Name namePmSub;
129 /* used in translation */
131 extern Name namePMFail;
132 extern Name nameEqChar;
133 extern Name nameEqInt;
134 extern Name nameEqInteger;
135 extern Name nameEqDouble;
136 extern Name namePmInt;
137 extern Name namePmInteger;
138 extern Name namePmDouble;
139 extern Name namePmLe;
140 extern Name namePmSubtract;
141 extern Name namePmFromInteger;
142 extern Name nameMkIO;
143 extern Name nameUnpackString;
145 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
146 extern Type listof; /* [ mkOffset(0) ] */
147 extern Cell predNum; /* Num (mkOffset(0)) */
148 extern Cell predFractional; /* Fractional (mkOffset(0)) */
149 extern Cell predIntegral; /* Integral (mkOffset(0)) */
150 extern Cell predMonad; /* Monad (mkOffset(0)) */
153 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
154 extern Type boundPair;; /* (mkOffset(0),mkOffset(0)) */
155 extern Type listof;; /* [ mkOffset(0) ] */
156 extern Type typeVarToVar;; /* mkOffset(0) -> mkOffset(0) */
158 extern Cell predNum;; /* Num (mkOffset(0)) */
159 extern Cell predFractional;; /* Fractional (mkOffset(0)) */
160 extern Cell predIntegral;; /* Integral (mkOffset(0)) */
161 extern Kind starToStar;; /* Type -> Type */
162 extern Cell predMonad;; /* Monad (mkOffset(0)) */