mirror of https://github.com/zachjs/sv2v.git
support for multi-line defines
This commit is contained in:
parent
cb42f37bb2
commit
39ee22574f
|
|
@ -48,18 +48,21 @@ preprocess env file content = unlines $ pp True [] env $ lines $ uncomment file
|
|||
where
|
||||
pp :: Bool -> [Bool] -> [(String, String)] -> [String] -> [String]
|
||||
pp _ _ _ [] = []
|
||||
pp on stack env (a : rest) = case words a of
|
||||
"`define" : name : value -> "" : pp on stack (if on then (name, ppLine env $ unwords value) : env else env) rest
|
||||
"`ifdef" : name : _ -> "" : pp (on && (elem name $ fst $ unzip env)) (on : stack) env rest
|
||||
"`ifndef" : name : _ -> "" : pp (on && (notElem name $ fst $ unzip env)) (on : stack) env rest
|
||||
"`else" : _
|
||||
| not $ null stack -> "" : pp (head stack && not on) stack env rest
|
||||
| otherwise -> error $ "`else without associated `ifdef/`ifndef: " ++ file
|
||||
"`endif" : _
|
||||
| not $ null stack -> "" : pp (head stack) (tail stack) env rest
|
||||
| otherwise -> error $ "`endif without associated `ifdef/`ifndef: " ++ file
|
||||
"`default_nettype" : _ -> "" : pp on stack env rest
|
||||
_ -> (if on then ppLine env a else "") : pp on stack env rest
|
||||
pp on stack env (a : rest) =
|
||||
if a /= "" && last a == '\\' && head a == '`'
|
||||
then pp on stack env $ ((init a) ++ " " ++ (head rest)) : (tail rest)
|
||||
else case words a of
|
||||
"`define" : name : value -> "" : pp on stack (if on then (name, ppLine env $ unwords value) : env else env) rest
|
||||
"`ifdef" : name : _ -> "" : pp (on && (elem name $ fst $ unzip env)) (on : stack) env rest
|
||||
"`ifndef" : name : _ -> "" : pp (on && (notElem name $ fst $ unzip env)) (on : stack) env rest
|
||||
"`else" : _
|
||||
| not $ null stack -> "" : pp (head stack && not on) stack env rest
|
||||
| otherwise -> error $ "`else without associated `ifdef/`ifndef: " ++ file
|
||||
"`endif" : _
|
||||
| not $ null stack -> "" : pp (head stack) (tail stack) env rest
|
||||
| otherwise -> error $ "`endif without associated `ifdef/`ifndef: " ++ file
|
||||
"`default_nettype" : _ -> "" : pp on stack env rest
|
||||
_ -> (if on then ppLine env a else "") : pp on stack env rest
|
||||
|
||||
ppLine :: [(String, String)] -> String -> String
|
||||
ppLine _ "" = ""
|
||||
|
|
|
|||
Loading…
Reference in New Issue