returnPrimIO, thenPrimIO,
-- stuff defined here
- UgenUtil..
+ EXP_MODULE(UgenUtil)
) where
-import PreludeGlaST
-
-import Ubiq
+IMP_Ubiq()
-import MainMonad ( MainIO(..) )
-import Name ( RdrName(..) )
-import SrcLoc ( mkSrcLoc2, mkUnknownSrcLoc )
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ <= 201
+import PreludeGlaST
+#else
+import GlaExts
+import Name
+#endif
+
+#if __GLASGOW_HASKELL__ == 201
+# define ADDR GHCbase.Addr
+# define PACK_STR packCString
+# define PACK_BYTES packCBytes
+#elif __GLASGOW_HASKELL >= 202
+# define ADDR GHC.Addr
+# define PACK_STR mkFastCharString
+# define PACK_BYTES mkFastCharString2
+#else
+# define ADDR _Addr
+# define PACK_STR mkFastCharString
+# define PACK_BYTES mkFastCharString2
+#endif
+
+import RdrHsSyn ( RdrName(..) )
+import BasicTypes ( IfaceFlavour )
+import SrcLoc ( mkSrcLoc, noSrcLoc, SrcLoc )
\end{code}
\begin{code}
= x stuff `thenPrimIO` \ z ->
y z stuff
-initUgn :: UgnM a -> MainIO a
+initUgn :: UgnM a -> IO a
initUgn action
- = action (SLIT(""),SLIT(""),mkUnknownSrcLoc) `thenPrimIO` \ result ->
+ = let
+ do_it = action (SLIT(""),SLIT(""),noSrcLoc)
+ in
+#if __GLASGOW_HASKELL__ >= 200
+ primIOToIO do_it
+#else
+ do_it `thenPrimIO` \ result ->
return result
+#endif
ioToUgnM :: PrimIO a -> UgnM a
ioToUgnM x stuff = x
\end{code}
\begin{code}
-type ParseTree = _Addr
+type ParseTree = ADDR
-type U_VOID_STAR = _Addr
-rdU_VOID_STAR :: _Addr -> UgnM U_VOID_STAR
+type U_VOID_STAR = ADDR
+rdU_VOID_STAR :: ADDR -> UgnM U_VOID_STAR
rdU_VOID_STAR x = returnUgn x
type U_long = Int
rdU_long x = returnUgn x
type U_stringId = FAST_STRING
-rdU_stringId :: _Addr -> UgnM U_stringId
+rdU_stringId :: ADDR -> UgnM U_stringId
{-# INLINE rdU_stringId #-}
-rdU_stringId s
- = -- ToDo (sometime): ioToUgnM (_ccall_ hash_index s) `thenUgn` \ (I# i) ->
- returnUgn (_packCString s)
+rdU_stringId s = returnUgn (PACK_STR s)
type U_numId = Int -- ToDo: Int
-rdU_numId :: _Addr -> UgnM U_numId
+rdU_numId :: ADDR -> UgnM U_numId
rdU_numId i = rdU_stringId i `thenUgn` \ y -> returnUgn ((read (_UNPK_ y))::Int)
type U_hstring = FAST_STRING
-rdU_hstring :: _Addr -> UgnM U_hstring
+rdU_hstring :: ADDR -> UgnM U_hstring
rdU_hstring x
= ioToUgnM (_ccall_ get_hstring_len x) `thenUgn` \ len ->
ioToUgnM (_ccall_ get_hstring_bytes x) `thenUgn` \ bytes ->
- returnUgn (_packCBytes len bytes)
+ returnUgn (PACK_BYTES bytes len)
\end{code}
\begin{code}
mkSrcLocUgn ln action (file,mod,_)
= action loc (file,mod,loc)
where
- loc = mkSrcLoc2 file ln
+ loc = mkSrcLoc file ln
getSrcLocUgn :: UgnM SrcLoc
getSrcLocUgn stuff@(file,mod,loc) = returnUgn loc stuff