{-# LANGUAGE RecordWildCards #-}
module GHC.Rename.Lit where
import GHC.Prelude
import GHC.Builtin.Names
import GHC.Hs
import GHC.Rename.Env (lookupNameWithQualifier)
import GHC.Rename.Utils (genHsApps, genLHsLit)
import GHC.Tc.Utils.Monad (RnM)
import GHC.Types.Name.Set (FreeVars)
import GHC.Types.SrcLoc (GenLocated(..))
rnQualLit :: HsQualLit GhcPs -> RnM ((HsQualLit GhcRn, HsExpr GhcRn), FreeVars)
rnQualLit :: HsQualLit GhcPs -> RnM ((HsQualLit GhcRn, HsExpr GhcRn), FreeVars)
rnQualLit QualLit{XQualLit GhcPs
ModuleName
QualLitVal
ql_ext :: XQualLit GhcPs
ql_mod :: ModuleName
ql_val :: QualLitVal
ql_val :: forall p. HsQualLit p -> QualLitVal
ql_mod :: forall p. HsQualLit p -> ModuleName
ql_ext :: forall p. HsQualLit p -> XQualLit p
..} = do
let (Name
funNameBase, HsLit GhcRn
hsLit) =
case QualLitVal
ql_val of
HsQualString SourceText
st FastString
s -> (Name
fromStringName, XHsString GhcRn -> FastString -> HsLit GhcRn
forall x. XHsString x -> FastString -> HsLit x
HsString XHsString GhcRn
SourceText
st FastString
s)
(funName, fvs) <- Name -> ModuleName -> RnM (Name, FreeVars)
lookupNameWithQualifier Name
funNameBase ModuleName
ql_mod
let lit = QualLit{ql_ext :: XQualLit GhcRn
ql_ext = SrcSpanAnnN -> Name -> GenLocated SrcSpanAnnN Name
forall l e. l -> e -> GenLocated l e
L SrcSpanAnnN
forall a. NoAnn a => a
noAnn Name
funName, ModuleName
QualLitVal
ql_mod :: ModuleName
ql_val :: QualLitVal
ql_val :: QualLitVal
ql_mod :: ModuleName
..}
let expr = Name -> [LHsExpr GhcRn] -> HsExpr GhcRn
genHsApps Name
funName [HsLit GhcRn -> LocatedAn AnnListItem (HsExpr GhcRn)
forall an. NoAnn an => HsLit GhcRn -> LocatedAn an (HsExpr GhcRn)
genLHsLit HsLit GhcRn
hsLit]
pure ((lit, expr), fvs)