1 Glues lots of things together for ugen-generated
5 #include "HsVersions.h"
8 -- re-exported Prelude stuff
9 returnPrimIO, thenPrimIO,
18 #if __GLASGOW_HASKELL__ < 26
27 import SrcLoc ( mkSrcLoc2 )
33 = FAST_STRING -- source file name; carried down
36 {-# INLINE returnUgn #-}
37 {-# INLINE thenUgn #-}
39 returnUgn x mod = returnPrimIO x
42 = x mod `thenPrimIO` \ z ->
45 initUgn :: FAST_STRING -> UgnM a -> MainIO a
46 initUgn srcfile action
49 ioToUgnM :: PrimIO a -> UgnM a
54 type ParseTree = _Addr
56 type U_VOID_STAR = _Addr
57 rdU_VOID_STAR :: _Addr -> UgnM U_VOID_STAR
58 rdU_VOID_STAR x = returnUgn x
61 rdU_long :: Int -> UgnM U_long
62 rdU_long x = returnUgn x -- (A# x) = returnUgn (I# (addr2Int# x))
64 type U_unkId = ProtoName
65 rdU_unkId :: _Addr -> UgnM U_unkId
67 = rdU_stringId x `thenUgn` \ y ->
70 type U_stringId = FAST_STRING
71 rdU_stringId :: _Addr -> UgnM U_stringId
73 = ioToUgnM (_ccall_ hash_index s) `thenUgn` \ (I# i) ->
74 returnUgn (_packCString s) -- ToDo: use the i!
76 type U_numId = Int -- ToDo: Int
77 rdU_numId :: _Addr -> UgnM U_numId
78 rdU_numId i = rdU_stringId i `thenUgn` \ y -> returnUgn ((read (_UNPK_ y))::Int)
80 type U_hstring = FAST_STRING
81 rdU_hstring :: _Addr -> UgnM U_hstring
83 = ioToUgnM (_ccall_ get_hstring_len x) `thenUgn` \ len ->
84 ioToUgnM (_ccall_ get_hstring_bytes x) `thenUgn` \ bytes ->
85 returnUgn (_packCBytes len bytes)
89 setSrcFileUgn :: FAST_STRING{-filename-} -> UgnM a -> UgnM a
90 setSrcFileUgn file action _ = action file
92 getSrcFileUgn :: UgnM FAST_STRING{-filename-}
93 getSrcFileUgn mod = returnUgn mod mod
95 mkSrcLocUgn :: U_long -> UgnM SrcLoc
97 = returnUgn (mkSrcLoc2 mod ln) mod