Refactor to avoid need for `Unicode.hs-boot`
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 11 Oct 2014 10:35:28 +0000 (12:35 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 11 Oct 2014 10:35:31 +0000 (12:35 +0200)
This avoids the import-cycle caused by the import of `Foreign.C.Types`
by using `Int` instead of `CInt` for the Unicode classification
functions. This refactoring also allows to remove a couple of
`fromIntegral`s.

Reviewed By: rwbarton, ekmett

Differential Revision: https://phabricator.haskell.org/D328

libraries/base/GHC/Read.lhs
libraries/base/GHC/Unicode.hs
libraries/base/GHC/Unicode.hs-boot [deleted file]
libraries/base/Text/ParserCombinators/ReadP.hs
libraries/base/Text/Read/Lex.hs
libraries/base/cbits/WCsubst.c
libraries/base/cbits/ubconfc
libraries/base/include/WCsubst.h

index 2fd9f30..3fe9e35 100644 (file)
@@ -60,7 +60,7 @@ import Text.ParserCombinators.ReadPrec
 
 import Data.Maybe
 
-import {-# SOURCE #-} GHC.Unicode       ( isDigit )
+import GHC.Unicode       ( isDigit )
 import GHC.Num
 import GHC.Real
 import GHC.Float
index ef58975..dea2fb9 100644 (file)
@@ -29,9 +29,7 @@ module GHC.Unicode (
     ) where
 
 import GHC.Base
-import GHC.Char
-import GHC.Real        (fromIntegral)
-import Foreign.C.Types (CInt(..))
+import GHC.Char        (chr)
 
 #include "HsBaseConfig.h"
 
@@ -76,7 +74,7 @@ isSpace c               =  c == ' '     ||
                            c == '\f'    ||
                            c == '\v'    ||
                            c == '\xa0'  ||
-                           iswspace (fromIntegral (ord c)) /= 0
+                           iswspace (ord c) /= 0
 
 -- | Selects upper-case or title-case alphabetic Unicode characters (letters).
 -- Title case is used by a small number of letter ligatures like the
@@ -132,48 +130,48 @@ toTitle                 :: Char -> Char
 
 -- Regardless of the O/S and Library, use the functions contained in WCsubst.c
 
-isAlpha    c = iswalpha (fromIntegral (ord c)) /= 0
-isAlphaNum c = iswalnum (fromIntegral (ord c)) /= 0
---isSpace    c = iswspace (fromIntegral (ord c)) /= 0
-isControl  c = iswcntrl (fromIntegral (ord c)) /= 0
-isPrint    c = iswprint (fromIntegral (ord c)) /= 0
-isUpper    c = iswupper (fromIntegral (ord c)) /= 0
-isLower    c = iswlower (fromIntegral (ord c)) /= 0
+isAlpha    c = iswalpha (ord c) /= 0
+isAlphaNum c = iswalnum (ord c) /= 0
+--isSpace    c = iswspace (ord c) /= 0
+isControl  c = iswcntrl (ord c) /= 0
+isPrint    c = iswprint (ord c) /= 0
+isUpper    c = iswupper (ord c) /= 0
+isLower    c = iswlower (ord c) /= 0
 
-toLower c = chr (fromIntegral (towlower (fromIntegral (ord c))))
-toUpper c = chr (fromIntegral (towupper (fromIntegral (ord c))))
-toTitle c = chr (fromIntegral (towtitle (fromIntegral (ord c))))
+toLower c = chr (towlower (ord c))
+toUpper c = chr (towupper (ord c))
+toTitle c = chr (towtitle (ord c))
 
 foreign import ccall unsafe "u_iswalpha"
-  iswalpha :: CInt -> CInt
+  iswalpha :: Int -> Int
 
 foreign import ccall unsafe "u_iswalnum"
-  iswalnum :: CInt -> CInt
+  iswalnum :: Int -> Int
 
 foreign import ccall unsafe "u_iswcntrl"
-  iswcntrl :: CInt -> CInt
+  iswcntrl :: Int -> Int
 
 foreign import ccall unsafe "u_iswspace"
-  iswspace :: CInt -> CInt
+  iswspace :: Int -> Int
 
 foreign import ccall unsafe "u_iswprint"
-  iswprint :: CInt -> CInt
+  iswprint :: Int -> Int
 
 foreign import ccall unsafe "u_iswlower"
-  iswlower :: CInt -> CInt
+  iswlower :: Int -> Int
 
 foreign import ccall unsafe "u_iswupper"
-  iswupper :: CInt -> CInt
+  iswupper :: Int -> Int
 
 foreign import ccall unsafe "u_towlower"
-  towlower :: CInt -> CInt
+  towlower :: Int -> Int
 
 foreign import ccall unsafe "u_towupper"
-  towupper :: CInt -> CInt
+  towupper :: Int -> Int
 
 foreign import ccall unsafe "u_towtitle"
-  towtitle :: CInt -> CInt
+  towtitle :: Int -> Int
 
 foreign import ccall unsafe "u_gencat"
-  wgencat :: CInt -> CInt
+  wgencat :: Int -> Int
 
diff --git a/libraries/base/GHC/Unicode.hs-boot b/libraries/base/GHC/Unicode.hs-boot
deleted file mode 100644 (file)
index 51bf87d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module GHC.Unicode where
-
-import GHC.Types
-
-isAscii         :: Char -> Bool
-isLatin1        :: Char -> Bool
-isControl       :: Char -> Bool
-isPrint         :: Char -> Bool
-isSpace         :: Char -> Bool
-isUpper         :: Char -> Bool
-isLower         :: Char -> Bool
-isAlpha         :: Char -> Bool
-isDigit         :: Char -> Bool
-isOctDigit      :: Char -> Bool
-isHexDigit      :: Char -> Bool
-isAlphaNum      :: Char -> Bool
-
index 4de0908..034411d 100644 (file)
@@ -72,7 +72,7 @@ module Text.ParserCombinators.ReadP
   )
  where
 
-import {-# SOURCE #-} GHC.Unicode ( isSpace )
+import GHC.Unicode ( isSpace )
 import GHC.List ( replicate, null )
 import GHC.Base hiding ( many )
 
index cdbcf4a..74cf950 100644 (file)
@@ -39,7 +39,7 @@ import GHC.Base
 import GHC.Char
 import GHC.Num( Num(..), Integer )
 import GHC.Show( Show(..) )
-import {-# SOURCE #-} GHC.Unicode ( isSpace, isAlpha, isAlphaNum )
+import GHC.Unicode( isSpace, isAlpha, isAlphaNum )
 import GHC.Real( Rational, (%), fromIntegral,
                  toInteger, (^) )
 import GHC.List
index 0f6fcdf..e3e09eb 100644 (file)
@@ -4303,7 +4303,7 @@ static const struct _charblock_ spacechars[]={
 
 static const struct _convrule_ nullrule={0,NUMCAT_CN,0,0,0,0};
 
-int blkcmp(const void *vk,const void *vb)
+static int blkcmp(const void *vk,const void *vb)
 {
        const struct _charblock_ *key,*cur;
        key=vk;
@@ -4352,13 +4352,13 @@ inline static int checkattr_s(int c,unsigned int catmask)
 */
 
 #define unipred(p,m) \
-int p(int c) \
+HsInt p(HsInt c) \
 { \
        return checkattr(c,m); \
 }
 
 #define unipred_s(p,m) \
-int p(int c) \
+HsInt p(HsInt c) \
 { \
         return checkattr_s(c,m); \
 }
@@ -4380,7 +4380,7 @@ unipred(u_iswalnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO|
                    GENCAT_NO|GENCAT_ND|GENCAT_NL))
 
 #define caseconv(p,to) \
-int p(int c) \
+HsInt p(HsInt c) \
 { \
        const struct _convrule_ *rule=getrule(convchars,NUM_CONVBLOCKS,c);\
        if(rule==&nullrule) return c;\
@@ -4391,7 +4391,7 @@ caseconv(u_towupper,updist)
 caseconv(u_towlower,lowdist)
 caseconv(u_towtitle,titledist)
 
-int u_gencat(int c)
+HsInt u_gencat(HsInt c)
 {
        return getrule(allchars,NUM_BLOCKS,c)->catnumber;
 }
index 47637a9..fc768cc 100644 (file)
@@ -243,7 +243,7 @@ cat <<EOF
 
 static const struct _convrule_ nullrule={0,NUMCAT_CN,0,0,0,0};
 
-int blkcmp(const void *vk,const void *vb)
+static int blkcmp(const void *vk,const void *vb)
 {
        const struct _charblock_ *key,*cur;
        key=vk;
@@ -292,13 +292,13 @@ inline static int checkattr_s(int c,unsigned int catmask)
 */
 
 #define unipred(p,m) \\
-int p(int c) \\
+HsInt p(HsInt c) \\
 { \\
        return checkattr(c,m); \\
 }
 
 #define unipred_s(p,m) \\
-int p(int c) \\
+HsInt p(HsInt c) \\
 { \\
         return checkattr_s(c,m); \\
 }
@@ -325,7 +325,7 @@ unipred(u_iswalnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO|
                    GENCAT_NO|GENCAT_ND|GENCAT_NL))
 
 #define caseconv(p,to) \\
-int p(int c) \\
+HsInt p(HsInt c) \\
 { \\
        const struct _convrule_ *rule=getrule(convchars,NUM_CONVBLOCKS,c);\\
        if(rule==&nullrule) return c;\\
@@ -336,7 +336,7 @@ caseconv(u_towupper,updist)
 caseconv(u_towlower,lowdist)
 caseconv(u_towtitle,titledist)
 
-int u_gencat(int c)
+HsInt u_gencat(HsInt c)
 {
        return getrule(allchars,NUM_BLOCKS,c)->catnumber;
 }
index f2436dd..4ad373a 100644 (file)
@@ -3,22 +3,23 @@
 #define WCSUBST_INCL
 
 #include <stdlib.h>
+#include "HsFFI.h"
 
-int u_iswupper(int wc);
-int u_iswdigit(int wc);
-int u_iswalpha(int wc);
-int u_iswcntrl(int wc);
-int u_iswspace(int wc);
-int u_iswprint(int wc);
-int u_iswlower(int wc);
+HsInt u_iswupper(HsInt wc);
+HsInt u_iswdigit(HsInt wc);
+HsInt u_iswalpha(HsInt wc);
+HsInt u_iswcntrl(HsInt wc);
+HsInt u_iswspace(HsInt wc);
+HsInt u_iswprint(HsInt wc);
+HsInt u_iswlower(HsInt wc);
 
-int u_iswalnum(int wc);
+HsInt u_iswalnum(HsInt wc);
 
-int u_towlower(int wc);
-int u_towupper(int wc);
-int u_towtitle(int wc);
+HsInt u_towlower(HsInt wc);
+HsInt u_towupper(HsInt wc);
+HsInt u_towtitle(HsInt wc);
 
-int u_gencat(int wc);
+HsInt u_gencat(HsInt wc);
 
 #endif