Fix parsing of pragmas containing unicode characters; fixes #7671
authorIan Lynagh <ian@well-typed.com>
Tue, 26 Feb 2013 01:27:43 +0000 (01:27 +0000)
committerIan Lynagh <ian@well-typed.com>
Tue, 26 Feb 2013 14:40:47 +0000 (14:40 +0000)
compiler/parser/Lexer.x

index 7e801dd..fdf75cf 100644 (file)
@@ -2389,8 +2389,11 @@ dispatch_pragmas prags span buf len = case Map.lookup (clean_pragma (lexemeToStr
                                        Nothing -> lexError "unknown pragma"
 
 known_pragma :: Map String Action -> AlexAccPred Int
-known_pragma prags _ _ len (AI _ buf) = (isJust $ Map.lookup (clean_pragma (lexemeToString (offsetBytes (- len) buf) len)) prags)
-                                          && (nextCharIsNot buf (\c -> isAlphaNum c || c == '_'))
+known_pragma prags _ (AI _ startbuf) _ (AI _ curbuf)
+ = isKnown && nextCharIsNot curbuf pragmaNameChar
+    where l = lexemeToString startbuf (byteDiff startbuf curbuf)
+          isKnown = isJust $ Map.lookup (clean_pragma l) prags
+          pragmaNameChar c = isAlphaNum c || c == '_'
 
 clean_pragma :: String -> String
 clean_pragma prag = canon_ws (map toLower (unprefix prag))