move the spinlock counts inside +RTS -S
[ghc-hetmet.git] / compiler / parser / Ctype.lhs
index 8d0b91b..6fc346c 100644 (file)
@@ -11,7 +11,7 @@ module Ctype
        , is_digit      -- Char# -> Bool
        , is_alphanum   -- Char# -> Bool
 
-       , is_hexdigit, is_octdigit
+       , is_decdigit, is_hexdigit, is_octdigit
        , hexDigit, octDecDigit
        ) where
 
@@ -20,6 +20,7 @@ module Ctype
 import Data.Int                ( Int32 )
 import Data.Bits       ( Bits((.&.)) )
 import Data.Char       ( ord, chr )
+import Panic
 \end{code}
 
 Bit masks
@@ -43,7 +44,8 @@ at the big case below.
 is_ctype :: Int -> Char -> Bool
 is_ctype mask c = (fromIntegral (charType c) .&. fromIntegral mask) /= (0::Int32)
 
-is_ident, is_symbol, is_any, is_space, is_lower, is_upper, is_digit :: Char -> Bool
+is_ident, is_symbol, is_any, is_space, is_lower, is_upper, is_digit,
+    is_alphanum :: Char -> Bool
 is_ident  = is_ctype cIdent
 is_symbol = is_ctype cSymbol
 is_any    = is_ctype cAny
@@ -58,20 +60,27 @@ Utils
 
 \begin{code}
 hexDigit :: Char -> Int
-hexDigit c | is_digit c = ord c - ord '0'
-           | otherwise  = ord (to_lower c) - ord 'a' + 10
+hexDigit c | is_decdigit c = ord c - ord '0'
+           | otherwise     = ord (to_lower c) - ord 'a' + 10
 
 octDecDigit :: Char -> Int
 octDecDigit c = ord c - ord '0'
 
+is_decdigit :: Char -> Bool
+is_decdigit c
+       =  c >= '0' && c <= '9'
+
+is_hexdigit :: Char -> Bool
 is_hexdigit c
-       =  is_digit c 
+       =  is_decdigit c 
        || (c >= 'a' && c <= 'f')
        || (c >= 'A' && c <= 'F')
 
+is_octdigit :: Char -> Bool
 is_octdigit c = c >= '0' && c <= '7'
 
-to_lower c 
+to_lower :: Char -> Char
+to_lower c
   | c >=  'A' && c <= 'Z' = chr (ord c - (ord 'A' - ord 'a'))
   | otherwise = c
 \end{code}
@@ -91,11 +100,11 @@ charType c = case c of
    '\6'   -> 0                         -- \006
    '\7'   -> 0                         -- \007
    '\8'   -> 0                         -- \010
-   '\9'   -> cAny + cSpace             -- \t
-   '\10'  -> cSpace                   -- \n (not allowed in strings, so !cAny)
-   '\11'  -> cAny + cSpace             -- \v
-   '\12'  -> cAny + cSpace             -- \f
-   '\13'  -> cAny + cSpace             --  ^M
+   '\9'   -> cSpace                    -- \t  (not allowed in strings, so !cAny)
+   '\10'  -> cSpace                   -- \n  (ditto)
+   '\11'  -> cSpace                    -- \v  (ditto)
+   '\12'  -> cSpace                    -- \f  (ditto)
+   '\13'  -> cSpace                    --  ^M (ditto)
    '\14'  -> 0                         -- \016
    '\15'  -> 0                         -- \017
    '\16'  -> 0                         -- \020
@@ -338,4 +347,5 @@ charType c = case c of
    '\253' -> cAny + cIdent  + cLower   -- ý
    '\254' -> cAny + cIdent  + cLower   -- þ
    '\255' -> cAny + cIdent  + cLower   -- ÿ
+   _ -> panic ("charType: " ++ show c)
 \end{code}