sv2v/src/Convert/IntTypes.hs

37 lines
1.1 KiB
Haskell

{- sv2v
- Author: Zachary Snow <zach@zachjs.com>
-
- Conversion for `bit`, `int`, `shortint`, `longint`, and `byte`
-}
module Convert.IntTypes (convert) where
import Convert.Traverse
import Language.SystemVerilog.AST
convert :: [AST] -> [AST]
convert =
map $
traverseDescriptions $
traverseModuleItems $
traverseTypes $ traverseNestedTypes convertType
convertType :: Type -> Type
convertType (Struct pk fields rs) =
Struct pk fields' rs
where fields' = convertStructFields fields
convertType (Union pk fields rs) =
Union pk fields' rs
where fields' = convertStructFields fields
convertType (IntegerAtom kw sg) = elaborateIntegerAtom $ IntegerAtom kw sg
convertType (IntegerVector TBit sg rs) = IntegerVector TLogic sg rs
convertType other = other
convertStructFields :: [(Type, Identifier)] -> [(Type, Identifier)]
convertStructFields fields =
zip (map (convertStructFieldType . fst) fields) (map snd fields)
convertStructFieldType :: Type -> Type
convertStructFieldType (IntegerAtom TInteger sg) = IntegerAtom TInt sg
convertStructFieldType t = t