name = idName id
closure_label = mkClosureLabel name
lf_info = mkConLFInfo con
- cg_id_info = stableAmodeIdInfo id (CLbl closure_label PtrRep) lf_info
in
(
%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-% $Id: CgTailCall.lhs,v 1.29 2000/12/06 13:19:49 simonmar Exp $
+% $Id: CgTailCall.lhs,v 1.30 2001/06/25 14:36:04 simonpj Exp $
%
%********************************************************
%* *
import CgStackery ( mkTaggedStkAmodes, adjustStackHW )
import CgUsages ( getSpRelOffset, adjustSpAndHp )
import CgUpdate ( pushSeqFrame )
-import CLabel ( mkUpdInfoLabel, mkRtsPrimOpLabel,
- mkBlackHoleInfoTableLabel )
+import CLabel ( mkUpdInfoLabel, mkRtsPrimOpLabel )
import ClosureInfo ( nodeMustPointToIt,
getEntryConvention, EntryConvention(..), LambdaFormInfo
)
#include "HsVersions.h"
import CmdLineOpts
-import AbsCSyn ( Liveness(..) )
import Constants ( sTD_HDR_SIZE, pROF_HDR_SIZE,
gRAN_HDR_SIZE, tICKY_HDR_SIZE,
aRR_WORDS_HDR_SIZE, aRR_PTRS_HDR_SIZE,
import qualified ExternalCore as C
import Char
-import Ratio
import Module
import CoreSyn
import HscTypes
import CoreSyn
import Var
import IdInfo
-import NameEnv
import Literal
import Name
import CostCentre
import Outputable
-import PrimOp
-import Class
import ForeignCall
import PprExternalCore
import CmdLineOpts
#include "HsVersions.h"
-import CmdLineOpts ( DynFlags, DynFlag(..), dopt )
+import CmdLineOpts ( DynFlags, DynFlag(..) )
import CoreLint ( showPass, endPass )
import CoreSyn
import CoreUtils ( exprIsValue )
-- we could use appropriate Tuple Vals
deriving (Eq,Show)
-isFun :: AbsVal -> Bool
-isFun (Fun _) = True
-isFun _ = False
-
-- For pretty debugging
instance Outputable AbsVal where
ppr Top = ptext SLIT("Top")
import DsMonad
-import CoreUtils ( exprType, mkCoerce )
+import CoreUtils ( exprType )
import Id ( Id, mkWildId, idType )
import MkId ( mkFCallId, realWorldPrimId, mkPrimOpId )
import Maybes ( maybeToBool )
tcEqType, isBoolTy, isUnitTy,
Type
)
-import Type ( repType )
import PrimOp ( PrimOp(TouchOp) )
import TysPrim ( realWorldStatePrimTy,
byteArrayPrimTyCon, mutableByteArrayPrimTyCon,
HsExpr(..), OutPat(..), HsLit(..), ArithSeqInfo(..),
Stmt(..), HsMatchContext(..), HsDoContext(..),
Match(..), HsBinds(..), MonoBinds(..),
- mkSimpleMatch, isDoExpr
- )
-import TcHsSyn ( TypecheckedHsExpr, TypecheckedHsBinds,
- TypecheckedStmt, TypecheckedMatchContext
+ mkSimpleMatch
)
+import TcHsSyn ( TypecheckedHsExpr, TypecheckedHsBinds, TypecheckedStmt )
import TcType ( tcSplitAppTy, tcSplitFunTys, tcSplitTyConApp_maybe, tcTyConAppArgs,
isIntegerTy, tcSplitTyConApp, isUnLiftedType, Type )
import CoreSyn
-- others:
import ForeignCall ( Safety )
-import Name ( Name )
import Outputable
import PprType ( pprParendType )
import Type ( Type )
#include "HsVersions.h"
import Class ( FunDep )
-import TcType ( Type, Kind, ThetaType, SourceType(..), PredType,
+import TcType ( Type, Kind, ThetaType, SourceType(..),
tcSplitSigmaTy, liftedTypeKind, eqKind, tcEqType
)
import TypeRep ( Type(..), TyNote(..) ) -- toHsType sees the representation
import Util ( global )
import CmdLineOpts ( dynFlag, verbosity )
-import List ( isPrefixOf )
-import Exception ( throw, throwDyn, catchAllIO )
+import Exception ( throwDyn, catchAllIO )
import IO ( hPutStr, hPutChar, hPutStrLn, hFlush, stderr )
import Directory ( doesFileExist, removeFile )
import IOExts ( IORef, readIORef, writeIORef )
#if !defined(mingw32_TARGET_OS)
import qualified Posix
#else
-import Addr ( nullAddr )
+import Addr ( nullAddr )
+import List ( isPrefixOf )
#endif
#include "HsVersions.h"
-----------------------------------------------------------------------------
-- Convert filepath into MSDOS form.
-dosifyPath :: String -> String
dosifyPaths :: [String] -> [String]
--- dosifyPath does two things
+-- dosifyPaths does two things
-- a) change '/' to '\'
-- b) remove initial '/cygdrive/'
#else
--------------------- Unix version ---------------------
-dosifyPath p = p
dosifyPaths ps = ps
unDosifyPath xs = subst '\\' '/' xs
--------------------------------------------------------
import ForeignCall ( Safety(..) )
import Demand ( Demand(..) {- instance Read -} )
import UniqFM ( listToUFM, lookupUFM )
-import BasicTypes ( NewOrData(..), Boxity(..) )
+import BasicTypes ( Boxity(..) )
import SrcLoc ( SrcLoc, incSrcLine, srcLocFile, srcLocLine,
replaceSrcLine, mkSrcLoc )
#include "HsVersions.h"
import HsSyn -- Lots of it
-import HsPat ( collectSigTysFromPats )
import OccName ( mkClassTyConOcc, mkClassDataConOcc, mkWorkerOcc,
mkSuperDictSelOcc, mkDefaultMethodOcc, mkGenOcc1,
mkGenOcc2,
#include "HsVersions.h"
-import CmdLineOpts ( DynFlag(..), DynFlags, dopt )
+import CmdLineOpts ( DynFlag(..), DynFlags )
import Id ( Id, idType )
import CoreUtils ( hashExpr, cheapEqExpr, exprIsBig, mkAltExpr )
import DataCon ( isUnboxedTupleCon )
#include "HsVersions.h"
-import CmdLineOpts ( DynFlags, DynFlag(..), dopt )
+import CmdLineOpts ( DynFlags, DynFlag(..) )
import CoreSyn
import CoreUtils ( exprIsValue, exprIsDupable )
import CoreLint ( showPass, endPass )
#include "HsVersions.h"
-import CmdLineOpts ( DynFlags, DynFlag(..), dopt, opt_LiberateCaseThreshold )
+import CmdLineOpts ( DynFlags, DynFlag(..), opt_LiberateCaseThreshold )
import CoreLint ( showPass, endPass )
import CoreSyn
import CoreUnfold ( couldBeSmallEnoughToInline )
import Var ( Id )
import VarEnv
import UniqFM ( ufmToList )
-import Maybes
import Outputable
\end{code}
#include "HsVersions.h"
import CmdLineOpts ( switchIsOn, SimplifierSwitch(..),
- opt_SimplDoLambdaEtaExpansion, opt_SimplCaseMerge, opt_DictsStrict,
+ opt_SimplDoLambdaEtaExpansion, opt_SimplCaseMerge,
opt_UF_UpdateInPlace
)
import CoreSyn
import Name ( setNameUnique )
import Demand ( isStrict )
import SimplMonad
-import Type ( Type, mkForAllTys, seqType, repType,
+import Type ( Type, mkForAllTys, seqType,
splitTyConApp_maybe, tyConAppArgs, mkTyVarTys,
isUnLiftedType,
splitRepFunTys
import VarEnv
import TcType ( mkTyVarTy )
import qualified TcType ( match )
-import TypeRep ( Type(..) ) -- Can see type representation for matching
import Outputable
import Maybe ( isJust, isNothing, fromMaybe )
#include "HsVersions.h"
import CmdLineOpts ( DynFlags, DynFlag(..) )
-import Id ( Id, idName, idType, mkUserLocal,
- idSpecialisation, modifyIdInfo
- )
+import Id ( Id, idName, idType, mkUserLocal, idSpecialisation )
import TcType ( Type, mkTyVarTy, tcSplitSigmaTy,
tyVarsOfTypes, tyVarsOfTheta,
mkForAllTys, tcCmpType
%************************************************************************
\begin{code}
-lookupId:: IdEnv Id -> Id -> Id
-lookupId env id = case lookupVarEnv env id of
- Nothing -> id
- Just id' -> id'
-
-----------------------------------------
type SpecM a = UniqSM a
thenSM = thenUs
)
import SaLib
import TyCon ( isProductTyCon, isRecursiveTyCon )
-import BasicTypes ( NewOrData(..) )
import Type ( splitTyConApp_maybe,
isUnLiftedType, Type )
import TyCon ( tyConUnique )
import Id ( Id, idType, idStrictness, idArity, isOneShotLambda,
setIdStrictness, idInlinePragma, mkWorkerId,
setIdWorkerInfo, idCprInfo, setInlinePragma )
-import Type ( Type, splitForAllTys, splitFunTys )
+import Type ( Type )
import IdInfo ( mkStrictnessInfo, noStrictnessInfo, StrictnessInfo(..),
CprInfo(..), InlinePragInfo(..), isNeverInlinePrag,
WorkerInfo(..)
import Type ( Type, isUnLiftedType, mkFunTys,
splitForAllTys, splitFunTys, isAlgType
)
-import BasicTypes ( NewOrData(..), Arity, Boxity(..) )
+import BasicTypes ( Arity, Boxity(..) )
import Var ( Var, isId )
import UniqSupply ( returnUs, thenUs, getUniqueUs, getUniquesUs, UniqSM )
import Util ( zipWithEqual )
thenMName, failMName, returnMName, ioTyConName
)
import Outputable
-import Maybes ( maybeToBool )
import ListSetOps ( minusList )
import Util
import CmdLineOpts
-- friends:
import TypeRep ( Type(..), Kind, TyNote(..) ) -- friend
import Type -- Lots and lots
-import TcType ( SigmaType, RhoType, tcEqType,
+import TcType ( tcEqType,
tcSplitRhoTy, tcSplitPredTy_maybe, tcSplitAppTy_maybe,
tcSplitTyConApp_maybe, tcSplitFunTy_maybe
)
-import PprType ( pprType )
import Subst ( Subst, mkTopTyVarSubst, substTy )
-import TyCon ( TyCon, mkPrimTyCon, isNewTyCon, isSynTyCon, isTupleTyCon,
- tyConArity, tupleTyConBoxity
- )
+import TyCon ( TyCon, mkPrimTyCon, isTupleTyCon, tyConArity, tupleTyConBoxity )
import PrimRep ( PrimRep(VoidRep) )
import Var ( TyVar, varName, tyVarKind, tyVarName, isTyVar, mkTyVar,
isMutTyVar, isSigTyVar )
import Name ( Name, NamedThing(..), setNameUnique, mkSysLocalName,
mkLocalName, mkDerivedTyConOcc, isSystemName
)
-import PrelNames ( floatTyConKey, doubleTyConKey, foreignPtrTyConKey,
- integerTyConKey, intTyConKey, addrTyConKey )
import VarSet
import BasicTypes ( Boxity, Arity, isBoxed )
-import Unique ( Unique, Uniquable(..) )
+import Unique ( Uniquable(..) )
import SrcLoc ( noSrcLoc )
import Util ( nOfThem )
import Outputable
)
import RnHsSyn ( RenamedMatch, RenamedGRHSs, RenamedStmt, RenamedPat, RenamedHsType,
RenamedMatchContext, extractHsTyVars )
-import TcHsSyn ( TcMatch, TcGRHSs, TcStmt, TcDictBinds, TypecheckedPat, TypecheckedMatchContext )
+import TcHsSyn ( TcMatch, TcGRHSs, TcStmt, TcDictBinds, TypecheckedPat )
import TcMonad
import TcMonoType ( kcHsSigTypes, tcScopedTyVars, checkSigTyVars, tcHsSigType, sigPatCtxt )
TyThing(..), implicitTyThingIds,
mkTypeEnv
)
-import VarSet
\end{code}
import TcMType ( newTyVarTy )
import TcType ( tyVarsOfTypes, openTypeKind )
import TcIfaceSig ( tcCoreExpr, tcCoreLamBndrs, tcVar )
-import TcMonoType ( kcHsSigTypes, tcHsSigType, tcScopedTyVars, checkSigTyVars )
+import TcMonoType ( kcHsSigTypes, tcHsSigType, tcScopedTyVars )
import TcExpr ( tcExpr )
-import TcEnv ( tcExtendLocalValEnv, tcExtendTyVarEnv, isLocalThing )
+import TcEnv ( tcExtendLocalValEnv, isLocalThing )
import Rules ( extendRuleBase )
import Inst ( LIE, plusLIEs, instToId )
import Id ( idName, idType, mkLocalId )
import Module ( Module )
-import VarSet
import List ( partition )
import Outputable
\end{code}
import TcInstDcls ( tcAddDeclCtxt )
import TcMonoType ( kcHsTyVars, kcHsType, kcHsLiftedSigType, kcHsContext, mkTyClTyVars )
import TcMType ( unifyKind, newKindVar, zonkKindEnv )
-import TcType ( tcSplitTyConApp_maybe,
- Type, Kind, mkArrowKind, liftedTypeKind, zipFunTys
- )
-import Subst ( mkTyVarSubst, substTy )
+import TcType ( Type, Kind, mkArrowKind, liftedTypeKind, zipFunTys )
import Variance ( calcTyConArgVrcs )
import Class ( Class, mkClass, classTyCon )
import TyCon ( TyCon, ArgVrcs, AlgTyConFlavour(..),
- tyConName, tyConKind, tyConTyVars, tyConArity, tyConDataCons,
- mkSynTyCon, mkAlgTyCon, mkClassTyCon, mkForeignTyCon, isNewTyCon,
+ tyConKind, tyConDataCons,
+ mkSynTyCon, mkAlgTyCon, mkClassTyCon, mkForeignTyCon,
isRecursiveTyCon )
-import TysWiredIn ( unitTy )
-import DataCon ( isNullaryDataCon, dataConOrigArgTys )
-import Var ( varName, varType )
+import DataCon ( dataConOrigArgTys )
+import Var ( varName )
import FiniteMap
import Digraph ( stronglyConnComp, SCC(..) )
import Name ( Name, getSrcLoc, isTyVarName )
tcLookupTyCon, tcLookupRecId,
TyThingDetails(..), RecTcEnv
)
-import TcType ( tcSplitTyConApp_maybe, tcEqType,
- tyVarsOfTypes, tyVarsOfPred,
- mkTyConApp, mkTyVarTys, mkForAllTys,
- Type, ThetaType
- )
+import TcType ( tcEqType, tyVarsOfTypes, tyVarsOfPred, Type, ThetaType )
import TcMonad
-import DataCon ( DataCon, mkDataCon, dataConFieldLabels, dataConRepType,
- isNullaryDataCon, dataConOrigArgTys )
+import DataCon ( DataCon, mkDataCon, dataConFieldLabels )
import MkId ( mkDataConId, mkDataConWrapId, mkRecordSelId )
import FieldLabel
import Var ( TyVar )
import Name ( Name, NamedThing(..) )
import Outputable
-import TyCon ( TyCon, AlgTyConFlavour(..), tyConTyVars )
+import TyCon ( TyCon, tyConTyVars )
import VarSet ( intersectVarSet, isEmptyVarSet )
import PrelNames ( unpackCStringName, unpackCStringUtf8Name )
import ListSetOps ( equivClasses )
import Type -- Lots and lots
import TyCon ( TyCon, isPrimTyCon, tyConArity, isNewTyCon )
import Class ( classTyCon, classHasFDs, Class )
-import Var ( TyVar, tyVarName, isTyVar, tyVarKind, mkTyVar )
+import Var ( TyVar, tyVarKind )
import VarEnv
import VarSet
-- others:
import CmdLineOpts ( opt_DictsStrict )
-import Name ( Name, NamedThing(..), setNameUnique, mkSysLocalName,
- mkLocalName, mkDerivedTyConOcc
- )
+import Name ( Name, NamedThing(..), mkLocalName )
import OccName ( OccName, mkDictOcc )
import NameSet
import PrelNames ( floatTyConKey, doubleTyConKey, foreignPtrTyConKey,
integerTyConKey, intTyConKey, addrTyConKey, boolTyConKey )
import Unique ( Unique, Uniquable(..), mkTupleTyConUnique )
-import SrcLoc ( SrcLoc, noSrcLoc )
-import Util ( nOfThem, cmpList, thenCmp )
+import SrcLoc ( SrcLoc )
+import Util ( cmpList, thenCmp )
import Maybes ( maybeToBool, expectJust )
import BasicTypes ( Boxity(..) )
import Outputable
import RnHsSyn ( RenamedHsExpr )
import HsSyn ( HsExpr(..), InPat(..), mkSimpleMatch )
-import Type ( Type, isUnLiftedType, applyTys, tyVarsOfType, tyVarsOfTypes,
+import Type ( Type, isUnLiftedType, tyVarsOfType, tyVarsOfTypes,
mkTyVarTys, mkForAllTys, mkTyConApp,
mkFunTy, isTyVarTy, getTyVar_maybe,
funTyCon
tyConGenInfo, isNewTyCon, newTyConRep, isBoxedTupleTyCon
)
import Name ( Name, mkSysLocalName )
-import CoreSyn ( mkLams, Expr(..), CoreExpr, AltCon(..), Note(..),
+import CoreSyn ( mkLams, Expr(..), CoreExpr, AltCon(..),
mkConApp, Alt, mkTyApps, mkVarApps )
import BasicTypes ( EP(..), Boxity(..) )
import Var ( TyVar )
import Unique ( mkBuiltinUnique )
import SrcLoc ( builtinSrcLoc )
-import Maybes ( expectJust )
import Outputable
#include "HsVersions.h"
-- Other imports:
-import {-# SOURCE #-} DataCon( DataCon )
import {-# SOURCE #-} PprType( pprType ) -- Only called in debug messages
import {-# SOURCE #-} Subst ( mkTyVarSubst, substTy )
import VarEnv
import VarSet
-import OccName ( mkDictOcc )
-import Name ( Name, NamedThing(..), OccName, mkLocalName, tidyOccName )
-import NameSet
+import Name ( NamedThing(..), mkLocalName, tidyOccName )
import Class ( classTyCon )
import TyCon ( TyCon, isRecursiveTyCon,
isUnboxedTupleTyCon, isUnLiftedTyCon,
isFunTyCon, isNewTyCon, newTyConRep,
- isAlgTyCon, isSynTyCon, tyConArity, tyConTyVars,
- tyConKind, tyConDataCons, getSynTyConDefn,
- tyConPrimRep, isPrimTyCon
+ isAlgTyCon, isSynTyCon, tyConArity,
+ tyConKind, getSynTyConDefn,
+ tyConPrimRep,
)
-- others
import Maybes ( maybeToBool )
-import SrcLoc ( SrcLoc, noSrcLoc )
+import SrcLoc ( noSrcLoc )
import PrimRep ( PrimRep(..) )
-import Unique ( Unique, Uniquable(..) )
-import Util ( mapAccumL, seqList, thenCmp )
+import Unique ( Uniquable(..) )
+import Util ( mapAccumL, seqList )
import Outputable
import UniqSet ( sizeUniqSet ) -- Should come via VarSet
\end{code}