
malcolm: Wed Oct 17 14:57:21 CEST 2001 Update of /usr/src/master/nhc/src/compiler98 In directory hinken:/tmp/cvs-serv28723 Modified Files: CaseLib.hs DbgDataTrans.hs DbgDumpSRIDTable.hs DbgDumpSRIDTableC.hs DbgReplaceConstr.hs DbgTrans.hs Export.hs FFITrans.hs FSLib.hs GcodeFix.hs GcodeSpec.hs IExtract.hs Import.hs Info.hs IntState.hs Need.hs ParseI.hs PreImp.hs PreImport.hs Remove1_3.hs Rename.hs RenameLib.hs ReportImports.hs TokenId.hs TokenInt.hs TypeUtil.hs Log Message: Fix many faults in the import/export mechanism. New features ------------ * The compiler now treats explicitly named constructors and methods correctly, e.g. in module M (T(A,B), C(f,g)) where or import M (T(A,B), C(f,g)) only the constructors A and B of datatype T, and only the methods f and g of class C, are exported/imported. * The declaration import qualified M (f) is now accepted without complaint, whereas previously it needed to be import qualified M (M.f) in some circumstances. * It is now possible to name selectors explicitly in an export/import list, provided the type they select over is *not* exported/imported. Implementation -------------- The symbol table entries InfoConstr, InfoMethod, InfoField now each have an extra field 'ie' which determines whether an individual constructor/method/field is to be re-exported, rather than relying on the corresponding tag of the relevant InfoData/InfoClass symbol. The IE type is extended to distinguish the various cases of: IEall - re-export with all constructors/methods e.g. C(..) IEsome - re-export with some constructors/methods e.g. C(f,g) IEabs - re-export with no constructors/methods e.g. C() or C IEnone - do not re-export and IEsel - re-export this selected constructor/method individually The interface file (.hi) now indicates which individual constructors/methods are actually exported in the {-# NEED {C f g} #-} annotation. Most importantly, *all* the actual constructors/methods are listed in the datatype/class definition that follows, because the numerical ordering is required to generate correct code. However, when importing such a datatype/class, the non-visible constructors/methods are renamed internally to something like "Unknown.Constructor_n" in the symbol table, to ensure that they cannot be used. These new names will appear any new interface file that is generated due to a further re-export.