diff options
| author | simonmar <unknown> | 1999-06-07 16:53:09 +0000 |
|---|---|---|
| committer | simonmar <unknown> | 1999-06-07 16:53:09 +0000 |
| commit | c6b12cd91b225a3692a02d76c00dd4a1806a6bab (patch) | |
| tree | 464541c965b6208de9be3e3a921efa1b582f8885 | |
| parent | 9dd2916cc999ac9af047a8757878df1051948b5d (diff) | |
| download | haskell-c6b12cd91b225a3692a02d76c00dd4a1806a6bab.tar.gz | |
[project @ 1999-06-07 16:53:08 by simonmar]
Existential constructors NEVER WORKED! You were JUST IMAGINING IT!
| -rw-r--r-- | ghc/compiler/basicTypes/DataCon.lhs | 20 | ||||
| -rw-r--r-- | ghc/compiler/codeGen/CgConTbls.lhs | 6 |
2 files changed, 19 insertions, 7 deletions
diff --git a/ghc/compiler/basicTypes/DataCon.lhs b/ghc/compiler/basicTypes/DataCon.lhs index d916dcb53e..2c5f7b4cbb 100644 --- a/ghc/compiler/basicTypes/DataCon.lhs +++ b/ghc/compiler/basicTypes/DataCon.lhs @@ -9,7 +9,8 @@ module DataCon ( ConTag, fIRST_TAG, mkDataCon, dataConType, dataConSig, dataConName, dataConTag, - dataConOrigArgTys, dataConArgTys, dataConRawArgTys, dataConTyCon, + dataConOrigArgTys, dataConArgTys, dataConTyCon, + dataConRawArgTys, dataConAllRawArgTys, dataConFieldLabels, dataConStrictMarks, dataConSourceArity, dataConNumFields, dataConNumInstArgs, dataConId, dataConRepStrictness, isNullaryDataCon, isTupleCon, isUnboxedTupleCon, @@ -338,9 +339,6 @@ dataConFieldLabels = dcFields dataConStrictMarks :: DataCon -> [StrictnessMark] dataConStrictMarks = dcRealStricts -dataConRawArgTys :: DataCon -> [TauType] -- a function of convenience -dataConRawArgTys = dcRepArgTys - dataConSourceArity :: DataCon -> Arity -- Source-level arity of the data constructor dataConSourceArity dc = length (dcOrigArgTys dc) @@ -383,6 +381,20 @@ dataConOrigArgTys (MkData {dcOrigArgTys = arg_tys, dcTyVars = tyvars, ([mkDictTy cls tys | (cls,tys) <- ex_theta] ++ arg_tys) \end{code} +These two functions get the real argument types of the constructor, +without substituting for any type variables. dataConAllRawArgTys is +like dataConRawArgTys except that the existential dictionary arguments +are included. + +\begin{code} +dataConRawArgTys :: DataCon -> [TauType] -- a function of convenience +dataConRawArgTys = dcRepArgTys + +dataConAllRawArgTys :: DataCon -> [TauType] +dataConAllRawArgTys con = + [mkDictTy cls tys | (cls,tys) <- dcExTheta con] ++ dcRepArgTys con +\end{code} + dataConNumFields gives the number of actual fields in the {\em representation} of the data constructor. This may be more than appear in the source code; the extra ones are the existentially quantified diff --git a/ghc/compiler/codeGen/CgConTbls.lhs b/ghc/compiler/codeGen/CgConTbls.lhs index 6b75ee50d9..7ae92a890d 100644 --- a/ghc/compiler/codeGen/CgConTbls.lhs +++ b/ghc/compiler/codeGen/CgConTbls.lhs @@ -20,7 +20,7 @@ import ClosureInfo ( layOutStaticClosure, layOutDynCon, ) import CostCentre ( dontCareCCS ) import FiniteMap ( fmToList, FiniteMap ) -import DataCon ( DataCon, dataConName, dataConRawArgTys ) +import DataCon ( DataCon, dataConName, dataConAllRawArgTys ) import Const ( Con(..) ) import Name ( getOccString ) import PrimRep ( getPrimRepSize, PrimRep(..) ) @@ -161,7 +161,7 @@ genConInfo comp_info tycon data_con zero_arity_con = all zero_size arg_tys - arg_tys = dataConRawArgTys data_con + arg_tys = dataConAllRawArgTys data_con entry_label = mkConEntryLabel con_name closure_label = mkStaticClosureLabel con_name con_name = dataConName data_con @@ -173,7 +173,7 @@ mkConCodeAndInfo :: DataCon -- Data constructor mkConCodeAndInfo con = let - arg_tys = dataConRawArgTys con + arg_tys = dataConAllRawArgTys con (closure_info, arg_things) = layOutDynCon con typePrimRep arg_tys |
