1 Glues lots of things together for ugen-generated
5 #include "HsVersions.h"
8 -- re-exported Prelude stuff
9 returnPrimIO, thenPrimIO,
22 import MainMonad ( MainIO(..) )
23 import ProtoName ( ProtoName(..) )
24 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
47 = action srcfile `thenPrimIO` \ result ->
50 ioToUgnM :: PrimIO a -> UgnM a
55 type ParseTree = _Addr
57 type U_VOID_STAR = _Addr
58 rdU_VOID_STAR :: _Addr -> UgnM U_VOID_STAR
59 rdU_VOID_STAR x = returnUgn x
62 rdU_long :: Int -> UgnM U_long
63 rdU_long x = returnUgn x -- (A# x) = returnUgn (I# (addr2Int# x))
65 type U_unkId = ProtoName
66 rdU_unkId :: _Addr -> UgnM U_unkId
68 = rdU_stringId x `thenUgn` \ y ->
71 type U_stringId = FAST_STRING
72 rdU_stringId :: _Addr -> UgnM U_stringId
73 {-# INLINE rdU_stringId #-}
75 = -- ToDo (sometime): ioToUgnM (_ccall_ hash_index s) `thenUgn` \ (I# i) ->
76 returnUgn (_packCString s)
78 type U_numId = Int -- ToDo: Int
79 rdU_numId :: _Addr -> UgnM U_numId
80 rdU_numId i = rdU_stringId i `thenUgn` \ y -> returnUgn ((read (_UNPK_ y))::Int)
82 type U_hstring = FAST_STRING
83 rdU_hstring :: _Addr -> UgnM U_hstring
85 = ioToUgnM (_ccall_ get_hstring_len x) `thenUgn` \ len ->
86 ioToUgnM (_ccall_ get_hstring_bytes x) `thenUgn` \ bytes ->
87 returnUgn (_packCBytes len bytes)
91 setSrcFileUgn :: FAST_STRING{-filename-} -> UgnM a -> UgnM a
92 setSrcFileUgn file action _ = action file
94 getSrcFileUgn :: UgnM FAST_STRING{-filename-}
95 getSrcFileUgn mod = returnUgn mod mod
97 mkSrcLocUgn :: U_long -> UgnM SrcLoc
99 = returnUgn (mkSrcLoc2 mod ln) mod