1 Glues lots of things together for ugen-generated
11 #include "HsVersions.h"
15 import RdrHsSyn ( RdrName(..) )
16 import BasicTypes ( IfaceFlavour )
17 import SrcLoc ( mkSrcLoc, noSrcLoc, SrcLoc )
18 import FastString ( FastString, mkFastCharString, mkFastCharString2 )
23 = (FastString,Module,SrcLoc) -- file, module and src_loc carried down
26 {-# INLINE returnUgn #-}
27 {-# INLINE thenUgn #-}
29 returnUgn x stuff = return x
35 initUgn :: UgnM a -> IO a
36 initUgn action = action (SLIT(""),SLIT(""),noSrcLoc)
38 ioToUgnM :: IO a -> UgnM a
45 type U_VOID_STAR = Addr
46 rdU_VOID_STAR :: Addr -> UgnM U_VOID_STAR
47 rdU_VOID_STAR x = returnUgn x
50 rdU_long :: Int -> UgnM U_long
51 rdU_long x = returnUgn x
53 type U_stringId = FastString
54 rdU_stringId :: Addr -> UgnM U_stringId
55 {-# INLINE rdU_stringId #-}
56 rdU_stringId s = returnUgn (mkFastCharString s)
58 type U_numId = Int -- ToDo: Int
59 rdU_numId :: Addr -> UgnM U_numId
60 rdU_numId i = rdU_stringId i `thenUgn` \ y -> returnUgn ((read (_UNPK_ y))::Int)
62 type U_hstring = FastString
63 rdU_hstring :: Addr -> UgnM U_hstring
65 = ioToUgnM (_ccall_ get_hstring_len x) `thenUgn` \ len ->
66 ioToUgnM (_ccall_ get_hstring_bytes x) `thenUgn` \ bytes ->
67 returnUgn (mkFastCharString2 bytes len)
71 setSrcFileUgn :: FastString -> UgnM a -> UgnM a
72 setSrcFileUgn file action stuff@(_,mod,loc) = action (file,mod,loc)
74 getSrcFileUgn :: UgnM FastString
75 getSrcFileUgn stuff@(file,mod,loc) = returnUgn file stuff
77 setSrcModUgn :: Module -> UgnM a -> UgnM a
78 setSrcModUgn mod action stuff@(file,_,loc) = action (file,mod,loc)
80 getSrcModUgn :: UgnM Module
81 getSrcModUgn stuff@(file,mod,loc) = returnUgn mod stuff
83 mkSrcLocUgn :: U_long -> (SrcLoc -> UgnM a) -> UgnM a
84 mkSrcLocUgn ln action (file,mod,_)
85 = action loc (file,mod,loc)
87 loc = mkSrcLoc file ln
89 getSrcLocUgn :: UgnM SrcLoc
90 getSrcLocUgn stuff@(file,mod,loc) = returnUgn loc stuff