-- Translation of Yhc Core functions to Core Erlang functions. module Yhc.Core.BackEnd.Erlang.TransFunc ( func2Fname, func2EFdef) where import Yhc.Core.Extra import Yhc.Core.BackEnd.Erlang.EGMonad import Yhc.Core.BackEnd.Erlang.TransExpr import Yhc.Core.BackEnd.Erlang.TransPrim import Yhc.Core.BackEnd.Erlang.CorePrep import Yhc.Core.BackEnd.Erlang.TT.Ecore import Data.Char import Data.Maybe import qualified Data.Map as M -- Convert function name to Erlang name/arity pair. Primitives and non-exported -- functions (non-roots) will be skipped. func2Fname :: CoreFunc -> EGM Fname func2Fname cf@(CoreFunc {}) = do fn <- transFname (coreFuncName cf) return (fn, coreFuncArity cf) func2Fname _ = return ("", 0) -- Convert Yhc Core function definition to Erlang Core function definition. func2EFdef :: CoreFunc -> EGM EFdef func2EFdef cf@(CoreFunc {}) = do fn <- transFname (coreFuncName cf) st <- get put st {currFun = cf} fb <- expr2EX (coreFuncBody cf) let eargs = map (('_' :) . map sq2d) (coreFuncArgs cf) efn = (fn, coreFuncArity cf) return $ EFdef (EFname efn) (EFun eargs fb) func2EFdef _ = return $ EFdef (EFname ("", 0)) (EFun [] EXnil)