diff options
Diffstat (limited to 'src/HaskellCodeExplorer')
| -rw-r--r-- | src/HaskellCodeExplorer/AST/TypecheckedSource.hs | 197 | 
1 files changed, 104 insertions, 93 deletions
| diff --git a/src/HaskellCodeExplorer/AST/TypecheckedSource.hs b/src/HaskellCodeExplorer/AST/TypecheckedSource.hs index 41a202e..7cf5157 100644 --- a/src/HaskellCodeExplorer/AST/TypecheckedSource.hs +++ b/src/HaskellCodeExplorer/AST/TypecheckedSource.hs @@ -18,13 +18,11 @@ module HaskellCodeExplorer.AST.TypecheckedSource    , removeOverlappingInterval    ) where -import Bag (bagToList) -import BasicTypes (Origin(..)) -import Class (Class, classTyVars) -import ConLike (ConLike(..) -#if MIN_VERSION_GLASGOW_HASKELL(8,2,2,0) -  , conLikeWrapId_maybe -#endif +import GHC.Data.Bag (bagToList) +import GHC.Types.Basic (Origin(..)) +import GHC.Core.Class (Class, classTyVars) +import GHC.Core.ConLike (ConLike(..) +--  , conLikeWrapId_maybe    )  import Control.Monad (return, unless, void)  import Control.Monad.State.Strict (State, get, modify') @@ -35,18 +33,23 @@ import qualified Data.Map.Strict as M  import Data.Maybe (Maybe, fromMaybe, mapMaybe)  import qualified Data.Set as S  import qualified Data.Text as T -import DataCon (dataConWorkId) -import DynFlags (DynFlags) -import FastString (mkFastString) +import GHC.Core.DataCon (dataConWorkId) +import GHC +  ( DynFlags +  , TyThing(..) +  , CoPat(..) +  ) +import GHC.Data.FastString (mkFastString) +import GHC.Unit.State (UnitState)  import HaskellCodeExplorer.GhcUtils  import qualified HaskellCodeExplorer.Types as HCE -import HsBinds (RecordPatSynField(..) +import GHC.Hs.Binds (RecordPatSynField(..)  #if MIN_VERSION_GLASGOW_HASKELL(8,4,3,0)  #else    , HsPatSynDetails (..)  #endif    ) -import HsSyn +import GHC.Hs    ( ABExport(..)    , ApplicativeArg(..)    , ArithSeqInfo(..) @@ -88,7 +91,7 @@ import HsSyn    , StmtLR(..)    , selectorAmbiguousFieldOcc  #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -  , RecordConTc (..) +--  , RecordConTc (..)    , RecordUpdTc (..)    , ListPatTc (..)    , OverLitTc (..) @@ -96,36 +99,36 @@ import HsSyn    , NHsValBindsLR (..)  #endif    ) -import HscTypes (TypeEnv, lookupTypeEnv) +import GHC.Types.TypeEnv (TypeEnv, lookupTypeEnv)  #if MIN_VERSION_GLASGOW_HASKELL(8,4,3,0) -import HsExtension (GhcTc) +import GHC.Hs.Extension (GhcTc)  #endif -import Id (idType) -import IdInfo (IdDetails(..)) -import InstEnv +import GHC.Types.Id (idType) +import GHC.Types.Id.Info (IdDetails(..)) +import GHC.Core.InstEnv    ( ClsInst(..)    , InstEnvs    , instanceSig    , is_dfun    , lookupUniqueInstEnv    ) -import Name (Name, nameOccName, nameUnique) +import GHC.Types.Name (Name, nameOccName, nameUnique)  import Prelude hiding (span) -import SrcLoc +import GHC.Types.SrcLoc     ( GenLocated(..)     , SrcSpan(..)     , isGoodSrcSpan     , isOneLineSpan     , unLoc -#if MIN_VERSION_GLASGOW_HASKELL(8,8,1,0) -   , cL  -#endif     +-- #if MIN_VERSION_GLASGOW_HASKELL(8,8,1,0) +--    , cL  +-- #endif         ) -import TcEvidence (HsWrapper(..)) -import TcHsSyn (conLikeResTy, hsLitType) -import Type -  ( TyThing(..) -  , Type +import GHC.Tc.Types.Evidence (HsWrapper(..)) +import GHC.Tc.Utils.Zonk (conLikeResTy, hsLitType) +import GHC.Core.Predicate (getClassPredTys_maybe) +import GHC.Core.Type +  ( Type  #if MIN_VERSION_GLASGOW_HASKELL(8,2,2,0)    , nonDetCmpTypes  #else @@ -133,20 +136,19 @@ import Type  #endif    , eqTypes    , eqType -  , getClassPredTys_maybe    , mkFunTy -  , mkFunTys -  , splitForAllTys +--  , mkFunTys +--  , splitForAllTys    , splitFunTy_maybe    , splitFunTys    , substTys    , tidyOpenType    , zipTvSubst    ) -import TysWiredIn (mkListTy, mkTupleTy) -import Unique (getKey) -import Var (Id, Var, idDetails, isId, setVarName, setVarType, varName, varType) -import VarEnv (TidyEnv) +import GHC.Builtin.Types (mkListTy, mkTupleTy) +import GHC.Types.Unique (getKey) +import GHC.Types.Var (Id, Var, idDetails, isId, setVarName, setVarType, varName, varType) +import GHC.Types.Var.Env (TidyEnv)  data ASTState = ASTState    { astStateExprInfoMap :: !HCE.ExpressionInfoMap @@ -180,6 +182,7 @@ data TypeError = TypeError  data Environment = Environment    { envDynFlags :: DynFlags +  , envUnitState :: UnitState    , envTypeEnv :: TypeEnv    , envInstEnv :: InstEnvs    , envTransformation :: HCE.SourceCodeTransformation @@ -213,7 +216,7 @@ exprSort (ExplicitTuple args _)  #endif    | null args = Simple    | otherwise = Composite -exprSort (ExplicitList _ _ args) +exprSort (ExplicitList _ args)    | null args = Simple    | otherwise = Composite  exprSort _ = Composite @@ -447,6 +450,7 @@ mkIdentifierInfo environment identifier mbNameFromRenamedSource =        sort = nameSort name        nameSpace = occNameNameSpace . nameOccName $ name        flags = envDynFlags environment +      unitState = envUnitState environment        currentPackageId = envPackageId environment        compId = envComponentId environment        transformation = envTransformation environment @@ -454,7 +458,7 @@ mkIdentifierInfo environment identifier mbNameFromRenamedSource =        defSiteMap = envDefSiteMap environment        locationInfo =          nameLocationInfo -          flags +          unitState            currentPackageId            compId            transformation @@ -618,10 +622,11 @@ foldLHsExpr (L _ (HsConLikeOut _ conLike)) =  #else  foldLHsExpr (L _ (HsConLikeOut conLike)) =  #endif -  restoreTidyEnv $ do -    let mbType = varType <$> conLikeWrapId_maybe conLike -    mbType' <- maybe (return Nothing) (fmap Just . tidyType) mbType -    return mbType' +  -- restoreTidyEnv $ do +  --   let mbType = varType <$> conLikeWrapId_maybe conLike +  --   mbType' <- maybe (return Nothing) (fmap Just . tidyType) mbType +  --   return mbType' +  restoreTidyEnv $ return Nothing  #endif  foldLHsExpr (L _ HsRecFld {}) = return Nothing  foldLHsExpr (L _ HsOverLabel {}) = return Nothing @@ -846,7 +851,7 @@ foldLHsExpr (L span e@(ExplicitPArr typ exprs)) =      return $ Just typ'  #endif  #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsExpr (L span e@(RecordCon (RecordConTc _ conExpr) _ binds)) = do +foldLHsExpr (L span e@(RecordCon conExpr _ binds)) = do  #else  foldLHsExpr (L span e@(RecordCon (L _ _) _conLike conExpr binds)) = do  #endif @@ -900,22 +905,22 @@ foldLHsExpr (L span e@(PArrSeq postTcExpr _seqInfo)) = do    addExprInfo span typ "ArithSeq" (exprSort e)    return typ  #endif -#if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsExpr (L span e@(HsSCC _ _sourceText _fastString expr)) = do -#else -foldLHsExpr (L span e@(HsSCC _sourceText _fastString expr)) = do -#endif -  typ <- foldLHsExpr expr -  addExprInfo span typ "HsSCC" (exprSort e) -  return typ -#if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsExpr (L span e@(HsCoreAnn _ _sourceText _fastString expr)) = do -#else -foldLHsExpr (L span e@(HsCoreAnn _sourceText _fastString expr)) = do -#endif -  typ <- foldLHsExpr expr -  addExprInfo span typ "HsCoreAnn" (exprSort e) -  return typ +-- #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) +-- foldLHsExpr (L span e@(HsSCC _ _sourceText _fastString expr)) = do +-- #else +-- foldLHsExpr (L span e@(HsSCC _sourceText _fastString expr)) = do +-- #endif +--   typ <- foldLHsExpr expr +--   addExprInfo span typ "HsSCC" (exprSort e) +--   return typ +-- #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) +-- foldLHsExpr (L span e@(HsCoreAnn _ _sourceText _fastString expr)) = do +-- #else +-- foldLHsExpr (L span e@(HsCoreAnn _sourceText _fastString expr)) = do +-- #endif +--   typ <- foldLHsExpr expr +--   addExprInfo span typ "HsCoreAnn" (exprSort e) +--   return typ  foldLHsExpr (L _span HsBracket {}) = return Nothing  foldLHsExpr (L _span HsRnBracketOut {}) = return Nothing  foldLHsExpr (L _span HsTcBracketOut {}) = return Nothing @@ -937,8 +942,8 @@ foldLHsExpr (L span e@(HsStatic expr)) = do    typ <- foldLHsExpr expr    addExprInfo span typ "HsStatic" (exprSort e)    return typ -foldLHsExpr (L _ HsArrForm {}) = return Nothing -foldLHsExpr (L _ HsArrApp {}) = return Nothing +-- foldLHsExpr (L _ HsArrForm {}) = return Nothing +-- foldLHsExpr (L _ HsArrApp {}) = return Nothing  #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0)  foldLHsExpr (L span e@(HsTick _ _ expr)) = do  #else @@ -955,29 +960,33 @@ foldLHsExpr (L span e@(HsBinTick _ _ expr)) = do    typ <- foldLHsExpr expr    addExprInfo span typ "HsBinTick" (exprSort e)    return typ -#if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsExpr (L span e@(HsTickPragma _ _ _ _ expr)) = do -#else -foldLHsExpr (L span e@(HsTickPragma _ _ _ expr)) = do -#endif -  typ <- foldLHsExpr expr -  addExprInfo span typ "HsTickPragma" (exprSort e) -  return typ -foldLHsExpr (L _span EWildPat {}) = return Nothing -foldLHsExpr (L _span EAsPat {}) = return Nothing -foldLHsExpr (L _span EViewPat {}) = return Nothing -foldLHsExpr (L _span ELazyPat {}) = return Nothing -#if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsExpr (L span (HsWrap _ wrapper expr)) = -#else -foldLHsExpr (L span (HsWrap wrapper expr)) = -#endif -  restoreHsWrapper $ do -    case exprSort expr of -      Simple -> modify' (\s -> s {astStateHsWrapper = Just wrapper}) -      Composite -> return () -- Not sure if it is possible -    typ <- foldLHsExpr (L span expr) -    return $ applyWrapper wrapper <$> typ +-- #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) +-- foldLHsExpr (L span e@(HsTickPragma _ _ _ _ expr)) = do +-- #else +-- foldLHsExpr (L span e@(HsTickPragma _ _ _ expr)) = do +-- #endif +--   typ <- foldLHsExpr expr +--   addExprInfo span typ "HsTickPragma" (exprSort e) +--   return typ + +-- A few similarly named symbols are in GHC.Hs.Pat +-- foldLHsExpr (L _span EWildPat {}) = return Nothing +-- foldLHsExpr (L _span EAsPat {}) = return Nothing +-- foldLHsExpr (L _span EViewPat {}) = return Nothing +-- foldLHsExpr (L _span ELazyPat {}) = return Nothing + +-- there's an hswrap but it is not in hsexpr +-- #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) +-- foldLHsExpr (L span (HsWrap _ wrapper expr)) = +-- #else +-- foldLHsExpr (L span (HsWrap wrapper expr)) = +-- #endif +--   restoreHsWrapper $ do +--     case exprSort expr of +--       Simple -> modify' (\s -> s {astStateHsWrapper = Just wrapper}) +--       Composite -> return () -- Not sure if it is possible +--     typ <- foldLHsExpr (L span expr) +--     return $ applyWrapper wrapper <$> typ  #if MIN_VERSION_GLASGOW_HASKELL(8,4,3,0)  foldHsRecFields :: HsRecFields GhcTc (LHsExpr GhcTc) -> State ASTState (Maybe Type) @@ -1519,8 +1528,9 @@ foldLPat (L span pat@(PArrPat pats typ)) = do    mapM_ foldLPat pats    return $ Just typ'  #endif -foldLPat (ghcDL -> L _span (ConPatIn _ _)) = return Nothing -foldLPat (ghcDL -> L span pat@ConPatOut {..}) = do +-- no more conpatin / conpatout, just conpat +-- foldLPat (ghcDL -> L _span (ConPatIn _ _)) = return Nothing +foldLPat (ghcDL -> L span pat@ConPat {..}) = do    let (L idSpan conLike) = pat_con        conId =          case conLike of @@ -1530,7 +1540,7 @@ foldLPat (ghcDL -> L span pat@ConPatOut {..}) = do    (identifier', mbTypes) <- tidyIdentifier conId    addIdentifierToIdSrcSpanMap idSpan identifier' mbTypes    typ' <- tidyType typ -  addExprInfo span (Just typ') "ConPatOut" (patSort pat) +  addExprInfo span (Just typ') "ConPat" (patSort pat)    _ <- foldHsConPatDetails pat_args    return . Just . varType $ identifier'  #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) @@ -1766,10 +1776,11 @@ foldLHsCmd (L _ (HsCmdDo stmts _)) = do  #endif    mapM_ foldLStmtLRCmd $ unLoc stmts    return Nothing -#if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) -foldLHsCmd (L span (HsCmdWrap _ _ cmd)) = do -#else -foldLHsCmd (L span (HsCmdWrap _ cmd)) = do -#endif -  _ <- foldLHsCmd (L span cmd) -  return Nothing +-- no more hscmdwrap +-- #if MIN_VERSION_GLASGOW_HASKELL(8,6,1,0) +-- foldLHsCmd (L span (HsCmdWrap _ _ cmd)) = do +-- #else +-- foldLHsCmd (L span (HsCmdWrap _ cmd)) = do +-- #endif +--   _ <- foldLHsCmd (L span cmd) +--   return Nothing | 
