@@ -29,9 +29,11 @@ import Data.Array.Unboxed
29import Data.Bits ( (.|.), (.&.), xor )
29import Data.Bits ( (.|.), (.&.), xor )
30import Data.List
30import Data.List
32+import Foreign.C.Types
32import Foreign.Ptr
33import Foreign.Ptr
34import GHC.Prim
35import GHC.Prim
35import GHC.Word
37import GHC.Word
37type EvalT m a = ReaderT (CapExpression,[CapParam]) (StateT [CapParam] m) a
39type EvalT m a = ReaderT (CapExpression,[CapParam]) (StateT [CapParam] m) a
@@ -158,11 +160,12 @@ serialize_cap_ops :: MonadIO m => OutputBuffer -> CapOps -> EvalT m OutputBuffer
158serialize_cap_ops out_ptr ops = foldM serialize_cap_op out_ptr ops
160serialize_cap_ops out_ptr ops = foldM serialize_cap_op out_ptr ops
160serialize_cap_op :: MonadIO m => OutputBuffer -> CapOp -> EvalT m OutputBuffer
162serialize_cap_op :: MonadIO m => OutputBuffer -> CapOp -> EvalT m OutputBuffer
161−serialize_cap_op out_ptr (Bytes offset c) = do
163+serialize_cap_op out_ptr ( Bytes offset ( W8# byte_count ) ) = do
162 (cap, _) <- ask
164 (cap, _) <- ask
163 let src_ptr = ptr_at_offset cap offset
165 let src_ptr = ptr_at_offset cap offset
166+ let !i = I# ( word2Int# byte_count )
164− liftIO $! memcpy out_ptr src_ptr ( toEnum $! fromEnum c )
167+ liftIO $! memcpy out_ptr src_ptr ( toEnum $! i )
165− return $! out_ptr `plusPtr` ( fromEnum c)
168+ return $! out_ptr `plusPtr` i
166serialize_cap_op out_ptr DecOut = do
169serialize_cap_op out_ptr DecOut = do
168 let out_str = show p
171 let out_str = show p