From 6b4ab02f289394c82f27e46e44c017b4a0c88fb0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 13 Jun 2008 20:35:53 +0000 Subject: [PATCH] Define and use is_decdigit for lexing escapes; fixes trac #2304 --- compiler/parser/Ctype.lhs | 12 ++++++++---- compiler/parser/Lexer.x | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/parser/Ctype.lhs b/compiler/parser/Ctype.lhs index d813030..6fc346c 100644 --- a/compiler/parser/Ctype.lhs +++ b/compiler/parser/Ctype.lhs @@ -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') diff --git a/compiler/parser/Lexer.x b/compiler/parser/Lexer.x index e891cae..c935b2a 100644 --- a/compiler/parser/Lexer.x +++ b/compiler/parser/Lexer.x @@ -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 -- 1.7.10.4