Fixed the occam parser to allow comments after pragmas on the same line

One of the more recent cgtests has a comment after a pragma
This commit is contained in:
Neil Brown 2009-01-28 23:40:14 +00:00
parent a4f0e85c72
commit 49ea4f053e

View File

@ -1248,17 +1248,27 @@ pragma = do Pragma p <- genToken isPragma
m <- getPosition >>* sourcePosToMeta m <- getPosition >>* sourcePosToMeta
case matchRegex (mkRegex "^SHARED +(.*)") p of case matchRegex (mkRegex "^SHARED +(.*)") p of
Just [varsRaw] -> Just [varsRaw] ->
let varsRawNoComment = if "--" `isInfixOf` varsRaw
then chopTrailingSpaces $ chopComment [] varsRaw
else chopTrailingSpaces varsRaw
in
mapM_ (\var -> mapM_ (\var ->
do st <- get do st <- get
A.Name _ n <- case lookup var (csLocalNames st) of A.Name _ n <- case lookup var (csLocalNames st) of
Nothing -> dieP m $ "name " ++ var ++ " not defined" Nothing -> dieP m $ "name " ++ var ++ " not defined"
Just def -> return $ fst def Just def -> return $ fst def
modify $ \st -> st {csNameAttr = Map.insert n NameShared (csNameAttr st)}) modify $ \st -> st {csNameAttr = Map.insert n NameShared (csNameAttr st)})
(splitRegex (mkRegex ",") varsRaw) (splitRegex (mkRegex ",") varsRawNoComment)
Nothing -> warnP m WarnUnknownPreprocessorDirective $ Nothing -> warnP m WarnUnknownPreprocessorDirective $
"Unknown PRAGMA: " ++ p "Unknown PRAGMA: " ++ p
eol eol
where where
chopComment prev ('-':'-':_) = prev
chopComment prev (x:xs) = chopComment (prev++[x]) xs
chopComment prev [] = prev
chopTrailingSpaces = reverse . dropWhile (`elem` " \t") . reverse
isPragma (Token _ p@(Pragma {})) = Just p isPragma (Token _ p@(Pragma {})) = Just p
isPragma _ = Nothing isPragma _ = Nothing
--}}} --}}}