Let genApplication handle (built-in) enumeration types.
authorMatthijs Kooijman <matthijs@stdin.nl>
Wed, 16 Jun 2010 11:28:47 +0000 (13:28 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Wed, 16 Jun 2010 11:32:13 +0000 (13:32 +0200)
Since datacons are no longer seen as local variables, genApplication
sees simple datacons without arguments (e.g., x = True). Now it knows
how to handle these.

clash/CLasH/VHDL/Generate.hs

index 022adeaa90dc5600f2b88014b6619e8cf65296a1..80b2d438562dd089989fcf6ce3c020186bd3eddc 100644 (file)
@@ -1102,8 +1102,21 @@ genApplication dst f args = do
                       mkassign label arg =
                         let sel_name = mkSelectedName ((either varToVHDLName id) dst) label in
                         mkUncondAssign (Right sel_name) arg
+                  -- Enumeration types have no arguments and are just
+                  -- simple assignments
+                  Right (EnumType _ _) ->
+                    simple_assign
+                  -- These builtin types are also enumeration types
+                  Right (BuiltinType tyname) | tyname `elem` ["Bit", "Bool"] ->
+                    simple_assign
                   Right _ -> error $ "Datacon application does not result in a aggregate type? datacon: " ++ pprString f ++ " Args: " ++ show args
                   Left _ -> error $ "Unrepresentable result type in datacon application?  datacon: " ++ pprString f ++ " Args: " ++ show args
+                  where
+                    -- Simple uncoditional assignment, for (built-in)
+                    -- enumeration types
+                    simple_assign = do
+                      expr <- MonadState.lift tsType $ dataconToVHDLExpr dc
+                      return ([mkUncondAssign dst expr], [])
 
             Right _ -> error "\nGenerate.genApplication(DataConWorkId): Can't generate dataconstructor application without an original binder"
           IdInfo.DataConWrapId dc -> case dst of