module Copilot.Compile.Bluespec.Name
( argNames
, generatorName
, guardName
, ifcArgName
, indexName
, lowercaseName
, specIfcName
, specIfcPkgName
, specTypesPkgName
, streamAccessorName
, streamElemName
, streamName
, uppercaseName
) where
import Data.Char (isLower, isUpper)
import Copilot.Core (Id)
specIfcName :: String -> String
specIfcName :: String -> String
specIfcName String
prefix = String -> String
uppercaseName (String -> String
specIfcPkgName String
prefix)
specIfcPkgName :: String -> String
specIfcPkgName :: String -> String
specIfcPkgName String
prefix = String
prefix String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"Ifc"
specTypesPkgName :: String -> String
specTypesPkgName :: String -> String
specTypesPkgName String
prefix = String
prefix String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"Types"
streamElemName :: Id -> Int -> String
streamElemName :: Id -> Id -> String
streamElemName Id
sId Id
n = Id -> String
streamName Id
sId String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Id -> String
forall a. Show a => a -> String
show Id
n
ifcArgName :: String
ifcArgName :: String
ifcArgName = String
"ifc"
uppercaseName :: String -> String
uppercaseName :: String -> String
uppercaseName [] = []
uppercaseName n :: String
n@(Char
c:String
_)
| Char -> Bool
isUpper Char
c = String
n
| Bool
otherwise = String
"BS_" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
n
lowercaseName :: String -> String
lowercaseName :: String -> String
lowercaseName [] = []
lowercaseName n :: String
n@(Char
c:String
_)
| Char -> Bool
isLower Char
c = String
n
| Bool
otherwise = String
"bs_" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
n
streamName :: Id -> String
streamName :: Id -> String
streamName Id
sId = String
"s" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Id -> String
forall a. Show a => a -> String
show Id
sId
indexName :: Id -> String
indexName :: Id -> String
indexName Id
sId = Id -> String
streamName Id
sId String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_idx"
streamAccessorName :: Id -> String
streamAccessorName :: Id -> String
streamAccessorName Id
sId = Id -> String
streamName Id
sId String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_get"
generatorName :: Id -> String
generatorName :: Id -> String
generatorName Id
sId = Id -> String
streamName Id
sId String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_gen"
guardName :: String -> String
guardName :: String -> String
guardName String
name = String -> String
lowercaseName String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_guard"
argName :: String -> Int -> String
argName :: String -> Id -> String
argName String
name Id
n = String -> String
lowercaseName String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"_arg" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Id -> String
forall a. Show a => a -> String
show Id
n
argNames :: String -> [String]
argNames :: String -> [String]
argNames String
base = (Id -> String) -> [Id] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String -> Id -> String
argName String
base) [Id
0..]