Use numbers in case-selectors to reflect changes to encoding of enum types
authorchristiaanb <christiaan.baaij@gmail.com>
Mon, 21 Jun 2010 12:53:59 +0000 (14:53 +0200)
committerchristiaanb <christiaan.baaij@gmail.com>
Mon, 21 Jun 2010 12:53:59 +0000 (14:53 +0200)
clash/CLasH/VHDL/Generate.hs
clash/CLasH/VHDL/VHDLTools.hs

index e546821ceb8b9d0b36589a0a1072774d5f46c129..eea0adb9ce451d1d7519e6857a181e9df8f65fbc 100644 (file)
@@ -291,12 +291,12 @@ mkConcSm (bndr, expr@(CoreSyn.Case (CoreSyn.Var scrut) _ _ alts)) = do
   (enums, cmp) <- case htype of
     EnumType _ enums -> do
       -- Enumeration type, compare with the scrutinee directly
-      return (map stringToVHDLExpr enums, scrut_expr)
+      return (map (AST.PrimLit . show) [0..(length enums)-1], scrut_expr)
     AggrType _ (Just (name, EnumType _ enums)) _ -> do
       -- Extract the enumeration field from the aggregation
       let sel_name = mkSelectedName (varToVHDLName scrut) (mkVHDLBasicId name)
       let sel_expr = AST.PrimName sel_name
-      return (map stringToVHDLExpr enums, sel_expr)
+      return (map (AST.PrimLit . show) [0..(length enums)-1], sel_expr)
     (BuiltinType "Bit") -> do
       let enums = [AST.PrimLit "'1'", AST.PrimLit "'0'"]
       return (enums, scrut_expr)
index 6ba4d765179bf118b729744a2e29e07a09500d15..edaa5d2128ae271c782869ac5c8835aa70067f34 100644 (file)
@@ -495,7 +495,7 @@ mkTyconTy htype =
           return $ Just (ty_id, Just $ Left ty_def)
     (EnumType tycon dcs) -> do
       let ty_id = mkVHDLExtId tycon
-      let range = AST.SubTypeRange (AST.PrimLit "0") (AST.PrimLit $ show (length dcs))
+      let range = AST.SubTypeRange (AST.PrimLit "0") (AST.PrimLit $ show ((length dcs) - 1))
       let ty_def = AST.TDI $ AST.IntegerTypeDef range
       let enumShow = mkEnumShow dcs ty_id
       MonadState.modify tsTypeFuns $ Map.insert (htype, showIdString) (showId, enumShow)