packages feed

clash-lib 0.6.3 → 0.6.4

raw patch · 6 files changed

+26/−13 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ CLaSH.Netlist.Types: instance GHC.Classes.Eq CLaSH.Netlist.Types.Bit
+ CLaSH.Netlist.Types: instance GHC.Classes.Eq CLaSH.Netlist.Types.Literal
- CLaSH.Rewrite.Types: bindings :: Lens' (RewriteState extra_aWNM) (HashMap TmName (Type, Term))
+ CLaSH.Rewrite.Types: bindings :: Lens' (RewriteState extra_aWYS) (HashMap TmName (Type, Term))
- CLaSH.Rewrite.Types: curFun :: Lens' (RewriteState extra_aWNM) TmName
+ CLaSH.Rewrite.Types: curFun :: Lens' (RewriteState extra_aWYS) TmName
- CLaSH.Rewrite.Types: extra :: Lens (RewriteState extra_aWNM) (RewriteState extra_aWQY) extra_aWNM extra_aWQY
+ CLaSH.Rewrite.Types: extra :: Lens (RewriteState extra_aWYS) (RewriteState extra_aX24) extra_aWYS extra_aX24
- CLaSH.Rewrite.Types: nameCounter :: Lens' (RewriteState extra_aWNM) Int
+ CLaSH.Rewrite.Types: nameCounter :: Lens' (RewriteState extra_aWYS) Int
- CLaSH.Rewrite.Types: transformCounter :: Lens' (RewriteState extra_aWNM) Int
+ CLaSH.Rewrite.Types: transformCounter :: Lens' (RewriteState extra_aWYS) Int
- CLaSH.Rewrite.Types: uniqSupply :: Lens' (RewriteState extra_aWNM) Supply
+ CLaSH.Rewrite.Types: uniqSupply :: Lens' (RewriteState extra_aWYS) Supply

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # Changelog for the [`clash-lib`](http://hackage.haskell.org/package/clash-lib) package +## 0.6.4 *November 12th 2015*+* Fixes bugs:+  * Reversing alternatives is not meaning preserving for literal patterns [#91](https://github.com/clash-lang/clash-compiler/issues/91)+  * DEC: root of the case-tree must contain at least 2 alternatives [#92](https://github.com/clash-lang/clash-compiler/issues/92)+ ## 0.6.3 *October 24th 2015* * New features:   * Improve DEC transformation: consider alternatives before the subject when checking for disjoint expressions.
clash-lib.cabal view
@@ -1,5 +1,5 @@ Name:                 clash-lib-Version:              0.6.3+Version:              0.6.4 Synopsis:             CAES Language for Synchronous Hardware - As a Library Description:   CλaSH (pronounced ‘clash’) is a functional hardware description language that
src/CLaSH/Netlist.hs view
@@ -204,16 +204,16 @@   return (decls ++ [Assignment dstId extractExpr])  mkDeclarations bndr (Case scrut altTy alts) = do-  alts'                  <- mapM unbind alts+  alts'                  <- reorderPats <$> mapM unbind alts   tcm                    <- Lens.use tcCache   scrutTy                <- termType tcm scrut   scrutHTy               <- unsafeCoreTypeToHWTypeM $(curLoc) scrutTy   altHTy                 <- unsafeCoreTypeToHWTypeM $(curLoc) altTy-  (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (last alts'))) <$> mkExpr True scrutTy scrut+  (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (head alts'))) <$> mkExpr True scrutTy scrut   (exprs,altsDecls)      <- (second concat . unzip) <$> mapM (mkCondExpr scrutHTy) alts'    let dstId = mkBasicId . Text.pack . name2String $ varName bndr-  return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy (reverse exprs)]+  return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy exprs]   where     mkCondExpr :: HWType -> (Pat,Term) -> NetlistMonad ((Maybe HW.Literal,Expr),[Declaration])     mkCondExpr scrutHTy (pat,alt) = do@@ -231,6 +231,12 @@                                   Identifier scrutId _ -> Identifier scrutId modifier                                   _ -> error $ $(curLoc) ++ "Not in normal form: Not a variable reference or primitive as subject of a case-statement"       _ -> scrutE++    -- GHC puts default patterns in the first position, we want them in the+    -- last position.+    reorderPats :: [(Pat,Term)] -> [(Pat,Term)]+    reorderPats ((DefaultPat,e):alts') = alts' ++ [(DefaultPat,e)]+    reorderPats alts'                  = alts'  mkDeclarations bndr app =   let (appF,(args,tyArgs)) = second partitionEithers $ collectArgs app
src/CLaSH/Netlist/Types.hs view
@@ -146,7 +146,7 @@   | BoolLit   !Bool      -- ^ Boolean literal   | VecLit    [Literal] -- ^ Vector literal   | StringLit !String    -- ^ String literal-  deriving Show+  deriving (Eq,Show)  -- | Bit literal data Bit@@ -154,7 +154,7 @@   | L -- ^ Low   | U -- ^ Undefined   | Z -- ^ High-impedance-  deriving Show+  deriving (Eq,Show)  -- | Context used to fill in the holes of a BlackBox template data BlackBoxContext
src/CLaSH/Normalize/DEC.hs view
@@ -82,12 +82,14 @@ -- case-expression. isDisjoint :: CaseTree ([Either Term Type])            -> Bool-isDisjoint (Leaf _)             = False-isDisjoint (LB _ ct)            = isDisjoint ct-isDisjoint (Branch _ [])        = False-isDisjoint (Branch _ [(_,x)])   = isDisjoint x-isDisjoint b@(Branch _ (_:_:_)) = allEqual (map Either.rights-                                                (Foldable.toList b))+isDisjoint (Branch _ [_]) = False+isDisjoint ct = go ct+  where+    go (Leaf _)             = False+    go (LB _ ct')           = go ct'+    go (Branch _ [])        = False+    go (Branch _ [(_,x)])   = go x+    go b@(Branch _ (_:_:_)) = allEqual (map Either.rights (Foldable.toList b))  -- Remove empty branches from a 'CaseTree' removeEmpty :: Eq a => CaseTree [a] -> CaseTree [a]
src/CLaSH/Normalize/Transformations.hs view
@@ -982,7 +982,7 @@ --       C -> h x -- @ disjointExpressionConsolidation :: NormRewrite-disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts) = do+disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts@(_:_:_)) = do     let eFreeIds = Lens.setOf termFreeIds e     (_,collected) <- collectGlobals eFreeIds [] [] e     let disJoint = filter (isDisjoint . snd) collected