Use explicit language extensions & remove extension fields from base.cabal
[ghc-base.git] / GHC / IO / Encoding / UTF16.hs
index a5a6b62..c3b3847 100644 (file)
@@ -1,5 +1,11 @@
-{-# OPTIONS_GHC -fno-implicit-prelude -funbox-strict-fields #-}
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP
+           , NoImplicitPrelude
+           , BangPatterns
+           , NondecreasingIndentation
+           , MagicHash
+  #-}
+{-# OPTIONS_GHC  -funbox-strict-fields #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  GHC.IO.Encoding.UTF16
@@ -35,7 +41,7 @@ module GHC.IO.Encoding.UTF16 (
 import GHC.Base
 import GHC.Real
 import GHC.Num
-import GHC.IO
+-- import GHC.IO
 import GHC.IO.Exception
 import GHC.IO.Buffer
 import GHC.IO.Encoding.Types
@@ -48,10 +54,11 @@ import GHC.IORef
 import System.Posix.Internals
 import Foreign.C
 import GHC.Show
+import GHC.Ptr
 
 puts :: String -> IO ()
 puts s = do withCStringLen (s++"\n") $ \(p,len) -> 
-                c_write 1 p (fromIntegral len)
+                c_write 1 (castPtr p) (fromIntegral len)
             return ()
 #endif
 
@@ -59,7 +66,8 @@ puts s = do withCStringLen (s++"\n") $ \(p,len) ->
 -- The UTF-16 codec: either UTF16BE or UTF16LE with a BOM
 
 utf16  :: TextEncoding
-utf16 = TextEncoding { mkTextDecoder = utf16_DF,
+utf16 = TextEncoding { textEncodingName = "UTF-16",
+                       mkTextDecoder = utf16_DF,
                       mkTextEncoder = utf16_EF }
 
 utf16_DF :: IO (TextDecoder (Maybe DecodeBuffer))
@@ -138,7 +146,8 @@ bom2 = bomL
 -- UTF16LE and UTF16BE
 
 utf16be :: TextEncoding
-utf16be = TextEncoding { mkTextDecoder = utf16be_DF,
+utf16be = TextEncoding { textEncodingName = "UTF-16BE",
+                         mkTextDecoder = utf16be_DF,
                         mkTextEncoder = utf16be_EF }
 
 utf16be_DF :: IO (TextDecoder ())
@@ -160,7 +169,8 @@ utf16be_EF =
           })
 
 utf16le :: TextEncoding
-utf16le = TextEncoding { mkTextDecoder = utf16le_DF,
+utf16le = TextEncoding { textEncodingName = "UTF16-LE",
+                         mkTextDecoder = utf16le_DF,
                         mkTextEncoder = utf16le_EF }
 
 utf16le_DF :: IO (TextDecoder ())
@@ -195,15 +205,15 @@ utf16be_decode
               c1 <- readWord8Buf iraw (ir+1)
               let x1 = fromIntegral c0 `shiftL` 8 + fromIntegral c1
               if validate1 x1
-                 then do writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
-                         loop (ir+2) (ow+1)
+                 then do ow' <- writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
+                         loop (ir+2) ow'
                  else if iw - ir < 4 then done ir ow else do
                       c2 <- readWord8Buf iraw (ir+2)
                       c3 <- readWord8Buf iraw (ir+3)
                       let x2 = fromIntegral c2 `shiftL` 8 + fromIntegral c3
                       if not (validate2 x1 x2) then invalid else do
-                      writeCharBuf oraw ow (chr2 x1 x2)
-                      loop (ir+4) (ow+1)
+                      ow' <- writeCharBuf oraw ow (chr2 x1 x2)
+                      loop (ir+4) ow'
          where
            invalid = if ir > ir0 then done ir ow else ioe_decodingError
 
@@ -227,15 +237,15 @@ utf16le_decode
               c1 <- readWord8Buf iraw (ir+1)
               let x1 = fromIntegral c1 `shiftL` 8 + fromIntegral c0
               if validate1 x1
-                 then do writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
-                         loop (ir+2) (ow+1)
+                 then do ow' <- writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
+                         loop (ir+2) ow'
                  else if iw - ir < 4 then done ir ow else do
                       c2 <- readWord8Buf iraw (ir+2)
                       c3 <- readWord8Buf iraw (ir+3)
                       let x2 = fromIntegral c3 `shiftL` 8 + fromIntegral c2
                       if not (validate2 x1 x2) then invalid else do
-                      writeCharBuf oraw ow (chr2 x1 x2)
-                      loop (ir+4) (ow+1)
+                      ow' <- writeCharBuf oraw ow (chr2 x1 x2)
+                      loop (ir+4) ow'
          where
            invalid = if ir > ir0 then done ir ow else ioe_decodingError