mirror of
https://github.com/zachjs/sv2v.git
synced 2026-09-07 11:51:28 +02:00
remove pattern synonyms which introduced excessive overhead
This commit is contained in:
@@ -65,6 +65,8 @@ convertExpr (orig @ (DimsFn FnUnpackedDimensions (Left t))) =
|
||||
convertExpr (orig @ (DimsFn FnDimensions (Left t))) =
|
||||
case t of
|
||||
IntegerAtom{} -> Number "1"
|
||||
Alias{} -> orig
|
||||
PSAlias{} -> orig
|
||||
CSAlias{} -> orig
|
||||
TypeOf{} -> orig
|
||||
UnpackedType t' rs ->
|
||||
@@ -95,8 +97,10 @@ convertExpr (DimFn f (Left t) (Number str)) =
|
||||
Just d = dm
|
||||
r = rs !! (fromIntegral $ d - 1)
|
||||
isUnresolved :: Type -> Bool
|
||||
isUnresolved (CSAlias{}) = True
|
||||
isUnresolved (TypeOf{}) = True
|
||||
isUnresolved Alias{} = True
|
||||
isUnresolved PSAlias{} = True
|
||||
isUnresolved CSAlias{} = True
|
||||
isUnresolved TypeOf{} = True
|
||||
isUnresolved _ = False
|
||||
convertExpr (DimFn f (Left t) d) =
|
||||
DimFn f (Left t) d
|
||||
|
||||
@@ -60,6 +60,10 @@ convertDescription' description =
|
||||
|
||||
-- replace, but write down, enum types
|
||||
traverseType :: Type -> Writer Enums Type
|
||||
traverseType (Enum (t @ Alias{}) v rs) =
|
||||
return $ Enum t v rs -- not ready
|
||||
traverseType (Enum (t @ PSAlias{}) v rs) =
|
||||
return $ Enum t v rs -- not ready
|
||||
traverseType (Enum (t @ CSAlias{}) v rs) =
|
||||
return $ Enum t v rs -- not ready
|
||||
traverseType (Enum (Implicit sg rl) v rs) =
|
||||
|
||||
@@ -116,6 +116,8 @@ collectLHSIdentsM _ = return ()
|
||||
|
||||
-- writes down aliased typenames
|
||||
collectTypenamesM :: Type -> Writer Idents ()
|
||||
collectTypenamesM (Alias x _) = tell $ Set.singleton x
|
||||
collectTypenamesM (PSAlias _ x _) = tell $ Set.singleton x
|
||||
collectTypenamesM (CSAlias _ _ x _) = tell $ Set.singleton x
|
||||
collectTypenamesM _ = return ()
|
||||
|
||||
|
||||
@@ -201,14 +201,11 @@ traverseModuleItem _ _ item =
|
||||
where
|
||||
|
||||
traverseExpr :: Expr -> Expr
|
||||
traverseExpr (Ident x) = Ident x
|
||||
traverseExpr (PSIdent x y) = Ident $ x ++ "_" ++ y
|
||||
traverseExpr other = other
|
||||
|
||||
traverseType :: Type -> Type
|
||||
traverseType (Alias xx rs) = Alias xx rs
|
||||
traverseType (PSAlias ps xx rs) =
|
||||
Alias (ps ++ "_" ++ xx) rs
|
||||
traverseType (PSAlias ps xx rs) = Alias (ps ++ "_" ++ xx) rs
|
||||
traverseType other = other
|
||||
|
||||
-- returns the "name" of a package item, if it has one
|
||||
|
||||
@@ -212,7 +212,9 @@ defaultTag = "_sv2v_default"
|
||||
|
||||
-- attempt to convert an expression to syntactically equivalent type
|
||||
exprToType :: Expr -> Maybe Type
|
||||
exprToType (CSIdent x p y) = Just $ CSAlias x p y []
|
||||
exprToType (Ident x) = Just $ Alias x []
|
||||
exprToType (PSIdent y x) = Just $ PSAlias y x []
|
||||
exprToType (CSIdent y p x) = Just $ CSAlias y p x []
|
||||
exprToType (Range e NonIndexed r) =
|
||||
case exprToType e of
|
||||
Nothing -> Nothing
|
||||
@@ -248,7 +250,6 @@ typeHasQueries =
|
||||
(collectNestedExprsM collectUnresolvedExprM)
|
||||
where
|
||||
collectUnresolvedExprM :: Expr -> Writer [Expr] ()
|
||||
collectUnresolvedExprM Ident{} = return ()
|
||||
collectUnresolvedExprM (expr @ PSIdent{}) = tell [expr]
|
||||
collectUnresolvedExprM (expr @ CSIdent{}) = tell [expr]
|
||||
collectUnresolvedExprM (expr @ DimsFn{}) = tell [expr]
|
||||
|
||||
@@ -44,7 +44,6 @@ traverseDeclM decl = do
|
||||
|
||||
isSimpleExpr :: Expr -> Bool
|
||||
isSimpleExpr Ident{} = True
|
||||
isSimpleExpr PSIdent{} = True
|
||||
isSimpleExpr Number{} = True
|
||||
isSimpleExpr String{} = True
|
||||
isSimpleExpr (Dot e _ ) = isSimpleExpr e
|
||||
|
||||
@@ -869,6 +869,8 @@ traverseNestedTypesM :: Monad m => MapperM m Type -> MapperM m Type
|
||||
traverseNestedTypesM mapper = fullMapper
|
||||
where
|
||||
fullMapper = mapper >=> tm
|
||||
tm (Alias xx rs) = return $ Alias xx rs
|
||||
tm (PSAlias ps xx rs) = return $ PSAlias ps xx rs
|
||||
tm (CSAlias ps pm xx rs) = return $ CSAlias ps pm xx rs
|
||||
tm (Net kw sg rs) = return $ Net kw sg rs
|
||||
tm (Implicit sg rs) = return $ Implicit sg rs
|
||||
|
||||
@@ -95,6 +95,8 @@ traverseTypeM (Alias st rs1) = do
|
||||
Struct p l rs2 -> Struct p l $ rs1 ++ rs2
|
||||
Union p l rs2 -> Union p l $ rs1 ++ rs2
|
||||
InterfaceT x my rs2 -> InterfaceT x my $ rs1 ++ rs2
|
||||
Alias xx rs2 -> Alias xx $ rs1 ++ rs2
|
||||
PSAlias ps xx rs2 -> PSAlias ps xx $ rs1 ++ rs2
|
||||
CSAlias ps pm xx rs2 -> CSAlias ps pm xx $ rs1 ++ rs2
|
||||
UnpackedType t rs2 -> UnpackedType t $ rs1 ++ rs2
|
||||
IntegerAtom kw sg -> nullRange (IntegerAtom kw sg) rs1
|
||||
|
||||
Reference in New Issue
Block a user