49b717cfb37994133d0e9470cf25640b46e2890e
[matthijs/master-project/cλash.git] / GlobalNameTable.hs
1 {-# LANGUAGE TemplateHaskell #-}
2
3 module GlobalNameTable (globalNameTable) where
4
5 import Language.Haskell.TH
6 import qualified Data.Map as Map
7
8 import qualified ForSyDe.Backend.VHDL.AST as AST
9 import qualified Data.Param.TFVec as V
10
11 import VHDLTypes
12 import Constants
13 import Generate
14
15 mkGlobalNameTable :: [(String, (Int, [AST.Expr] -> AST.Expr ) )] -> NameTable
16 mkGlobalNameTable = Map.fromList
17
18 globalNameTable :: NameTable
19 globalNameTable = mkGlobalNameTable
20   [ ("!"              , (2, genExprFCall exId                             ) )
21   , ("replace"        , (3, genExprFCall replaceId                        ) )
22   , ("head"           , (1, genExprFCall headId                           ) )
23   , ("last"           , (1, genExprFCall lastId                           ) )
24   , ("tail"           , (1, genExprFCall tailId                           ) )
25   , ("init"           , (1, genExprFCall initId                           ) )
26   , ("take"           , (2, genExprFCall takeId                           ) )
27   , ("drop"           , (2, genExprFCall dropId                           ) )
28   , ("+>"             , (2, genExprFCall plusgtId                         ) )
29   , ("empty"          , (0, genExprFCall emptyId                          ) )
30   , ("hwxor"          , (2, genExprOp2 AST.Xor                            ) )
31   , ("hwand"          , (2, genExprOp2 AST.And                            ) )
32   , ("hwor"           , (2, genExprOp2 AST.Or                             ) )
33   , ("hwnot"          , (1, genExprOp1 AST.Not                            ) )
34   ]