From 9d4c03805bafb6b1e1d47306b6a6c591c998e517 Mon Sep 17 00:00:00 2001 From: partain <unknown> Date: Sun, 30 Jun 1996 16:01:37 +0000 Subject: [PATCH] [project @ 1996-06-30 15:56:44 by partain] partain 1.3 changes through 960629 --- ghc/compiler/Jmakefile | 2 +- ghc/compiler/absCSyn/AbsCLoop_1_3.lhi | 13 ++ ghc/compiler/absCSyn/PprAbsC.lhs | 11 +- ghc/compiler/basicTypes/IdInfo.lhs | 3 +- ghc/compiler/basicTypes/IdLoop.lhi | 2 +- ghc/compiler/basicTypes/IdUtils.lhs | 6 +- ghc/compiler/basicTypes/Unique.lhs | 2 - ghc/compiler/codeGen/CgBindery.lhs | 4 +- ghc/compiler/codeGen/CgCase.lhs | 4 +- ghc/compiler/codeGen/CgClosure.lhs | 5 +- ghc/compiler/codeGen/CgCon.lhs | 2 +- ghc/compiler/codeGen/CgConTbls.lhs | 5 +- ghc/compiler/codeGen/CgExpr.lhs | 2 +- ghc/compiler/codeGen/CgHeapery.lhs | 1 - ghc/compiler/codeGen/CgLetNoEscape.lhs | 3 +- ghc/compiler/codeGen/CgLoop2_1_3.lhi | 3 +- ghc/compiler/codeGen/CgTailCall.lhs | 3 +- ghc/compiler/codeGen/CodeGen.lhs | 2 + ghc/compiler/coreSyn/CoreUtils.lhs | 4 +- ghc/compiler/deSugar/Desugar.lhs | 2 +- ghc/compiler/deSugar/DsBinds.lhs | 6 +- ghc/compiler/deSugar/DsExpr.lhs | 8 +- ghc/compiler/deSugar/DsGRHSs.lhs | 12 +- ghc/compiler/deSugar/DsHsSyn.lhs | 4 +- ghc/compiler/deSugar/DsListComp.lhs | 13 +- ghc/compiler/deSugar/DsLoop_1_3.lhi | 5 +- ghc/compiler/deSugar/DsMonad.lhs | 6 +- ghc/compiler/deSugar/DsUtils.lhs | 8 +- ghc/compiler/deSugar/Match.lhs | 4 +- ghc/compiler/deSugar/MatchLit.lhs | 4 +- ghc/compiler/main/Main.lhs | 1 + ghc/compiler/main/MkIface.lhs | 47 +++-- ghc/compiler/nativeGen/AbsCStixGen.lhs | 1 + ghc/compiler/nativeGen/AsmCodeGen.lhs | 3 +- ghc/compiler/nativeGen/AsmRegAlloc.lhs | 2 +- ghc/compiler/nativeGen/MachCode.lhs | 238 ++++++++++++------------ ghc/compiler/nativeGen/MachMisc.lhs | 19 +- ghc/compiler/nativeGen/MachRegs.lhs | 24 +-- ghc/compiler/nativeGen/NcgLoop_1_3.lhi | 1 + ghc/compiler/nativeGen/PprMach.lhs | 43 +++-- ghc/compiler/nativeGen/RegAllocInfo.lhs | 11 +- ghc/compiler/nativeGen/Stix.lhs | 5 +- ghc/compiler/nativeGen/StixPrim.lhs | 2 +- ghc/compiler/prelude/PrelLoop.lhi | 3 +- ghc/compiler/prelude/PrelLoop_1_3.lhi | 1 + ghc/compiler/prelude/PrimOp.lhs | 8 +- ghc/compiler/prelude/TysWiredIn.lhs | 30 +-- ghc/compiler/reader/ReadPrefix.lhs | 8 +- ghc/compiler/rename/ParseIface.y | 12 +- ghc/compiler/rename/ParseUtils.lhs | 6 +- ghc/compiler/rename/Rename.lhs | 32 ++-- ghc/compiler/rename/RnIfaces.lhs | 43 +++-- ghc/compiler/rename/RnLoop_1_3.lhi | 4 +- ghc/compiler/rename/RnNames.lhs | 12 +- ghc/compiler/rename/RnSource.lhs | 1 + ghc/compiler/simplCore/SimplCase.lhs | 4 +- ghc/compiler/simplCore/SimplCore.lhs | 2 + ghc/compiler/simplCore/Simplify.lhs | 1 + ghc/compiler/typecheck/GenSpecEtc.lhs | 8 +- ghc/compiler/typecheck/Inst.lhs | 16 +- ghc/compiler/typecheck/TcBinds.lhs | 13 +- ghc/compiler/typecheck/TcClassDcl.lhs | 17 +- ghc/compiler/typecheck/TcDeriv.lhs | 4 +- ghc/compiler/typecheck/TcEnv.lhs | 7 +- ghc/compiler/typecheck/TcExpr.lhs | 18 +- ghc/compiler/typecheck/TcGRHSs.lhs | 8 +- ghc/compiler/typecheck/TcHsSyn.lhs | 28 +-- ghc/compiler/typecheck/TcInstDcls.lhs | 12 +- ghc/compiler/typecheck/TcInstUtil.lhs | 8 +- ghc/compiler/typecheck/TcLoop_1_3.lhi | 2 +- ghc/compiler/typecheck/TcMLoop_1_3.lhi | 4 +- ghc/compiler/typecheck/TcMatches.lhs | 9 +- ghc/compiler/typecheck/TcModule.lhs | 16 +- ghc/compiler/typecheck/TcMonad.lhs | 27 ++- ghc/compiler/typecheck/TcMonoType.lhs | 10 +- ghc/compiler/typecheck/TcPat.lhs | 9 +- ghc/compiler/typecheck/TcSimplify.lhs | 6 +- ghc/compiler/typecheck/TcTyClsDecls.lhs | 6 +- ghc/compiler/typecheck/TcTyDecls.lhs | 7 +- ghc/compiler/typecheck/TcType.lhs | 34 ++-- ghc/compiler/typecheck/Unify.lhs | 2 +- ghc/compiler/types/TyVar.lhs | 6 +- ghc/compiler/types/Type.lhs | 44 +++-- ghc/compiler/utils/Ubiq_1_3.lhi | 6 +- 84 files changed, 579 insertions(+), 461 deletions(-) diff --git a/ghc/compiler/Jmakefile b/ghc/compiler/Jmakefile index e3496adfa276..766582e6f209 100644 --- a/ghc/compiler/Jmakefile +++ b/ghc/compiler/Jmakefile @@ -611,7 +611,7 @@ compile(reader/PrefixToHs,lhs,) compile(reader/ReadPrefix,lhs,if_ghc(-fvia-C -I$(COMPINFO_DIR) -Iparser '-#include"hspincl.h"')) compile(reader/RdrHsSyn,lhs,) -compile(rename/ParseIface,hs,) +compile(rename/ParseIface,hs,-Onot) /* sigh */ compile(rename/ParseUtils,lhs,) compile(rename/RnHsSyn,lhs,) compile(rename/RnMonad,lhs,if_ghc(-fvia-C)) diff --git a/ghc/compiler/absCSyn/AbsCLoop_1_3.lhi b/ghc/compiler/absCSyn/AbsCLoop_1_3.lhi index 63f3690dd7f2..a7401e1c753d 100644 --- a/ghc/compiler/absCSyn/AbsCLoop_1_3.lhi +++ b/ghc/compiler/absCSyn/AbsCLoop_1_3.lhi @@ -5,4 +5,17 @@ MachMisc fixedHdrSizeInWords (..) MachMisc varHdrSizeInWords (..) CgRetConv ctrlReturnConvAlg (..) CgRetConv CtrlReturnConvention(..) +ClosureInfo closureKind (..) +ClosureInfo closureLabelFromCI (..) +ClosureInfo closureNonHdrSize (..) +ClosureInfo closurePtrsSize (..) +ClosureInfo closureSMRep (..) +ClosureInfo closureSemiTag (..) +ClosureInfo closureSizeWithoutFixedHdr (..) +ClosureInfo closureTypeDescr (..) +ClosureInfo closureUpdReqd (..) +ClosureInfo infoTableLabelFromCI (..) +ClosureInfo maybeSelectorInfo (..) +ClosureInfo entryLabelFromCI (..) +ClosureInfo fastLabelFromCI (..) \end{code} diff --git a/ghc/compiler/absCSyn/PprAbsC.lhs b/ghc/compiler/absCSyn/PprAbsC.lhs index fa3d01b918fe..2f11f1acf67c 100644 --- a/ghc/compiler/absCSyn/PprAbsC.lhs +++ b/ghc/compiler/absCSyn/PprAbsC.lhs @@ -20,6 +20,9 @@ module PprAbsC ( IMP_Ubiq(){-uitous-} IMPORT_DELOOPER(AbsCLoop) -- break its dependence on ClosureInfo +IMPORT_1_3(IO(Handle)) +IMPORT_1_3(Char(isDigit,isPrint)) +IMPORT_1_3(GHCbase(Addr(..)) ) -- to see innards import AbsCSyn @@ -35,7 +38,7 @@ import CmdLineOpts ( opt_SccProfilingOn ) import CostCentre ( uppCostCentre, uppCostCentreDecl ) import Costs ( costs, addrModeCosts, CostRes(..), Side(..) ) import CStrings ( stringToC ) -import FiniteMap ( addToFM, emptyFM, lookupFM ) +import FiniteMap ( addToFM, emptyFM, lookupFM, FiniteMap ) import HeapOffs ( isZeroOff, subOff, pprHeapOffset ) import Literal ( showLiteral, Literal(..) ) import Maybes ( maybeToBool, catMaybes ) @@ -799,7 +802,11 @@ process_casm results args string = process results args string _ -> panic ("process_casm: casm with many results while processing _casm_ \"" ++ string ++ "\".\n") other -> - case readDec other of + let + read_int :: ReadS Int + read_int = reads + in + case (read_int other) of [(num,css)] -> if 0 <= num && num < length args then uppBeside (uppParens (args !! num)) diff --git a/ghc/compiler/basicTypes/IdInfo.lhs b/ghc/compiler/basicTypes/IdInfo.lhs index f6afdc1c91ef..ad761add83f5 100644 --- a/ghc/compiler/basicTypes/IdInfo.lhs +++ b/ghc/compiler/basicTypes/IdInfo.lhs @@ -83,6 +83,7 @@ import PprStyle ( PprStyle(..) ) import Pretty import SrcLoc ( mkUnknownSrcLoc ) import Type ( eqSimpleTy, splitFunTyExpandingDicts ) +import Unique ( pprUnique ) import Util ( mapAccumL, panic, assertPanic, pprPanic ) #ifdef REALLY_HASKELL_1_3 @@ -766,7 +767,7 @@ pp_unfolding sty for_this_id inline_env uf_details pp NoUnfoldingDetails = pp_NONE pp (MagicForm tag _) - = ppCat [ppPStr SLIT("_MF_"), ppPStr tag] + = ppCat [ppPStr SLIT("_MF_"), pprUnique tag] pp (GenForm _ _ BadUnfolding) = pp_NONE diff --git a/ghc/compiler/basicTypes/IdLoop.lhi b/ghc/compiler/basicTypes/IdLoop.lhi index aea554af7384..455902d4df7f 100644 --- a/ghc/compiler/basicTypes/IdLoop.lhi +++ b/ghc/compiler/basicTypes/IdLoop.lhi @@ -70,7 +70,7 @@ data UnfoldingDetails | OtherLitForm [Literal] | OtherConForm [GenId (GenType (GenTyVar (GenUsage Unique)) Unique)] | GenForm FormSummary (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) UnfoldingGuidance - | MagicForm _PackedString MagicUnfoldingFun + | MagicForm Unique MagicUnfoldingFun data UnfoldingGuidance = UnfoldNever diff --git a/ghc/compiler/basicTypes/IdUtils.lhs b/ghc/compiler/basicTypes/IdUtils.lhs index e17f17a5567c..167a23167001 100644 --- a/ghc/compiler/basicTypes/IdUtils.lhs +++ b/ghc/compiler/basicTypes/IdUtils.lhs @@ -20,7 +20,7 @@ import PrelMods ( gHC_BUILTINS ) import PrimOp ( primOpInfo, tagOf_PrimOp, primOp_str, PrimOpInfo(..), PrimOpResultInfo(..) ) import RnHsSyn ( RnName(..) ) -import Type ( mkForAllTys, mkFunTys, mkTyVarTy, applyTyCon ) +import Type ( mkForAllTys, mkFunTy, mkFunTys, mkTyVarTy, applyTyCon ) import TysWiredIn ( boolTy ) import Unique ( mkPrimOpIdUnique ) import Util ( panic ) @@ -44,7 +44,7 @@ primOpId op mk_prim_Id op str [] [ty,ty] (compare_fun_ty ty) 2 Coercing str ty1 ty2 -> - mk_prim_Id op str [] [ty1] (mkFunTys [ty1] ty2) 1 + mk_prim_Id op str [] [ty1] (ty1 `mkFunTy` ty2) 1 PrimResult str tyvars arg_tys prim_tycon kind res_tys -> mk_prim_Id op str @@ -72,7 +72,7 @@ primOpId op \begin{code} dyadic_fun_ty ty = mkFunTys [ty, ty] ty -monadic_fun_ty ty = mkFunTys [ty] ty +monadic_fun_ty ty = ty `mkFunTy` ty compare_fun_ty ty = mkFunTys [ty, ty] boolTy \end{code} diff --git a/ghc/compiler/basicTypes/Unique.lhs b/ghc/compiler/basicTypes/Unique.lhs index 2f2b1c81d138..953f435214b4 100644 --- a/ghc/compiler/basicTypes/Unique.lhs +++ b/ghc/compiler/basicTypes/Unique.lhs @@ -132,7 +132,6 @@ module Unique ( parIdKey, patErrorIdKey, primIoTyConKey, - primIoDataConKey, ratioDataConKey, ratioTyConKey, rationalTyConKey, @@ -590,7 +589,6 @@ stateDataConKey = mkPreludeDataConUnique 39 trueDataConKey = mkPreludeDataConUnique 40 wordDataConKey = mkPreludeDataConUnique 41 stDataConKey = mkPreludeDataConUnique 42 -primIoDataConKey = mkPreludeDataConUnique 43 \end{code} %************************************************************************ diff --git a/ghc/compiler/codeGen/CgBindery.lhs b/ghc/compiler/codeGen/CgBindery.lhs index 0fc6bed0b780..6e0c8bdf4ada 100644 --- a/ghc/compiler/codeGen/CgBindery.lhs +++ b/ghc/compiler/codeGen/CgBindery.lhs @@ -7,7 +7,7 @@ #include "HsVersions.h" module CgBindery ( - CgBindings(..), CgIdInfo(..){-dubiously concrete-}, + SYN_IE(CgBindings), CgIdInfo(..){-dubiously concrete-}, StableLoc, VolatileLoc, maybeAStkLoc, maybeBStkLoc, @@ -34,7 +34,7 @@ import CgMonad import CgUsages ( getHpRelOffset, getSpARelOffset, getSpBRelOffset ) import CLabel ( mkClosureLabel ) -import ClosureInfo ( mkLFImported, mkConLFInfo, mkLFArgument ) +import ClosureInfo ( mkLFImported, mkConLFInfo, mkLFArgument, LambdaFormInfo ) import HeapOffs ( SYN_IE(VirtualHeapOffset), SYN_IE(VirtualSpAOffset), SYN_IE(VirtualSpBOffset) ) diff --git a/ghc/compiler/codeGen/CgCase.lhs b/ghc/compiler/codeGen/CgCase.lhs index 538a9e397e70..939c87ddc11c 100644 --- a/ghc/compiler/codeGen/CgCase.lhs +++ b/ghc/compiler/codeGen/CgCase.lhs @@ -63,8 +63,8 @@ import PrimRep ( getPrimRepSize, isFollowableRep, retPrimRepSize, ) import TyCon ( isEnumerationTyCon ) import Type ( typePrimRep, - getAppSpecDataTyConExpandingDicts, maybeAppSpecDataTyConExpandingDicts, - isEnumerationTyCon + getAppSpecDataTyConExpandingDicts, + maybeAppSpecDataTyConExpandingDicts ) import Util ( sortLt, isIn, isn'tIn, zipEqual, pprError, panic, assertPanic diff --git a/ghc/compiler/codeGen/CgClosure.lhs b/ghc/compiler/codeGen/CgClosure.lhs index e2d6de9f86b6..8bf533fcc40e 100644 --- a/ghc/compiler/codeGen/CgClosure.lhs +++ b/ghc/compiler/codeGen/CgClosure.lhs @@ -24,15 +24,14 @@ import CgBindery ( getCAddrMode, getArgAmodes, getCAddrModeAndInfo, bindNewToNode, bindNewToAStack, bindNewToBStack, bindNewToReg, bindArgsToRegs, - stableAmodeIdInfo, heapIdInfo + stableAmodeIdInfo, heapIdInfo, CgIdInfo ) import CgCompInfo ( spARelToInt, spBRelToInt ) import CgUpdate ( pushUpdateFrame ) import CgHeapery ( allocDynClosure, heapCheck , heapCheckOnly, fetchAndReschedule, yield -- HWL ) -import CgRetConv ( mkLiveRegsMask, - ctrlReturnConvAlg, dataReturnConvAlg, +import CgRetConv ( ctrlReturnConvAlg, dataReturnConvAlg, CtrlReturnConvention(..), DataReturnConvention(..) ) import CgStackery ( getFinalStackHW, mkVirtStkOffsets, diff --git a/ghc/compiler/codeGen/CgCon.lhs b/ghc/compiler/codeGen/CgCon.lhs index c2aa1f5fe4a1..21507e3e01c9 100644 --- a/ghc/compiler/codeGen/CgCon.lhs +++ b/ghc/compiler/codeGen/CgCon.lhs @@ -26,7 +26,7 @@ import AbsCUtils ( mkAbstractCs, getAmodeRep ) import CgBindery ( getArgAmodes, bindNewToNode, bindArgsToRegs, newTempAmodeAndIdInfo, idInfoToAmode, stableAmodeIdInfo, - heapIdInfo + heapIdInfo, CgIdInfo ) import CgClosure ( cgTopRhsClosure ) import CgCompInfo ( mAX_INTLIKE, mIN_INTLIKE ) diff --git a/ghc/compiler/codeGen/CgConTbls.lhs b/ghc/compiler/codeGen/CgConTbls.lhs index e13d043b37b6..ea53371fbc54 100644 --- a/ghc/compiler/codeGen/CgConTbls.lhs +++ b/ghc/compiler/codeGen/CgConTbls.lhs @@ -16,8 +16,7 @@ import CgMonad import AbsCUtils ( mkAbsCStmts, mkAbstractCs, magicIdPrimRep ) import CgCompInfo ( uF_UPDATEE ) import CgHeapery ( heapCheck, allocDynClosure ) -import CgRetConv ( mkLiveRegsMask, - dataReturnConvAlg, ctrlReturnConvAlg, +import CgRetConv ( dataReturnConvAlg, ctrlReturnConvAlg, CtrlReturnConvention(..), DataReturnConvention(..) ) @@ -33,7 +32,7 @@ import ClosureInfo ( layOutStaticClosure, layOutDynCon, infoTableLabelFromCI, dataConLiveness ) import CostCentre ( dontCareCostCentre ) -import FiniteMap ( fmToList ) +import FiniteMap ( fmToList, FiniteMap ) import HeapOffs ( zeroOff, SYN_IE(VirtualHeapOffset) ) import Id ( dataConTag, dataConRawArgTys, dataConNumFields, fIRST_TAG, diff --git a/ghc/compiler/codeGen/CgExpr.lhs b/ghc/compiler/codeGen/CgExpr.lhs index 212a728f977b..05264e624b38 100644 --- a/ghc/compiler/codeGen/CgExpr.lhs +++ b/ghc/compiler/codeGen/CgExpr.lhs @@ -20,7 +20,7 @@ import CgMonad import AbsCSyn import AbsCUtils ( mkAbsCStmts, mkAbstractCs ) -import CgBindery ( getArgAmodes ) +import CgBindery ( getArgAmodes, CgIdInfo ) import CgCase ( cgCase, saveVolatileVarsAndRegs ) import CgClosure ( cgRhsClosure ) import CgCon ( buildDynCon, cgReturnDataCon ) diff --git a/ghc/compiler/codeGen/CgHeapery.lhs b/ghc/compiler/codeGen/CgHeapery.lhs index 2d4abe27d98d..1e7b2c99c9e3 100644 --- a/ghc/compiler/codeGen/CgHeapery.lhs +++ b/ghc/compiler/codeGen/CgHeapery.lhs @@ -20,7 +20,6 @@ import AbsCSyn import CgMonad import AbsCUtils ( mkAbstractCs, getAmodeRep ) -import CgRetConv ( mkLiveRegsMask ) import CgUsages ( getVirtAndRealHp, setVirtHp, setRealHp, initHeapUsage ) diff --git a/ghc/compiler/codeGen/CgLetNoEscape.lhs b/ghc/compiler/codeGen/CgLetNoEscape.lhs index 3126b25d7871..591e775f98f8 100644 --- a/ghc/compiler/codeGen/CgLetNoEscape.lhs +++ b/ghc/compiler/codeGen/CgLetNoEscape.lhs @@ -20,7 +20,8 @@ import CgMonad import AbsCSyn import CgBindery ( letNoEscapeIdInfo, bindArgsToRegs, - bindNewToAStack, bindNewToBStack + bindNewToAStack, bindNewToBStack, + CgIdInfo ) import CgHeapery ( heapCheck ) import CgRetConv ( assignRegs ) diff --git a/ghc/compiler/codeGen/CgLoop2_1_3.lhi b/ghc/compiler/codeGen/CgLoop2_1_3.lhi index 7a0feb086b67..e813a302c9f4 100644 --- a/ghc/compiler/codeGen/CgLoop2_1_3.lhi +++ b/ghc/compiler/codeGen/CgLoop2_1_3.lhi @@ -1,5 +1,6 @@ \begin{code} interface CgLoop2_1_3 1 __exports__ -Outputable Outputable (..) +CgExpr cgExpr (..) +CgExpr getPrimOpArgAmodes (..) \end{code} diff --git a/ghc/compiler/codeGen/CgTailCall.lhs b/ghc/compiler/codeGen/CgTailCall.lhs index 590a80a2076c..95055d854ea8 100644 --- a/ghc/compiler/codeGen/CgTailCall.lhs +++ b/ghc/compiler/codeGen/CgTailCall.lhs @@ -34,7 +34,8 @@ import CgStackery ( adjustRealSps, mkStkAmodes ) import CgUsages ( getSpARelOffset ) import CLabel ( mkStdUpdCodePtrVecLabel, mkConUpdCodePtrVecLabel ) import ClosureInfo ( nodeMustPointToIt, - getEntryConvention, EntryConvention(..) + getEntryConvention, EntryConvention(..), + LambdaFormInfo ) import CmdLineOpts ( opt_DoSemiTagging ) import HeapOffs ( zeroOff, SYN_IE(VirtualSpAOffset) ) diff --git a/ghc/compiler/codeGen/CodeGen.lhs b/ghc/compiler/codeGen/CodeGen.lhs index 4a1fed5c3ad4..5879c0f87701 100644 --- a/ghc/compiler/codeGen/CodeGen.lhs +++ b/ghc/compiler/codeGen/CodeGen.lhs @@ -27,6 +27,7 @@ import AbsCSyn import AbsCUtils ( mkAbstractCs, mkAbsCStmts ) import Bag ( foldBag ) +import CgBindery ( CgIdInfo ) import CgClosure ( cgTopRhsClosure ) import CgCon ( cgTopRhsCon ) import CgConTbls ( genStaticConBits ) @@ -35,6 +36,7 @@ import CmdLineOpts ( opt_SccProfilingOn, opt_CompilingGhcInternals, opt_EnsureSplittableC, opt_SccGroup ) import CStrings ( modnameToC ) +import FiniteMap ( FiniteMap ) import Maybes ( maybeToBool ) import PrimRep ( getPrimRepSize, PrimRep(..) ) import Util ( panic, assertPanic ) diff --git a/ghc/compiler/coreSyn/CoreUtils.lhs b/ghc/compiler/coreSyn/CoreUtils.lhs index e0e65de4af05..2000b32f85fe 100644 --- a/ghc/compiler/coreSyn/CoreUtils.lhs +++ b/ghc/compiler/coreSyn/CoreUtils.lhs @@ -50,7 +50,7 @@ import SrcLoc ( mkUnknownSrcLoc ) import TyVar ( cloneTyVar, isNullTyVarEnv, addOneToTyVarEnv, SYN_IE(TyVarEnv) ) -import Type ( mkFunTys, mkForAllTy, mkForAllUsageTy, mkTyVarTy, +import Type ( mkFunTy, mkForAllTy, mkForAllUsageTy, mkTyVarTy, getFunTy_maybe, applyTy, isPrimType, splitSigmaTy, splitFunTy, eqTy, applyTypeEnvToTy ) @@ -91,7 +91,7 @@ coreExprType (Con con args) = applyTypeToArgs (idType con) args coreExprType (Prim op args) = applyTypeToArgs (primOpType op) args coreExprType (Lam (ValBinder binder) expr) - = mkFunTys [idType binder] (coreExprType expr) + = idType binder `mkFunTy` coreExprType expr coreExprType (Lam (TyBinder tyvar) expr) = mkForAllTy tyvar (coreExprType expr) diff --git a/ghc/compiler/deSugar/Desugar.lhs b/ghc/compiler/deSugar/Desugar.lhs index da8603176d8d..697c32dd2f6e 100644 --- a/ghc/compiler/deSugar/Desugar.lhs +++ b/ghc/compiler/deSugar/Desugar.lhs @@ -11,7 +11,7 @@ module Desugar ( deSugar, DsMatchContext, pprDsWarnings ) where IMP_Ubiq(){-uitous-} import HsSyn ( HsBinds, HsExpr ) -import TcHsSyn ( TypecheckedHsBinds(..), TypecheckedHsExpr(..) ) +import TcHsSyn ( SYN_IE(TypecheckedHsBinds), SYN_IE(TypecheckedHsExpr) ) import CoreSyn import DsMonad diff --git a/ghc/compiler/deSugar/DsBinds.lhs b/ghc/compiler/deSugar/DsBinds.lhs index 99cf6d437c2e..250c98ec2825 100644 --- a/ghc/compiler/deSugar/DsBinds.lhs +++ b/ghc/compiler/deSugar/DsBinds.lhs @@ -18,9 +18,9 @@ IMPORT_DELOOPER(DsLoop) -- break dsExpr-ish loop import HsSyn -- lots of things hiding ( collectBinders{-also in CoreSyn-} ) import CoreSyn -- lots of things -import TcHsSyn ( TypecheckedHsBinds(..), TypecheckedHsExpr(..), - TypecheckedBind(..), TypecheckedMonoBinds(..), - TypecheckedPat(..) +import TcHsSyn ( SYN_IE(TypecheckedHsBinds), SYN_IE(TypecheckedHsExpr), + SYN_IE(TypecheckedBind), SYN_IE(TypecheckedMonoBinds), + SYN_IE(TypecheckedPat) ) import DsHsSyn ( collectTypedBinders, collectTypedPatBinders ) diff --git a/ghc/compiler/deSugar/DsExpr.lhs b/ghc/compiler/deSugar/DsExpr.lhs index d7b8e68ffdc3..e8f4398cc38d 100644 --- a/ghc/compiler/deSugar/DsExpr.lhs +++ b/ghc/compiler/deSugar/DsExpr.lhs @@ -16,9 +16,9 @@ import HsSyn ( failureFreePat, Stmt(..), Match(..), Qualifier, HsBinds, PolyType, GRHSsAndBinds ) -import TcHsSyn ( TypecheckedHsExpr(..), TypecheckedHsBinds(..), - TypecheckedRecordBinds(..), TypecheckedPat(..), - TypecheckedStmt(..) +import TcHsSyn ( SYN_IE(TypecheckedHsExpr), SYN_IE(TypecheckedHsBinds), + SYN_IE(TypecheckedRecordBinds), SYN_IE(TypecheckedPat), + SYN_IE(TypecheckedStmt) ) import CoreSyn @@ -28,7 +28,7 @@ import DsHsSyn ( outPatType ) import DsListComp ( dsListComp ) import DsUtils ( mkAppDs, mkConDs, mkPrimDs, dsExprToAtom, mkErrorAppDs, showForErr, EquationInfo, - MatchResult, DsCoreArg(..) + MatchResult, SYN_IE(DsCoreArg) ) import Match ( matchWrapper ) diff --git a/ghc/compiler/deSugar/DsGRHSs.lhs b/ghc/compiler/deSugar/DsGRHSs.lhs index ee11244ec36f..6b95110a284c 100644 --- a/ghc/compiler/deSugar/DsGRHSs.lhs +++ b/ghc/compiler/deSugar/DsGRHSs.lhs @@ -13,9 +13,9 @@ IMPORT_DELOOPER(DsLoop) -- break dsExpr/dsBinds-ish loop import HsSyn ( GRHSsAndBinds(..), GRHS(..), HsExpr, HsBinds ) -import TcHsSyn ( TypecheckedGRHSsAndBinds(..), TypecheckedGRHS(..), - TypecheckedPat(..), TypecheckedHsBinds(..), - TypecheckedHsExpr(..) ) +import TcHsSyn ( SYN_IE(TypecheckedGRHSsAndBinds), SYN_IE(TypecheckedGRHS), + SYN_IE(TypecheckedPat), SYN_IE(TypecheckedHsBinds), + SYN_IE(TypecheckedHsExpr) ) import CoreSyn ( SYN_IE(CoreBinding), SYN_IE(CoreExpr), mkCoLetsAny ) import DsMonad @@ -78,23 +78,21 @@ dsGRHSs ty kind pats (grhs:grhss) combineGRHSMatchResults match_result1 match_result2 dsGRHS ty kind pats (OtherwiseGRHS expr locn) - = putSrcLocDs locn ( + = putSrcLocDs locn $ dsExpr expr `thenDs` \ core_expr -> let expr_fn = \ ignore -> core_expr in returnDs (MatchResult CantFail ty expr_fn (DsMatchContext kind pats locn)) - ) dsGRHS ty kind pats (GRHS guard expr locn) - = putSrcLocDs locn ( + = putSrcLocDs locn $ dsExpr guard `thenDs` \ core_guard -> dsExpr expr `thenDs` \ core_expr -> let expr_fn = \ fail -> mkCoreIfThenElse core_guard core_expr fail in returnDs (MatchResult CanFail ty expr_fn (DsMatchContext kind pats locn)) - ) \end{code} diff --git a/ghc/compiler/deSugar/DsHsSyn.lhs b/ghc/compiler/deSugar/DsHsSyn.lhs index fa3f0fe6f690..08288bd97c85 100644 --- a/ghc/compiler/deSugar/DsHsSyn.lhs +++ b/ghc/compiler/deSugar/DsHsSyn.lhs @@ -12,8 +12,8 @@ IMP_Ubiq() import HsSyn ( OutPat(..), HsBinds(..), Bind(..), MonoBinds(..), Sig, HsExpr, GRHSsAndBinds, Match, HsLit ) -import TcHsSyn ( TypecheckedPat(..), TypecheckedBind(..), - TypecheckedMonoBinds(..) ) +import TcHsSyn ( SYN_IE(TypecheckedPat), SYN_IE(TypecheckedBind), + SYN_IE(TypecheckedMonoBinds) ) import Id ( idType ) import TysWiredIn ( mkListTy, mkTupleTy, unitTy ) diff --git a/ghc/compiler/deSugar/DsListComp.lhs b/ghc/compiler/deSugar/DsListComp.lhs index f0e388d6f281..8be75c125380 100644 --- a/ghc/compiler/deSugar/DsListComp.lhs +++ b/ghc/compiler/deSugar/DsListComp.lhs @@ -12,7 +12,7 @@ IMP_Ubiq() IMPORT_DELOOPER(DsLoop) -- break dsExpr-ish loop import HsSyn ( Qualifier(..), HsExpr, HsBinds ) -import TcHsSyn ( TypecheckedQual(..), TypecheckedHsExpr(..) , TypecheckedHsBinds(..) ) +import TcHsSyn ( SYN_IE(TypecheckedQual), SYN_IE(TypecheckedHsExpr) , SYN_IE(TypecheckedHsBinds) ) import DsHsSyn ( outPatType ) import CoreSyn @@ -22,7 +22,7 @@ import DsUtils import CmdLineOpts ( opt_FoldrBuildOn ) import CoreUtils ( coreExprType, mkCoreIfThenElse ) import PrelVals ( mkBuild, foldrId ) -import Type ( mkTyVarTy, mkForAllTy, mkFunTys ) +import Type ( mkTyVarTy, mkForAllTy, mkFunTys, mkFunTy ) import TysPrim ( alphaTy ) import TysWiredIn ( nilDataCon, consDataCon, listTyCon ) import TyVar ( alphaTyVar ) @@ -49,11 +49,14 @@ dsListComp expr quals else -- foldr/build lives! new_alpha_tyvar `thenDs` \ (n_tyvar, n_ty) -> let - alpha_to_alpha = mkFunTys [alphaTy] alphaTy + alpha_to_alpha = alphaTy `mkFunTy` alphaTy c_ty = mkFunTys [expr_ty, n_ty] n_ty g_ty = mkForAllTy alphaTyVar ( - (mkFunTys [expr_ty, alpha_to_alpha] alpha_to_alpha)) + (expr_ty `mkFunTy` alpha_to_alpha) + `mkFunTy` + alpha_to_alpha + ) in newSysLocalsDs [c_ty,n_ty,g_ty] `thenDs` \ [c, n, g] -> @@ -138,7 +141,7 @@ deListComp expr ((GeneratorQual pat list1):quals) core_list2 -- rule A' above u2_ty = outPatType pat res_ty = coreExprType core_list2 - h_ty = mkFunTys [u1_ty] res_ty + h_ty = u1_ty `mkFunTy` res_ty in newSysLocalsDs [h_ty, u1_ty, u2_ty, u3_ty] `thenDs` \ [h', u1, u2, u3] -> diff --git a/ghc/compiler/deSugar/DsLoop_1_3.lhi b/ghc/compiler/deSugar/DsLoop_1_3.lhi index 6f115029f38a..b0ae22a56dd7 100644 --- a/ghc/compiler/deSugar/DsLoop_1_3.lhi +++ b/ghc/compiler/deSugar/DsLoop_1_3.lhi @@ -1,5 +1,8 @@ \begin{code} interface DsLoop_1_3 1 __exports__ -Outputable Outputable (..) +Match match (..) +Match matchSimply (..) +DsBinds dsBinds (..) +DsExpr dsExpr (..) \end{code} diff --git a/ghc/compiler/deSugar/DsMonad.lhs b/ghc/compiler/deSugar/DsMonad.lhs index a6c8b6193420..3ea0bc2eb1bf 100644 --- a/ghc/compiler/deSugar/DsMonad.lhs +++ b/ghc/compiler/deSugar/DsMonad.lhs @@ -7,7 +7,7 @@ #include "HsVersions.h" module DsMonad ( - DsM(..), + SYN_IE(DsM), initDs, returnDs, thenDs, andDs, mapDs, listDs, mapAndUnzipDs, zipWithDs, uniqSMtoDsM, @@ -17,7 +17,7 @@ module DsMonad ( getSrcLocDs, putSrcLocDs, getModuleAndGroupDs, extendEnvDs, lookupEnvDs, lookupEnvWithDefaultDs, - DsIdEnv(..), + SYN_IE(DsIdEnv), lookupId, dsShadowError, @@ -38,7 +38,7 @@ import PprType ( GenType, GenTyVar ) import PprStyle ( PprStyle(..) ) import Pretty import SrcLoc ( unpackSrcLoc, mkUnknownSrcLoc, SrcLoc ) -import TcHsSyn ( TypecheckedPat(..) ) +import TcHsSyn ( SYN_IE(TypecheckedPat) ) import TyVar ( nullTyVarEnv, cloneTyVar, GenTyVar{-instance Eq-} ) import Unique ( Unique{-instances-} ) import UniqSupply ( splitUniqSupply, getUnique, getUniques, diff --git a/ghc/compiler/deSugar/DsUtils.lhs b/ghc/compiler/deSugar/DsUtils.lhs index b5024698cfbe..4e2126c0dbbb 100644 --- a/ghc/compiler/deSugar/DsUtils.lhs +++ b/ghc/compiler/deSugar/DsUtils.lhs @@ -13,7 +13,7 @@ module DsUtils ( combineGRHSMatchResults, combineMatchResults, - dsExprToAtom, DsCoreArg(..), + dsExprToAtom, SYN_IE(DsCoreArg), mkCoAlgCaseMatchResult, mkAppDs, mkConDs, mkPrimDs, mkErrorAppDs, mkCoLetsMatchResult, @@ -32,7 +32,7 @@ IMPORT_DELOOPER(DsLoop) ( match, matchSimply ) import HsSyn ( HsExpr(..), OutPat(..), HsLit(..), Match, HsBinds, Stmt, Qualifier, PolyType, ArithSeqInfo ) -import TcHsSyn ( TypecheckedPat(..) ) +import TcHsSyn ( SYN_IE(TypecheckedPat) ) import DsHsSyn ( outPatType ) import CoreSyn @@ -47,7 +47,7 @@ import Id ( idType, dataConArgTys, mkTupleCon, SYN_IE(DataCon), SYN_IE(DictVar), SYN_IE(Id), GenId ) import Literal ( Literal(..) ) import TyCon ( mkTupleTyCon, isNewTyCon, tyConDataCons ) -import Type ( mkTyVarTys, mkRhoTy, mkForAllTys, mkFunTys, +import Type ( mkTyVarTys, mkRhoTy, mkForAllTys, mkFunTy, mkTheta, isUnboxedType, applyTyCon, getAppTyCon ) import TysPrim ( voidTy ) @@ -578,7 +578,7 @@ mkFailurePair :: Type -- Result type of the whole case expression -- applied to unit tuple mkFailurePair ty | isUnboxedType ty - = newFailLocalDs (mkFunTys [voidTy] ty) `thenDs` \ fail_fun_var -> + = newFailLocalDs (voidTy `mkFunTy` ty) `thenDs` \ fail_fun_var -> newSysLocalDs voidTy `thenDs` \ fail_fun_arg -> returnDs (\ body -> NonRec fail_fun_var (Lam (ValBinder fail_fun_arg) body), diff --git a/ghc/compiler/deSugar/Match.lhs b/ghc/compiler/deSugar/Match.lhs index e63d55930e7d..eea766773db9 100644 --- a/ghc/compiler/deSugar/Match.lhs +++ b/ghc/compiler/deSugar/Match.lhs @@ -13,8 +13,8 @@ IMPORT_DELOOPER(DsLoop) -- here for paranoia-checking reasons -- and to break dsExpr/dsBinds-ish loop import HsSyn hiding ( collectBinders{-also from CoreSyn-} ) -import TcHsSyn ( TypecheckedPat(..), TypecheckedMatch(..), - TypecheckedHsBinds(..), TypecheckedHsExpr(..) ) +import TcHsSyn ( SYN_IE(TypecheckedPat), SYN_IE(TypecheckedMatch), + SYN_IE(TypecheckedHsBinds), SYN_IE(TypecheckedHsExpr) ) import DsHsSyn ( outPatType, collectTypedPatBinders ) import CoreSyn diff --git a/ghc/compiler/deSugar/MatchLit.lhs b/ghc/compiler/deSugar/MatchLit.lhs index 15c5519dbc43..26206ffb17e4 100644 --- a/ghc/compiler/deSugar/MatchLit.lhs +++ b/ghc/compiler/deSugar/MatchLit.lhs @@ -13,8 +13,8 @@ IMPORT_DELOOPER(DsLoop) -- break match-ish and dsExpr-ish loops import HsSyn ( HsLit(..), OutPat(..), HsExpr(..), Match, HsBinds, Stmt, Qualifier, PolyType, ArithSeqInfo ) -import TcHsSyn ( TypecheckedHsExpr(..), TypecheckedHsBinds(..), - TypecheckedPat(..) +import TcHsSyn ( SYN_IE(TypecheckedHsExpr), SYN_IE(TypecheckedHsBinds), + SYN_IE(TypecheckedPat) ) import CoreSyn ( SYN_IE(CoreExpr), SYN_IE(CoreBinding) ) diff --git a/ghc/compiler/main/Main.lhs b/ghc/compiler/main/Main.lhs index 8bd7f2438582..5afed2e89749 100644 --- a/ghc/compiler/main/Main.lhs +++ b/ghc/compiler/main/Main.lhs @@ -9,6 +9,7 @@ module Main ( main ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(IO(hGetContents,stdin,stderr,hPutStr,hClose,openFile,IOMode(..))) import HsSyn diff --git a/ghc/compiler/main/MkIface.lhs b/ghc/compiler/main/MkIface.lhs index 99f12ea47e6f..e5604554deef 100644 --- a/ghc/compiler/main/MkIface.lhs +++ b/ghc/compiler/main/MkIface.lhs @@ -19,17 +19,19 @@ module MkIface ( ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(IO(Handle,hPutStr,openFile,hClose,IOMode(..))) -import Bag ( emptyBag, snocBag, bagToList ) +import Bag ( bagToList ) import Class ( GenClass(..){-instance NamedThing-}, GenClassOp(..) ) import CmdLineOpts ( opt_ProduceHi ) import FieldLabel ( FieldLabel{-instance NamedThing-} ) -import FiniteMap ( fmToList, eltsFM ) +import FiniteMap ( emptyFM, addToFM, lookupFM, fmToList, eltsFM, FiniteMap ) import HsSyn import Id ( idType, dataConRawArgTys, dataConFieldLabels, dataConStrictMarks, StrictnessMark(..), GenId{-instance NamedThing/Outputable-} ) +import Maybes ( maybeToBool ) import Name ( origName, nameOf, moduleOf, exportFlagOn, nameExportFlag, ExportFlag(..), isLexSym, isLocallyDefined, isWiredInName, @@ -45,12 +47,12 @@ import PprType -- most of it (??) import PrelInfo ( builtinNameInfo ) import Pretty ( prettyToUn ) import Unpretty -- ditto -import RnHsSyn ( RenamedHsModule(..), RnName{-instance NamedThing-} ) -import TcModule ( TcIfaceInfo(..) ) +import RnHsSyn ( isRnConstr, SYN_IE(RenamedHsModule), RnName{-instance NamedThing-} ) +import TcModule ( SYN_IE(TcIfaceInfo) ) import TcInstUtil ( InstInfo(..) ) import TyCon ( TyCon(..){-instance NamedThing-}, NewOrData(..) ) import Type ( mkSigmaTy, mkDictTy, getAppTyCon, splitForAllTy ) -import Util ( sortLt, zipWithEqual, zipWith3Equal, assertPanic, panic{-ToDo:rm-}, pprTrace{-ToDo:rm-} ) +import Util ( sortLt, removeDups, zipWithEqual, zipWith3Equal, assertPanic, panic{-ToDo:rm-}, pprTrace{-ToDo:rm-} ) uppSemid x = uppBeside (prettyToUn (ppr PprInterface x)) uppSemi -- micro util ppr_ty ty = prettyToUn (pprType PprInterface ty) @@ -189,24 +191,23 @@ ifaceExportList (Just if_hdl) = let (vals_wired, tcs_wired) = case builtinNameInfo of { ((vals_fm,tcs_fm), _, _) -> - ([ getName rn | rn <- eltsFM vals_fm ] - ,[ getName rn | rn <- eltsFM tcs_fm ]) } + (eltsFM vals_fm, eltsFM tcs_fm) } - name_flag_pairs :: Bag (OrigName, ExportFlag) + name_flag_pairs :: FiniteMap OrigName ExportFlag name_flag_pairs - = foldr from_wired - (foldr from_wired + = foldr (from_wired True{-val-ish-}) + (foldr (from_wired False{-tycon-ish-}) (foldr from_ty (foldr from_cls (foldr from_sig - (from_binds binds emptyBag{-init accum-}) + (from_binds binds emptyFM{-init accum-}) sigs) classdecls) typedecls) tcs_wired) vals_wired - sorted_pairs = sortLt lexical_lt (bagToList name_flag_pairs) + sorted_pairs = sortLt lexical_lt (fmToList name_flag_pairs) in hPutStr if_hdl "\n__exports__\n" >> @@ -223,21 +224,33 @@ ifaceExportList (Just if_hdl) from_binds bs acc = maybe_add_list acc (collectTopLevelBinders bs) -------------- - from_wired n acc - | exportFlagOn ef = acc `snocBag` (origName "maybe_add" n, ef) + from_wired is_val_ish rn acc + | on_in_acc = acc -- if already in acc (presumably from real decl), + -- don't take the dubious export flag from the + -- wired-in chappy + | is_val_ish && isRnConstr rn + = acc -- these things don't cause export-ery + | exportFlagOn ef = addToFM acc on ef | otherwise = acc where + n = getName rn ef = export_fn n + on = origName "from_wired" n + (OrigName _ str) = on + on_in_acc = maybeToBool (lookupFM acc on) -------------- - maybe_add :: Bag (OrigName, ExportFlag) -> RnName -> Bag (OrigName, ExportFlag) + maybe_add :: FiniteMap OrigName ExportFlag -> RnName -> FiniteMap OrigName ExportFlag maybe_add acc rn - | exportFlagOn ef = acc `snocBag` (origName "maybe_add" n, ef) + | on_in_acc = trace "maybe_add?" acc -- surprising! + | exportFlagOn ef = addToFM acc on ef | otherwise = acc where - n = getName rn ef = nameExportFlag n + n = getName rn + on = origName "maybe_add" n + on_in_acc = maybeToBool (lookupFM acc on) -------------- maybe_add_list acc [] = acc diff --git a/ghc/compiler/nativeGen/AbsCStixGen.lhs b/ghc/compiler/nativeGen/AbsCStixGen.lhs index 144f586bd56e..223b0157d6b3 100644 --- a/ghc/compiler/nativeGen/AbsCStixGen.lhs +++ b/ghc/compiler/nativeGen/AbsCStixGen.lhs @@ -8,6 +8,7 @@ module AbsCStixGen ( genCodeAbstractC ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(Ratio(Rational)) import AbsCSyn import Stix diff --git a/ghc/compiler/nativeGen/AsmCodeGen.lhs b/ghc/compiler/nativeGen/AsmCodeGen.lhs index 50c6faeb23bc..d88986893c0e 100644 --- a/ghc/compiler/nativeGen/AsmCodeGen.lhs +++ b/ghc/compiler/nativeGen/AsmCodeGen.lhs @@ -8,6 +8,7 @@ module AsmCodeGen ( writeRealAsm, dumpRealAsm ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(IO(Handle)) import MachMisc import MachRegs @@ -23,7 +24,7 @@ import PrimRep ( PrimRep{-instance Eq-} ) import RegAllocInfo ( mkMRegsState, MRegsState ) import Stix ( StixTree(..), StixReg(..), CodeSegment ) import UniqSupply ( returnUs, thenUs, mapUs, SYN_IE(UniqSM) ) -import Unpretty ( uppPutStr, uppShow, uppAboves, Unpretty(..) ) +import Unpretty ( uppPutStr, uppShow, uppAboves, SYN_IE(Unpretty) ) \end{code} The 96/03 native-code generator has machine-independent and diff --git a/ghc/compiler/nativeGen/AsmRegAlloc.lhs b/ghc/compiler/nativeGen/AsmRegAlloc.lhs index 00d5d79e5682..b7e85f8eb11a 100644 --- a/ghc/compiler/nativeGen/AsmRegAlloc.lhs +++ b/ghc/compiler/nativeGen/AsmRegAlloc.lhs @@ -10,7 +10,7 @@ module AsmRegAlloc ( runRegAllocate, runHairyRegAllocate ) where IMP_Ubiq(){-uitous-} -import MachCode ( InstrList(..) ) +import MachCode ( SYN_IE(InstrList) ) import MachMisc ( Instr ) import MachRegs import RegAllocInfo diff --git a/ghc/compiler/nativeGen/MachCode.lhs b/ghc/compiler/nativeGen/MachCode.lhs index 031c3ba038a0..6a51d9c22d70 100644 --- a/ghc/compiler/nativeGen/MachCode.lhs +++ b/ghc/compiler/nativeGen/MachCode.lhs @@ -12,7 +12,7 @@ structure should not be too overwhelming. #include "HsVersions.h" #include "nativeGen/NCG.h" -module MachCode ( stmt2Instrs, asmVoid, InstrList(..) ) where +module MachCode ( stmt2Instrs, asmVoid, SYN_IE(InstrList) ) where IMP_Ubiq(){-uitious-} @@ -334,46 +334,46 @@ getRegister (StPrim primop [x]) -- unary PrimOps getRegister (StPrim primop [x, y]) -- dyadic PrimOps = case primop of - CharGtOp -> trivialCode (CMP LT) y x + CharGtOp -> trivialCode (CMP LTT) y x CharGeOp -> trivialCode (CMP LE) y x - CharEqOp -> trivialCode (CMP EQ) x y + CharEqOp -> trivialCode (CMP EQQ) x y CharNeOp -> int_NE_code x y - CharLtOp -> trivialCode (CMP LT) x y + CharLtOp -> trivialCode (CMP LTT) x y CharLeOp -> trivialCode (CMP LE) x y - IntGtOp -> trivialCode (CMP LT) y x + IntGtOp -> trivialCode (CMP LTT) y x IntGeOp -> trivialCode (CMP LE) y x - IntEqOp -> trivialCode (CMP EQ) x y + IntEqOp -> trivialCode (CMP EQQ) x y IntNeOp -> int_NE_code x y - IntLtOp -> trivialCode (CMP LT) x y + IntLtOp -> trivialCode (CMP LTT) x y IntLeOp -> trivialCode (CMP LE) x y WordGtOp -> trivialCode (CMP ULT) y x WordGeOp -> trivialCode (CMP ULE) x y - WordEqOp -> trivialCode (CMP EQ) x y + WordEqOp -> trivialCode (CMP EQQ) x y WordNeOp -> int_NE_code x y WordLtOp -> trivialCode (CMP ULT) x y WordLeOp -> trivialCode (CMP ULE) x y AddrGtOp -> trivialCode (CMP ULT) y x AddrGeOp -> trivialCode (CMP ULE) y x - AddrEqOp -> trivialCode (CMP EQ) x y + AddrEqOp -> trivialCode (CMP EQQ) x y AddrNeOp -> int_NE_code x y AddrLtOp -> trivialCode (CMP ULT) x y AddrLeOp -> trivialCode (CMP ULE) x y - FloatGtOp -> cmpF_code (FCMP TF LE) EQ x y - FloatGeOp -> cmpF_code (FCMP TF LT) EQ x y - FloatEqOp -> cmpF_code (FCMP TF EQ) NE x y - FloatNeOp -> cmpF_code (FCMP TF EQ) EQ x y - FloatLtOp -> cmpF_code (FCMP TF LT) NE x y + FloatGtOp -> cmpF_code (FCMP TF LE) EQQ x y + FloatGeOp -> cmpF_code (FCMP TF LTT) EQQ x y + FloatEqOp -> cmpF_code (FCMP TF EQQ) NE x y + FloatNeOp -> cmpF_code (FCMP TF EQQ) EQQ x y + FloatLtOp -> cmpF_code (FCMP TF LTT) NE x y FloatLeOp -> cmpF_code (FCMP TF LE) NE x y - DoubleGtOp -> cmpF_code (FCMP TF LE) EQ x y - DoubleGeOp -> cmpF_code (FCMP TF LT) EQ x y - DoubleEqOp -> cmpF_code (FCMP TF EQ) NE x y - DoubleNeOp -> cmpF_code (FCMP TF EQ) EQ x y - DoubleLtOp -> cmpF_code (FCMP TF LT) NE x y + DoubleGtOp -> cmpF_code (FCMP TF LE) EQQ x y + DoubleGeOp -> cmpF_code (FCMP TF LTT) EQQ x y + DoubleEqOp -> cmpF_code (FCMP TF EQQ) NE x y + DoubleNeOp -> cmpF_code (FCMP TF EQQ) EQQ x y + DoubleLtOp -> cmpF_code (FCMP TF LTT) NE x y DoubleLeOp -> cmpF_code (FCMP TF LE) NE x y IntAddOp -> trivialCode (ADD Q False) x y @@ -416,7 +416,7 @@ getRegister (StPrim primop [x, y]) -- dyadic PrimOps int_NE_code :: StixTree -> StixTree -> UniqSM Register int_NE_code x y - = trivialCode (CMP EQ) x y `thenUs` \ register -> + = trivialCode (CMP EQQ) x y `thenUs` \ register -> getNewRegNCG IntRep `thenUs` \ tmp -> let code = registerCode register tmp @@ -443,9 +443,9 @@ getRegister (StPrim primop [x, y]) -- dyadic PrimOps result = registerName register tmp code__2 dst = code . mkSeqInstrs [ - OR zero (RIImm (ImmInt 1)) dst, - BF cond result (ImmCLbl lbl), - OR zero (RIReg zero) dst, + OR zeroh (RIImm (ImmInt 1)) dst, + BF cond result (ImmCLbl lbl), + OR zeroh (RIReg zeroh) dst, LABEL lbl] in returnUs (Any IntRep code__2) @@ -466,7 +466,7 @@ getRegister (StInd pk mem) getRegister (StInt i) | fits8Bits i = let - code dst = mkSeqInstr (OR zero (RIImm src) dst) + code dst = mkSeqInstr (OR zeroh (RIImm src) dst) in returnUs (Any IntRep code) | otherwise @@ -584,46 +584,46 @@ getRegister (StPrim primop [x]) -- unary PrimOps getRegister (StPrim primop [x, y]) -- dyadic PrimOps = case primop of - CharGtOp -> condIntReg GT x y + CharGtOp -> condIntReg GTT x y CharGeOp -> condIntReg GE x y - CharEqOp -> condIntReg EQ x y + CharEqOp -> condIntReg EQQ x y CharNeOp -> condIntReg NE x y - CharLtOp -> condIntReg LT x y + CharLtOp -> condIntReg LTT x y CharLeOp -> condIntReg LE x y - IntGtOp -> condIntReg GT x y + IntGtOp -> condIntReg GTT x y IntGeOp -> condIntReg GE x y - IntEqOp -> condIntReg EQ x y + IntEqOp -> condIntReg EQQ x y IntNeOp -> condIntReg NE x y - IntLtOp -> condIntReg LT x y + IntLtOp -> condIntReg LTT x y IntLeOp -> condIntReg LE x y WordGtOp -> condIntReg GU x y WordGeOp -> condIntReg GEU x y - WordEqOp -> condIntReg EQ x y + WordEqOp -> condIntReg EQQ x y WordNeOp -> condIntReg NE x y WordLtOp -> condIntReg LU x y WordLeOp -> condIntReg LEU x y AddrGtOp -> condIntReg GU x y AddrGeOp -> condIntReg GEU x y - AddrEqOp -> condIntReg EQ x y + AddrEqOp -> condIntReg EQQ x y AddrNeOp -> condIntReg NE x y AddrLtOp -> condIntReg LU x y AddrLeOp -> condIntReg LEU x y - FloatGtOp -> condFltReg GT x y + FloatGtOp -> condFltReg GTT x y FloatGeOp -> condFltReg GE x y - FloatEqOp -> condFltReg EQ x y + FloatEqOp -> condFltReg EQQ x y FloatNeOp -> condFltReg NE x y - FloatLtOp -> condFltReg LT x y + FloatLtOp -> condFltReg LTT x y FloatLeOp -> condFltReg LE x y - DoubleGtOp -> condFltReg GT x y + DoubleGtOp -> condFltReg GTT x y DoubleGeOp -> condFltReg GE x y - DoubleEqOp -> condFltReg EQ x y + DoubleEqOp -> condFltReg EQQ x y DoubleNeOp -> condFltReg NE x y - DoubleLtOp -> condFltReg LT x y + DoubleLtOp -> condFltReg LTT x y DoubleLeOp -> condFltReg LE x y IntAddOp -> {- ToDo: fix this, whatever it is (WDP 96/04)... @@ -931,46 +931,46 @@ getRegister (StPrim primop [x]) -- unary PrimOps getRegister (StPrim primop [x, y]) -- dyadic PrimOps = case primop of - CharGtOp -> condIntReg GT x y + CharGtOp -> condIntReg GTT x y CharGeOp -> condIntReg GE x y - CharEqOp -> condIntReg EQ x y + CharEqOp -> condIntReg EQQ x y CharNeOp -> condIntReg NE x y - CharLtOp -> condIntReg LT x y + CharLtOp -> condIntReg LTT x y CharLeOp -> condIntReg LE x y - IntGtOp -> condIntReg GT x y + IntGtOp -> condIntReg GTT x y IntGeOp -> condIntReg GE x y - IntEqOp -> condIntReg EQ x y + IntEqOp -> condIntReg EQQ x y IntNeOp -> condIntReg NE x y - IntLtOp -> condIntReg LT x y + IntLtOp -> condIntReg LTT x y IntLeOp -> condIntReg LE x y WordGtOp -> condIntReg GU x y WordGeOp -> condIntReg GEU x y - WordEqOp -> condIntReg EQ x y + WordEqOp -> condIntReg EQQ x y WordNeOp -> condIntReg NE x y WordLtOp -> condIntReg LU x y WordLeOp -> condIntReg LEU x y AddrGtOp -> condIntReg GU x y AddrGeOp -> condIntReg GEU x y - AddrEqOp -> condIntReg EQ x y + AddrEqOp -> condIntReg EQQ x y AddrNeOp -> condIntReg NE x y AddrLtOp -> condIntReg LU x y AddrLeOp -> condIntReg LEU x y - FloatGtOp -> condFltReg GT x y + FloatGtOp -> condFltReg GTT x y FloatGeOp -> condFltReg GE x y - FloatEqOp -> condFltReg EQ x y + FloatEqOp -> condFltReg EQQ x y FloatNeOp -> condFltReg NE x y - FloatLtOp -> condFltReg LT x y + FloatLtOp -> condFltReg LTT x y FloatLeOp -> condFltReg LE x y - DoubleGtOp -> condFltReg GT x y + DoubleGtOp -> condFltReg GTT x y DoubleGeOp -> condFltReg GE x y - DoubleEqOp -> condFltReg EQ x y + DoubleEqOp -> condFltReg EQQ x y DoubleNeOp -> condFltReg NE x y - DoubleLtOp -> condFltReg LT x y + DoubleLtOp -> condFltReg LTT x y DoubleLeOp -> condFltReg LE x y IntAddOp -> trivialCode (ADD False False) x y @@ -1263,46 +1263,46 @@ getCondCode = panic "MachCode.getCondCode: not on Alphas" getCondCode (StPrim primop [x, y]) = case primop of - CharGtOp -> condIntCode GT x y + CharGtOp -> condIntCode GTT x y CharGeOp -> condIntCode GE x y - CharEqOp -> condIntCode EQ x y + CharEqOp -> condIntCode EQQ x y CharNeOp -> condIntCode NE x y - CharLtOp -> condIntCode LT x y + CharLtOp -> condIntCode LTT x y CharLeOp -> condIntCode LE x y - IntGtOp -> condIntCode GT x y + IntGtOp -> condIntCode GTT x y IntGeOp -> condIntCode GE x y - IntEqOp -> condIntCode EQ x y + IntEqOp -> condIntCode EQQ x y IntNeOp -> condIntCode NE x y - IntLtOp -> condIntCode LT x y + IntLtOp -> condIntCode LTT x y IntLeOp -> condIntCode LE x y WordGtOp -> condIntCode GU x y WordGeOp -> condIntCode GEU x y - WordEqOp -> condIntCode EQ x y + WordEqOp -> condIntCode EQQ x y WordNeOp -> condIntCode NE x y WordLtOp -> condIntCode LU x y WordLeOp -> condIntCode LEU x y AddrGtOp -> condIntCode GU x y AddrGeOp -> condIntCode GEU x y - AddrEqOp -> condIntCode EQ x y + AddrEqOp -> condIntCode EQQ x y AddrNeOp -> condIntCode NE x y AddrLtOp -> condIntCode LU x y AddrLeOp -> condIntCode LEU x y - FloatGtOp -> condFltCode GT x y + FloatGtOp -> condFltCode GTT x y FloatGeOp -> condFltCode GE x y - FloatEqOp -> condFltCode EQ x y + FloatEqOp -> condFltCode EQQ x y FloatNeOp -> condFltCode NE x y - FloatLtOp -> condFltCode LT x y + FloatLtOp -> condFltCode LTT x y FloatLeOp -> condFltCode LE x y - DoubleGtOp -> condFltCode GT x y + DoubleGtOp -> condFltCode GTT x y DoubleGeOp -> condFltCode GE x y - DoubleEqOp -> condFltCode EQ x y + DoubleEqOp -> condFltCode EQQ x y DoubleNeOp -> condFltCode NE x y - DoubleLtOp -> condFltCode LT x y + DoubleLtOp -> condFltCode LTT x y DoubleLeOp -> condFltCode LE x y #endif {- i386_TARGET_ARCH || sparc_TARGET_ARCH -} @@ -1460,8 +1460,8 @@ condFltCode cond x y fix_FP_cond :: Cond -> Cond fix_FP_cond GE = GEU -fix_FP_cond GT = GU -fix_FP_cond LT = LU +fix_FP_cond GTT = GU +fix_FP_cond LTT = LU fix_FP_cond LE = LEU fix_FP_cond any = any @@ -1570,7 +1570,7 @@ assignIntCode pk dst src = getRegister dst `thenUs` \ register1 -> getRegister src `thenUs` \ register2 -> let - dst__2 = registerName register1 zero + dst__2 = registerName register1 zeroh code = registerCode register2 dst__2 src__2 = registerName register2 dst__2 code__2 = if isFixed register2 @@ -1704,7 +1704,7 @@ assignFltCode pk dst src = getRegister dst `thenUs` \ register1 -> getRegister src `thenUs` \ register2 -> let - dst__2 = registerName register1 zero + dst__2 = registerName register1 zeroh code = registerCode register2 dst__2 src__2 = registerName register2 dst__2 code__2 = if isFixed register2 @@ -1853,7 +1853,7 @@ genJump :: StixTree{-the branch target-} -> UniqSM InstrBlock genJump (StCLbl lbl) | isAsmTemp lbl = returnInstr (BR target) - | otherwise = returnInstrs [LDA pv (AddrImm target), JMP zero (AddrReg pv) 0] + | otherwise = returnInstrs [LDA pv (AddrImm target), JMP zeroh (AddrReg pv) 0] where target = ImmCLbl lbl @@ -1866,9 +1866,9 @@ genJump tree target = registerName register pv in if isFixed register then - returnSeq code [OR dst (RIReg dst) pv, JMP zero (AddrReg pv) 0] + returnSeq code [OR dst (RIReg dst) pv, JMP zeroh (AddrReg pv) 0] else - returnUs (code . mkSeqInstr (JMP zero (AddrReg pv) 0)) + returnUs (code . mkSeqInstr (JMP zeroh (AddrReg pv) 0)) #endif {- alpha_TARGET_ARCH -} -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1973,30 +1973,30 @@ genCondJump lbl (StPrim op [x, StInt 0]) in returnSeq code [BI (cmpOp op) value target] where - cmpOp CharGtOp = GT + cmpOp CharGtOp = GTT cmpOp CharGeOp = GE - cmpOp CharEqOp = EQ + cmpOp CharEqOp = EQQ cmpOp CharNeOp = NE - cmpOp CharLtOp = LT + cmpOp CharLtOp = LTT cmpOp CharLeOp = LE - cmpOp IntGtOp = GT + cmpOp IntGtOp = GTT cmpOp IntGeOp = GE - cmpOp IntEqOp = EQ + cmpOp IntEqOp = EQQ cmpOp IntNeOp = NE - cmpOp IntLtOp = LT + cmpOp IntLtOp = LTT cmpOp IntLeOp = LE cmpOp WordGtOp = NE cmpOp WordGeOp = ALWAYS - cmpOp WordEqOp = EQ + cmpOp WordEqOp = EQQ cmpOp WordNeOp = NE cmpOp WordLtOp = NEVER - cmpOp WordLeOp = EQ + cmpOp WordLeOp = EQQ cmpOp AddrGtOp = NE cmpOp AddrGeOp = ALWAYS - cmpOp AddrEqOp = EQ + cmpOp AddrEqOp = EQQ cmpOp AddrNeOp = NE cmpOp AddrLtOp = NEVER - cmpOp AddrLeOp = EQ + cmpOp AddrLeOp = EQQ genCondJump lbl (StPrim op [x, StDouble 0.0]) = getRegister x `thenUs` \ register -> @@ -2010,17 +2010,17 @@ genCondJump lbl (StPrim op [x, StDouble 0.0]) in returnUs (code . mkSeqInstr (BF (cmpOp op) value target)) where - cmpOp FloatGtOp = GT + cmpOp FloatGtOp = GTT cmpOp FloatGeOp = GE - cmpOp FloatEqOp = EQ + cmpOp FloatEqOp = EQQ cmpOp FloatNeOp = NE - cmpOp FloatLtOp = LT + cmpOp FloatLtOp = LTT cmpOp FloatLeOp = LE - cmpOp DoubleGtOp = GT + cmpOp DoubleGtOp = GTT cmpOp DoubleGeOp = GE - cmpOp DoubleEqOp = EQ + cmpOp DoubleEqOp = EQQ cmpOp DoubleNeOp = NE - cmpOp DoubleLtOp = LT + cmpOp DoubleLtOp = LTT cmpOp DoubleLeOp = LE genCondJump lbl (StPrim op [x, y]) @@ -2051,17 +2051,17 @@ genCondJump lbl (StPrim op [x, y]) DoubleLeOp -> True _ -> False (instr, cond) = case op of - FloatGtOp -> (FCMP TF LE, EQ) - FloatGeOp -> (FCMP TF LT, EQ) - FloatEqOp -> (FCMP TF EQ, NE) - FloatNeOp -> (FCMP TF EQ, EQ) - FloatLtOp -> (FCMP TF LT, NE) + FloatGtOp -> (FCMP TF LE, EQQ) + FloatGeOp -> (FCMP TF LTT, EQQ) + FloatEqOp -> (FCMP TF EQQ, NE) + FloatNeOp -> (FCMP TF EQQ, EQQ) + FloatLtOp -> (FCMP TF LTT, NE) FloatLeOp -> (FCMP TF LE, NE) - DoubleGtOp -> (FCMP TF LE, EQ) - DoubleGeOp -> (FCMP TF LT, EQ) - DoubleEqOp -> (FCMP TF EQ, NE) - DoubleNeOp -> (FCMP TF EQ, EQ) - DoubleLtOp -> (FCMP TF LT, NE) + DoubleGtOp -> (FCMP TF LE, EQQ) + DoubleGeOp -> (FCMP TF LTT, EQQ) + DoubleEqOp -> (FCMP TF EQQ, NE) + DoubleNeOp -> (FCMP TF EQQ, EQQ) + DoubleLtOp -> (FCMP TF LTT, NE) DoubleLeOp -> (FCMP TF LE, NE) genCondJump lbl (StPrim op [x, y]) @@ -2075,28 +2075,28 @@ genCondJump lbl (StPrim op [x, y]) returnUs (code . mkSeqInstr (BI cond result target)) where (instr, cond) = case op of - CharGtOp -> (CMP LE, EQ) - CharGeOp -> (CMP LT, EQ) - CharEqOp -> (CMP EQ, NE) - CharNeOp -> (CMP EQ, EQ) - CharLtOp -> (CMP LT, NE) + CharGtOp -> (CMP LE, EQQ) + CharGeOp -> (CMP LTT, EQQ) + CharEqOp -> (CMP EQQ, NE) + CharNeOp -> (CMP EQQ, EQQ) + CharLtOp -> (CMP LTT, NE) CharLeOp -> (CMP LE, NE) - IntGtOp -> (CMP LE, EQ) - IntGeOp -> (CMP LT, EQ) - IntEqOp -> (CMP EQ, NE) - IntNeOp -> (CMP EQ, EQ) - IntLtOp -> (CMP LT, NE) + IntGtOp -> (CMP LE, EQQ) + IntGeOp -> (CMP LTT, EQQ) + IntEqOp -> (CMP EQQ, NE) + IntNeOp -> (CMP EQQ, EQQ) + IntLtOp -> (CMP LTT, NE) IntLeOp -> (CMP LE, NE) - WordGtOp -> (CMP ULE, EQ) - WordGeOp -> (CMP ULT, EQ) - WordEqOp -> (CMP EQ, NE) - WordNeOp -> (CMP EQ, EQ) + WordGtOp -> (CMP ULE, EQQ) + WordGeOp -> (CMP ULT, EQQ) + WordEqOp -> (CMP EQQ, NE) + WordNeOp -> (CMP EQQ, EQQ) WordLtOp -> (CMP ULT, NE) WordLeOp -> (CMP ULE, NE) - AddrGtOp -> (CMP ULE, EQ) - AddrGeOp -> (CMP ULT, EQ) - AddrEqOp -> (CMP EQ, NE) - AddrNeOp -> (CMP EQ, EQ) + AddrGtOp -> (CMP ULE, EQQ) + AddrGeOp -> (CMP ULT, EQQ) + AddrEqOp -> (CMP EQQ, NE) + AddrNeOp -> (CMP EQQ, EQQ) AddrLtOp -> (CMP ULT, NE) AddrLeOp -> (CMP ULE, NE) @@ -2453,7 +2453,7 @@ condFltReg cond x y -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #if sparc_TARGET_ARCH -condIntReg EQ x (StInt 0) +condIntReg EQQ x (StInt 0) = getRegister x `thenUs` \ register -> getNewRegNCG IntRep `thenUs` \ tmp -> let @@ -2465,7 +2465,7 @@ condIntReg EQ x (StInt 0) in returnUs (Any IntRep code__2) -condIntReg EQ x y +condIntReg EQQ x y = getRegister x `thenUs` \ register1 -> getRegister y `thenUs` \ register2 -> getNewRegNCG IntRep `thenUs` \ tmp1 -> diff --git a/ghc/compiler/nativeGen/MachMisc.lhs b/ghc/compiler/nativeGen/MachMisc.lhs index 54f761601d21..055f9eb474ec 100644 --- a/ghc/compiler/nativeGen/MachMisc.lhs +++ b/ghc/compiler/nativeGen/MachMisc.lhs @@ -44,6 +44,7 @@ module MachMisc ( IMP_Ubiq(){-uitous-} IMPORT_DELOOPER(AbsCLoop) ( fixedHdrSizeInWords, varHdrSizeInWords ) -- paranoia IMPORT_DELOOPER(NcgLoop) ( underscorePrefix, fmtAsmLbl ) -- paranoia +IMPORT_1_3(Char(isDigit)) import AbsCSyn ( MagicId(..) ) import AbsCUtils ( magicIdPrimRep ) @@ -295,11 +296,11 @@ exactLog2 x data Cond #if alpha_TARGET_ARCH = ALWAYS -- For BI (same as BR) - | EQ -- For CMP and BI + | EQQ -- For CMP and BI (NB: "EQ" is a 1.3 Prelude name) | GE -- For BI only - | GT -- For BI only + | GTT -- For BI only (NB: "GT" is a 1.3 Prelude name) | LE -- For CMP and BI - | LT -- For CMP and BI + | LTT -- For CMP and BI (NB: "LT" is a 1.3 Prelude name) | NE -- For BI only | NEVER -- For BI (null instruction) | ULE -- For CMP only @@ -307,14 +308,14 @@ data Cond #endif #if i386_TARGET_ARCH = ALWAYS -- What's really used? ToDo - | EQ + | EQQ | GE | GEU - | GT + | GTT | GU | LE | LEU - | LT + | LTT | LU | NE | NEG @@ -322,14 +323,14 @@ data Cond #endif #if sparc_TARGET_ARCH = ALWAYS -- What's really used? ToDo - | EQ + | EQQ | GE | GEU - | GT + | GTT | GU | LE | LEU - | LT + | LTT | LU | NE | NEG diff --git a/ghc/compiler/nativeGen/MachRegs.lhs b/ghc/compiler/nativeGen/MachRegs.lhs index b48f136dc551..19ad5718cbae 100644 --- a/ghc/compiler/nativeGen/MachRegs.lhs +++ b/ghc/compiler/nativeGen/MachRegs.lhs @@ -19,7 +19,7 @@ module MachRegs ( Imm(..), Addr(..), RegLoc(..), - RegNo(..), + SYN_IE(RegNo), addrOffset, argRegs, @@ -44,7 +44,7 @@ module MachRegs ( , allArgRegs , fits8Bits , fReg - , gp, pv, ra, sp, t9, t10, t11, t12, v0, f0, zero + , gp, pv, ra, sp, t9, t10, t11, t12, v0, f0, zeroh #endif #if i386_TARGET_ARCH , eax, ebx, ecx, edx, esi, esp @@ -73,7 +73,7 @@ import Unique ( mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3, Unique{-instance Ord3-} ) import UniqSupply ( getUnique, returnUs, thenUs, SYN_IE(UniqSM) ) -import Unpretty ( uppStr, Unpretty(..) ) +import Unpretty ( uppStr, SYN_IE(Unpretty) ) import Util ( panic ) \end{code} @@ -378,14 +378,14 @@ is defined in StgRegs.h. We are, of course, prepared for any eventuality. fReg :: Int -> Int fReg x = (32 + x) -v0, f0, ra, pv, gp, sp, zero :: Reg -v0 = realReg 0 -f0 = realReg (fReg 0) -ra = FixedReg ILIT(26) -pv = t12 -gp = FixedReg ILIT(29) -sp = FixedReg ILIT(30) -zero = FixedReg ILIT(31) +v0, f0, ra, pv, gp, sp, zeroh :: Reg +v0 = realReg 0 +f0 = realReg (fReg 0) +ra = FixedReg ILIT(26) +pv = t12 +gp = FixedReg ILIT(29) +sp = FixedReg ILIT(30) +zeroh = FixedReg ILIT(31) -- "zero" is used in 1.3 (MonadZero method) t9, t10, t11, t12 :: Reg t9 = realReg 23 @@ -910,7 +910,7 @@ freeReg ILIT(26) = _FALSE_ -- return address (ra) freeReg ILIT(28) = _FALSE_ -- reserved for the assembler (at) freeReg ILIT(29) = _FALSE_ -- global pointer (gp) freeReg ILIT(30) = _FALSE_ -- stack pointer (sp) -freeReg ILIT(31) = _FALSE_ -- always zero (zero) +freeReg ILIT(31) = _FALSE_ -- always zero (zeroh) freeReg ILIT(63) = _FALSE_ -- always zero (f31) #endif diff --git a/ghc/compiler/nativeGen/NcgLoop_1_3.lhi b/ghc/compiler/nativeGen/NcgLoop_1_3.lhi index 5cc8f208d13c..34415d81255b 100644 --- a/ghc/compiler/nativeGen/NcgLoop_1_3.lhi +++ b/ghc/compiler/nativeGen/NcgLoop_1_3.lhi @@ -3,4 +3,5 @@ interface NcgLoop_1_3 1 __exports__ MachMisc underscorePrefix (..) MachMisc fmtAsmLbl (..) +StixPrim amodeToStix (..) \end{code} diff --git a/ghc/compiler/nativeGen/PprMach.lhs b/ghc/compiler/nativeGen/PprMach.lhs index 3d4d67954df2..be9b18d7b131 100644 --- a/ghc/compiler/nativeGen/PprMach.lhs +++ b/ghc/compiler/nativeGen/PprMach.lhs @@ -14,6 +14,13 @@ We start with the @pprXXX@s with some cross-platform commonality module PprMach ( pprInstr ) where IMP_Ubiq(){-uitious-} +IMPORT_1_3(Char(isPrint,isDigit)) +IMPORT_1_3(qualified GHCbase(Addr(..))) -- to see innards +#if __GLASGOW_HASKELL__ >= 200 +# define A_HASH GHCbase.A# +#else +# define A_HASH A# +#endif import MachRegs -- may differ per-platform import MachMisc @@ -237,20 +244,20 @@ pprCond :: Cond -> Unpretty pprCond c = uppPStr (case c of { #if alpha_TARGET_ARCH - EQ -> SLIT("eq"); - LT -> SLIT("lt"); + EQQ -> SLIT("eq"); + LTT -> SLIT("lt"); LE -> SLIT("le"); ULT -> SLIT("ult"); ULE -> SLIT("ule"); NE -> SLIT("ne"); - GT -> SLIT("gt"); + GTT -> SLIT("gt"); GE -> SLIT("ge") #endif #if i386_TARGET_ARCH GEU -> SLIT("ae"); LU -> SLIT("b"); - EQ -> SLIT("e"); GT -> SLIT("g"); + EQQ -> SLIT("e"); GTT -> SLIT("g"); GE -> SLIT("ge"); GU -> SLIT("a"); - LT -> SLIT("l"); LE -> SLIT("le"); + LTT -> SLIT("l"); LE -> SLIT("le"); LEU -> SLIT("be"); NE -> SLIT("ne"); NEG -> SLIT("s"); POS -> SLIT("ns"); ALWAYS -> SLIT("mp") -- hack @@ -258,9 +265,9 @@ pprCond c = uppPStr (case c of { #if sparc_TARGET_ARCH ALWAYS -> SLIT(""); NEVER -> SLIT("n"); GEU -> SLIT("geu"); LU -> SLIT("lu"); - EQ -> SLIT("e"); GT -> SLIT("g"); + EQQ -> SLIT("e"); GTT -> SLIT("g"); GE -> SLIT("ge"); GU -> SLIT("gu"); - LT -> SLIT("l"); LE -> SLIT("le"); + LTT -> SLIT("l"); LE -> SLIT("le"); LEU -> SLIT("leu"); NE -> SLIT("ne"); NEG -> SLIT("neg"); POS -> SLIT("pos"); VC -> SLIT("vc"); VS -> SLIT("vs") @@ -289,12 +296,12 @@ pprImm (ImmLab s) | underscorePrefix = uppBeside (uppChar '_') s pprImm (LO i) = uppBesides [ pp_lo, pprImm i, uppRparen ] where - pp_lo = uppPStr (_packCString (A# "%lo("#)) + pp_lo = uppPStr (_packCString (A_HASH "%lo("#)) pprImm (HI i) = uppBesides [ pp_hi, pprImm i, uppRparen ] where - pp_hi = uppPStr (_packCString (A# "%hi("#)) + pp_hi = uppPStr (_packCString (A_HASH "%hi("#)) #endif \end{code} @@ -808,8 +815,14 @@ pprInstr (FUNBEGIN clab) ] where pp_lab = pprCLabel_asm clab - pp_ldgp = uppPStr (_packCString (A# ":\n\tldgp $29,0($27)\n"#)) - pp_frame = uppPStr (_packCString (A# "..ng:\n\t.frame $30,4240,$26,0\n\t.prologue 1"#)) + +#if __GLASGOW_HASKELL__ >= 200 +# define PACK_STR packCString +#else +# define PACK_STR _packCString +#endif + pp_ldgp = uppPStr (PACK_STR (A_HASH ":\n\tldgp $29,0($27)\n"#)) + pp_frame = uppPStr (PACK_STR (A_HASH "..ng:\n\t.frame $30,4240,$26,0\n\t.prologue 1"#)) pprInstr (FUNEND clab) = uppBeside (uppPStr SLIT("\t.align 4\n\t.end ")) (pprCLabel_asm clab) @@ -1318,10 +1331,10 @@ pprRIReg name b ri reg1 pprReg reg1 ] -pp_ld_lbracket = uppPStr (_packCString (A# "\tld\t["#)) -pp_rbracket_comma = uppPStr (_packCString (A# "],"#)) -pp_comma_lbracket = uppPStr (_packCString (A# ",["#)) -pp_comma_a = uppPStr (_packCString (A# ",a"#)) +pp_ld_lbracket = uppPStr (PACK_STR (A_HASH "\tld\t["#)) +pp_rbracket_comma = uppPStr (PACK_STR (A_HASH "],"#)) +pp_comma_lbracket = uppPStr (PACK_STR (A_HASH ",["#)) +pp_comma_a = uppPStr (PACK_STR (A_HASH ",a"#)) #endif {-sparc_TARGET_ARCH-} \end{code} diff --git a/ghc/compiler/nativeGen/RegAllocInfo.lhs b/ghc/compiler/nativeGen/RegAllocInfo.lhs index e650837176f8..22a7618e5454 100644 --- a/ghc/compiler/nativeGen/RegAllocInfo.lhs +++ b/ghc/compiler/nativeGen/RegAllocInfo.lhs @@ -24,8 +24,8 @@ module RegAllocInfo ( regUsage, FutureLive(..), - RegAssignment(..), - RegConflicts(..), + SYN_IE(RegAssignment), + SYN_IE(RegConflicts), RegFuture(..), RegHistory(..), RegInfo(..), @@ -37,7 +37,7 @@ module RegAllocInfo ( regLiveness, spillReg, - RegSet(..), + SYN_IE(RegSet), elementOfRegSet, emptyRegSet, isEmptyRegSet, @@ -52,15 +52,16 @@ module RegAllocInfo ( ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(List(partition)) import MachMisc import MachRegs -import MachCode ( InstrList(..) ) +import MachCode ( SYN_IE(InstrList) ) import AbsCSyn ( MagicId ) import BitSet ( unitBS, mkBS, minusBS, unionBS, listBS, BitSet ) import CLabel ( pprCLabel_asm, CLabel{-instance Ord-} ) -import FiniteMap ( addToFM, lookupFM ) +import FiniteMap ( addToFM, lookupFM, FiniteMap ) import OrdList ( mkUnitList, OrdList ) import PrimRep ( PrimRep(..) ) import Stix ( StixTree, CodeSegment ) diff --git a/ghc/compiler/nativeGen/Stix.lhs b/ghc/compiler/nativeGen/Stix.lhs index c6ab81b757d6..10521a3d68aa 100644 --- a/ghc/compiler/nativeGen/Stix.lhs +++ b/ghc/compiler/nativeGen/Stix.lhs @@ -6,7 +6,7 @@ #include "HsVersions.h" module Stix ( - CodeSegment(..), StixReg(..), StixTree(..), StixTreeList(..), + CodeSegment(..), StixReg(..), StixTree(..), SYN_IE(StixTreeList), sStLitLbl, stgBaseReg, stgStkOReg, stgNode, stgTagReg, stgRetReg, @@ -16,12 +16,13 @@ module Stix ( ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(Ratio(Rational)) import AbsCSyn ( node, infoptr, MagicId(..) ) import AbsCUtils ( magicIdPrimRep ) import CLabel ( mkAsmTempLabel ) import UniqSupply ( returnUs, thenUs, getUnique, SYN_IE(UniqSM) ) -import Unpretty ( uppPStr, Unpretty(..) ) +import Unpretty ( uppPStr, SYN_IE(Unpretty) ) \end{code} Here is the tag at the nodes of our @StixTree@. Notice its diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs index cdb4fdb65f6b..845078e17ad6 100644 --- a/ghc/compiler/nativeGen/StixPrim.lhs +++ b/ghc/compiler/nativeGen/StixPrim.lhs @@ -27,7 +27,7 @@ import OrdList ( OrdList ) import PprStyle ( PprStyle(..) ) import SMRep ( SMRep(..), SMSpecRepKind, SMUpdateKind ) import Stix -import StixMacro ( heapCheck, smStablePtrTable ) +import StixMacro ( heapCheck ) import StixInteger {- everything -} import UniqSupply ( returnUs, thenUs, SYN_IE(UniqSM) ) import Unpretty ( uppBeside, uppPStr, uppInt ) diff --git a/ghc/compiler/prelude/PrelLoop.lhi b/ghc/compiler/prelude/PrelLoop.lhi index 724a8a29cb08..5f6b5e917708 100644 --- a/ghc/compiler/prelude/PrelLoop.lhi +++ b/ghc/compiler/prelude/PrelLoop.lhi @@ -11,7 +11,7 @@ import IdUtils ( primOpNameInfo ) import Name ( Name, OrigName, mkPrimitiveName, mkWiredInName, ExportFlag ) import PrimOp ( PrimOp ) import RnHsSyn ( RnName ) -import Type ( mkSigmaTy, mkFunTys, GenType ) +import Type ( mkSigmaTy, mkFunTy, mkFunTys, GenType ) import TyVar ( GenTyVar ) import Unique ( Unique ) import Usage ( GenUsage ) @@ -21,6 +21,7 @@ mkPrimitiveName :: Unique -> OrigName -> Name mkWiredInName :: Unique -> OrigName -> ExportFlag -> Name mkSigmaTy :: [a] -> [(GenClass (GenTyVar (GenUsage Unique)) Unique, GenType a b)] -> GenType a b -> GenType a b mkFunTys :: [GenType a b] -> GenType a b -> GenType a b +mkFunTy :: GenType a b -> GenType a b -> GenType a b primOpNameInfo :: PrimOp -> (_PackedString, RnName) \end{code} diff --git a/ghc/compiler/prelude/PrelLoop_1_3.lhi b/ghc/compiler/prelude/PrelLoop_1_3.lhi index cee1c6751b32..73aca3b2494e 100644 --- a/ghc/compiler/prelude/PrelLoop_1_3.lhi +++ b/ghc/compiler/prelude/PrelLoop_1_3.lhi @@ -4,5 +4,6 @@ __exports__ Name mkWiredInName (..) Type mkSigmaTy (..) Type mkFunTys (..) +Type mkFunTy (..) IdUtils primOpNameInfo (..) \end{code} diff --git a/ghc/compiler/prelude/PrimOp.lhs b/ghc/compiler/prelude/PrimOp.lhs index 8ab3a4bf5a36..0aa3a74d1fc6 100644 --- a/ghc/compiler/prelude/PrimOp.lhs +++ b/ghc/compiler/prelude/PrimOp.lhs @@ -44,7 +44,7 @@ import Pretty import SMRep ( SMRep(..), SMSpecRepKind(..), SMUpdateKind(..) ) import TyCon ( TyCon{-instances-} ) import Type ( getAppDataTyConExpandingDicts, maybeAppDataTyConExpandingDicts, - mkForAllTys, mkFunTys, applyTyCon, typePrimRep + mkForAllTys, mkFunTy, mkFunTys, applyTyCon, typePrimRep ) import TyVar ( alphaTyVar, betaTyVar, gammaTyVar, GenTyVar{-instance Eq-} ) import Unique ( Unique{-instance Eq-} ) @@ -1332,7 +1332,7 @@ primOpInfo ErrorIOPrimOp -- errorIO# :: PrimIO () -> State# RealWorld# statePrimTyCon VoidRep [realWorldTy] where primio_ish_ty result - = mkFunTys [mkStateTy realWorldTy] (mkTupleTy 2 [result, mkStateTy realWorldTy]) + = mkFunTy (mkStateTy realWorldTy) (mkTupleTy 2 [result, mkStateTy realWorldTy]) \end{code} %************************************************************************ @@ -1660,7 +1660,7 @@ primOpType op Dyadic str ty -> dyadic_fun_ty ty Monadic str ty -> monadic_fun_ty ty Compare str ty -> compare_fun_ty ty - Coercing str ty1 ty2 -> mkFunTys [ty1] ty2 + Coercing str ty1 ty2 -> mkFunTy ty1 ty2 PrimResult str tyvars arg_tys prim_tycon kind res_tys -> mkForAllTys tyvars (mkFunTys arg_tys (applyTyCon prim_tycon res_tys)) @@ -1726,7 +1726,7 @@ commutableOp _ = False Utils: \begin{code} dyadic_fun_ty ty = mkFunTys [ty, ty] ty -monadic_fun_ty ty = mkFunTys [ty] ty +monadic_fun_ty ty = mkFunTy ty ty compare_fun_ty ty = mkFunTys [ty, ty] boolTy \end{code} diff --git a/ghc/compiler/prelude/TysWiredIn.lhs b/ghc/compiler/prelude/TysWiredIn.lhs index 6a5285a460dd..ff2f55a6f97a 100644 --- a/ghc/compiler/prelude/TysWiredIn.lhs +++ b/ghc/compiler/prelude/TysWiredIn.lhs @@ -48,11 +48,11 @@ module TysWiredIn ( mkTupleTy, nilDataCon, primIoTyCon, - primIoDataCon, realWorldStateTy, return2GMPsTyCon, returnIntAndGMPTyCon, stTyCon, + stDataCon, stablePtrTyCon, stateAndAddrPrimTyCon, stateAndArrayPrimTyCon, @@ -101,7 +101,7 @@ import TyCon ( mkDataTyCon, mkTupleTyCon, mkSynTyCon, NewOrData(..), TyCon ) import Type ( mkTyConTy, applyTyCon, mkSigmaTy, - mkFunTys, maybeAppTyCon, + mkFunTy, maybeAppTyCon, GenType(..), SYN_IE(ThetaType), SYN_IE(TauType) ) import TyVar ( tyVarKind, alphaTyVar, betaTyVar ) import Unique @@ -130,6 +130,11 @@ pc_tycon new_or_data key mod str tyvars cons where tycon_kind = foldr (mkArrowKind . tyVarKind) mkBoxedTypeKind tyvars +pcSynTyCon key mod str kind arity tyvars expansion + = mkSynTyCon + (mkWiredInName key (OrigName mod str) ExportAll) + kind arity tyvars expansion + pcDataCon :: Unique{-DataConKey-} -> Module -> FAST_STRING -> [TyVar] -> ThetaType -> [TauType] -> TyCon -> SpecEnv -> Id pcDataCon key mod str tyvars context arg_tys tycon specenv @@ -442,28 +447,27 @@ This is really just an ordinary synonym, except it is ABSTRACT. mkStateTransformerTy s a = applyTyCon stTyCon [s, a] stTyCon = pcNewTyCon stTyConKey gHC__ SLIT("ST") alpha_beta_tyvars [stDataCon] - where - ty = mkFunTys [mkStateTy alphaTy] (mkTupleTy 2 [betaTy, mkStateTy alphaTy]) - stDataCon = pcDataCon stDataConKey gHC__ SLIT("ST") +stDataCon = pcDataCon stDataConKey gHC__ SLIT("ST") alpha_beta_tyvars [] [ty] stTyCon nullSpecEnv + where + ty = mkFunTy (mkStateTy alphaTy) (mkTupleTy 2 [betaTy, mkStateTy alphaTy]) \end{code} %************************************************************************ %* * -\subsection[TysWiredIn-IO]{The @PrimIO@ and @IO@ monadic-I/O types} +\subsection[TysWiredIn-IO]{The @PrimIO@ monadic-I/O type} %* * %************************************************************************ \begin{code} -mkPrimIoTy a = applyTyCon primIoTyCon [a] +mkPrimIoTy a = mkStateTransformerTy realWorldTy a -primIoTyCon = pcNewTyCon primIoTyConKey gHC__ SLIT("PrimIO") alpha_tyvar [primIoDataCon] - -primIoDataCon = pcDataCon primIoDataConKey gHC__ SLIT("PrimIO") - alpha_tyvar [] [ty] primIoTyCon nullSpecEnv - where - ty = mkFunTys [mkStateTy realWorldTy] (mkTupleTy 2 [alphaTy, mkStateTy realWorldTy]) +primIoTyCon + = pcSynTyCon + primIoTyConKey gHC__ SLIT("PrimIO") + (mkBoxedTypeKind `mkArrowKind` mkBoxedTypeKind) + 1 alpha_tyvar (mkPrimIoTy alphaTy) \end{code} %************************************************************************ diff --git a/ghc/compiler/reader/ReadPrefix.lhs b/ghc/compiler/reader/ReadPrefix.lhs index 17f2a498958b..3e3fb44415fa 100644 --- a/ghc/compiler/reader/ReadPrefix.lhs +++ b/ghc/compiler/reader/ReadPrefix.lhs @@ -10,6 +10,7 @@ module ReadPrefix ( rdModule ) where IMP_Ubiq() IMPORT_1_3(IO(hPutStr, stderr)) +IMPORT_1_3(GHCio(stThen)) import UgenAll -- all Yacc parser gumpff... import PrefixSyn -- and various syntaxen. @@ -80,7 +81,7 @@ cvFlag 1 = True \begin{code} #if __GLASGOW_HASKELL__ >= 200 # define PACK_STR packCString -# define CCALL_THEN `GHCbase.ccallThen` +# define CCALL_THEN `stThen` #else # define PACK_STR _packCString # define CCALL_THEN `thenPrimIO` @@ -410,8 +411,13 @@ wlkPat pat (\sty -> ppInterleave ppSP (map (ppr sty) (lpat:lpats))) msg = ppShow 100 (err PprForUser) in +#if __GLASGOW_HASKELL__ >= 200 + ioToUgnM (GHCbase.ioToPrimIO (hPutStr stderr msg)) `thenUgn` \ _ -> + ioToUgnM (GHCbase.ioToPrimIO (ghcExit 1)) `thenUgn` \ _ -> +#else ioToUgnM (hPutStr stderr msg) `thenUgn` \ _ -> ioToUgnM (ghcExit 1) `thenUgn` \ _ -> +#endif returnUgn (error "ReadPrefix") ) `thenUgn` \ (n, arg_pats) -> diff --git a/ghc/compiler/rename/ParseIface.y b/ghc/compiler/rename/ParseIface.y index 935c227128f7..015f6aa04005 100644 --- a/ghc/compiler/rename/ParseIface.y +++ b/ghc/compiler/rename/ParseIface.y @@ -230,9 +230,8 @@ class : gtycon VARID { ($1, Unqual $2) } ctype :: { RdrNamePolyType } ctype : FORALL OBRACK tyvars CBRACK context DARROW type { HsForAllTy (map Unqual $3) $5 $7 } - | FORALL OBRACK tyvars CBRACK type { HsForAllTy (map Unqual $3) [] $5 } - | context DARROW type {{-ToDo:rm-} HsPreForAllTy $1 $3 } - | type {{-ToDo:change-} HsPreForAllTy [] $1 } + | FORALL OBRACK tyvars CBRACK type { HsForAllTy (map Unqual $3) [] $5 } + | type { HsForAllTy [] [] $1 } type :: { RdrNameMonoType } type : btype { $1 } @@ -364,10 +363,9 @@ instdecls : instd { unitBag $1 } | instdecls instd { $1 `snocBag` $2 } instd :: { RdrIfaceInst } -instd : INSTANCE FORALL OBRACK tyvars CBRACK context DARROW gtycon restrict_inst SEMI { mk_inst (Just (map Unqual $4)) $6 $8 $9 } - | INSTANCE FORALL OBRACK tyvars CBRACK gtycon general_inst SEMI { mk_inst (Just (map Unqual $4)) [] $6 $7 } - | INSTANCE context DARROW gtycon restrict_inst SEMI {{-ToDo:rm-} mk_inst Nothing $2 $4 $5 } - | INSTANCE gtycon general_inst SEMI {{-ToDo:rm-} mk_inst Nothing [] $2 $3 } +instd : INSTANCE FORALL OBRACK tyvars CBRACK context DARROW gtycon restrict_inst SEMI { mk_inst (map Unqual $4) $6 $8 $9 } + | INSTANCE FORALL OBRACK tyvars CBRACK gtycon general_inst SEMI { mk_inst (map Unqual $4) [] $6 $7 } + | INSTANCE gtycon general_inst SEMI { mk_inst [] [] $2 $3 } restrict_inst :: { RdrNameMonoType } restrict_inst : gtycon { MonoTyApp $1 [] } diff --git a/ghc/compiler/rename/ParseUtils.lhs b/ghc/compiler/rename/ParseUtils.lhs index dea7549cc467..04d4302e917b 100644 --- a/ghc/compiler/rename/ParseUtils.lhs +++ b/ghc/compiler/rename/ParseUtils.lhs @@ -209,7 +209,7 @@ mk_class ctxt (qclas@(Qual mod clas), tyvar) ops_and_sigs where opify (Sig f ty _ loc) = ClassOpSig f ty noClassOpPragmas loc -mk_inst :: Maybe [RdrName] -- ToDo: de-maybe +mk_inst :: [RdrName] -> RdrNameContext -> RdrName -- class -> RdrNameMonoType -- fish the tycon out yourself... @@ -217,9 +217,7 @@ mk_inst :: Maybe [RdrName] -- ToDo: de-maybe mk_inst tvs ctxt qclas@(Qual cmod cname) mono_ty = let - ty = case tvs of - Nothing -> HsPreForAllTy ctxt mono_ty -- ToDo: get rid of this - Just ts -> HsForAllTy ts ctxt mono_ty + ty = HsForAllTy tvs ctxt mono_ty in -- pprTrace "mk_inst:" (ppr PprDebug ty) $ InstSig qclas (tycon_name mono_ty) mkIfaceSrcLoc $ \ mod -> diff --git a/ghc/compiler/rename/Rename.lhs b/ghc/compiler/rename/Rename.lhs index 8e9c81d3509a..02194ae2ec63 100644 --- a/ghc/compiler/rename/Rename.lhs +++ b/ghc/compiler/rename/Rename.lhs @@ -11,26 +11,27 @@ module Rename ( renameModule ) where import PreludeGlaST ( thenPrimIO ) IMP_Ubiq() +IMPORT_1_3(List(partition)) import HsSyn import RdrHsSyn ( RdrNameHsModule(..), RdrNameImportDecl(..) ) -import RnHsSyn ( RnName(..){-.. is for Ix hack only-}, RenamedHsModule(..), isRnTyConOrClass, isRnWired ) +import RnHsSyn ( RnName(..){-.. is for Ix hack only-}, SYN_IE(RenamedHsModule), isRnTyConOrClass, isRnWired ) --ToDo:rm: all for debugging only -import Maybes -import Name -import Outputable -import RnIfaces -import PprStyle -import Pretty -import FiniteMap -import Util (pprPanic, pprTrace) +--import Maybes +--import Name +--import Outputable +--import RnIfaces +--import PprStyle +--import Pretty +--import FiniteMap +--import Util (pprPanic, pprTrace) import ParseUtils ( ParsedIface(..), RdrIfaceDecl(..), RdrIfaceInst(..), UsagesMap(..), VersionsMap(..) ) import RnMonad -import RnNames ( getGlobalNames, GlobalNameInfo(..) ) +import RnNames ( getGlobalNames, SYN_IE(GlobalNameInfo) ) import RnSource ( rnSource ) import RnIfaces ( rnIfaces, initIfaceCache, IfaceCache ) import RnUtils ( SYN_IE(RnEnv), extendGlobalRnEnv, emptyRnEnv ) @@ -38,14 +39,19 @@ import RnUtils ( SYN_IE(RnEnv), extendGlobalRnEnv, emptyRnEnv ) import Bag ( isEmptyBag, unionBags, unionManyBags, bagToList, listToBag ) import CmdLineOpts ( opt_HiMap, opt_NoImplicitPrelude ) import ErrUtils ( SYN_IE(Error), SYN_IE(Warning) ) -import FiniteMap ( emptyFM, eltsFM, fmToList, lookupFM{-ToDo:rm-} ) +import FiniteMap ( emptyFM, eltsFM, fmToList, addToFM, lookupFM{-ToDo:rm-}, FiniteMap ) import Maybes ( catMaybes ) -import Name ( isLocallyDefined, mkWiredInName, Name, RdrName(..), ExportFlag(..) ) +import Name ( isLocallyDefined, mkWiredInName, getLocalName, isLocalName, + origName, + Name, RdrName(..), ExportFlag(..) + ) +import PprStyle -- ToDo:rm import PrelInfo ( builtinNameInfo, SYN_IE(BuiltinNames), SYN_IE(BuiltinKeys) ) +import Pretty -- ToDo:rm import Unique ( ixClassKey ) import UniqFM ( emptyUFM, lookupUFM, addListToUFM_C, eltsUFM ) import UniqSupply ( splitUniqSupply ) -import Util ( panic, assertPanic ) +import Util ( panic, assertPanic, pprTrace{-ToDo:rm-} ) \end{code} \begin{code} diff --git a/ghc/compiler/rename/RnIfaces.lhs b/ghc/compiler/rename/RnIfaces.lhs index 965ab3f922d7..51366dbcf701 100644 --- a/ghc/compiler/rename/RnIfaces.lhs +++ b/ghc/compiler/rename/RnIfaces.lhs @@ -15,7 +15,15 @@ module RnIfaces ( IMP_Ubiq() -import PreludeGlaST ( thenPrimIO, seqPrimIO, newVar, readVar, writeVar, MutableVar(..) ) +import PreludeGlaST ( thenPrimIO, newVar, readVar, writeVar, SYN_IE(MutableVar) ) +#if __GLASGOW_HASKELL__ >= 200 +# define ST_THEN `stThen` +# define TRY_IO tryIO +IMPORT_1_3(GHCio(stThen,tryIO)) +#else +# define ST_THEN `thenPrimIO` +# define TRY_IO try +#endif import HsSyn import HsPragmas ( noGenPragmas ) @@ -35,16 +43,15 @@ import Bag ( emptyBag, unitBag, consBag, snocBag, import ErrUtils ( SYN_IE(Error), SYN_IE(Warning) ) import FiniteMap ( emptyFM, lookupFM, addToFM, addToFM_C, plusFM, eltsFM, fmToList, delListFromFM, sizeFM, foldFM, unitFM, - plusFM_C, addListToFM, keysFM{-ToDo:rm-} + plusFM_C, addListToFM, keysFM{-ToDo:rm-}, FiniteMap ) -import Maybes ( maybeToBool ) +import Maybes ( maybeToBool, MaybeErr(..) ) import Name ( origName, moduleOf, nameOf, qualToOrigName, OrigName(..), isLexCon, RdrName(..), Name{-instance NamedThing-} ) import PprStyle -- ToDo:rm import Outputable -- ToDo:rm import PrelInfo ( builtinNameInfo, SYN_IE(BuiltinNames) ) import Pretty -import Maybes ( MaybeErr(..) ) import UniqFM ( emptyUFM ) import UniqSupply ( splitUniqSupply ) import Util ( sortLt, removeDups, cmpPString, startsWith, @@ -55,19 +62,25 @@ import Util ( sortLt, removeDups, cmpPString, startsWith, type ModuleToIfaceContents = FiniteMap Module ParsedIface type ModuleToIfaceFilePath = FiniteMap Module FilePath +#if __GLASGOW_HASKELL__ >= 200 +# define REAL_WORLD RealWorld +#else +# define REAL_WORLD _RealWorld +#endif + data IfaceCache = IfaceCache Module -- the name of the module being compiled BuiltinNames -- so we can avoid going after things -- the compiler already knows about - (MutableVar _RealWorld + (MutableVar REAL_WORLD (ModuleToIfaceContents, -- interfaces for individual interface files ModuleToIfaceContents, -- merged interfaces based on module name -- used for extracting info about original names ModuleToIfaceFilePath)) initIfaceCache mod hi_files - = newVar (emptyFM,emptyFM,hi_files) `thenPrimIO` \ iface_var -> + = newVar (emptyFM,emptyFM,hi_files) ST_THEN \ iface_var -> return (IfaceCache mod b_names iface_var) where b_names = case builtinNameInfo of (b_names,_,_) -> b_names @@ -110,7 +123,7 @@ cachedIface :: IfaceCache -> IO (MaybeErr ParsedIface Error) cachedIface (IfaceCache _ _ iface_var) want_orig_iface item modname - = readVar iface_var `thenPrimIO` \ (iface_fm, orig_fm, file_fm) -> + = readVar iface_var ST_THEN \ (iface_fm, orig_fm, file_fm) -> case (lookupFM iface_fm modname) of Just iface -> return (want_iface iface orig_fm) @@ -127,7 +140,7 @@ cachedIface (IfaceCache _ _ iface_var) want_orig_iface item modname iface_fm' = addToFM iface_fm modname iface orig_fm' = addToFM_C mergeIfaces orig_fm (iface_mod iface) iface in - writeVar iface_var (iface_fm', orig_fm', file_fm) `seqPrimIO` + writeVar iface_var (iface_fm', orig_fm', file_fm) ST_THEN \ _ -> return (want_iface iface orig_fm') where want_iface iface orig_fm @@ -274,7 +287,7 @@ readIface :: FilePath -> Module -> FAST_STRING -> IO (MaybeErr ParsedIface Error readIface file modname item = --hPutStr stderr (" reading "++file++" ("++ _UNPK_ item ++")") >> - readFile file `thenPrimIO` \ read_result -> + TRY_IO (readFile file) >>= \ read_result -> case read_result of Left err -> return (Failed (cannaeReadErr file err)) Right contents -> --hPutStr stderr ".." >> @@ -540,7 +553,7 @@ data AddedDecl -- purely local | AddedSig RenamedSig rnIfaceDecl :: RdrIfaceDecl - -> RnM_Fixes _RealWorld + -> RnM_Fixes REAL_WORLD (AddedDecl, -- the resulting decl to add to the pot ([(RdrName,RnName)], [(RdrName,RnName)]), -- new val/tycon-class names that have @@ -621,7 +634,7 @@ sub (val_ment, tc_ment) (val_defds, tc_defds) cacheInstModules :: IfaceCache -> [Module] -> IO (Bag Error) cacheInstModules iface_cache@(IfaceCache _ _ iface_var) imp_mods - = readVar iface_var `thenPrimIO` \ (iface_fm, _, _) -> + = readVar iface_var ST_THEN \ (iface_fm, _, _) -> let imp_ifaces = [ iface | Just iface <- map (lookupFM iface_fm) imp_mods ] (imp_imods, _) = removeDups cmpPString (bagToList (unionManyBags (map get_ims imp_ifaces))) @@ -634,7 +647,7 @@ cacheInstModules iface_cache@(IfaceCache _ _ iface_var) imp_mods -- Assert that instance modules given by direct imports contains -- instance modules extracted from all visited modules - readVar iface_var `thenPrimIO` \ (all_iface_fm, _, _) -> + readVar iface_var ST_THEN \ (all_iface_fm, _, _) -> let all_ifaces = eltsFM all_iface_fm (all_imods, _) = removeDups cmpPString (bagToList (unionManyBags (map get_ims (all_ifaces)))) @@ -670,7 +683,7 @@ rnIfaceInstStuff iface_cache@(IfaceCache _ _ iface_var) modname us occ_env done_ = -- all the instance decls we might even want to consider -- are in the ParsedIfaces that are in our cache - readVar iface_var `thenPrimIO` \ (_, orig_iface_fm, _) -> + readVar iface_var ST_THEN \ (_, orig_iface_fm, _) -> let all_ifaces = eltsFM orig_iface_fm all_insts = concat (map get_insts all_ifaces) @@ -752,7 +765,7 @@ rnIfaceInstStuff iface_cache@(IfaceCache _ _ iface_var) modname us occ_env done_ \end{code} \begin{code} -rnIfaceInst :: (Module, RdrIfaceInst) -> RnM_Fixes _RealWorld RenamedInstDecl +rnIfaceInst :: (Module, RdrIfaceInst) -> RnM_Fixes REAL_WORLD RenamedInstDecl rnIfaceInst (imod, InstSig _ _ _ inst_decl) = rnInstDecl (inst_decl imod) \end{code} @@ -778,7 +791,7 @@ finalIfaceInfo iface_cache@(IfaceCache _ _ iface_var) modname if_final_env@((qua -- pprTrace "usageIf:unqual:" (ppCat (map ppPStr (keysFM unqual))) $ -- pprTrace "usageIf:tc_qual:" (ppCat [ppBesides[ppPStr m,ppChar '.',ppPStr n] | (n,m) <- keysFM tc_qual]) $ -- pprTrace "usageIf:tc_unqual:" (ppCat (map ppPStr (keysFM tc_unqual))) $ - readVar iface_var `thenPrimIO` \ (_, orig_iface_fm, _) -> + readVar iface_var ST_THEN \ (_, orig_iface_fm, _) -> let all_ifaces = eltsFM orig_iface_fm -- all the interfaces we have looked at diff --git a/ghc/compiler/rename/RnLoop_1_3.lhi b/ghc/compiler/rename/RnLoop_1_3.lhi index d87183d6f57c..b26f8ff5f77c 100644 --- a/ghc/compiler/rename/RnLoop_1_3.lhi +++ b/ghc/compiler/rename/RnLoop_1_3.lhi @@ -1,5 +1,7 @@ \begin{code} interface RnLoop_1_3 1 __exports__ -Outputable Outputable (..) +RnBinds rnBinds (..) +RnBinds FreeVars +RnSource rnPolyType (..) \end{code} diff --git a/ghc/compiler/rename/RnNames.lhs b/ghc/compiler/rename/RnNames.lhs index 55aeb1bec821..b94dd7fb3a1d 100644 --- a/ghc/compiler/rename/RnNames.lhs +++ b/ghc/compiler/rename/RnNames.lhs @@ -8,10 +8,10 @@ module RnNames ( getGlobalNames, - GlobalNameInfo(..) + SYN_IE(GlobalNameInfo) ) where -import PreludeGlaST ( MutableVar(..) ) +import PreludeGlaST ( SYN_IE(MutableVar) ) IMP_Ubiq() @@ -31,7 +31,7 @@ import Bag ( emptyBag, unitBag, consBag, snocBag, unionBags, unionManyBags, mapBag, filterBag, listToBag, bagToList ) import CmdLineOpts ( opt_NoImplicitPrelude, opt_CompilingGhcInternals ) import ErrUtils ( SYN_IE(Error), SYN_IE(Warning), addErrLoc, addShortErrLocLine, addShortWarnLocLine ) -import FiniteMap ( emptyFM, addToFM, addListToFM, lookupFM, fmToList, eltsFM, delListFromFM, keysFM{-ToDo:rm-} ) +import FiniteMap ( emptyFM, addToFM, addListToFM, lookupFM, fmToList, eltsFM, delListFromFM, keysFM{-ToDo:rm-}, FiniteMap ) import Id ( GenId ) import Maybes ( maybeToBool, catMaybes, MaybeErr(..) ) import Name ( RdrName(..), Name, isQual, mkTopLevName, mkWiredInName, origName, @@ -514,7 +514,7 @@ doImport :: IfaceCache doImport iface_cache info us (ImportDecl mod qual maybe_as maybe_spec src_loc) = let - (b_vals, b_tcs, maybe_spec') = getBuiltins info mod maybe_spec + (b_vals, b_tcs, maybe_spec') = getBuiltins info mod maybe_spec -- NB: a no-op ToDo:rm in (if mod == gHC_BUILTINS then return (Succeeded (panic "doImport:GHC fake import!"), @@ -591,9 +591,10 @@ getBuiltins :: ImportNameInfo ) getBuiltins _ modname maybe_spec - | modname `notElem` modulesWithBuiltins +--OLD: | modname `notElem` modulesWithBuiltins = (emptyBag, emptyBag, maybe_spec) +{- getBuiltins (((b_val_names,b_tc_names),_,_,_),_,_,_) modname maybe_spec = case maybe_spec of Nothing -> (all_vals, all_tcs, Nothing) @@ -649,6 +650,7 @@ getBuiltins (((b_val_names,b_tc_names),_,_,_),_,_,_) modname maybe_spec _ -> panic "importing builtin names (2)" where (vals, tcs, ies_left) = do_builtin ies +-} ------------------------- getOrigIEs :: ParsedIface diff --git a/ghc/compiler/rename/RnSource.lhs b/ghc/compiler/rename/RnSource.lhs index ce3359feabef..3829b51be665 100644 --- a/ghc/compiler/rename/RnSource.lhs +++ b/ghc/compiler/rename/RnSource.lhs @@ -10,6 +10,7 @@ module RnSource ( rnSource, rnTyDecl, rnClassDecl, rnInstDecl, rnPolyType ) wher IMP_Ubiq() IMPORT_DELOOPER(RnLoop) -- *check* the RnPass/RnExpr/RnBinds loop-breaking +IMPORT_1_3(List(partition)) import HsSyn import HsPragmas diff --git a/ghc/compiler/simplCore/SimplCase.lhs b/ghc/compiler/simplCore/SimplCase.lhs index aa63f03cb6bc..3a784494b058 100644 --- a/ghc/compiler/simplCore/SimplCase.lhs +++ b/ghc/compiler/simplCore/SimplCase.lhs @@ -34,7 +34,7 @@ import PrimOp ( primOpOkForSpeculation, PrimOp{-instance Eq-} ) import SimplEnv import SimplMonad import SimplUtils ( mkValLamTryingEta ) -import Type ( isPrimType, maybeAppDataTyConExpandingDicts, mkFunTys, eqTy ) +import Type ( isPrimType, maybeAppDataTyConExpandingDicts, mkFunTy, mkFunTys, eqTy ) import TysPrim ( voidTy ) import Unique ( Unique{-instance Eq-} ) import Usage ( GenUsage{-instance Eq-} ) @@ -475,7 +475,7 @@ bindLargeRhs env args rhs_ty rhs_c dead DeadCode = True dead other = False - prim_rhs_fun_ty = mkFunTys [voidTy] rhs_ty + prim_rhs_fun_ty = mkFunTy voidTy rhs_ty \end{code} Case alternatives when we don't know the scrutinee diff --git a/ghc/compiler/simplCore/SimplCore.lhs b/ghc/compiler/simplCore/SimplCore.lhs index ebd97c2c7a5a..e2f3a7de7a27 100644 --- a/ghc/compiler/simplCore/SimplCore.lhs +++ b/ghc/compiler/simplCore/SimplCore.lhs @@ -9,6 +9,7 @@ module SimplCore ( core2core ) where IMP_Ubiq(){-uitous-} +IMPORT_1_3(IO(hPutStr,stderr)) import AnalFBWW ( analFBWW ) import Bag ( isEmptyBag, foldBag ) @@ -35,6 +36,7 @@ import CoreSyn import CoreUnfold import CoreUtils ( substCoreBindings, manifestlyWHNF ) import ErrUtils ( ghcExit ) +import FiniteMap ( FiniteMap ) import FloatIn ( floatInwards ) import FloatOut ( floatOutwards ) import FoldrBuildWW ( mkFoldrBuildWW ) diff --git a/ghc/compiler/simplCore/Simplify.lhs b/ghc/compiler/simplCore/Simplify.lhs index 99367d2e9612..a6e44d3fb4d7 100644 --- a/ghc/compiler/simplCore/Simplify.lhs +++ b/ghc/compiler/simplCore/Simplify.lhs @@ -10,6 +10,7 @@ module Simplify ( simplTopBinds, simplExpr, simplBind ) where IMP_Ubiq(){-uitous-} IMPORT_DELOOPER(SmplLoop) -- paranoia checking +IMPORT_1_3(List(partition)) import BinderInfo import CmdLineOpts ( SimplifierSwitch(..) ) diff --git a/ghc/compiler/typecheck/GenSpecEtc.lhs b/ghc/compiler/typecheck/GenSpecEtc.lhs index 5c06e2f8a20b..f3cf96af0026 100644 --- a/ghc/compiler/typecheck/GenSpecEtc.lhs +++ b/ghc/compiler/typecheck/GenSpecEtc.lhs @@ -15,12 +15,12 @@ module GenSpecEtc ( IMP_Ubiq() import TcMonad hiding ( rnMtoTcM ) -import Inst ( Inst, InstOrigin(..), LIE(..), plusLIE, +import Inst ( Inst, InstOrigin(..), SYN_IE(LIE), plusLIE, newDicts, tyVarsOfInst, instToId ) import TcEnv ( tcGetGlobalTyVars, tcExtendGlobalTyVars ) import TcSimplify ( tcSimplify, tcSimplifyAndCheck ) -import TcType ( TcType(..), TcThetaType(..), TcTauType(..), - TcTyVarSet(..), TcTyVar(..), +import TcType ( SYN_IE(TcType), SYN_IE(TcThetaType), SYN_IE(TcTauType), + SYN_IE(TcTyVarSet), SYN_IE(TcTyVar), newTyVarTy, zonkTcType, zonkTcTyVar, zonkTcTyVars ) import Unify ( unifyTauTy ) @@ -28,7 +28,7 @@ import Unify ( unifyTauTy ) import HsSyn ( HsBinds(..), Bind(..), MonoBinds(..), HsExpr, OutPat(..), Sig, HsLit, ArithSeqInfo, InPat, GRHSsAndBinds, Match, Fake ) -import TcHsSyn ( TcIdOcc(..), TcIdBndr(..), TcHsBinds(..), TcBind(..), TcExpr(..), tcIdType ) +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcIdBndr), SYN_IE(TcHsBinds), SYN_IE(TcBind), SYN_IE(TcExpr), tcIdType ) import Bag ( Bag, foldBag, bagToList, listToBag, isEmptyBag ) import Class ( GenClass ) diff --git a/ghc/compiler/typecheck/Inst.lhs b/ghc/compiler/typecheck/Inst.lhs index d33c7a74d1d0..4424e98310c7 100644 --- a/ghc/compiler/typecheck/Inst.lhs +++ b/ghc/compiler/typecheck/Inst.lhs @@ -10,9 +10,9 @@ module Inst ( Inst(..), -- Visible only to TcSimplify InstOrigin(..), OverloadedLit(..), - LIE(..), emptyLIE, unitLIE, plusLIE, consLIE, zonkLIE, plusLIEs, + SYN_IE(LIE), emptyLIE, unitLIE, plusLIE, consLIE, zonkLIE, plusLIEs, - InstanceMapper(..), + SYN_IE(InstanceMapper), newDicts, newDictsAtLoc, newMethod, newMethodWithGivenTy, newOverloadedLit, @@ -29,22 +29,25 @@ module Inst ( ) where IMP_Ubiq() +IMPORT_1_3(Ratio(Rational)) import HsSyn ( HsLit(..), HsExpr(..), HsBinds, InPat, OutPat, Stmt, Qualifier, Match, ArithSeqInfo, PolyType, Fake ) -import RnHsSyn ( RenamedArithSeqInfo(..), RenamedHsExpr(..) ) -import TcHsSyn ( TcIdOcc(..), TcExpr(..), TcIdBndr(..), +import RnHsSyn ( SYN_IE(RenamedArithSeqInfo), SYN_IE(RenamedHsExpr), + RnName{-instance NamedThing-} + ) +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcExpr), SYN_IE(TcIdBndr), mkHsTyApp, mkHsDictApp, tcIdTyVars ) import TcMonad hiding ( rnMtoTcM ) import TcEnv ( tcLookupGlobalValueByKey, tcLookupTyConByKey ) -import TcType ( TcType(..), TcRhoType(..), TcMaybe, TcTyVarSet(..), +import TcType ( SYN_IE(TcType), SYN_IE(TcRhoType), TcMaybe, SYN_IE(TcTyVarSet), tcInstType, zonkTcType ) import Bag ( emptyBag, unitBag, unionBags, unionManyBags, listToBag, consBag ) import Class ( isCcallishClass, isNoDictClass, classInstEnv, - SYN_IE(Class), GenClass, SYN_IE(ClassInstEnv) + SYN_IE(Class), GenClass, SYN_IE(ClassInstEnv), SYN_IE(ClassOp) ) import ErrUtils ( addErrLoc, SYN_IE(Error) ) import Id ( GenId, idType, mkInstId ) @@ -54,7 +57,6 @@ import Outputable import PprType ( GenClass, TyCon, GenType, GenTyVar ) import PprStyle ( PprStyle(..) ) import Pretty -import RnHsSyn ( RnName{-instance NamedThing-} ) import SpecEnv ( SYN_IE(SpecEnv) ) import SrcLoc ( SrcLoc, mkUnknownSrcLoc ) import Type ( GenType, eqSimpleTy, instantiateTy, diff --git a/ghc/compiler/typecheck/TcBinds.lhs b/ghc/compiler/typecheck/TcBinds.lhs index 4348b0101337..a733638c9ef4 100644 --- a/ghc/compiler/typecheck/TcBinds.lhs +++ b/ghc/compiler/typecheck/TcBinds.lhs @@ -14,15 +14,15 @@ import HsSyn ( HsBinds(..), Bind(..), Sig(..), MonoBinds(..), HsExpr, Match, PolyType, InPat, OutPat(..), GRHSsAndBinds, ArithSeqInfo, HsLit, Fake, collectBinders ) -import RnHsSyn ( RenamedHsBinds(..), RenamedBind(..), RenamedSig(..), - RenamedMonoBinds(..), RnName(..) +import RnHsSyn ( SYN_IE(RenamedHsBinds), SYN_IE(RenamedBind), RenamedSig(..), + SYN_IE(RenamedMonoBinds), RnName(..) ) -import TcHsSyn ( TcHsBinds(..), TcBind(..), TcMonoBinds(..), - TcIdOcc(..), TcIdBndr(..) ) +import TcHsSyn ( SYN_IE(TcHsBinds), SYN_IE(TcBind), SYN_IE(TcMonoBinds), + TcIdOcc(..), SYN_IE(TcIdBndr) ) import TcMonad hiding ( rnMtoTcM ) import GenSpecEtc ( checkSigTyVars, genBinds, TcSigInfo(..) ) -import Inst ( Inst, LIE(..), emptyLIE, plusLIE, InstOrigin(..) ) +import Inst ( Inst, SYN_IE(LIE), emptyLIE, plusLIE, InstOrigin(..) ) import TcEnv ( tcExtendLocalValEnv, tcLookupLocalValueOK, newMonoIds ) IMPORT_DELOOPER(TcLoop) ( tcGRHSsAndBinds ) import TcMatches ( tcMatchesFun ) @@ -36,10 +36,9 @@ import Kind ( mkBoxedTypeKind, mkTypeKind ) import Id ( GenId, idType, mkUserId ) import IdInfo ( noIdInfo ) import Maybes ( assocMaybe, catMaybes ) -import Name ( pprNonSym ) +import Name ( pprNonSym, Name ) import PragmaInfo ( PragmaInfo(..) ) import Pretty -import RnHsSyn ( RnName ) -- instances import Type ( mkTyVarTy, mkTyVarTys, isTyVarTy, mkSigmaTy, splitSigmaTy, splitRhoTy, mkForAllTy, splitForAllTy ) diff --git a/ghc/compiler/typecheck/TcClassDcl.lhs b/ghc/compiler/typecheck/TcClassDcl.lhs index 298df688ba10..8e1c047aa04e 100644 --- a/ghc/compiler/typecheck/TcClassDcl.lhs +++ b/ghc/compiler/typecheck/TcClassDcl.lhs @@ -6,9 +6,7 @@ \begin{code} #include "HsVersions.h" -module TcClassDcl ( - tcClassDecl1, tcClassDecls2 - ) where +module TcClassDcl ( tcClassDecl1, tcClassDecls2 ) where IMP_Ubiq() @@ -18,27 +16,26 @@ import HsSyn ( ClassDecl(..), HsBinds(..), Bind(..), MonoBinds(..), Stmt, Qualifier, ArithSeqInfo, InPat, Fake ) import HsPragmas ( ClassPragmas(..) ) import RnHsSyn ( RenamedClassDecl(..), RenamedClassPragmas(..), - RenamedClassOpSig(..), RenamedMonoBinds(..), + RenamedClassOpSig(..), SYN_IE(RenamedMonoBinds), RenamedGenPragmas(..), RenamedContext(..), RnName{-instance Uniquable-} ) -import TcHsSyn ( TcIdOcc(..), TcHsBinds(..), TcMonoBinds(..), TcExpr(..), +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcHsBinds), SYN_IE(TcMonoBinds), SYN_IE(TcExpr), mkHsTyApp, mkHsTyLam, mkHsDictApp, mkHsDictLam, tcIdType ) -import Inst ( Inst, InstOrigin(..), LIE(..), emptyLIE, plusLIE, newDicts, newMethod ) +import Inst ( Inst, InstOrigin(..), SYN_IE(LIE), emptyLIE, plusLIE, newDicts, newMethod ) import TcEnv ( tcLookupClass, tcLookupTyVar, tcLookupTyCon, newLocalIds, tcExtendGlobalTyVars ) import TcInstDcls ( processInstBinds ) -import TcKind ( TcKind ) -import TcKind ( unifyKind ) +import TcKind ( unifyKind, TcKind ) import TcMonad hiding ( rnMtoTcM ) import TcMonoType ( tcPolyType, tcMonoType, tcContext ) import TcSimplify ( tcSimplifyAndCheck ) -import TcType ( TcType(..), TcTyVar(..), tcInstType, tcInstSigTyVars, tcInstSigType ) +import TcType ( SYN_IE(TcType), SYN_IE(TcTyVar), tcInstType, tcInstSigTyVars, tcInstSigType ) import Bag ( foldBag, unionManyBags ) import Class ( GenClass, mkClass, mkClassOp, classBigSig, classOps, classOpString, classOpLocalType, - classOpTagByString + classOpTagByString, SYN_IE(ClassOp) ) import Id ( mkSuperDictSelId, mkMethodSelId, mkDefaultMethodId, idType ) diff --git a/ghc/compiler/typecheck/TcDeriv.lhs b/ghc/compiler/typecheck/TcDeriv.lhs index 39f6968df40f..572fcb99aa1a 100644 --- a/ghc/compiler/typecheck/TcDeriv.lhs +++ b/ghc/compiler/typecheck/TcDeriv.lhs @@ -16,11 +16,11 @@ import HsSyn ( FixityDecl, Sig, HsBinds(..), Bind(..), MonoBinds(..), GRHSsAndBinds, Match, HsExpr, HsLit, InPat, ArithSeqInfo, Fake, MonoType ) import HsPragmas ( InstancePragmas(..) ) -import RnHsSyn ( mkRnName, RnName(..), RenamedHsBinds(..), RenamedFixityDecl(..) ) +import RnHsSyn ( mkRnName, RnName(..), SYN_IE(RenamedHsBinds), RenamedFixityDecl(..) ) import TcHsSyn ( TcIdOcc ) import TcMonad -import Inst ( InstanceMapper(..) ) +import Inst ( SYN_IE(InstanceMapper) ) import TcEnv ( getEnv_TyCons, tcLookupClassByKey ) import TcKind ( TcKind ) import TcGenDeriv -- Deriv stuff diff --git a/ghc/compiler/typecheck/TcEnv.lhs b/ghc/compiler/typecheck/TcEnv.lhs index 896d581eb66d..1360c47b9c68 100644 --- a/ghc/compiler/typecheck/TcEnv.lhs +++ b/ghc/compiler/typecheck/TcEnv.lhs @@ -25,13 +25,13 @@ IMP_Ubiq() IMPORT_DELOOPER(TcMLoop) -- for paranoia checking import Id ( SYN_IE(Id), GenId, idType, mkUserLocal ) -import TcHsSyn ( TcIdBndr(..), TcIdOcc(..) ) +import TcHsSyn ( SYN_IE(TcIdBndr), TcIdOcc(..) ) import TcKind ( TcKind, newKindVars, tcDefaultKind, kindToTcKind ) -import TcType ( TcType(..), TcMaybe, TcTyVar(..), TcTyVarSet(..), +import TcType ( SYN_IE(TcType), TcMaybe, SYN_IE(TcTyVar), SYN_IE(TcTyVarSet), newTyVarTys, tcInstTyVars, zonkTcTyVars ) import TyVar ( mkTyVar, tyVarKind, unionTyVarSets, emptyTyVarSet ) -import Type ( tyVarsOfTypes ) +import Type ( tyVarsOfTypes, splitForAllTy ) import TyCon ( TyCon, tyConKind, synTyConArity ) import Class ( SYN_IE(Class), GenClass, classSig ) @@ -41,7 +41,6 @@ import Name ( getOccName, getSrcLoc, Name{-instance NamedThing-} ) import PprStyle import Pretty import RnHsSyn ( RnName(..) ) -import Type ( splitForAllTy ) import Unique ( pprUnique10, pprUnique{-ToDo:rm-} ) import UniqFM import Util ( zipEqual, zipWithEqual, zipWith3Equal, zipLazy, diff --git a/ghc/compiler/typecheck/TcExpr.lhs b/ghc/compiler/typecheck/TcExpr.lhs index d3860c7e9f63..77308e5f25d9 100644 --- a/ghc/compiler/typecheck/TcExpr.lhs +++ b/ghc/compiler/typecheck/TcExpr.lhs @@ -15,18 +15,18 @@ import HsSyn ( HsExpr(..), Qualifier(..), Stmt(..), ArithSeqInfo(..), HsLit(..), Sig, GRHSsAndBinds, Match, Fake, InPat, OutPat, PolyType, failureFreePat, collectPatBinders ) -import RnHsSyn ( RenamedHsExpr(..), RenamedQual(..), - RenamedStmt(..), RenamedRecordBinds(..), +import RnHsSyn ( SYN_IE(RenamedHsExpr), SYN_IE(RenamedQual), + SYN_IE(RenamedStmt), SYN_IE(RenamedRecordBinds), RnName{-instance Outputable-} ) -import TcHsSyn ( TcExpr(..), TcQual(..), TcStmt(..), - TcIdOcc(..), TcRecordBinds(..), +import TcHsSyn ( SYN_IE(TcExpr), SYN_IE(TcQual), SYN_IE(TcStmt), + TcIdOcc(..), SYN_IE(TcRecordBinds), mkHsTyApp ) import TcMonad hiding ( rnMtoTcM ) import Inst ( Inst, InstOrigin(..), OverloadedLit(..), - LIE(..), emptyLIE, plusLIE, plusLIEs, newOverloadedLit, + SYN_IE(LIE), emptyLIE, plusLIE, plusLIEs, newOverloadedLit, newMethod, newMethodWithGivenTy, newDicts ) import TcBinds ( tcBindsAndThen ) import TcEnv ( tcLookupLocalValue, tcLookupGlobalValue, tcLookupClassByKey, @@ -37,7 +37,7 @@ import TcMatches ( tcMatchesCase, tcMatch ) import TcMonoType ( tcPolyType ) import TcPat ( tcPat ) import TcSimplify ( tcSimplifyAndCheck, tcSimplifyRank2 ) -import TcType ( TcType(..), TcMaybe(..), +import TcType ( SYN_IE(TcType), TcMaybe(..), tcInstId, tcInstType, tcInstSigTcType, tcInstSigType, tcInstTcType, tcInstTheta, newTyVarTy, zonkTcTyVars, zonkTcType ) @@ -57,11 +57,11 @@ import Type ( mkFunTy, mkAppTy, mkTyVarTy, mkTyVarTys, mkRhoTy, ) import TyVar ( GenTyVar, SYN_IE(TyVarSet), unionTyVarSets, mkTyVarSet ) import TysPrim ( intPrimTy, charPrimTy, doublePrimTy, - floatPrimTy, addrPrimTy + floatPrimTy, addrPrimTy, realWorldTy ) import TysWiredIn ( addrTy, boolTy, charTy, stringTy, mkListTy, - mkTupleTy, mkPrimIoTy, primIoDataCon + mkTupleTy, mkPrimIoTy, stDataCon ) import Unify ( unifyTauTy, unifyTauTyList, unifyTauTyLists, unifyFunTy ) import Unique ( Unique, cCallableClassKey, cReturnableClassKey, @@ -269,7 +269,7 @@ tcExpr (CCall lbl args may_gc is_asm ignored_fake_result_ty) mapNF_Tc new_arg_dict (zipEqual "tcExpr:CCall" args arg_tys) `thenNF_Tc` \ ccarg_dicts_s -> newDicts result_origin [(cReturnableClass, result_ty)] `thenNF_Tc` \ (ccres_dict, _) -> - returnTc (HsCon primIoDataCon [result_ty] [CCall lbl args' may_gc is_asm result_ty], + returnTc (HsCon stDataCon [realWorldTy, result_ty] [CCall lbl args' may_gc is_asm result_ty], -- do the wrapping in the newtype constructor here foldr plusLIE ccres_dict ccarg_dicts_s `plusLIE` args_lie, mkPrimIoTy result_ty) diff --git a/ghc/compiler/typecheck/TcGRHSs.lhs b/ghc/compiler/typecheck/TcGRHSs.lhs index 4a532ae00960..309149e6afb0 100644 --- a/ghc/compiler/typecheck/TcGRHSs.lhs +++ b/ghc/compiler/typecheck/TcGRHSs.lhs @@ -13,14 +13,14 @@ IMPORT_DELOOPER(TcLoop) -- for paranoia checking import HsSyn ( GRHSsAndBinds(..), GRHS(..), HsExpr, HsBinds(..), InPat, OutPat, Bind, Sig, Fake ) -import RnHsSyn ( RenamedGRHSsAndBinds(..), RenamedGRHS(..) ) -import TcHsSyn ( TcGRHSsAndBinds(..), TcGRHS(..), TcIdOcc(..) ) +import RnHsSyn ( SYN_IE(RenamedGRHSsAndBinds), SYN_IE(RenamedGRHS) ) +import TcHsSyn ( SYN_IE(TcGRHSsAndBinds), SYN_IE(TcGRHS), TcIdOcc(..) ) import TcMonad hiding ( rnMtoTcM ) -import Inst ( Inst, LIE(..), plusLIE ) +import Inst ( Inst, SYN_IE(LIE), plusLIE ) import TcBinds ( tcBindsAndThen ) import TcExpr ( tcExpr ) -import TcType ( TcType(..) ) +import TcType ( SYN_IE(TcType) ) import Unify ( unifyTauTy ) import TysWiredIn ( boolTy ) diff --git a/ghc/compiler/typecheck/TcHsSyn.lhs b/ghc/compiler/typecheck/TcHsSyn.lhs index a0f779fcafa5..00eb7544e772 100644 --- a/ghc/compiler/typecheck/TcHsSyn.lhs +++ b/ghc/compiler/typecheck/TcHsSyn.lhs @@ -10,20 +10,20 @@ checker. #include "HsVersions.h" module TcHsSyn ( - TcIdBndr(..), TcIdOcc(..), + SYN_IE(TcIdBndr), TcIdOcc(..), - TcMonoBinds(..), TcHsBinds(..), TcBind(..), TcPat(..), - TcExpr(..), TcGRHSsAndBinds(..), TcGRHS(..), TcMatch(..), - TcQual(..), TcStmt(..), TcArithSeqInfo(..), TcRecordBinds(..), - TcHsModule(..), + SYN_IE(TcMonoBinds), SYN_IE(TcHsBinds), SYN_IE(TcBind), SYN_IE(TcPat), + SYN_IE(TcExpr), SYN_IE(TcGRHSsAndBinds), SYN_IE(TcGRHS), SYN_IE(TcMatch), + SYN_IE(TcQual), SYN_IE(TcStmt), SYN_IE(TcArithSeqInfo), SYN_IE(TcRecordBinds), + SYN_IE(TcHsModule), - TypecheckedHsBinds(..), TypecheckedBind(..), - TypecheckedMonoBinds(..), TypecheckedPat(..), - TypecheckedHsExpr(..), TypecheckedArithSeqInfo(..), - TypecheckedQual(..), TypecheckedStmt(..), - TypecheckedMatch(..), TypecheckedHsModule(..), - TypecheckedGRHSsAndBinds(..), TypecheckedGRHS(..), - TypecheckedRecordBinds(..), + SYN_IE(TypecheckedHsBinds), SYN_IE(TypecheckedBind), + SYN_IE(TypecheckedMonoBinds), SYN_IE(TypecheckedPat), + SYN_IE(TypecheckedHsExpr), SYN_IE(TypecheckedArithSeqInfo), + SYN_IE(TypecheckedQual), SYN_IE(TypecheckedStmt), + SYN_IE(TypecheckedMatch), SYN_IE(TypecheckedHsModule), + SYN_IE(TypecheckedGRHSsAndBinds), SYN_IE(TypecheckedGRHS), + SYN_IE(TypecheckedRecordBinds), mkHsTyApp, mkHsDictApp, mkHsTyLam, mkHsDictLam, @@ -37,7 +37,7 @@ IMP_Ubiq(){-uitous-} -- friends: import HsSyn -- oodles of it -import Id ( GenId(..), IdDetails, PragmaInfo, -- Can meddle modestly with Ids +import Id ( GenId(..), IdDetails, -- Can meddle modestly with Ids SYN_IE(DictVar), idType, SYN_IE(IdEnv), growIdEnvList, lookupIdEnv ) @@ -45,7 +45,7 @@ import Id ( GenId(..), IdDetails, PragmaInfo, -- Can meddle modestly with Ids -- others: import Name ( Name{--O only-} ) import TcMonad hiding ( rnMtoTcM ) -import TcType ( TcType(..), TcMaybe, TcTyVar(..), +import TcType ( SYN_IE(TcType), TcMaybe, SYN_IE(TcTyVar), zonkTcTypeToType, zonkTcTyVarToTyVar ) import Usage ( SYN_IE(UVar) ) diff --git a/ghc/compiler/typecheck/TcInstDcls.lhs b/ghc/compiler/typecheck/TcInstDcls.lhs index cef6f6ad4319..6f7e3a372ce5 100644 --- a/ghc/compiler/typecheck/TcInstDcls.lhs +++ b/ghc/compiler/typecheck/TcInstDcls.lhs @@ -21,21 +21,21 @@ import HsSyn ( InstDecl(..), FixityDecl, Sig(..), InPat(..), OutPat(..), HsExpr(..), HsLit(..), Stmt, Qualifier, ArithSeqInfo, Fake, PolyType(..), MonoType ) -import RnHsSyn ( RenamedHsBinds(..), RenamedMonoBinds(..), +import RnHsSyn ( SYN_IE(RenamedHsBinds), SYN_IE(RenamedMonoBinds), RenamedInstDecl(..), RenamedFixityDecl(..), RenamedSig(..), RenamedSpecInstSig(..), RnName(..){-incl instance Outputable-} ) -import TcHsSyn ( TcIdOcc(..), TcHsBinds(..), - TcMonoBinds(..), TcExpr(..), tcIdType, +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcHsBinds), + SYN_IE(TcMonoBinds), SYN_IE(TcExpr), tcIdType, mkHsTyLam, mkHsTyApp, mkHsDictLam, mkHsDictApp ) import TcMonad hiding ( rnMtoTcM ) import GenSpecEtc ( checkSigTyVars ) -import Inst ( Inst, InstOrigin(..), InstanceMapper(..), - newDicts, newMethod, LIE(..), emptyLIE, plusLIE ) +import Inst ( Inst, InstOrigin(..), SYN_IE(InstanceMapper), + newDicts, newMethod, SYN_IE(LIE), emptyLIE, plusLIE ) import TcBinds ( tcPragmaSigs ) import TcDeriv ( tcDeriving ) import TcEnv ( tcLookupClass, tcTyVarScope, newLocalId, tcExtendGlobalTyVars ) @@ -45,7 +45,7 @@ import TcKind ( TcKind, unifyKind ) import TcMatches ( tcMatchesFun ) import TcMonoType ( tcContext, tcMonoTypeKind ) import TcSimplify ( tcSimplifyAndCheck ) -import TcType ( TcType(..), TcTyVar(..), TcTyVarSet(..), +import TcType ( SYN_IE(TcType), SYN_IE(TcTyVar), SYN_IE(TcTyVarSet), tcInstSigTyVars, tcInstType, tcInstTheta, tcInstTcType ) import Unify ( unifyTauTy, unifyTauTyLists ) diff --git a/ghc/compiler/typecheck/TcInstUtil.lhs b/ghc/compiler/typecheck/TcInstUtil.lhs index c30a90ae9245..12e0f14bb91e 100644 --- a/ghc/compiler/typecheck/TcInstUtil.lhs +++ b/ghc/compiler/typecheck/TcInstUtil.lhs @@ -17,15 +17,17 @@ module TcInstUtil ( IMP_Ubiq() import HsSyn ( MonoBinds, Fake, InPat, Sig ) -import RnHsSyn ( RenamedMonoBinds(..), RenamedSig(..), +import RnHsSyn ( SYN_IE(RenamedMonoBinds), RenamedSig(..), RenamedInstancePragmas(..) ) import TcMonad hiding ( rnMtoTcM ) -import Inst ( InstanceMapper(..) ) +import Inst ( SYN_IE(InstanceMapper) ) import Bag ( bagToList ) import Class ( GenClass, GenClassOp, SYN_IE(ClassInstEnv), - classBigSig, classOps, classOpLocalType ) + classBigSig, classOps, classOpLocalType, + SYN_IE(ClassOp) + ) import CoreSyn ( GenCoreExpr(..), mkValLam, mkTyApp ) import Id ( GenId, mkDictFunId, mkConstMethodId, mkSysLocal ) import MatchEnv ( nullMEnv, insertMEnv ) diff --git a/ghc/compiler/typecheck/TcLoop_1_3.lhi b/ghc/compiler/typecheck/TcLoop_1_3.lhi index 69488fe65629..0fcf3ed975fb 100644 --- a/ghc/compiler/typecheck/TcLoop_1_3.lhi +++ b/ghc/compiler/typecheck/TcLoop_1_3.lhi @@ -1,5 +1,5 @@ \begin{code} interface TcLoop_1_3 1 __exports__ -Outputable Outputable (..) +TcGRHSs tcGRHSsAndBinds (..) \end{code} diff --git a/ghc/compiler/typecheck/TcMLoop_1_3.lhi b/ghc/compiler/typecheck/TcMLoop_1_3.lhi index 1ea9fcf225b5..869c5c7531ac 100644 --- a/ghc/compiler/typecheck/TcMLoop_1_3.lhi +++ b/ghc/compiler/typecheck/TcMLoop_1_3.lhi @@ -1,5 +1,7 @@ \begin{code} interface TcMLoop_1_3 1 __exports__ -Outputable Outputable (..) +TcEnv TcEnv +TcEnv initEnv (..) +TcType TcMaybe \end{code} diff --git a/ghc/compiler/typecheck/TcMatches.lhs b/ghc/compiler/typecheck/TcMatches.lhs index 3cd3df53910c..313dc5a63342 100644 --- a/ghc/compiler/typecheck/TcMatches.lhs +++ b/ghc/compiler/typecheck/TcMatches.lhs @@ -13,20 +13,19 @@ IMP_Ubiq() import HsSyn ( Match(..), GRHSsAndBinds(..), GRHS(..), InPat, HsExpr, HsBinds, OutPat, Fake, collectPatBinders, pprMatch ) -import RnHsSyn ( RenamedMatch(..) ) -import TcHsSyn ( TcIdOcc(..), TcMatch(..) ) +import RnHsSyn ( SYN_IE(RenamedMatch), RnName{-instance Outputable-} ) +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcMatch) ) import TcMonad hiding ( rnMtoTcM ) -import Inst ( Inst, LIE(..), plusLIE ) +import Inst ( Inst, SYN_IE(LIE), plusLIE ) import TcEnv ( newMonoIds ) IMPORT_DELOOPER(TcLoop) ( tcGRHSsAndBinds ) import TcPat ( tcPat ) -import TcType ( TcType(..), TcMaybe, zonkTcType ) +import TcType ( SYN_IE(TcType), TcMaybe, zonkTcType ) import Unify ( unifyTauTy, unifyTauTyList ) import Kind ( Kind, mkTypeKind ) import Pretty -import RnHsSyn ( RnName{-instance Outputable-} ) import Type ( isTyVarTy, mkFunTy, getFunTy_maybe ) import Util \end{code} diff --git a/ghc/compiler/typecheck/TcModule.lhs b/ghc/compiler/typecheck/TcModule.lhs index 7410a7f78c08..091ce48d7f58 100644 --- a/ghc/compiler/typecheck/TcModule.lhs +++ b/ghc/compiler/typecheck/TcModule.lhs @@ -8,11 +8,11 @@ module TcModule ( typecheckModule, - TcResults(..), - TcResultBinds(..), - TcIfaceInfo(..), - TcSpecialiseRequests(..), - TcDDumpDeriv(..) + SYN_IE(TcResults), + SYN_IE(TcResultBinds), + SYN_IE(TcIfaceInfo), + SYN_IE(TcSpecialiseRequests), + SYN_IE(TcDDumpDeriv) ) where IMP_Ubiq(){-uitous-} @@ -22,8 +22,8 @@ import HsSyn ( HsModule(..), HsBinds(..), Bind, HsExpr, SpecInstSig, DefaultDecl, Sig, Fake, InPat, FixityDecl, IE, ImportDecl ) -import RnHsSyn ( RenamedHsModule(..), RenamedFixityDecl(..) ) -import TcHsSyn ( TypecheckedHsBinds(..), TypecheckedHsExpr(..), +import RnHsSyn ( SYN_IE(RenamedHsModule), RenamedFixityDecl(..) ) +import TcHsSyn ( SYN_IE(TypecheckedHsBinds), SYN_IE(TypecheckedHsExpr), TcIdOcc(..), zonkBinds, zonkDictBinds ) import TcMonad hiding ( rnMtoTcM ) @@ -59,7 +59,7 @@ import UniqFM ( lookupUFM_Directly, lookupWithDefaultUFM_Directly, import Unique ( iOTyConKey, mainIdKey, mainPrimIOIdKey ) import Util -import FiniteMap ( emptyFM ) +import FiniteMap ( emptyFM, FiniteMap ) tycon_specs = emptyFM \end{code} diff --git a/ghc/compiler/typecheck/TcMonad.lhs b/ghc/compiler/typecheck/TcMonad.lhs index 8a636e69f561..fa642c55ec06 100644 --- a/ghc/compiler/typecheck/TcMonad.lhs +++ b/ghc/compiler/typecheck/TcMonad.lhs @@ -2,7 +2,7 @@ #include "HsVersions.h" module TcMonad( - TcM(..), NF_TcM(..), TcDown, TcEnv, + SYN_IE(TcM), SYN_IE(NF_TcM), TcDown, TcEnv, SST_R, FSST_R, initTc, @@ -28,22 +28,26 @@ module TcMonad( rnMtoTcM, - TcError(..), TcWarning(..), + SYN_IE(TcError), SYN_IE(TcWarning), mkTcErr, arityErr, -- For closure - MutableVar(..), _MutableArray + SYN_IE(MutableVar), +#if __GLASGOW_HASKELL__ >= 200 + GHCbase.MutableArray +#else + _MutableArray +#endif ) where IMP_Ubiq(){-uitous-} -IMPORT_DELOOPER(TcMLoop) ( TcEnv, initEnv, TcMaybe ) -- We need the type TcEnv and an initial Env +IMPORT_DELOOPER(TcMLoop) ( TcEnv, initEnv, TcMaybe ) -- We need the type TcEnv and an initial Env import Type ( SYN_IE(Type), GenType ) import TyVar ( SYN_IE(TyVar), GenTyVar ) import Usage ( SYN_IE(Usage), GenUsage ) -import ErrUtils ( SYN_IE(Error), SYN_IE(Message), ErrCtxt(..), - SYN_IE(Warning) ) +import ErrUtils ( SYN_IE(Error), SYN_IE(Message), SYN_IE(Warning) ) import SST import RnMonad ( SYN_IE(RnM), RnDown, initRn, setExtraRn, @@ -55,7 +59,6 @@ import Bag ( Bag, emptyBag, isEmptyBag, foldBag, unitBag, unionBags, snocBag ) import FiniteMap ( FiniteMap, emptyFM, isEmptyFM, keysFM{-ToDo:rm-} ) --import Outputable ( Outputable(..), NamedThing(..), ExportFlag ) -import ErrUtils ( SYN_IE(Error) ) import Maybes ( MaybeErr(..) ) --import Name ( Name ) import SrcLoc ( SrcLoc, mkUnknownSrcLoc ) @@ -79,11 +82,17 @@ type TcM s r = TcDown s -> TcEnv s -> FSST s r () \end{code} \begin{code} +#if __GLASGOW_HASKELL__ >= 200 +# define REAL_WORLD RealWorld +#else +# define REAL_WORLD _RealWorld +#endif + -- With a builtin polymorphic type for runSST the type for -- initTc should use TcM s r instead of TcM RealWorld r initTc :: UniqSupply - -> TcM _RealWorld r + -> TcM REAL_WORLD r -> MaybeErr (r, Bag Warning) (Bag Error, Bag Warning) @@ -465,7 +474,7 @@ getErrCtxt (TcDown def us loc ctxt errs) = ctxt %~~~~~~~~~~~~~~~~~~ \begin{code} -rnMtoTcM :: RnEnv -> RnM _RealWorld a -> NF_TcM s (a, Bag Error) +rnMtoTcM :: RnEnv -> RnM REAL_WORLD a -> NF_TcM s (a, Bag Error) rnMtoTcM rn_env rn_action down env = readMutVarSST u_var `thenSST` \ uniq_supply -> diff --git a/ghc/compiler/typecheck/TcMonoType.lhs b/ghc/compiler/typecheck/TcMonoType.lhs index 35f8353323c5..5988dbb7f757 100644 --- a/ghc/compiler/typecheck/TcMonoType.lhs +++ b/ghc/compiler/typecheck/TcMonoType.lhs @@ -12,10 +12,10 @@ IMP_Ubiq(){-uitous-} import HsSyn ( PolyType(..), MonoType(..), Fake ) import RnHsSyn ( RenamedPolyType(..), RenamedMonoType(..), - RenamedContext(..), RnName(..) + RenamedContext(..), RnName(..), + isRnLocal, isRnClass, isRnTyCon ) - import TcMonad hiding ( rnMtoTcM ) import TcEnv ( tcLookupTyVar, tcLookupClass, tcLookupTyCon, tcTyVarScope, tcTyVarScopeGivenKinds @@ -26,19 +26,15 @@ import TcKind ( TcKind, mkTcTypeKind, mkBoxedTypeKind, ) import Type ( GenType, SYN_IE(Type), SYN_IE(ThetaType), mkTyVarTy, mkTyConTy, mkFunTy, mkAppTy, mkSynTy, - mkSigmaTy + mkSigmaTy, mkDictTy ) import TyVar ( GenTyVar, SYN_IE(TyVar) ) -import Type ( mkDictTy ) import Class ( cCallishClassKeys ) import TyCon ( TyCon ) import TysWiredIn ( mkListTy, mkTupleTy ) import Unique ( Unique ) import PprStyle import Pretty -import RnHsSyn ( isRnLocal, isRnClass, isRnTyCon, - RnName{-instance NamedThing-} - ) import Util ( zipWithEqual, panic, pprPanic{-ToDo:rm-} ) \end{code} diff --git a/ghc/compiler/typecheck/TcPat.lhs b/ghc/compiler/typecheck/TcPat.lhs index e7056b200f69..a81a1125b93e 100644 --- a/ghc/compiler/typecheck/TcPat.lhs +++ b/ghc/compiler/typecheck/TcPat.lhs @@ -13,17 +13,17 @@ IMP_Ubiq(){-uitous-} import HsSyn ( InPat(..), OutPat(..), HsExpr(..), HsLit(..), Match, HsBinds, Qualifier, PolyType, ArithSeqInfo, Stmt, Fake ) -import RnHsSyn ( RenamedPat(..) ) -import TcHsSyn ( TcPat(..), TcIdOcc(..) ) +import RnHsSyn ( SYN_IE(RenamedPat), RnName{-instance Outputable-} ) +import TcHsSyn ( SYN_IE(TcPat), TcIdOcc(..) ) import TcMonad hiding ( rnMtoTcM ) import Inst ( Inst, OverloadedLit(..), InstOrigin(..), - emptyLIE, plusLIE, plusLIEs, LIE(..), + emptyLIE, plusLIE, plusLIEs, SYN_IE(LIE), newMethod, newOverloadedLit ) import TcEnv ( tcLookupGlobalValue, tcLookupGlobalValueByKey, tcLookupLocalValueOK ) -import TcType ( TcType(..), TcMaybe, newTyVarTy, newTyVarTys, tcInstId ) +import TcType ( SYN_IE(TcType), TcMaybe, newTyVarTy, newTyVarTys, tcInstId ) import Unify ( unifyTauTy, unifyTauTyList, unifyTauTyLists ) import Bag ( Bag ) @@ -34,7 +34,6 @@ import Maybes ( maybeToBool ) import PprType ( GenType, GenTyVar ) import PprStyle--ToDo:rm import Pretty -import RnHsSyn ( RnName{-instance Outputable-} ) import Type ( splitFunTy, splitRhoTy, splitSigmaTy, mkTyVarTys, getFunTy_maybe, maybeAppDataTyCon, SYN_IE(Type), GenType diff --git a/ghc/compiler/typecheck/TcSimplify.lhs b/ghc/compiler/typecheck/TcSimplify.lhs index a1e987a14176..e6fc6890fe19 100644 --- a/ghc/compiler/typecheck/TcSimplify.lhs +++ b/ghc/compiler/typecheck/TcSimplify.lhs @@ -17,7 +17,7 @@ IMP_Ubiq() import HsSyn ( MonoBinds(..), HsExpr(..), InPat, OutPat, HsLit, Match, HsBinds, Qualifier, PolyType, ArithSeqInfo, GRHSsAndBinds, Stmt, Fake ) -import TcHsSyn ( TcIdOcc(..), TcIdBndr(..), TcExpr(..), TcMonoBinds(..) ) +import TcHsSyn ( TcIdOcc(..), SYN_IE(TcIdBndr), SYN_IE(TcExpr), SYN_IE(TcMonoBinds) ) import TcMonad hiding ( rnMtoTcM ) import Inst ( lookupInst, lookupSimpleInst, @@ -25,11 +25,11 @@ import Inst ( lookupInst, lookupSimpleInst, matchesInst, instToId, instBindingRequired, instCanBeGeneralised, newDictsAtLoc, pprInst, - Inst(..), LIE(..), zonkLIE, emptyLIE, + Inst(..), SYN_IE(LIE), zonkLIE, emptyLIE, plusLIE, unitLIE, consLIE, InstOrigin(..), OverloadedLit ) import TcEnv ( tcGetGlobalTyVars ) -import TcType ( TcType(..), TcTyVar(..), TcTyVarSet(..), TcMaybe, tcInstType ) +import TcType ( SYN_IE(TcType), SYN_IE(TcTyVar), SYN_IE(TcTyVarSet), TcMaybe, tcInstType ) import Unify ( unifyTauTy ) import Bag ( Bag, unitBag, listToBag, foldBag, filterBag, emptyBag, bagToList, diff --git a/ghc/compiler/typecheck/TcTyClsDecls.lhs b/ghc/compiler/typecheck/TcTyClsDecls.lhs index ae2cb40e71d1..78417f8e706a 100644 --- a/ghc/compiler/typecheck/TcTyClsDecls.lhs +++ b/ghc/compiler/typecheck/TcTyClsDecls.lhs @@ -18,13 +18,13 @@ import HsSyn ( TyDecl(..), ConDecl(..), BangType(..), import RnHsSyn ( isRnTyCon, RenamedTyDecl(..), RenamedClassDecl(..), RnName(..){-instance Uniquable-} ) -import TcHsSyn ( TcHsBinds(..), TcIdOcc(..) ) +import TcHsSyn ( SYN_IE(TcHsBinds), TcIdOcc(..) ) import TcMonad hiding ( rnMtoTcM ) -import Inst ( InstanceMapper(..) ) +import Inst ( SYN_IE(InstanceMapper) ) import TcClassDcl ( tcClassDecl1 ) import TcEnv ( tcExtendTyConEnv, tcExtendClassEnv, - tcTyVarScope, tcGetEnv ) + tcTyVarScope ) import TcKind ( TcKind, newKindVars ) import TcTyDecls ( tcTyDecl, mkDataBinds ) diff --git a/ghc/compiler/typecheck/TcTyDecls.lhs b/ghc/compiler/typecheck/TcTyDecls.lhs index a45e60003005..a6f55f2c451e 100644 --- a/ghc/compiler/typecheck/TcTyDecls.lhs +++ b/ghc/compiler/typecheck/TcTyDecls.lhs @@ -24,7 +24,7 @@ import RnHsSyn ( RenamedTyDecl(..), RenamedConDecl(..), RnName{-instance Outputable-} ) import TcHsSyn ( mkHsTyLam, mkHsDictLam, tcIdType, - TcHsBinds(..), TcIdOcc(..) + SYN_IE(TcHsBinds), TcIdOcc(..) ) import Inst ( newDicts, InstOrigin(..), Inst ) import TcMonoType ( tcMonoTypeKind, tcMonoType, tcPolyType, tcContext ) @@ -36,7 +36,9 @@ import TcEnv ( tcLookupTyCon, tcLookupTyVar, tcLookupClass, import TcMonad hiding ( rnMtoTcM ) import TcKind ( TcKind, unifyKind, mkTcArrowKind, mkTcTypeKind ) -import PprType ( GenClass, GenType{-instance Outputable-} ) +import PprType ( GenClass, GenType{-instance Outputable-}, + GenTyVar{-instance Outputable-}{-ToDo:possibly rm-} + ) import Class ( GenClass{-instance Eq-}, classInstEnv ) import Id ( mkDataCon, dataConSig, mkRecordSelId, idType, dataConFieldLabels, dataConStrictMarks, @@ -59,7 +61,6 @@ import Type ( GenType, -- instances applyTyCon, mkTyVarTys, mkForAllTys, mkFunTy, splitFunTy, mkTyVarTy, getTyVar_maybe ) -import PprType ( GenTyVar{-instance Outputable-}{-ToDo:possibly rm-} ) import TyVar ( tyVarKind, elementOfTyVarSet, GenTyVar{-instance Eq-} ) import Unique ( Unique {- instance Eq -}, evalClassKey ) import UniqSet ( emptyUniqSet, mkUniqSet, uniqSetToList, unionManyUniqSets, SYN_IE(UniqSet) ) diff --git a/ghc/compiler/typecheck/TcType.lhs b/ghc/compiler/typecheck/TcType.lhs index 5b18277c65ac..e27dab5442cc 100644 --- a/ghc/compiler/typecheck/TcType.lhs +++ b/ghc/compiler/typecheck/TcType.lhs @@ -3,17 +3,17 @@ module TcType ( - TcTyVar(..), + SYN_IE(TcTyVar), newTcTyVar, newTyVarTy, -- Kind -> NF_TcM s (TcType s) newTyVarTys, -- Int -> Kind -> NF_TcM s [TcType s] - TcTyVarSet(..), + SYN_IE(TcTyVarSet), ----------------------------------------- - TcType(..), TcMaybe(..), - TcTauType(..), TcThetaType(..), TcRhoType(..), + SYN_IE(TcType), TcMaybe(..), + SYN_IE(TcTauType), SYN_IE(TcThetaType), SYN_IE(TcRhoType), -- Find the type to which a type variable is bound tcWriteTyVar, -- :: TcTyVar s -> TcType s -> NF_TcM (TcType s) @@ -229,37 +229,37 @@ zonkTcTypeToType env ty tcConvert bind_fn occ_fn env ty_to_convert - = do env ty_to_convert + = doo env ty_to_convert where - do env (TyConTy tycon usage) = returnNF_Tc (TyConTy tycon usage) + doo env (TyConTy tycon usage) = returnNF_Tc (TyConTy tycon usage) - do env (SynTy tycon tys ty) = mapNF_Tc (do env) tys `thenNF_Tc` \ tys' -> - do env ty `thenNF_Tc` \ ty' -> + doo env (SynTy tycon tys ty) = mapNF_Tc (doo env) tys `thenNF_Tc` \ tys' -> + doo env ty `thenNF_Tc` \ ty' -> returnNF_Tc (SynTy tycon tys' ty') - do env (FunTy arg res usage) = do env arg `thenNF_Tc` \ arg' -> - do env res `thenNF_Tc` \ res' -> + doo env (FunTy arg res usage) = doo env arg `thenNF_Tc` \ arg' -> + doo env res `thenNF_Tc` \ res' -> returnNF_Tc (FunTy arg' res' usage) - do env (AppTy fun arg) = do env fun `thenNF_Tc` \ fun' -> - do env arg `thenNF_Tc` \ arg' -> + doo env (AppTy fun arg) = doo env fun `thenNF_Tc` \ fun' -> + doo env arg `thenNF_Tc` \ arg' -> returnNF_Tc (AppTy fun' arg') - do env (DictTy clas ty usage)= do env ty `thenNF_Tc` \ ty' -> + doo env (DictTy clas ty usage)= doo env ty `thenNF_Tc` \ ty' -> returnNF_Tc (DictTy clas ty' usage) - do env (ForAllUsageTy u us ty) = do env ty `thenNF_Tc` \ ty' -> + doo env (ForAllUsageTy u us ty) = doo env ty `thenNF_Tc` \ ty' -> returnNF_Tc (ForAllUsageTy u us ty') -- The two interesting cases! - do env (TyVarTy tv) = occ_fn env tv + doo env (TyVarTy tv) = occ_fn env tv - do env (ForAllTy tyvar ty) + doo env (ForAllTy tyvar ty) = bind_fn tyvar `thenNF_Tc` \ tyvar' -> let new_env = addOneToTyVarEnv env tyvar (TyVarTy tyvar') in - do new_env ty `thenNF_Tc` \ ty' -> + doo new_env ty `thenNF_Tc` \ ty' -> returnNF_Tc (ForAllTy tyvar' ty') diff --git a/ghc/compiler/typecheck/Unify.lhs b/ghc/compiler/typecheck/Unify.lhs index bc654dc33ab0..638058718bdc 100644 --- a/ghc/compiler/typecheck/Unify.lhs +++ b/ghc/compiler/typecheck/Unify.lhs @@ -18,7 +18,7 @@ import TcMonad hiding ( rnMtoTcM ) import Type ( GenType(..), typeKind, mkFunTy, getFunTy_maybe ) import TyCon ( TyCon, mkFunTyCon ) import TyVar ( GenTyVar(..), SYN_IE(TyVar), tyVarKind ) -import TcType ( TcType(..), TcMaybe(..), TcTauType(..), TcTyVar(..), +import TcType ( SYN_IE(TcType), TcMaybe(..), SYN_IE(TcTauType), SYN_IE(TcTyVar), newTyVarTy, tcReadTyVar, tcWriteTyVar, zonkTcType ) -- others: diff --git a/ghc/compiler/types/TyVar.lhs b/ghc/compiler/types/TyVar.lhs index 553ad736a1a6..913a7b29e171 100644 --- a/ghc/compiler/types/TyVar.lhs +++ b/ghc/compiler/types/TyVar.lhs @@ -14,7 +14,7 @@ module TyVar ( -- TyVars and "sets" containing TyVars: SYN_IE(TyVarEnv), nullTyVarEnv, mkTyVarEnv, addOneToTyVarEnv, - growTyVarEnvList, isNullTyVarEnv, lookupTyVarEnv, + growTyVarEnvList, isNullTyVarEnv, lookupTyVarEnv, delFromTyVarEnv, SYN_IE(GenTyVarSet), SYN_IE(TyVarSet), emptyTyVarSet, unitTyVarSet, unionTyVarSets, @@ -33,7 +33,7 @@ import Kind ( Kind, mkBoxedTypeKind, mkTypeKind ) -- others import UniqSet -- nearly all of it import UniqFM ( emptyUFM, listToUFM, addToUFM, lookupUFM, - plusUFM, sizeUFM, UniqFM + plusUFM, sizeUFM, delFromUFM, UniqFM ) import Name ( mkLocalName, changeUnique, Name, RdrName(..) ) import Pretty ( SYN_IE(Pretty), PrettyRep, ppBeside, ppPStr ) @@ -107,11 +107,13 @@ addOneToTyVarEnv :: TyVarEnv a -> GenTyVar flexi -> a -> TyVarEnv a growTyVarEnvList :: TyVarEnv a -> [(GenTyVar flexi, a)] -> TyVarEnv a isNullTyVarEnv :: TyVarEnv a -> Bool lookupTyVarEnv :: TyVarEnv a -> GenTyVar flexi -> Maybe a +delFromTyVarEnv :: TyVarEnv a -> GenTyVar flexi -> TyVarEnv a nullTyVarEnv = emptyUFM mkTyVarEnv = listToUFM addOneToTyVarEnv = addToUFM lookupTyVarEnv = lookupUFM +delFromTyVarEnv = delFromUFM growTyVarEnvList env pairs = plusUFM env (listToUFM pairs) isNullTyVarEnv env = sizeUFM env == 0 diff --git a/ghc/compiler/types/Type.lhs b/ghc/compiler/types/Type.lhs index bebf0f5c83d5..581167995510 100644 --- a/ghc/compiler/types/Type.lhs +++ b/ghc/compiler/types/Type.lhs @@ -53,7 +53,7 @@ import TyCon ( mkFunTyCon, mkTupleTyCon, isFunTyCon, tyConKind, tyConDataCons, getSynTyConDefn, TyCon ) import TyVar ( tyVarKind, GenTyVar{-instances-}, SYN_IE(GenTyVarSet), emptyTyVarSet, unionTyVarSets, minusTyVarSet, - unitTyVarSet, nullTyVarEnv, lookupTyVarEnv, + unitTyVarSet, nullTyVarEnv, lookupTyVarEnv, delFromTyVarEnv, addOneToTyVarEnv, SYN_IE(TyVarEnv), SYN_IE(TyVar) ) import Usage ( usageOmega, GenUsage, SYN_IE(Usage), SYN_IE(UVar), SYN_IE(UVarEnv), nullUVarEnv, addOneToUVarEnv, lookupUVarEnv, eqUVar, @@ -612,20 +612,38 @@ instantiateTauTy tenv ty bound_forall_tv_BAD = panic "instantiateTauTy:bound_forall_tv" deflt_forall_tv tv = panic "instantiateTauTy:deflt_forall_tv" + +-- applyTypeEnv applies a type environment to a type. +-- It can handle shadowing; for example: +-- f = /\ t1 t2 -> \ d -> +-- letrec f' = /\ t1 -> \x -> ...(f' t1 x')... +-- in f' t1 +-- Here, when we clone t1 to t1', say, we'll come across shadowing +-- when applying the clone environment to the type of f'. +-- +-- As a sanity check, we should also check that name capture +-- doesn't occur, but that means keeping track of the free variables of the +-- range of the TyVarEnv, which I don't do just yet. +-- +-- We don't use instant_help because we need to carry in the environment + applyTypeEnvToTy tenv ty - = instant_help ty lookup_tv deflt_tv choose_tycon - if_usage if_forall bound_forall_tv_BAD deflt_forall_tv + = go tenv ty where - lookup_tv = lookupTyVarEnv tenv - deflt_tv tv = TyVarTy tv - choose_tycon ty _ _ = ty - if_usage ty = ty - if_forall ty = ty - bound_forall_tv_BAD = False -- ToDo: probably should be True (i.e., no shadowing) - deflt_forall_tv tv = case (lookup_tv tv) of - Nothing -> tv - Just (TyVarTy tv2) -> tv2 - _ -> pprPanic "applyTypeEnvToTy:" (ppAbove (ppr PprShowAll tv) (ppr PprShowAll ty)) + go tenv ty@(TyVarTy tv) = case (lookupTyVarEnv tenv tv) of + Nothing -> ty + Just ty -> ty + go tenv ty@(TyConTy tycon usage) = ty + go tenv (SynTy tycon tys ty) = SynTy tycon (map (go tenv) tys) (go tenv ty) + go tenv (FunTy arg res usage) = FunTy (go tenv arg) (go tenv res) usage + go tenv (AppTy fun arg) = AppTy (go tenv fun) (go tenv arg) + go tenv (DictTy clas ty usage) = DictTy clas (go tenv ty) usage + go tenv (ForAllUsageTy uvar bds ty) = ForAllUsageTy uvar bds (go tenv ty) + go tenv (ForAllTy tv ty) = ForAllTy tv (go tenv' ty) + where + tenv' = case lookupTyVarEnv tenv tv of + Nothing -> tenv + Just _ -> delFromTyVarEnv tenv tv \end{code} \begin{code} diff --git a/ghc/compiler/utils/Ubiq_1_3.lhi b/ghc/compiler/utils/Ubiq_1_3.lhi index ffc378a985bd..f0995efe0b72 100644 --- a/ghc/compiler/utils/Ubiq_1_3.lhi +++ b/ghc/compiler/utils/Ubiq_1_3.lhi @@ -2,10 +2,8 @@ interface Ubiq_1_3 1 __exports__ GHCbase trace (..) -GHCbase PrimIO -- this is here because of the bug preventing it getting into PreludeGlaST +GHCps tailPS (..) GHCps nilPS (..) --- GHCps substrPS (..) --- GHCps tailPS (..) GHCps appendPS (..) GHCps concatPS (..) GHCps consPS (..) @@ -21,6 +19,7 @@ BinderInfo BinderInfo CLabel CLabel Class Class ClosureInfo ClosureInfo +CmdLineOpts SwitchResult CoreSyn GenCoreExpr CoreUnfold UnfoldingDetails CoreUnfold UnfoldingGuidance @@ -50,6 +49,7 @@ Name OrigName (..) Name RdrName (..) Outputable Outputable (..) PprStyle PprStyle +PragmaInfo PragmaInfo PrimOp PrimOp PrimRep PrimRep SrcLoc SrcLoc -- GitLab