X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;ds=sidebyside;f=VHDL.hs;h=4d8b6669d69503a7f8977eaac1996488648a9ccd;hb=56b747a9e1101368dd8d497879d6dfd213555055;hp=c1b42b3bc89a9b2764ff60626957a036b9242649;hpb=38ac166769b7280fcb9e63f6fda3955d9b58ce11;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/VHDL.hs b/VHDL.hs index c1b42b3..4d8b666 100644 --- a/VHDL.hs +++ b/VHDL.hs @@ -36,18 +36,21 @@ createDesignFiles :: createDesignFiles flatfuncmap = -- TODO: Output types - (mkVHDLId "types", AST.DesignFile [] [type_package]) : - map (Arrow.second $ AST.DesignFile context) units + (mkVHDLId "types", AST.DesignFile ieee_context [type_package]) : + map (Arrow.second $ AST.DesignFile full_context) units where init_session = VHDLSession Map.empty builtin_funcs (units, final_session) = State.runState (createLibraryUnits flatfuncmap) init_session ty_decls = Map.elems (final_session ^. vsTypes) - context = [ - AST.Library $ mkVHDLId "IEEE", - AST.Use $ (AST.NSimple $ mkVHDLId "IEEE.std_logic_1164") AST.:.: AST.All, - AST.Use $ (AST.NSimple $ mkVHDLId "work.types") AST.:.: AST.All] + ieee_context = [ + AST.Library $ mkVHDLId "IEEE", + AST.Use $ (AST.NSimple $ mkVHDLId "IEEE.std_logic_1164") AST.:.: AST.All + ] + full_context = + (AST.Use $ (AST.NSimple $ mkVHDLId "work.types") AST.:.: AST.All) + : ieee_context type_package = AST.LUPackageDec $ AST.PackageDec (mkVHDLId "types") (map (AST.PDITD . snd) ty_decls) createLibraryUnits :: @@ -369,7 +372,8 @@ mk_fsvec_ty ty args = do -- Assume there are two type arguments let [len, el_ty] = args -- TODO: Find actual number - let ty_id = mkVHDLId ("vector_" ++ (show len)) + -- Construct the type id, but filter out dots (since these are not allowed). + let ty_id = mkVHDLId $ filter (/='.') ("vector_" ++ (show len)) -- TODO: Use el_ty let range = AST.IndexConstraint [AST.ToRange (AST.PrimLit "0") (AST.PrimLit "16")] let ty_def = AST.TDA $ AST.ConsArrayDef range std_logic_ty