Commit f11f1efe by Zachary Snow

address warnings in Preprocess.hs

parent 4762d40f
...@@ -5,18 +5,18 @@ module Language.SystemVerilog.Parser.Preprocess ...@@ -5,18 +5,18 @@ module Language.SystemVerilog.Parser.Preprocess
-- | Remove comments from code. -- | Remove comments from code.
uncomment :: FilePath -> String -> String uncomment :: FilePath -> String -> String
uncomment file a = uncomment a uncomment file str = uncomment' str
where where
uncomment a = case a of uncomment' a = case a of
"" -> "" "" -> ""
'/' : '/' : rest -> " " ++ removeEOL rest '/' : '/' : rest -> " " ++ removeEOL rest
'/' : '*' : rest -> " " ++ remove rest '/' : '*' : rest -> " " ++ remove rest
'"' : rest -> '"' : ignoreString rest '"' : rest -> '"' : ignoreString rest
a : rest -> a : uncomment rest ch : rest -> ch : uncomment' rest
removeEOL a = case a of removeEOL a = case a of
"" -> "" "" -> ""
'\n' : rest -> '\n' : uncomment rest '\n' : rest -> '\n' : uncomment' rest
'\t' : rest -> '\t' : removeEOL rest '\t' : rest -> '\t' : removeEOL rest
_ : rest -> ' ' : removeEOL rest _ : rest -> ' ' : removeEOL rest
...@@ -25,7 +25,7 @@ uncomment file a = uncomment a ...@@ -25,7 +25,7 @@ uncomment file a = uncomment a
'"' : rest -> removeString rest '"' : rest -> removeString rest
'\n' : rest -> '\n' : remove rest '\n' : rest -> '\n' : remove rest
'\t' : rest -> '\t' : remove rest '\t' : rest -> '\t' : remove rest
'*' : '/' : rest -> " " ++ uncomment rest '*' : '/' : rest -> " " ++ uncomment' rest
_ : rest -> " " ++ remove rest _ : rest -> " " ++ remove rest
removeString a = case a of removeString a = case a of
...@@ -38,17 +38,18 @@ uncomment file a = uncomment a ...@@ -38,17 +38,18 @@ uncomment file a = uncomment a
ignoreString a = case a of ignoreString a = case a of
"" -> error $ "File ended without closing string: " ++ file "" -> error $ "File ended without closing string: " ++ file
'"' : rest -> '"' : uncomment rest '"' : rest -> '"' : uncomment' rest
'\\' : '"' : rest -> "\\\"" ++ ignoreString rest '\\' : '"' : rest -> "\\\"" ++ ignoreString rest
a : rest -> a : ignoreString rest ch : rest -> ch : ignoreString rest
-- | A simple `define preprocessor. -- | A simple `define preprocessor.
preprocess :: [(String, String)] -> FilePath -> String -> String preprocess :: [(String, String)] -> FilePath -> String -> String
preprocess env file content = unlines $ pp True [] env $ lines $ uncomment file content preprocess _env file content = unlines $ pp True [] _env $ lines $ uncomment file content
where where
pp :: Bool -> [Bool] -> [(String, String)] -> [String] -> [String] pp :: Bool -> [Bool] -> [(String, String)] -> [String] -> [String]
pp _ _ _ [] = [] pp _ _ _ [] = []
pp on stack env (a : rest) = pp on stack env (a : rest) =
-- handle macros with escaped newlines
if a /= "" && last a == '\\' && head a == '`' if a /= "" && last a == '\\' && head a == '`'
then "" : (pp on stack env $ ((init a) ++ " " ++ (head rest)) : (tail rest)) then "" : (pp on stack env $ ((init a) ++ " " ++ (head rest)) : (tail rest))
else case words a of else case words a of
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment