[project @ 1999-04-02 08:50:23 by simonm]
authorsimonm <unknown>
Fri, 2 Apr 1999 08:50:23 +0000 (08:50 +0000)
committersimonm <unknown>
Fri, 2 Apr 1999 08:50:23 +0000 (08:50 +0000)
Hack from Simon: put abstract type decls (i.e. from an hi-boot file)
on the defferred list, just in case we happen to pull in the real one
as well.

ghc/compiler/rename/RnIfaces.lhs

index b8bd40c..dfd74fa 100644 (file)
@@ -691,13 +691,20 @@ getNonWiredDataDecl needed_name
                    version
                    avail@(AvailTC tycon_name _) 
                    ty_decl@(TyData new_or_data context tycon tyvars condecls derivings pragmas src_loc)
-  |  needed_name == tycon_name
-  && opt_PruneTyDecls
+  |  null condecls ||
+       -- HACK ALERT!  If the data type is abstract then it must from a 
+       -- hand-written hi-boot file.  We put it in the deferred pile unconditionally,
+       -- because we don't want to read it in, and then later find a decl for a constructor
+       -- from that type, read the real interface file, and read in the full data type
+       -- decl again!!!  
+
+     (needed_name == tycon_name
+     && opt_PruneTyDecls
         -- don't prune newtypes, as the code generator may
        -- want to peer inside a newtype type constructor
        -- (ClosureInfo.fun_result_ty is the culprit.)
-  && not (new_or_data == NewType)
-  && not (nameUnique needed_name `elem` cCallishTyKeys)                
+     && not (new_or_data == NewType)
+     && not (nameUnique needed_name `elem` cCallishTyKeys))
        -- Hack!  Don't prune these tycons whose constructors
        -- the desugarer must be able to see when desugaring
        -- a CCall.  Ugh!