.hs files here
\begin{code}
-#include "HsVersions.h"
-
module UgenUtil (
- -- re-exported Prelude stuff
- returnPrimIO, thenPrimIO,
-
-- stuff defined here
- UgenUtil..,
-
- -- complete interface
- ProtoName
+ module UgenUtil,
+ Addr
) where
-import PreludeGlaST
-
-import Ubiq{-uitous-}
-
-import MainMonad ( MainIO(..) )
-import ProtoName ( ProtoName(..) )
-import SrcLoc ( mkSrcLoc2 )
+#include "HsVersions.h"
---import ProtoName
---import Outputable
---import Util
+import GlaExts
+import Name
+import RdrHsSyn ( RdrName(..) )
+import BasicTypes ( IfaceFlavour )
+import SrcLoc ( mkSrcLoc, noSrcLoc, SrcLoc )
+import FastString ( FastString, mkFastCharString, mkFastCharString2 )
\end{code}
\begin{code}
type UgnM a
- = FAST_STRING -- source file name; carried down
- -> PrimIO a
+ = (FastString,Module,SrcLoc) -- file, module and src_loc carried down
+ -> IO a
{-# INLINE returnUgn #-}
{-# INLINE thenUgn #-}
-returnUgn x mod = returnPrimIO x
+returnUgn x stuff = return x
-thenUgn x y mod
- = x mod `thenPrimIO` \ z ->
- y z mod
+thenUgn x y stuff
+ = x stuff >>= \ z ->
+ y z stuff
-initUgn :: FAST_STRING -> UgnM a -> MainIO a
-initUgn srcfile action
- = action srcfile `thenPrimIO` \ result ->
- return result
+initUgn :: UgnM a -> IO a
+initUgn action = action (SLIT(""),SLIT(""),noSrcLoc)
-ioToUgnM :: PrimIO a -> UgnM a
-ioToUgnM x mod = x
+ioToUgnM :: IO 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 :: Int -> UgnM U_long
-rdU_long x = returnUgn x -- (A# x) = returnUgn (I# (addr2Int# x))
-
-type U_unkId = ProtoName
-rdU_unkId :: _Addr -> UgnM U_unkId
-rdU_unkId x
- = rdU_stringId x `thenUgn` \ y ->
- returnUgn (Unk y)
+rdU_long x = returnUgn x
-type U_stringId = FAST_STRING
-rdU_stringId :: _Addr -> UgnM U_stringId
+type U_stringId = FastString
+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 (mkFastCharString 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
+type U_hstring = FastString
+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 (mkFastCharString2 bytes len)
\end{code}
\begin{code}
-setSrcFileUgn :: FAST_STRING{-filename-} -> UgnM a -> UgnM a
-setSrcFileUgn file action _ = action file
+setSrcFileUgn :: FastString -> UgnM a -> UgnM a
+setSrcFileUgn file action stuff@(_,mod,loc) = action (file,mod,loc)
+
+getSrcFileUgn :: UgnM FastString
+getSrcFileUgn stuff@(file,mod,loc) = returnUgn file stuff
+
+setSrcModUgn :: Module -> UgnM a -> UgnM a
+setSrcModUgn mod action stuff@(file,_,loc) = action (file,mod,loc)
+
+getSrcModUgn :: UgnM Module
+getSrcModUgn stuff@(file,mod,loc) = returnUgn mod stuff
-getSrcFileUgn :: UgnM FAST_STRING{-filename-}
-getSrcFileUgn mod = returnUgn mod mod
+mkSrcLocUgn :: U_long -> (SrcLoc -> UgnM a) -> UgnM a
+mkSrcLocUgn ln action (file,mod,_)
+ = action loc (file,mod,loc)
+ where
+ loc = mkSrcLoc file ln
-mkSrcLocUgn :: U_long -> UgnM SrcLoc
-mkSrcLocUgn ln mod
- = returnUgn (mkSrcLoc2 mod ln) mod
+getSrcLocUgn :: UgnM SrcLoc
+getSrcLocUgn stuff@(file,mod,loc) = returnUgn loc stuff
\end{code}