diff options
author | Ferdinand Bachmann | 2021-09-27 18:24:32 +0200 |
---|---|---|
committer | Ferdinand Bachmann | 2021-09-27 18:24:32 +0200 |
commit | c15843038a98743d20554b0e0731b2ad6c90fffa (patch) | |
tree | e1dbaedcd348356577d8c46d894fb3c9d465f329 | |
download | aur-c15843038a98743d20554b0e0731b2ad6c90fffa.tar.gz |
initial commit
-rw-r--r-- | .SRCINFO | 23 | ||||
-rw-r--r-- | PKGBUILD | 52 | ||||
-rw-r--r-- | at-operator.patch | 809 | ||||
-rw-r--r-- | sv2v-cabal.patch | 11 |
4 files changed, 895 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..5dbdca72504a --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,23 @@ +pkgbase = haskell-sv2v + pkgdesc = SystemVerilog to Verilog conversion + pkgver = 0.0.8 + pkgrel = 1 + url = https://github.com/zachjs/sv2v + arch = x86_64 + license = custom: BSD3 + makedepends = ghc + makedepends = alex + makedepends = happy + depends = ghc-libs + depends = haskell-cmdargs + depends = haskell-githash + depends = haskell-hashable + depends = haskell-vector + source = https://hackage.haskell.org/packages/archive/sv2v/0.0.8/sv2v-0.0.8.tar.gz + source = sv2v-cabal.patch + source = at-operator.patch + sha256sums = fc84a770faa9357eeac56d55f861e89d2a73d71378b332096de8ddf4340674fe + sha256sums = fd9d4dfd5537347d3ca6c3c1e5f166c7d6417acfe84541b8feb837fb043879f8 + sha256sums = 6f0ab8b52a0592e42de5f07a75e16f13fa576d37c8d223e5932e9f2d8b8689f6 + +pkgname = haskell-sv2v diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..89e7d979dadf --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,52 @@ +# This file was generated by https://github.com/berberman/arch-hs, please check it manually. +# Maintainer: Ferdinand Bachmann <theferdi265@gmail.com> + +_hkgname=sv2v +pkgname=haskell-sv2v +pkgver=0.0.8 +pkgrel=1 +pkgdesc="SystemVerilog to Verilog conversion" +url="https://github.com/zachjs/sv2v" +license=("custom: BSD3") +arch=('x86_64') +depends=('ghc-libs' 'haskell-cmdargs' 'haskell-githash' 'haskell-hashable' 'haskell-vector') +makedepends=('ghc' 'alex' 'happy') +source=("https://hackage.haskell.org/packages/archive/$_hkgname/$pkgver/$_hkgname-$pkgver.tar.gz" + "sv2v-cabal.patch" + "at-operator.patch") +sha256sums=('fc84a770faa9357eeac56d55f861e89d2a73d71378b332096de8ddf4340674fe' + 'fd9d4dfd5537347d3ca6c3c1e5f166c7d6417acfe84541b8feb837fb043879f8' + '6f0ab8b52a0592e42de5f07a75e16f13fa576d37c8d223e5932e9f2d8b8689f6') + +prepare() { + cd $_hkgname-$pkgver + + patch -p1 < "$srcdir/sv2v-cabal.patch" + patch -p1 < "$srcdir/at-operator.patch" +} + +build() { + cd $_hkgname-$pkgver + + runhaskell Setup configure -O --enable-shared --enable-executable-dynamic --disable-library-vanilla \ + --prefix=/usr --docdir=/usr/share/doc/$pkgname --enable-tests \ + --dynlibdir=/usr/lib --libsubdir=\$compiler/site-local/\$pkgid \ + --ghc-option=-optl-Wl\,-z\,relro\,-z\,now \ + --ghc-option='-pie' + + runhaskell Setup build + runhaskell Setup register --gen-script + runhaskell Setup unregister --gen-script + if [[ -f register.sh ]]; then sed -i -r -e "s|ghc-pkg.*update[^ ]* |&'--force' |" register.sh; fi + if [[ -f unregister.sh ]]; then sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh; fi +} + +package() { + cd $_hkgname-$pkgver + + if [[ -f register.sh ]]; then install -D -m744 register.sh "$pkgdir"/usr/share/haskell/register/$pkgname.sh; fi + if [[ -f unregister.sh ]]; then install -D -m744 unregister.sh "$pkgdir"/usr/share/haskell/unregister/$pkgname.sh; fi + runhaskell Setup copy --destdir="$pkgdir" + install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ + rm -f "$pkgdir"/usr/share/doc/$pkgname/LICENSE +} diff --git a/at-operator.patch b/at-operator.patch new file mode 100644 index 000000000000..12380576df4f --- /dev/null +++ b/at-operator.patch @@ -0,0 +1,809 @@ +--- a/src/Language/SystemVerilog/AST/Number.hs 2021-07-31 20:11:02.000000000 +0200 ++++ b/src/Language/SystemVerilog/AST/Number.hs 2021-09-27 17:49:30.524549944 +0200 +@@ -328,7 +328,7 @@ + + -- number concatenation + instance Semigroup Number where +- (n1 @ Based{}) <> (n2 @ Based{}) = ++ (n1@Based{}) <> (n2@Based{}) = + Based size signed base values kinds + where + size = size1 + size2 +@@ -344,7 +344,7 @@ + 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) = +--- a/src/Language/SystemVerilog/AST/Expr.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Language/SystemVerilog/AST/Expr.hs 2021-09-27 17:52:39.545214047 +0200 +@@ -91,11 +91,11 @@ + 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 (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) +--- a/src/Language/SystemVerilog/AST/Stmt.hs 2021-09-27 17:55:49.292475468 +0200 ++++ b/src/Language/SystemVerilog/AST/Stmt.hs 2021-09-27 17:56:07.555863130 +0200 +@@ -104,9 +104,9 @@ + 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 @@ + _ -> 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 +--- a/src/Convert/UnnamedGenBlock.hs 2021-07-13 03:18:12.000000000 +0200 ++++ b/src/Convert/UnnamedGenBlock.hs 2021-09-27 17:59:17.843072378 +0200 +@@ -31,10 +31,10 @@ + 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 @@ + -- 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 +--- a/src/Convert/KWArgs.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/KWArgs.hs 2021-09-27 18:02:55.903653860 +0200 +@@ -55,7 +55,7 @@ + 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 []) +--- a/src/Convert/MultiplePacked.hs 2021-07-18 05:12:44.000000000 +0200 ++++ b/src/Convert/MultiplePacked.hs 2021-09-27 18:02:55.916987228 +0200 +@@ -42,7 +42,7 @@ + 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 (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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 +--- a/src/Convert/ImplicitNet.hs 2021-07-23 21:46:42.000000000 +0200 ++++ b/src/Convert/ImplicitNet.hs 2021-09-27 18:02:55.930320596 +0200 +@@ -49,20 +49,20 @@ + 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 +--- a/src/Convert/TypeOf.hs 2021-07-31 03:09:08.000000000 +0200 ++++ b/src/Convert/TypeOf.hs 2021-09-27 18:02:55.943653964 +0200 +@@ -41,7 +41,7 @@ + + -- 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 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 +@@ -186,14 +186,14 @@ + 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 +@@ -214,7 +214,7 @@ + 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 +@@ -401,7 +401,7 @@ + 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 +--- a/src/Convert/DimensionQuery.hs 2021-07-24 22:47:53.000000000 +0200 ++++ b/src/Convert/DimensionQuery.hs 2021-09-27 18:02:55.950320648 +0200 +@@ -56,12 +56,12 @@ + 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 +--- a/src/Convert/HierConst.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/HierConst.hs 2021-09-27 18:02:55.956987332 +0200 +@@ -48,7 +48,7 @@ + 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 @@ + + -- 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) +--- a/src/Convert/Interface.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Interface.hs 2021-09-27 18:02:55.963654016 +0200 +@@ -88,7 +88,7 @@ + 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 @@ + + -- 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 @@ + 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 @@ + Implicit Unspecified rs -> + IntegerVector TLogic Unspecified rs + _ -> t +- removeDeclDir decl @ Net{} = ++ removeDeclDir decl@Net{} = + traverseNetAsVar removeDeclDir decl + removeDeclDir other = other + +@@ -620,7 +620,7 @@ + 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 @@ + 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 +--- a/src/Convert/EmptyArgs.hs 2021-07-13 03:15:53.000000000 +0200 ++++ b/src/Convert/EmptyArgs.hs 2021-09-27 18:02:55.966987358 +0200 +@@ -20,7 +20,7 @@ + convert = map $ traverseDescriptions convertDescription + + convertDescription :: Description -> Description +-convertDescription (description @ Part{}) = ++convertDescription (description@Part{}) = + traverseModuleItems + (traverseExprs $ traverseNestedExprs $ convertExpr functions) + description' +--- a/src/Convert/Jump.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Jump.hs 2021-09-27 18:02:55.970320700 +0200 +@@ -105,7 +105,7 @@ + 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 +--- a/src/Convert/ExprUtils.hs 2021-07-31 03:09:37.000000000 +0200 ++++ b/src/Convert/ExprUtils.hs 2021-09-27 18:02:55.973654042 +0200 +@@ -44,9 +44,9 @@ + 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 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) + +--- a/src/Convert/ParamNoDefault.hs 2021-07-13 03:15:53.000000000 +0200 ++++ b/src/Convert/ParamNoDefault.hs 2021-09-27 18:02:55.976987384 +0200 +@@ -65,7 +65,7 @@ + + -- 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 +--- a/src/Convert/StringParam.hs 2021-07-13 03:15:53.000000000 +0200 ++++ b/src/Convert/StringParam.hs 2021-09-27 18:02:55.980320726 +0200 +@@ -72,7 +72,7 @@ + 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 @@ + 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] +--- a/src/Convert/FuncRoutine.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/FuncRoutine.hs 2021-09-27 18:02:55.983654068 +0200 +@@ -22,7 +22,7 @@ + convert = map $ traverseDescriptions convertDescription + + convertDescription :: Description -> Description +-convertDescription (description @ Part{}) = ++convertDescription (description@Part{}) = + traverseModuleItems traverseModuleItem description + where + traverseModuleItem = +--- a/src/Convert/Stream.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Stream.hs 2021-09-27 18:02:55.986987409 +0200 +@@ -27,7 +27,7 @@ + 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 @@ + 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 +--- a/src/Convert/Scoper.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Scoper.hs 2021-09-27 18:02:55.993654093 +0200 +@@ -276,7 +276,7 @@ + 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) +--- a/src/Convert/ParamType.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/ParamType.hs 2021-09-27 18:02:55.996987435 +0200 +@@ -39,7 +39,7 @@ + -- 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 @@ + 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 @@ + + -- 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 @@ + 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 @@ + 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 @@ + + -- 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 @@ + (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 @@ + + -- 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 +--- a/src/Convert/Struct.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Struct.hs 2021-09-27 18:02:56.000320778 +0200 +@@ -24,7 +24,7 @@ + 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 @@ + + -- 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 @@ + 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 ++ +@@ -301,7 +301,7 @@ + + -- 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 +@@ -316,7 +316,7 @@ + + -- 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'] +--- a/src/Convert/Simplify.hs 2021-07-31 03:09:37.000000000 +0200 ++++ b/src/Convert/Simplify.hs 2021-09-27 18:02:56.003654119 +0200 +@@ -155,6 +155,6 @@ + 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 +--- a/src/Convert/BlockDecl.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/BlockDecl.hs 2021-09-27 18:02:56.006987461 +0200 +@@ -42,7 +42,7 @@ + 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)) +--- a/src/Convert/Package.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/Package.hs 2021-09-27 18:02:56.010320804 +0200 +@@ -87,8 +87,8 @@ + 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 @@ + -- 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 @@ + ++ 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 @@ + 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 @@ + + -- 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' +--- a/src/Convert/UnbasedUnsized.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Convert/UnbasedUnsized.hs 2021-09-27 18:02:56.013654145 +0200 +@@ -207,7 +207,7 @@ + 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 @@ + 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) +--- a/src/Language/SystemVerilog/Parser/Parse.y 2021-07-31 20:11:02.000000000 +0200 ++++ b/src/Language/SystemVerilog/Parser/Parse.y 2021-09-27 18:02:56.020320830 +0200 +@@ -1576,7 +1576,7 @@ + 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 +@@ -1644,15 +1644,15 @@ + 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 +--- a/src/Language/SystemVerilog/Parser/ParseDecl.hs 2021-07-30 19:52:01.000000000 +0200 ++++ b/src/Language/SystemVerilog/Parser/ParseDecl.hs 2021-09-27 18:02:56.023654171 +0200 +@@ -82,7 +82,7 @@ + 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 @@ + 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 @@ + -- 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 @@ + "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 [] = [] diff --git a/sv2v-cabal.patch b/sv2v-cabal.patch new file mode 100644 index 000000000000..819d65a01501 --- /dev/null +++ b/sv2v-cabal.patch @@ -0,0 +1,11 @@ +--- a/sv2v.cabal 2021-07-31 20:27:48.000000000 +0200 ++++ b/sv2v.cabal 2021-09-27 17:41:09.145487921 +0200 +@@ -105,7 +105,7 @@ + + build-depends: + array >=0.5.4.0 && <0.6, +- base >=4.14.1.0 && <4.15, ++ base >=4.15.0.0 && <4.16, + cmdargs >=0.10.21 && <0.11, + containers >=0.6.2.1 && <0.7, + directory >=1.3.6.0 && <1.4, |