mirror of https://github.com/zachjs/sv2v.git
37 lines
1.1 KiB
Haskell
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
|