sv2v/src/Convert.hs

69 lines
1.9 KiB
Haskell
Raw Normal View History

{- sv2v
- Author: Zachary Snow <zach@zachjs.com>
-
- SystemVerilog to Verilog conversion
-}
module Convert (convert) where
import Language.SystemVerilog.AST
import qualified Job (Exclude(..))
import qualified Convert.AlwaysKW
import qualified Convert.AsgnOp
import qualified Convert.Bits
2019-03-01 04:44:31 +01:00
import qualified Convert.Enum
import qualified Convert.FuncRet
2019-03-07 02:30:47 +01:00
import qualified Convert.Interface
import qualified Convert.KWArgs
import qualified Convert.Logic
import qualified Convert.PackedArray
import qualified Convert.Return
2019-02-20 21:22:26 +01:00
import qualified Convert.StarPort
import qualified Convert.StmtBlock
import qualified Convert.Struct
import qualified Convert.Typedef
import qualified Convert.UnbasedUnsized
import qualified Convert.Unique
2019-02-18 09:59:17 +01:00
type Phase = AST -> AST
phases :: [Job.Exclude] -> [Phase]
phases excludes =
[ Convert.AsgnOp.convert
, Convert.Bits.convert
2019-03-31 21:57:28 +02:00
, selectExclude (Job.Logic , Convert.Logic.convert)
, Convert.FuncRet.convert
, Convert.Enum.convert
, Convert.KWArgs.convert
, Convert.PackedArray.convert
2019-02-26 21:03:49 +01:00
, Convert.StarPort.convert
, Convert.StmtBlock.convert
, Convert.Struct.convert
, Convert.Return.convert
2019-03-01 04:44:31 +01:00
, Convert.Typedef.convert
, Convert.UnbasedUnsized.convert
, Convert.Unique.convert
2019-03-31 21:57:28 +02:00
, selectExclude (Job.Interface, Convert.Interface.convert)
, selectExclude (Job.Always , Convert.AlwaysKW.convert)
]
where
selectExclude :: (Job.Exclude, Phase) -> Phase
selectExclude (exclude, phase) =
if elem exclude excludes
then id
else phase
run :: [Job.Exclude] -> Phase
run excludes = foldr (.) id $ phases excludes
convert :: [Job.Exclude] -> Phase
convert excludes = convert'
2019-02-26 21:03:49 +01:00
where
convert' :: Phase
convert' descriptions =
if descriptions == descriptions'
then descriptions
else convert' descriptions'
where descriptions' = run excludes descriptions