{-# LANGUAGE RecordWildCards #-}
module FFICXX.Generate.Name where
import Data.Char (toLower)
import Data.Maybe (fromMaybe,maybe)
import Data.Monoid ((<>))
import FFICXX.Generate.Type.Class
import FFICXX.Generate.Util
hsFrontNameForTopLevelFunction :: TopLevelFunction -> String
hsFrontNameForTopLevelFunction tfn =
let (x:xs) = case tfn of
TopLevelFunction {..} -> fromMaybe toplevelfunc_name toplevelfunc_alias
TopLevelVariable {..} -> fromMaybe toplevelvar_name toplevelvar_alias
in toLower x : xs
typeclassName :: Class -> String
typeclassName c = 'I' : fst (hsClassName c)
typeclassNameT :: TemplateClass -> String
typeclassNameT c = 'I' : fst (hsTemplateClassName c)
typeclassNameFromStr :: String -> String
typeclassNameFromStr = ('I':)
hsClassName :: Class -> (String, String)
hsClassName c =
let cname = maybe (class_name c) caHaskellName (class_alias c)
in (cname, "Raw" <> cname)
hsClassNameForTArg :: TemplateArgType -> String
hsClassNameForTArg (TArg_Class c) = fst (hsClassName c)
hsClassNameForTArg (TArg_TypeParam p) = p
hsClassNameForTArg (TArg_Other s) = s
hsTemplateClassName :: TemplateClass -> (String, String)
hsTemplateClassName t =
let tname = tclass_name t
in (tname, "Raw" <> tname)
existConstructorName :: Class -> String
existConstructorName c = 'E' : (fst.hsClassName) c
ffiClassName :: Class -> String
ffiClassName c = maybe (class_name c) caFFIName (class_alias c)
hscFuncName :: Class -> Function -> String
hscFuncName c f = "c_"
<> toLowers (ffiClassName c)
<> "_"
<> toLowers (aliasedFuncName c f)
hsFuncName :: Class -> Function -> String
hsFuncName c f = let (x:xs) = aliasedFuncName c f
in (toLower x) : xs
aliasedFuncName :: Class -> Function -> String
aliasedFuncName c f =
case f of
Constructor _ a -> fromMaybe (constructorName c) a
Virtual _ str _ a -> fromMaybe str a
NonVirtual _ str _ a -> fromMaybe (nonvirtualName c str) a
Static _ str _ a -> fromMaybe (nonvirtualName c str) a
Destructor a -> fromMaybe destructorName a
hsTmplFuncName :: TemplateClass -> TemplateFunction -> String
hsTmplFuncName t f =
case f of
TFun {..} -> tfun_name
TFunNew {..} -> fromMaybe ("new"<> tclass_name t) tfun_new_alias
TFunDelete -> "delete" <> tclass_name t
hsTmplFuncNameTH :: TemplateClass -> TemplateFunction -> String
hsTmplFuncNameTH t f = "t_" <> hsTmplFuncName t f
hsTemplateMemberFunctionName :: Class -> TemplateMemberFunction -> String
hsTemplateMemberFunctionName c f = fromMaybe (nonvirtualName c (tmf_name f)) (tmf_alias f)
hsTemplateMemberFunctionNameTH :: Class -> TemplateMemberFunction -> String
hsTemplateMemberFunctionNameTH c f = "t_" <> hsTemplateMemberFunctionName c f
ffiTmplFuncName :: TemplateFunction -> String
ffiTmplFuncName f =
case f of
TFun {..} -> fromMaybe tfun_name tfun_alias
TFunNew {..} -> fromMaybe "new" tfun_new_alias
TFunDelete -> "delete"
cppTmplFuncName :: TemplateFunction -> String
cppTmplFuncName f =
case f of
TFun {..} -> tfun_name
TFunNew {..} -> "new"
TFunDelete -> "delete"
accessorName :: Class -> Variable -> Accessor -> String
accessorName c v a = nonvirtualName c (var_name v)
<> "_"
<> case a of
Getter -> "get"
Setter -> "set"
hscAccessorName :: Class -> Variable -> Accessor -> String
hscAccessorName c v a = "c_" <> toLowers (accessorName c v a)
cppStaticName :: Class -> Function -> String
cppStaticName c f = class_name c <> "::" <> func_name f
cppFuncName :: Class -> Function -> String
cppFuncName c f = case f of
Constructor _ _ -> "new"
Virtual _ _ _ _ -> func_name f
NonVirtual _ _ _ _-> func_name f
Static _ _ _ _-> cppStaticName c f
Destructor _ -> destructorName
constructorName :: Class -> String
constructorName c = "new" <> (fst.hsClassName) c
nonvirtualName :: Class -> String -> String
nonvirtualName c str = (firstLower.fst.hsClassName) c <> "_" <> str
destructorName :: String
destructorName = "delete"