@@ -29,9 +29,11 @@ import Data.Array.Unboxed
2929import Data.Bits ( (.|.), (.&.), xor )
3030import Data.List
3131
32+import Foreign.C.Types
3233import Foreign.Ptr
3334
3435import GHC.Prim
36+import GHC.Types
3537import GHC.Word
3638
3739type EvalT m a = ReaderT (CapExpression,[CapParam]) (StateT [CapParam] m) a
@@ -158,11 +160,12 @@ serialize_cap_ops :: MonadIO m => OutputBuffer -> CapOps -> EvalT m OutputBuffer
158160serialize_cap_ops out_ptr ops = foldM serialize_cap_op out_ptr ops
159161
160162serialize_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
162164 (cap, _) <- ask
163165 let src_ptr = ptr_at_offset cap offset
164− liftIO $! memcpy out_ptr src_ptr ( toEnum $! fromEnum c )
165− return $! out_ptr `plusPtr` ( fromEnum c)
166+ let !i = I# ( word2Int# byte_count )
167+ liftIO $! memcpy out_ptr src_ptr ( toEnum $! i )
168+ return $! out_ptr `plusPtr` i
166169serialize_cap_op out_ptr DecOut = do
167170 p <- pop
168171 let out_str = show p