Define and use is_decdigit for lexing escapes; fixes trac #2304
authorIan Lynagh <igloo@earth.li>
Fri, 13 Jun 2008 20:35:53 +0000 (20:35 +0000)
committerIan Lynagh <igloo@earth.li>
Fri, 13 Jun 2008 20:35:53 +0000 (20:35 +0000)
compiler/parser/Ctype.lhs
compiler/parser/Lexer.x

index d813030..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
 
@@ -60,15 +60,19 @@ 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')
 
index e891cae..c935b2a 100644 (file)
@@ -1242,7 +1242,7 @@ lex_escape = do
 
        'x'   -> readNum is_hexdigit 16 hexDigit
        'o'   -> readNum is_octdigit  8 octDecDigit
-       x | is_digit x -> readNum2 is_digit 10 octDecDigit (octDecDigit x)
+       x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)
 
        c1 ->  do
           i <- getInput