From b28a3cac0d92fb027f239054c2860b854c0a01cb Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sun, 24 Jan 2021 10:07:35 -0700 Subject: [PATCH] represent typedefs as localparam types --- src/Convert/Package.hs | 11 ++--------- src/Convert/Traverse.hs | 5 ----- src/Convert/Typedef.hs | 4 ---- src/Language/SystemVerilog/AST/Description.hs | 4 +--- src/Language/SystemVerilog/Parser/Parse.y | 4 ++-- 5 files changed, 5 insertions(+), 23 deletions(-) diff --git a/src/Convert/Package.hs b/src/Convert/Package.hs index 14a1e04..8173fd1 100644 --- a/src/Convert/Package.hs +++ b/src/Convert/Package.hs @@ -267,12 +267,6 @@ processItems topName packageName moduleItems = do ++ intercalate ", " rootPkgs traversePackageItemM :: PackageItem -> Scope PackageItem - -- TODO: fold this in with type parameters - traversePackageItemM (Typedef t x) = do - t' <- traverseTypeM t - x' <- prefixIdent x - t'' <- traverseNestedTypesM (traverseTypeExprsM traverseExprM) t' - return $ Typedef t'' x' traversePackageItemM (orig @ (Import pkg ident)) = do if null ident then wildcardImports pkg @@ -516,6 +510,8 @@ traverseDeclIdentsM identMapper = -- returns any names defined by a package item piNames :: PackageItem -> [Identifier] +piNames (Decl (ParamType _ ident (Enum _ enumItems _))) = + ident : map fst enumItems piNames (Function _ _ ident _ _) = [ident] piNames (Task _ ident _ _) = [ident] piNames (Decl (Variable _ _ ident _ _)) = [ident] @@ -525,6 +521,3 @@ piNames (Decl (CommentDecl _)) = [] piNames (Import x y) = [show $ Import x y] piNames (Export x y) = [show $ Export x y] piNames (Directive _) = [] -piNames (Typedef (Enum _ enumItems _) ident) = - ident : map fst enumItems -piNames (Typedef _ ident) = [ident] diff --git a/src/Convert/Traverse.hs b/src/Convert/Traverse.hs index 6629290..528c68c 100644 --- a/src/Convert/Traverse.hs +++ b/src/Convert/Traverse.hs @@ -555,9 +555,6 @@ traverseNodesM exprMapper declMapper typeMapper lhsMapper stmtMapper = moduleItemMapper (MIAttr attr mi) = -- note: we exclude expressions in attributes from conversion return $ MIAttr attr mi - moduleItemMapper (MIPackageItem (Typedef t x)) = do - t' <- typeMapper t - return $ MIPackageItem $ Typedef t' x moduleItemMapper (MIPackageItem (Decl decl)) = declMapper decl >>= return . MIPackageItem . Decl moduleItemMapper (Defparam lhs expr) = do @@ -951,8 +948,6 @@ traverseTypesM' strategy mapper = where exprMapper = traverseExprTypesM mapper declMapper = traverseDeclTypesM mapper - miMapper (MIPackageItem (Typedef t x)) = - mapper t >>= \t' -> return $ MIPackageItem $ Typedef t' x miMapper (MIPackageItem (Function l t x d s)) = mapper t >>= \t' -> return $ MIPackageItem $ Function l t' x d s miMapper (MIPackageItem (other @ (Task _ _ _ _))) = diff --git a/src/Convert/Typedef.hs b/src/Convert/Typedef.hs index eeefc26..6849f2c 100644 --- a/src/Convert/Typedef.hs +++ b/src/Convert/Typedef.hs @@ -45,10 +45,6 @@ traverseExprM (DimFn f v e) = do traverseExprM other = return other traverseModuleItemM :: ModuleItem -> Scoper Type ModuleItem -traverseModuleItemM (MIPackageItem (Typedef t x)) = do - t' <- traverseNestedTypesM traverseTypeM t - insertElem x t' - return $ Generate [] traverseModuleItemM (Instance m params x rs p) = do let mapParam (i, v) = traverseTypeOrExprM v >>= \v' -> return (i, v') params' <- mapM mapParam params diff --git a/src/Language/SystemVerilog/AST/Description.hs b/src/Language/SystemVerilog/AST/Description.hs index 06ec9fe..5fb084a 100644 --- a/src/Language/SystemVerilog/AST/Description.hs +++ b/src/Language/SystemVerilog/AST/Description.hs @@ -52,8 +52,7 @@ instance Show Description where show (PackageItem i) = show i data PackageItem - = Typedef Type Identifier - | Function Lifetime Type Identifier [Decl] [Stmt] + = Function Lifetime Type Identifier [Decl] [Stmt] | Task Lifetime Identifier [Decl] [Stmt] | Import Identifier Identifier | Export Identifier Identifier @@ -62,7 +61,6 @@ data PackageItem deriving Eq instance Show PackageItem where - show (Typedef t x) = printf "typedef %s %s;" (show t) x show (Function ml t x i b) = printf "function %s%s%s;\n%s\nendfunction" (showPad ml) (showPad t) x (showBlock i b) diff --git a/src/Language/SystemVerilog/Parser/Parse.y b/src/Language/SystemVerilog/Parser/Parse.y index 028e178..5e41bf8 100644 --- a/src/Language/SystemVerilog/Parser/Parse.y +++ b/src/Language/SystemVerilog/Parser/Parse.y @@ -837,8 +837,8 @@ PackageItem :: { [PackageItem] } | ParameterDecl(";") { map (Decl . makeLocalparam) $1 } | NonDeclPackageItem { $1 } NonDeclPackageItem :: { [PackageItem] } - : "typedef" Type Identifier ";" { [Typedef $2 $3] } - | "typedef" Type Identifier DimensionsNonEmpty ";" { [Typedef (UnpackedType $2 $4) $3] } + : "typedef" Type Identifier ";" { [Decl $ ParamType Localparam $3 $2] } + | "typedef" Type Identifier DimensionsNonEmpty ";" { [Decl $ ParamType Localparam $3 (UnpackedType $2 $4)] } | "function" Lifetime FuncRetAndName TFItems DeclsAndStmts "endfunction" opt(Tag) { [Function $2 (fst $3) (snd $3) (map defaultFuncInput $ (map makeInput $4) ++ fst $5) (snd $5)] } | "function" Lifetime "void" Identifier TFItems DeclsAndStmts "endfunction" opt(Tag) { [Task $2 $4 (map defaultFuncInput $ $5 ++ fst $6) (snd $6)] } | "task" Lifetime Identifier TFItems DeclsAndStmts "endtask" opt(Tag) { [Task $2 $3 (map defaultFuncInput $ $4 ++ fst $5) (snd $5)] }