X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=VHDL.hs;h=f9367ef66da93f5a7217a7701d8fe40d1b296dee;hb=4d96e10ba2805470597642cf4c2ba797eda1b1f9;hp=7073dbcd9b82d36115fc7dc11cf4b46438b0bfe5;hpb=6e874e80511177529f7d4506d78f69002ba69e68;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/VHDL.hs b/VHDL.hs index 7073dbc..f9367ef 100644 --- a/VHDL.hs +++ b/VHDL.hs @@ -47,7 +47,7 @@ createDesignFiles binds = map (Arrow.second $ AST.DesignFile full_context) units where - init_session = VHDLState Map.empty Map.empty Map.empty Map.empty globalNameTable + init_session = VHDLState Map.empty Map.empty Map.empty Map.empty (units, final_session) = State.runState (createLibraryUnits binds) init_session tyfun_decls = Map.elems (final_session ^.vsTypeFuns) @@ -294,30 +294,26 @@ mkConcSm (bndr, app@(CoreSyn.App _ _))= do IdInfo.VanillaGlobal -> do -- It's a global value imported from elsewhere. These can be builtin -- functions. - funSignatures <- getA vsNameTable signatures <- getA vsSignatures - case (Map.lookup (varToString f) funSignatures) of + case (Map.lookup (varToString f) globalNameTable) of Just (arg_count, builder) -> if length valargs == arg_count then case builder of - Left funBuilder -> - let - sigs = map (varToVHDLExpr.exprToVar) valargs - func = funBuilder sigs - src_wform = AST.Wform [AST.WformElem func Nothing] - dst_name = AST.NSimple (mkVHDLExtId (varToString bndr)) - assign = dst_name AST.:<==: (AST.ConWforms [] src_wform Nothing) - in - return [AST.CSSASm assign] - Right genBuilder -> - let - sigs = map exprToVar valargs - signature = Maybe.fromMaybe - (error $ "Using function '" ++ (varToString (head sigs)) ++ "' without signature? This should not happen!") - (Map.lookup (head sigs) signatures) - arg = tail sigs - genSm = genBuilder signature (arg ++ [bndr]) - in return [AST.CSGSm genSm] + Left funBuilder -> do + let sigs = map (varToVHDLExpr.exprToVar) valargs + func <- funBuilder sigs + let src_wform = AST.Wform [AST.WformElem func Nothing] + let dst_name = AST.NSimple (mkVHDLExtId (varToString bndr)) + let assign = dst_name AST.:<==: (AST.ConWforms [] src_wform Nothing) + return [AST.CSSASm assign] + Right genBuilder -> do + let sigs = map exprToVar valargs + let signature = Maybe.fromMaybe + (error $ "Using function '" ++ (varToString (head sigs)) ++ "' without signature? This should not happen!") + (Map.lookup (head sigs) signatures) + let arg = tail sigs + genSm <- genBuilder signature (arg ++ [bndr]) + return [AST.CSGSm genSm] else error $ "VHDL.mkConcSm Incorrect number of arguments to builtin function: " ++ pprString f ++ " Args: " ++ pprString valargs Nothing -> error $ "Using function from another module that is not a known builtin: " ++ pprString f