mirror of https://github.com/zachjs/sv2v.git
fix spacing of as-patterns for future GHC upgrade
This commit is contained in:
parent
536eba46b9
commit
30acc3e3f9
|
|
@ -42,7 +42,7 @@ convertStmt (Block Seq name decls stmts) =
|
|||
convertStmt other = other
|
||||
|
||||
splitDecl :: Decl -> (Decl, Maybe (LHS, Expr))
|
||||
splitDecl (decl @ (Variable _ _ _ _ Nil)) =
|
||||
splitDecl decl@(Variable _ _ _ _ Nil) =
|
||||
(decl, Nothing)
|
||||
splitDecl (Variable d t ident a e) =
|
||||
(Variable d t ident a Nil, Just (LHSIdent ident, e))
|
||||
|
|
|
|||
|
|
@ -56,12 +56,12 @@ convertExpr (DimsFn fn (Right e)) =
|
|||
DimsFn fn $ Left $ TypeOf e
|
||||
convertExpr (DimFn fn (Right e) d) =
|
||||
DimFn fn (Left $ TypeOf e) d
|
||||
convertExpr (orig @ (DimsFn FnUnpackedDimensions (Left t))) =
|
||||
convertExpr orig@(DimsFn FnUnpackedDimensions (Left t)) =
|
||||
case t of
|
||||
UnpackedType _ rs -> RawNum $ fromIntegral $ length rs
|
||||
TypeOf{} -> orig
|
||||
_ -> RawNum 0
|
||||
convertExpr (orig @ (DimsFn FnDimensions (Left t))) =
|
||||
convertExpr orig@(DimsFn FnDimensions (Left t)) =
|
||||
case t of
|
||||
IntegerAtom{} -> RawNum 1
|
||||
Alias{} -> orig
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ convert :: [AST] -> [AST]
|
|||
convert = map $ traverseDescriptions convertDescription
|
||||
|
||||
convertDescription :: Description -> Description
|
||||
convertDescription (description @ Part{}) =
|
||||
convertDescription description@Part{} =
|
||||
traverseModuleItems
|
||||
(traverseExprs $ traverseNestedExprs $ convertExpr functions)
|
||||
description'
|
||||
|
|
|
|||
|
|
@ -44,9 +44,9 @@ simplifyStep (Concat [Number (Decimal size _ value)]) =
|
|||
Number $ Decimal size False value
|
||||
simplifyStep (Concat [Number (Based size _ base value kinds)]) =
|
||||
Number $ Based size False base value kinds
|
||||
simplifyStep (Concat [e @ Stream{}]) = e
|
||||
simplifyStep (Concat [e @ Concat{}]) = e
|
||||
simplifyStep (Concat [e @ Repeat{}]) = e
|
||||
simplifyStep (Concat [e@Stream{}]) = e
|
||||
simplifyStep (Concat [e@Concat{}]) = e
|
||||
simplifyStep (Concat [e@Repeat{}]) = e
|
||||
simplifyStep (Concat es) = Concat $ filter (/= Concat []) es
|
||||
simplifyStep (Repeat (Dec 0) _) = Concat []
|
||||
simplifyStep (Repeat (Dec 1) es) = Concat es
|
||||
|
|
@ -91,23 +91,23 @@ simplifyBinOp Add (UniOp UniSub e1) e2 = BinOp Sub e2 e1
|
|||
simplifyBinOp Sub e1 (UniOp UniSub e2) = BinOp Add e1 e2
|
||||
simplifyBinOp Sub (UniOp UniSub e1) e2 = UniOp UniSub $ BinOp Add e1 e2
|
||||
|
||||
simplifyBinOp Add (BinOp Add e (n1 @ Number{})) (n2 @ Number{}) =
|
||||
simplifyBinOp Add (BinOp Add e n1@Number{}) n2@Number{} =
|
||||
BinOp Add e (BinOp Add n1 n2)
|
||||
simplifyBinOp Sub (n1 @ Number{}) (BinOp Sub (n2 @ Number{}) e) =
|
||||
simplifyBinOp Sub n1@Number{} (BinOp Sub n2@Number{} e) =
|
||||
BinOp Add (BinOp Sub n1 n2) e
|
||||
simplifyBinOp Sub (n1 @ Number{}) (BinOp Sub e (n2 @ Number{})) =
|
||||
simplifyBinOp Sub n1@Number{} (BinOp Sub e n2@Number{}) =
|
||||
BinOp Sub (BinOp Add n1 n2) e
|
||||
simplifyBinOp Sub (BinOp Add e (n1 @ Number{})) (n2 @ Number{}) =
|
||||
simplifyBinOp Sub (BinOp Add e n1@Number{}) n2@Number{} =
|
||||
BinOp Add e (BinOp Sub n1 n2)
|
||||
simplifyBinOp Add (n1 @ Number{}) (BinOp Add (n2 @ Number{}) e) =
|
||||
simplifyBinOp Add n1@Number{} (BinOp Add n2@Number{} e) =
|
||||
BinOp Add (BinOp Add n1 n2) e
|
||||
simplifyBinOp Add (n1 @ Number{}) (BinOp Sub e (n2 @ Number{})) =
|
||||
simplifyBinOp Add n1@Number{} (BinOp Sub e n2@Number{}) =
|
||||
BinOp Add e (BinOp Sub n1 n2)
|
||||
simplifyBinOp Sub (BinOp Sub e (n1 @ Number{})) (n2 @ Number{}) =
|
||||
simplifyBinOp Sub (BinOp Sub e n1@Number{}) n2@Number{} =
|
||||
BinOp Sub e (BinOp Add n1 n2)
|
||||
simplifyBinOp Add (BinOp Sub e (n1 @ Number{})) (n2 @ Number{}) =
|
||||
simplifyBinOp Add (BinOp Sub e n1@Number{}) n2@Number{} =
|
||||
BinOp Sub e (BinOp Sub n1 n2)
|
||||
simplifyBinOp Add (BinOp Sub (n1 @ Number{}) e) (n2 @ Number{}) =
|
||||
simplifyBinOp Add (BinOp Sub n1@Number{} e) n2@Number{} =
|
||||
BinOp Sub (BinOp Add n1 n2) e
|
||||
simplifyBinOp Ge (BinOp Sub e (Dec 1)) (Dec 0) = BinOp Ge e (toDec 1)
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ convert :: [AST] -> [AST]
|
|||
convert = map $ traverseDescriptions convertDescription
|
||||
|
||||
convertDescription :: Description -> Description
|
||||
convertDescription (description @ Part{}) =
|
||||
convertDescription description@Part{} =
|
||||
traverseModuleItems traverseModuleItem description
|
||||
where
|
||||
traverseModuleItem =
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ convertDescription (Part attrs extern kw lifetime name ports items) =
|
|||
convertDescription description = description
|
||||
|
||||
expandParam :: [Identifier] -> ModuleItem -> ModuleItem
|
||||
expandParam shadowed (MIPackageItem (Decl (param @ (Param Parameter _ x _)))) =
|
||||
expandParam shadowed (MIPackageItem (Decl param@(Param Parameter _ x _))) =
|
||||
if elem x shadowed
|
||||
then Generate $ map (GenModuleItem . wrap) [param, extra]
|
||||
else wrap param
|
||||
|
|
@ -82,14 +82,14 @@ traverseDeclM decl = do
|
|||
|
||||
-- substitute hierarchical references to constants
|
||||
traverseExprM :: Expr -> ST Expr
|
||||
traverseExprM (expr @ (Dot _ x)) = do
|
||||
traverseExprM expr@(Dot _ x) = do
|
||||
expr' <- traverseSinglyNestedExprsM traverseExprM expr
|
||||
detailsE <- lookupElemM expr'
|
||||
detailsX <- lookupElemM x
|
||||
case (detailsE, detailsX) of
|
||||
(Just ([_, _], _, Left{}), Just ([_, _], _, Left{})) ->
|
||||
return $ Ident x
|
||||
(Just (accesses @ [Access _ Nil, _], _, Left False), _) -> do
|
||||
(Just (accesses@[Access _ Nil, _], _, Left False), _) -> do
|
||||
details <- lookupElemM $ prefix x
|
||||
when (details == Nothing) $
|
||||
insertElem accesses (Left True)
|
||||
|
|
|
|||
|
|
@ -49,20 +49,20 @@ traverseDeclM decl = do
|
|||
traverseModuleItemM :: DefaultNetType -> ModuleItem -> Scoper () ModuleItem
|
||||
traverseModuleItemM _ (Genvar x) =
|
||||
insertElem x () >> return (Genvar x)
|
||||
traverseModuleItemM defaultNetType (orig @ (Assign _ x _)) = do
|
||||
traverseModuleItemM defaultNetType orig@(Assign _ x _) = do
|
||||
needsLHS defaultNetType x
|
||||
return orig
|
||||
traverseModuleItemM defaultNetType (orig @ (NInputGate _ _ x lhs exprs)) = do
|
||||
traverseModuleItemM defaultNetType orig@(NInputGate _ _ x lhs exprs) = do
|
||||
insertElem x ()
|
||||
needsLHS defaultNetType lhs
|
||||
_ <- mapM (needsExpr defaultNetType) exprs
|
||||
return orig
|
||||
traverseModuleItemM defaultNetType (orig @ (NOutputGate _ _ x lhss expr)) = do
|
||||
traverseModuleItemM defaultNetType orig@(NOutputGate _ _ x lhss expr) = do
|
||||
insertElem x ()
|
||||
_ <- mapM (needsLHS defaultNetType) lhss
|
||||
needsExpr defaultNetType expr
|
||||
return orig
|
||||
traverseModuleItemM defaultNetType (orig @ (Instance _ _ x _ ports)) = do
|
||||
traverseModuleItemM defaultNetType orig@(Instance _ _ x _ ports) = do
|
||||
insertElem x ()
|
||||
_ <- mapM (needsExpr defaultNetType . snd) ports
|
||||
return orig
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ convertDescription parts (Part attrs extern Module lifetime name ports items) =
|
|||
traverseModuleItemM :: ModuleItem -> Scoper [ModportDecl] ModuleItem
|
||||
traverseModuleItemM (Modport modportName modportDecls) =
|
||||
insertElem modportName modportDecls >> return (Generate [])
|
||||
traverseModuleItemM (instanceItem @ Instance{}) = do
|
||||
traverseModuleItemM instanceItem@Instance{} = do
|
||||
modports <- embedScopes (\l () -> l) ()
|
||||
if isNothing maybePartInfo then
|
||||
return instanceItem
|
||||
|
|
@ -129,7 +129,7 @@ convertDescription parts (Part attrs extern Module lifetime name ports items) =
|
|||
|
||||
-- add explicit slices for bindings of entire modport instance arrays
|
||||
addImpliedSlice :: Scopes [ModportDecl] -> Expr -> Expr
|
||||
addImpliedSlice modports (orig @ (Dot expr modportName)) =
|
||||
addImpliedSlice modports orig@(Dot expr modportName) =
|
||||
case lookupIntfElem modports (InstArrKey expr) of
|
||||
Just (_, _, InstArrVal l r) ->
|
||||
Dot (Range expr NonIndexed (l, r)) modportName
|
||||
|
|
@ -485,7 +485,7 @@ inlineInstance global ranges modportBindings items partName
|
|||
case lookup (Bit expr Tag) exprReplacements of
|
||||
Just resolved -> replaceArrTag (replaceExpr' local elt) resolved
|
||||
Nothing -> Bit (replaceExpr' local expr) (replaceExpr' local elt)
|
||||
replaceExpr' local (expr @ (Dot Ident{} _)) =
|
||||
replaceExpr' local expr@(Dot Ident{} _) =
|
||||
case lookup expr exprReplacements of
|
||||
Just expr' -> expr'
|
||||
Nothing -> checkExprResolution local expr $
|
||||
|
|
@ -555,7 +555,7 @@ inlineInstance global ranges modportBindings items partName
|
|||
Implicit Unspecified rs ->
|
||||
IntegerVector TLogic Unspecified rs
|
||||
_ -> t
|
||||
removeDeclDir decl @ Net{} =
|
||||
removeDeclDir decl@Net{} =
|
||||
traverseNetAsVar removeDeclDir decl
|
||||
removeDeclDir other = other
|
||||
|
||||
|
|
@ -620,7 +620,7 @@ inlineInstance global ranges modportBindings items partName
|
|||
collectDeclDir (Variable dir _ ident _ _) =
|
||||
when (dir /= Local) $
|
||||
tell $ Map.singleton ident dir
|
||||
collectDeclDir net @ Net{} =
|
||||
collectDeclDir net@Net{} =
|
||||
collectNetAsVarM collectDeclDir net
|
||||
collectDeclDir _ = return ()
|
||||
findDeclDir :: Identifier -> Direction
|
||||
|
|
@ -641,7 +641,7 @@ inlineInstance global ranges modportBindings items partName
|
|||
loopVar = "_arr_" ++ key
|
||||
|
||||
isArray = not $ null ranges
|
||||
[arrayRange @ (arrayLeft, arrayRight)] = ranges
|
||||
[arrayRange@(arrayLeft, arrayRight)] = ranges
|
||||
|
||||
-- wrap the given item in a generate loop if necessary
|
||||
wrapInstance :: Identifier -> [ModuleItem] -> ModuleItem
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ addJumpStateDeclStmt stmt =
|
|||
where (decls, [stmt']) = addJumpStateDeclTF [] [stmt]
|
||||
|
||||
removeJumpState :: Stmt -> Stmt
|
||||
removeJumpState (orig @ (Asgn _ _ (LHSIdent ident) _)) =
|
||||
removeJumpState orig@(Asgn _ _ (LHSIdent ident) _) =
|
||||
if ident == jumpState
|
||||
then Null
|
||||
else orig
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ convertStmt tfs (Subroutine expr args) =
|
|||
convertStmt _ other = other
|
||||
|
||||
convertInvoke :: TFs -> (Expr -> Args -> a) -> Expr -> Args -> a
|
||||
convertInvoke tfs constructor (Ident func) (Args pnArgs (kwArgs @ (_ : _))) =
|
||||
convertInvoke tfs constructor (Ident func) (Args pnArgs kwArgs@(_ : _)) =
|
||||
case tfs Map.!? func of
|
||||
Nothing -> constructor (Ident func) (Args pnArgs kwArgs)
|
||||
Just ordered -> constructor (Ident func) (Args args [])
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ convert :: [AST] -> [AST]
|
|||
convert = map $ traverseDescriptions convertDescription
|
||||
|
||||
convertDescription :: Description -> Description
|
||||
convertDescription (description @ (Part _ _ Module _ _ _ _)) =
|
||||
convertDescription description@(Part _ _ Module _ _ _ _) =
|
||||
partScoper traverseDeclM traverseModuleItemM traverseGenItemM traverseStmtM
|
||||
description
|
||||
convertDescription other = other
|
||||
|
|
@ -52,7 +52,7 @@ traverseDeclM :: Decl -> Scoper TypeInfo Decl
|
|||
traverseDeclM (Variable dir t ident a e) = do
|
||||
t' <- traverseTypeM t a ident
|
||||
traverseDeclExprsM traverseExprM $ Variable dir t' ident a e
|
||||
traverseDeclM net @ Net{} =
|
||||
traverseDeclM net@Net{} =
|
||||
traverseNetAsVarM traverseDeclM net
|
||||
traverseDeclM (Param s t ident e) = do
|
||||
t' <- traverseTypeM t [] ident
|
||||
|
|
@ -233,7 +233,7 @@ convertExpr scopes =
|
|||
if head x == tag
|
||||
then Ident $ tail x
|
||||
else Ident x
|
||||
rewriteExpr (orig @ (Bit (Bit expr idxInner) idxOuter)) =
|
||||
rewriteExpr orig@(Bit (Bit expr idxInner) idxOuter) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then Bit expr' idx'
|
||||
else rewriteExprLowPrec orig
|
||||
|
|
@ -244,7 +244,7 @@ convertExpr scopes =
|
|||
idxOuter' = orientIdx dimOuter idxOuter
|
||||
base = BinOp Mul idxInner' (rangeSize dimOuter)
|
||||
idx' = simplify $ BinOp Add base idxOuter'
|
||||
rewriteExpr (orig @ (Range (Bit expr idxInner) NonIndexed rangeOuter)) =
|
||||
rewriteExpr orig@(Range (Bit expr idxInner) NonIndexed rangeOuter) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then rewriteExpr $ Range exprOuter IndexedMinus range
|
||||
else rewriteExprLowPrec orig
|
||||
|
|
@ -256,7 +256,7 @@ convertExpr scopes =
|
|||
base = endianCondExpr rangeOuter baseDec baseInc
|
||||
len = rangeSize rangeOuter
|
||||
range = (base, len)
|
||||
rewriteExpr (orig @ (Range (Bit expr idxInner) modeOuter rangeOuter)) =
|
||||
rewriteExpr orig@(Range (Bit expr idxInner) modeOuter rangeOuter) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then Range expr' modeOuter range'
|
||||
else rewriteExprLowPrec orig
|
||||
|
|
@ -279,7 +279,7 @@ convertExpr scopes =
|
|||
rewriteExprLowPrec other
|
||||
|
||||
rewriteExprLowPrec :: Expr -> Expr
|
||||
rewriteExprLowPrec (orig @ (Bit expr idx)) =
|
||||
rewriteExprLowPrec orig@(Bit expr idx) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then Range expr' mode' range'
|
||||
else orig
|
||||
|
|
@ -291,7 +291,7 @@ convertExpr scopes =
|
|||
len = rangeSize dimOuter
|
||||
base = BinOp Add (endianCondExpr dimOuter (snd dimOuter) (fst dimOuter)) (BinOp Mul idx' len)
|
||||
range' = (simplify base, simplify len)
|
||||
rewriteExprLowPrec (orig @ (Range expr NonIndexed range)) =
|
||||
rewriteExprLowPrec orig@(Range expr NonIndexed range) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then rewriteExpr $ Range expr IndexedMinus range'
|
||||
else orig
|
||||
|
|
@ -302,7 +302,7 @@ convertExpr scopes =
|
|||
base = endianCondExpr range baseDec baseInc
|
||||
len = rangeSize range
|
||||
range' = (base, len)
|
||||
rewriteExprLowPrec (orig @ (Range expr mode range)) =
|
||||
rewriteExprLowPrec orig@(Range expr mode range) =
|
||||
if isJust maybeDims && expr == rewriteExpr expr
|
||||
then Range expr' mode' range'
|
||||
else orig
|
||||
|
|
|
|||
|
|
@ -87,8 +87,8 @@ collectPackageM (Class _ name decls items) =
|
|||
tell (Map.empty, Map.singleton name (decls, map unpackClassItem items), [])
|
||||
where
|
||||
unpackClassItem :: ClassItem -> PackageItem
|
||||
unpackClassItem (item @ (_, Task{})) = checkTF item
|
||||
unpackClassItem (item @ (_, Function{})) = checkTF item
|
||||
unpackClassItem item@(_, Task{}) = checkTF item
|
||||
unpackClassItem item@(_, Function{}) = checkTF item
|
||||
unpackClassItem item = checkNonTF item
|
||||
checkTF :: ClassItem -> PackageItem
|
||||
checkTF (QStatic, item) = item
|
||||
|
|
@ -242,7 +242,7 @@ processItems topName packageName moduleItems = do
|
|||
-- produces partial mappings of exported identifiers, while also
|
||||
-- checking the validity of the exports
|
||||
resolveExportMI :: IdentStateMap -> ModuleItem -> PackagesState IdentStateMap
|
||||
resolveExportMI mapping (MIPackageItem (item @ (Export pkg ident))) =
|
||||
resolveExportMI mapping (MIPackageItem item@(Export pkg ident)) =
|
||||
if null packageName
|
||||
then error $ "invalid " ++ (init $ show item)
|
||||
++ " outside of package"
|
||||
|
|
@ -304,12 +304,12 @@ processItems topName packageName moduleItems = do
|
|||
++ intercalate ", " rootPkgs
|
||||
|
||||
traversePackageItemM :: PackageItem -> Scope PackageItem
|
||||
traversePackageItemM (orig @ (Import pkg ident)) = do
|
||||
traversePackageItemM orig@(Import pkg ident) = do
|
||||
if null ident
|
||||
then wildcardImports pkg
|
||||
else explicitImport pkg ident
|
||||
return $ Decl $ CommentDecl $ "removed " ++ show orig
|
||||
traversePackageItemM (orig @ (Export pkg ident)) = do
|
||||
traversePackageItemM orig@(Export pkg ident) = do
|
||||
() <- when (not (null pkg || null ident)) $ do
|
||||
localName <- resolveIdent ident
|
||||
rootPkg <- lift $ resolveRootPackage pkg ident
|
||||
|
|
@ -459,7 +459,7 @@ findPackage packageName = do
|
|||
assertMsg (not $ elem packageName stack) $
|
||||
"package dependency loop: " ++ show first ++ " depends on "
|
||||
++ intercalate ", which depends on " (map show rest)
|
||||
let Just (package @ (exports, _))= maybePackage
|
||||
let Just package@(exports, _) = maybePackage
|
||||
if Map.null exports
|
||||
then do
|
||||
-- process and resolve this package
|
||||
|
|
@ -613,7 +613,7 @@ toRootPackage sourcePackage identState =
|
|||
|
||||
-- nests packages items missing from modules
|
||||
convertDescription :: PIs -> Description -> Description
|
||||
convertDescription pis (orig @ Part{}) =
|
||||
convertDescription pis orig@Part{} =
|
||||
if Map.null pis
|
||||
then orig
|
||||
else Part attrs extern kw lifetime name ports items'
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ traverseDeclM other = return other
|
|||
|
||||
-- check for instances missing values for parameters without defaults
|
||||
traverseModuleItem :: Parts -> ModuleItem -> ModuleItem
|
||||
traverseModuleItem parts (orig @ (Instance part params name _ _)) =
|
||||
traverseModuleItem parts orig@(Instance part params name _ _) =
|
||||
if maybePartInfo == Nothing || null missingParams
|
||||
then orig
|
||||
else error $ "instance " ++ show name ++ " of " ++ show part
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ convert files =
|
|||
-- add type parameter instantiations
|
||||
files'' = map (concatMap explodeDescription) files'
|
||||
explodeDescription :: Description -> [Description]
|
||||
explodeDescription (part @ (Part _ _ _ _ name _ _)) =
|
||||
explodeDescription part@(Part _ _ _ _ name _ _) =
|
||||
(part :) $
|
||||
filter (not . alreadyExists) $
|
||||
map (rewriteModule part) theseInstances
|
||||
|
|
@ -57,7 +57,7 @@ convert files =
|
|||
both (Map.fromListWith Set.union) $
|
||||
execWriter $ mapM (mapM collectUsageM) files''
|
||||
collectUsageM :: Description -> Writer (UsageMap, UsageMap) ()
|
||||
collectUsageM (part @ (Part _ _ _ _ name _ _)) =
|
||||
collectUsageM part@(Part _ _ _ _ name _ _) =
|
||||
tell $ both makeList $ execWriter $
|
||||
(collectModuleItemsM collectModuleItemM) part
|
||||
where makeList s = zip (Set.toList s) (repeat $ Set.singleton name)
|
||||
|
|
@ -93,7 +93,7 @@ convert files =
|
|||
|
||||
-- instantiate the type parameters if this is a used default instance
|
||||
reduceTypeDefaults :: Description -> Description
|
||||
reduceTypeDefaults (part @ (Part _ _ _ _ name _ _)) =
|
||||
reduceTypeDefaults part@(Part _ _ _ _ name _ _) =
|
||||
if shouldntReduce
|
||||
then part
|
||||
else traverseModuleItems (traverseDecls rewriteDecl) part
|
||||
|
|
@ -149,7 +149,7 @@ convert files =
|
|||
additionalParamItems = concatMap makeAddedParams $
|
||||
Map.toList $ Map.map snd inst
|
||||
rewriteExpr :: Expr -> Expr
|
||||
rewriteExpr (orig @ (Dot (Ident x) y)) =
|
||||
rewriteExpr orig@(Dot (Ident x) y) =
|
||||
if x == m
|
||||
then Dot (Ident m') y
|
||||
else orig
|
||||
|
|
@ -157,7 +157,7 @@ convert files =
|
|||
traverseExprTypes rewriteType $
|
||||
traverseSinglyNestedExprs rewriteExpr other
|
||||
rewriteLHS :: LHS -> LHS
|
||||
rewriteLHS (orig @ (LHSDot (LHSIdent x) y)) =
|
||||
rewriteLHS orig@(LHSDot (LHSIdent x) y) =
|
||||
if x == m
|
||||
then LHSDot (LHSIdent m') y
|
||||
else orig
|
||||
|
|
@ -192,7 +192,7 @@ convert files =
|
|||
|
||||
-- write down module parameter names and type parameters
|
||||
collectDescriptionM :: Description -> Writer Modules ()
|
||||
collectDescriptionM (part @ (Part _ _ _ _ name _ _)) =
|
||||
collectDescriptionM part@(Part _ _ _ _ name _ _) =
|
||||
tell $ Map.singleton name typeMap
|
||||
where
|
||||
typeMap = Map.fromList $ execWriter $
|
||||
|
|
@ -250,7 +250,7 @@ prepareTypeExprs instanceName paramName =
|
|||
(traverseTypeExprsM $ traverseNestedExprsM prepareExpr)
|
||||
where
|
||||
prepareExpr :: Expr -> Writer (IdentSet, DeclMap) Expr
|
||||
prepareExpr (e @ Call{}) = do
|
||||
prepareExpr e@Call{} = do
|
||||
tell (Set.empty, Map.singleton x decl)
|
||||
prepareExpr $ Ident x
|
||||
where
|
||||
|
|
@ -281,7 +281,7 @@ convertGenItemM other =
|
|||
|
||||
-- attempt to rewrite instantiations with type parameters
|
||||
convertModuleItemM :: ModuleItem -> Writer Instances ModuleItem
|
||||
convertModuleItemM (orig @ (Instance m bindings x r p)) =
|
||||
convertModuleItemM orig@(Instance m bindings x r p) =
|
||||
if hasOnlyExprs then
|
||||
return orig
|
||||
else if not hasUnresolvedTypes then do
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ directResolve mapping (Access x Nil : rest) = do
|
|||
Entry _ "" subMapping <- Map.lookup x mapping
|
||||
directResolve subMapping rest
|
||||
directResolve mapping (Access x e : rest) = do
|
||||
Entry _ (index @ (_ : _)) subMapping <- Map.lookup x mapping
|
||||
Entry _ index@(_ : _) subMapping <- Map.lookup x mapping
|
||||
(replacements, element) <- directResolve subMapping rest
|
||||
let replacements' = Map.insert index e replacements
|
||||
Just (replacements', element)
|
||||
|
|
|
|||
|
|
@ -155,6 +155,6 @@ substitute scopes expr =
|
|||
substituteIdent :: Scopes Expr -> Expr -> Expr
|
||||
substituteIdent scopes (Ident x) =
|
||||
case lookupElem scopes x of
|
||||
Just (_, _, n @ Number{}) -> n
|
||||
Just (_, _, n@Number{}) -> n
|
||||
_ -> Ident x
|
||||
substituteIdent _ other = other
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ traverseDeclM (Variable d t x [] (Stream StreamR _ exprs)) =
|
|||
expr' = resize exprSize lhsSize expr
|
||||
lhsSize = DimsFn FnBits $ Left t
|
||||
exprSize = sizeof expr
|
||||
traverseDeclM (Variable d t x [] (expr @ (Stream StreamL chunk exprs))) = do
|
||||
traverseDeclM (Variable d t x [] expr@(Stream StreamL chunk exprs)) = do
|
||||
inProcedure <- withinProcedureM
|
||||
if inProcedure
|
||||
then return $ Variable d t x [] expr
|
||||
|
|
@ -40,7 +40,7 @@ traverseDeclM (Variable d t x [] (expr @ (Stream StreamL chunk exprs))) = do
|
|||
expr' = Call (Ident fnName) (Args [Concat exprs] [])
|
||||
traverseDeclM (Variable d t x a expr) =
|
||||
traverseExprM expr >>= return . Variable d t x a
|
||||
traverseDeclM decl @ Net{} = traverseNetAsVarM traverseDeclM decl
|
||||
traverseDeclM decl@Net{} = traverseNetAsVarM traverseDeclM decl
|
||||
traverseDeclM decl = return decl
|
||||
|
||||
traverseModuleItemM :: ModuleItem -> Scoper () ModuleItem
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ collectQueriedIdentsM _ _ = return ()
|
|||
elaborateStringParam :: Idents -> ModuleItem -> ModuleItem
|
||||
elaborateStringParam idents (MIAttr attr item) =
|
||||
MIAttr attr $ elaborateStringParam idents item
|
||||
elaborateStringParam idents (orig @ (StringParam x str)) =
|
||||
elaborateStringParam idents orig@(StringParam x str) =
|
||||
if Set.member x idents
|
||||
then Generate $ map wrap [width, param]
|
||||
else orig
|
||||
|
|
@ -99,7 +99,7 @@ mapInstance partStringParams (Instance m params x rs ports) =
|
|||
where
|
||||
expand :: [Identifier] -> ParamBinding -> [ParamBinding]
|
||||
expand _ (paramName, Left t) = [(paramName, Left t)]
|
||||
expand stringParams (orig @ (paramName, Right expr)) =
|
||||
expand stringParams orig@(paramName, Right expr) =
|
||||
if elem paramName stringParams
|
||||
then [(widthName paramName, Right width), orig]
|
||||
else [orig]
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ convert :: [AST] -> [AST]
|
|||
convert = map $ traverseDescriptions convertDescription
|
||||
|
||||
convertDescription :: Description -> Description
|
||||
convertDescription (description @ (Part _ _ Module _ _ _ _)) =
|
||||
convertDescription description@(Part _ _ Module _ _ _ _) =
|
||||
partScoper traverseDeclM traverseModuleItemM traverseGenItemM traverseStmtM
|
||||
description
|
||||
convertDescription other = other
|
||||
|
|
@ -103,7 +103,7 @@ convertType t1 =
|
|||
|
||||
-- write down the types of declarations
|
||||
traverseDeclM :: Decl -> Scoper Type Decl
|
||||
traverseDeclM decl @ Net{} =
|
||||
traverseDeclM decl@Net{} =
|
||||
traverseNetAsVarM traverseDeclM decl
|
||||
traverseDeclM decl = do
|
||||
decl' <- case decl of
|
||||
|
|
@ -196,7 +196,7 @@ convertExpr t (Mux c e1 e2) =
|
|||
e1' = convertExpr t e1
|
||||
e2' = convertExpr t e2
|
||||
|
||||
convertExpr (struct @ (Struct _ fields [])) (Pattern itemsOrig) =
|
||||
convertExpr struct@(Struct _ fields []) (Pattern itemsOrig) =
|
||||
if not (null extraNames) then
|
||||
error $ "pattern " ++ show (Pattern itemsOrig) ++
|
||||
" has extra named fields " ++ show extraNames ++
|
||||
|
|
@ -302,7 +302,7 @@ convertExpr (Implicit sg rs) expr =
|
|||
|
||||
-- TODO: This is a conversion for concat array literals with elements
|
||||
-- that are unsized numbers. This probably belongs somewhere else.
|
||||
convertExpr (t @ IntegerVector{}) (Concat exprs) =
|
||||
convertExpr t@IntegerVector{} (Concat exprs) =
|
||||
if all isUnsizedNumber exprs
|
||||
then Concat $ map (Cast $ Left t') exprs
|
||||
else Concat $ map (convertExpr t') exprs
|
||||
|
|
@ -317,7 +317,7 @@ convertExpr (t @ IntegerVector{}) (Concat exprs) =
|
|||
|
||||
-- TODO: This is really a conversion for using default patterns to
|
||||
-- populate arrays. Maybe this should be somewhere else?
|
||||
convertExpr t (orig @ (Pattern [(Left UnknownType, expr)])) =
|
||||
convertExpr t orig@(Pattern [(Left UnknownType, expr)]) =
|
||||
if null rs
|
||||
then orig
|
||||
else Repeat count [expr']
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ type ST = Scoper Type
|
|||
|
||||
-- insert the given declaration into the scope, and convert an TypeOfs within
|
||||
traverseDeclM :: Decl -> ST Decl
|
||||
traverseDeclM decl @ Net{} =
|
||||
traverseDeclM decl@Net{} =
|
||||
traverseNetAsVarM traverseDeclM decl
|
||||
traverseDeclM decl = do
|
||||
decl' <- traverseDeclNodesM traverseTypeM traverseExprM decl
|
||||
|
|
@ -98,7 +98,7 @@ traverseExprM (Cast (Left (Implicit sg [])) expr) =
|
|||
traverseExprM (Cast (Left t) (Number (UnbasedUnsized bit))) =
|
||||
-- defer until this expression becomes explicit
|
||||
return $ Cast (Left t) (Number (UnbasedUnsized bit))
|
||||
traverseExprM (Cast (Left (t @ (IntegerAtom TInteger _))) expr) =
|
||||
traverseExprM (Cast (Left t@(IntegerAtom TInteger _)) expr) =
|
||||
-- convert to cast to an integer vector type
|
||||
traverseExprM $ Cast (Left t') expr
|
||||
where
|
||||
|
|
@ -189,14 +189,14 @@ typeof (Number n) =
|
|||
size = numberBitLength n
|
||||
sg = if numberIsSigned n then Signed else Unspecified
|
||||
typeof (Call (Ident x) args) = typeofCall x args
|
||||
typeof (orig @ (Bit e _)) = do
|
||||
typeof orig@(Bit e _) = do
|
||||
t <- typeof e
|
||||
let t' = popRange t
|
||||
case t of
|
||||
TypeOf{} -> lookupTypeOf orig
|
||||
Alias{} -> return $ TypeOf orig
|
||||
_ -> return $ typeSignednessOverride t' Unsigned t'
|
||||
typeof (orig @ (Range e NonIndexed r)) = do
|
||||
typeof orig@(Range e NonIndexed r) = do
|
||||
t <- typeof e
|
||||
let t' = replaceRange r t
|
||||
return $ case t of
|
||||
|
|
@ -217,7 +217,7 @@ typeof (Range expr mode (base, len)) =
|
|||
if mode == IndexedPlus
|
||||
then BinOp Sub (BinOp Add base len) (RawNum 1)
|
||||
else BinOp Add (BinOp Sub base len) (RawNum 1)
|
||||
typeof (orig @ (Dot e x)) = do
|
||||
typeof orig@(Dot e x) = do
|
||||
t <- typeof e
|
||||
case t of
|
||||
Struct _ fields [] -> return $ fieldsType fields
|
||||
|
|
@ -404,7 +404,7 @@ typeCastUnneeded t1 t2 =
|
|||
sz2 = typeSize t2
|
||||
typeSize :: Type -> Maybe Expr
|
||||
typeSize (IntegerVector _ _ rs) = Just $ dimensionsSize rs
|
||||
typeSize (t @ IntegerAtom{}) =
|
||||
typeSize t@IntegerAtom{} =
|
||||
typeSize $ tf [(RawNum 1, RawNum 1)]
|
||||
where (tf, []) = typeRanges t
|
||||
typeSize _ = Nothing
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ convertExpr _ (Cast te e) =
|
|||
Cast te $ convertExpr SelfDetermined e
|
||||
convertExpr _ (Concat exprs) =
|
||||
Concat $ map (convertExpr SelfDetermined) exprs
|
||||
convertExpr context (Pattern [(Left UnknownType, e @ UU{})]) =
|
||||
convertExpr context (Pattern [(Left UnknownType, e@UU{})]) =
|
||||
convertExpr context e
|
||||
convertExpr _ (Pattern items) =
|
||||
Pattern $ zip
|
||||
|
|
@ -218,7 +218,7 @@ convertExpr _ (Call expr (Args pnArgs [])) =
|
|||
where pnArgs' = map (convertExpr SelfDetermined) pnArgs
|
||||
convertExpr _ (Repeat count exprs) =
|
||||
Repeat count $ map (convertExpr SelfDetermined) exprs
|
||||
convertExpr SelfDetermined (Mux cond (e1 @ UU{}) (e2 @ UU{})) =
|
||||
convertExpr SelfDetermined (Mux cond e1@UU{} e2@UU{}) =
|
||||
Mux
|
||||
(convertExpr SelfDetermined cond)
|
||||
(convertExpr SelfDetermined e1)
|
||||
|
|
|
|||
|
|
@ -31,10 +31,10 @@ initialState :: Info
|
|||
initialState = ([], 1)
|
||||
|
||||
traverseModuleItemM :: ModuleItem -> S ModuleItem
|
||||
traverseModuleItemM (item @ (Genvar x)) = declaration x item
|
||||
traverseModuleItemM (item @ (NInputGate _ _ x _ _)) = declaration x item
|
||||
traverseModuleItemM (item @ (NOutputGate _ _ x _ _)) = declaration x item
|
||||
traverseModuleItemM (item @ (Instance _ _ x _ _)) = declaration x item
|
||||
traverseModuleItemM item@(Genvar x) = declaration x item
|
||||
traverseModuleItemM item@(NInputGate _ _ x _ _) = declaration x item
|
||||
traverseModuleItemM item@(NOutputGate _ _ x _ _) = declaration x item
|
||||
traverseModuleItemM item@(Instance _ _ x _ _) = declaration x item
|
||||
traverseModuleItemM (MIPackageItem (Decl decl)) =
|
||||
traverseDeclM decl >>= return . MIPackageItem . Decl
|
||||
traverseModuleItemM (MIAttr attr item) =
|
||||
|
|
@ -56,10 +56,10 @@ traverseDeclM decl =
|
|||
-- label the generate blocks within an individual generate item which is already
|
||||
-- in a list of generate items (top level or generate block)
|
||||
traverseGenItemM :: GenItem -> S GenItem
|
||||
traverseGenItemM (item @ GenIf{}) = do
|
||||
traverseGenItemM item@GenIf{} = do
|
||||
item' <- labelGenElse item
|
||||
incrCount >> return item'
|
||||
traverseGenItemM (item @ GenBlock{}) = do
|
||||
traverseGenItemM item@GenBlock{} = do
|
||||
item' <- labelBlock item
|
||||
incrCount >> return item'
|
||||
traverseGenItemM (GenFor a b c item) = do
|
||||
|
|
|
|||
|
|
@ -91,11 +91,11 @@ instance Show Expr where
|
|||
showPatternItem (Left t, v) = printf "%s: %s" tStr (show v)
|
||||
where tStr = if null (show t) then "default" else show t
|
||||
show (MinTypMax a b c) = printf "(%s : %s : %s)" (show a) (show b) (show c)
|
||||
show (e @ UniOp{}) = showsPrec 0 e ""
|
||||
show (e @ BinOp{}) = showsPrec 0 e ""
|
||||
show (e @ Dot {}) = showsPrec 0 e ""
|
||||
show (e @ Mux {}) = showsPrec 0 e ""
|
||||
show (e @ Call {}) = showsPrec 0 e ""
|
||||
show e@UniOp{} = showsPrec 0 e ""
|
||||
show e@BinOp{} = showsPrec 0 e ""
|
||||
show e@Dot {} = showsPrec 0 e ""
|
||||
show e@Mux {} = showsPrec 0 e ""
|
||||
show e@Call {} = showsPrec 0 e ""
|
||||
|
||||
showsPrec _ (UniOp o e ) =
|
||||
shows o .
|
||||
|
|
@ -185,12 +185,12 @@ showRange :: Range -> String
|
|||
showRange (h, l) = '[' : show h ++ ':' : show l ++ "]"
|
||||
|
||||
showUniOpPrec :: Expr -> ShowS
|
||||
showUniOpPrec (e @ UniOp{}) = (showParen True . shows) e
|
||||
showUniOpPrec (e @ BinOp{}) = (showParen True . shows) e
|
||||
showUniOpPrec e@UniOp{} = (showParen True . shows) e
|
||||
showUniOpPrec e@BinOp{} = (showParen True . shows) e
|
||||
showUniOpPrec e = shows e
|
||||
|
||||
showBinOpPrec :: Expr -> ShowS
|
||||
showBinOpPrec (e @ BinOp{}) = (showParen True . shows) e
|
||||
showBinOpPrec e@BinOp{} = (showParen True . shows) e
|
||||
showBinOpPrec e = shows e
|
||||
|
||||
type ParamBinding = (Identifier, TypeOrExpr)
|
||||
|
|
|
|||
|
|
@ -449,7 +449,7 @@ chunk base n0 =
|
|||
|
||||
-- number concatenation
|
||||
instance Semigroup Number where
|
||||
(n1 @ Based{}) <> (n2 @ Based{}) =
|
||||
n1@Based{} <> n2@Based{} =
|
||||
Based size signed base values kinds
|
||||
where
|
||||
size = size1 + size2
|
||||
|
|
@ -465,7 +465,7 @@ instance Semigroup Number where
|
|||
n1 <> n2 =
|
||||
toBased n1 <> toBased n2
|
||||
where
|
||||
toBased (n @ Based{}) = n
|
||||
toBased n@Based{} = n
|
||||
toBased (Decimal size signed num) =
|
||||
Based size signed Hex num 0
|
||||
toBased (UnbasedUnsized bit) =
|
||||
|
|
|
|||
|
|
@ -104,9 +104,9 @@ showAssign :: (LHS, AsgnOp, Expr) -> String
|
|||
showAssign (l, op, e) = (showPad l) ++ (showPad op) ++ (show e)
|
||||
|
||||
showBranch :: Stmt -> String
|
||||
showBranch (Block Seq "" [] (stmts @ [CommentStmt{}, _])) =
|
||||
showBranch (Block Seq "" [] stmts@[CommentStmt{}, _]) =
|
||||
'\n' : (indent $ show stmts)
|
||||
showBranch (block @ Block{}) = ' ' : show block
|
||||
showBranch block@Block{} = ' ' : show block
|
||||
showBranch stmt = '\n' : (indent $ show stmt)
|
||||
|
||||
showBlockedBranch :: Stmt -> String
|
||||
|
|
@ -129,11 +129,11 @@ showBlockedBranch stmt =
|
|||
_ -> False
|
||||
|
||||
showElseBranch :: Stmt -> String
|
||||
showElseBranch (stmt @ If{}) = ' ' : show stmt
|
||||
showElseBranch stmt@If{} = ' ' : show stmt
|
||||
showElseBranch stmt = showBranch stmt
|
||||
|
||||
showShortBranch :: Stmt -> String
|
||||
showShortBranch (stmt @ Asgn{}) = ' ' : show stmt
|
||||
showShortBranch stmt@Asgn{} = ' ' : show stmt
|
||||
showShortBranch stmt = showBranch stmt
|
||||
|
||||
showCase :: Case -> String
|
||||
|
|
|
|||
|
|
@ -1578,7 +1578,7 @@ caseInsideKW tok kw =
|
|||
parseError (tokenPosition tok) $ "cannot use inside with " ++ show kw
|
||||
|
||||
addMIAttr :: Attr -> ModuleItem -> ModuleItem
|
||||
addMIAttr _ (item @ (MIPackageItem (Decl CommentDecl{}))) = item
|
||||
addMIAttr _ item@(MIPackageItem (Decl CommentDecl{})) = item
|
||||
addMIAttr attr item = MIAttr attr item
|
||||
|
||||
missingToken :: String -> ParseState a
|
||||
|
|
@ -1646,15 +1646,15 @@ makeTypeOf (Token _ _ pos) expr = (pos, check)
|
|||
check sg [] = unexpectedSigning pos sg (show typ)
|
||||
|
||||
addMITrace :: ModuleItem -> [ModuleItem] -> [ModuleItem]
|
||||
addMITrace _ items @ (MIPackageItem (Decl CommentDecl{}) : _) = items
|
||||
addMITrace _ items@(MIPackageItem (Decl CommentDecl{}) : _) = items
|
||||
addMITrace trace items = trace : items
|
||||
|
||||
addPITrace :: PackageItem -> [PackageItem] -> [PackageItem]
|
||||
addPITrace _ items @ (Decl CommentDecl{} : _) = items
|
||||
addPITrace _ items@(Decl CommentDecl{} : _) = items
|
||||
addPITrace trace items = trace : items
|
||||
|
||||
addCITrace :: ClassItem -> [ClassItem] -> [ClassItem]
|
||||
addCITrace _ items @ ((_, Decl CommentDecl{}) : _) = items
|
||||
addCITrace _ items@((_, Decl CommentDecl{}) : _) = items
|
||||
addCITrace trace items = trace : items
|
||||
|
||||
makeFor :: Either [Decl] [(LHS, Expr)] -> Expr -> [(LHS, AsgnOp, Expr)] -> Stmt -> Stmt
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ parseDTsAsPortDecls = parseDTsAsPortDecls' . dropTrailingComma
|
|||
where
|
||||
dropTrailingComma :: [DeclToken] -> [DeclToken]
|
||||
dropTrailingComma [] = []
|
||||
dropTrailingComma [DTComma{}, end @ DTEnd{}] = [end]
|
||||
dropTrailingComma [DTComma{}, end@DTEnd{}] = [end]
|
||||
dropTrailingComma (tok : toks) = tok : dropTrailingComma toks
|
||||
|
||||
-- internal parseDTsAsPortDecls after the removal of an optional trailing comma
|
||||
|
|
@ -102,7 +102,7 @@ parseDTsAsPortDecls' pieces =
|
|||
pieces' = filter (not . isAttr) pieces
|
||||
|
||||
propagateDirections :: Direction -> [Decl] -> [Decl]
|
||||
propagateDirections dir (decl @ (Variable _ InterfaceT{} _ _ _) : decls) =
|
||||
propagateDirections dir (decl@(Variable _ InterfaceT{} _ _ _) : decls) =
|
||||
decl : propagateDirections dir decls
|
||||
propagateDirections lastDir (Variable currDir t x a e : decls) =
|
||||
decl : propagateDirections dir decls
|
||||
|
|
@ -167,7 +167,7 @@ parseDTsAsModuleItems tokens =
|
|||
-- internal; attempt to parse an elaboration system task
|
||||
asElabTask :: [DeclToken] -> Maybe ModuleItem
|
||||
asElabTask tokens = do
|
||||
DTIdent _ x @ ('$' : _) <- return $ head tokens
|
||||
DTIdent _ x@('$' : _) <- return $ head tokens
|
||||
severity <- lookup x elabTasks
|
||||
Just $ ElabTask severity args
|
||||
where
|
||||
|
|
@ -328,7 +328,7 @@ parseDTsAsAsgns tokens =
|
|||
"unexpected " ++ surprise ++ " in for loop initialization"
|
||||
|
||||
shiftIncOrDec :: [DeclToken] -> [DeclToken]
|
||||
shiftIncOrDec (tok @ (DTAsgn _ AsgnOp{} _ _) : toks) =
|
||||
shiftIncOrDec (tok@(DTAsgn _ AsgnOp{} _ _) : toks) =
|
||||
before ++ tok : delim : shiftIncOrDec after
|
||||
where (before, delim : after) = break isCommaOrEnd toks
|
||||
shiftIncOrDec [] = []
|
||||
|
|
|
|||
Loading…
Reference in New Issue