ddc-core-tetra-0.4.2.1: DDC/Core/Tetra/Convert/Exp/PrimError.hs
module DDC.Core.Tetra.Convert.Exp.PrimError
(convertPrimError)
where
import DDC.Core.Tetra.Convert.Exp.Base
import DDC.Core.Tetra.Convert.Error
import DDC.Core.Exp.Annot
import DDC.Core.Check (AnTEC(..))
import qualified DDC.Core.Tetra.Prim as E
import qualified DDC.Core.Salt.Name as A
import qualified DDC.Core.Salt.Runtime as A
-- | Covnert a Tetra error primop to Salt.
convertPrimError
:: Show a
=> ExpContext -- ^ The surrounding expression context.
-> Context a -- ^ Types and values in the environment.
-> Exp (AnTEC a E.Name) E.Name -- ^ Expression to convert.
-> Maybe (ConvertM a (Exp a A.Name))
convertPrimError _ectx ctx xx
= let convertX = contextConvertExp ctx
downArgX = convertX ExpArg ctx
in
case xx of
XApp a _ _
| Just ( E.NameOpError E.OpErrorDefault True
, [_, xStr, xLine]) <- takeXPrimApps xx
-> Just $ do
xStr' <- downArgX xStr
xLine' <- downArgX xLine
return $ A.xErrorDefault (annotTail a) xStr' xLine'
_ -> Nothing