X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Frename%2FRnEnv.lhs;h=54a768af26ff9d1cbe8a4425083b73def83bc948;hp=32806f082cf0f40a502978004b831d6d5ccc6391;hb=72e37dedee9e8a109ebda4b13e49b7133b530591;hpb=55f3a503d72d89d7c57a0b10093dd4bdb0488c42 diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index 32806f0..54a768a 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -15,6 +15,7 @@ module RnEnv ( lookupLocatedInstDeclBndr, lookupSyntaxName, lookupSyntaxTable, lookupImportedName, lookupGreRn, lookupGreRn_maybe, + getLookupOccRn, newLocalsRn, newIPNameRn, bindLocalNames, bindLocalNamesFV, @@ -194,8 +195,25 @@ lookupTopBndrRn rdr_name -- The Haskell98 report does not stipulate this, but it will! -- So we must treat the 'f' in the signature in the same way -- as the binding occurrence of 'f', using lookupBndrRn +-- +-- However, consider this case: +-- import M( f ) +-- f :: Int -> Int +-- g x = x +-- We don't want to say 'f' is out of scope; instead, we want to +-- return the imported 'f', so that later on the reanamer will +-- correctly report "misplaced type sig". lookupLocatedSigOccRn :: Located RdrName -> RnM (Located Name) -lookupLocatedSigOccRn = lookupLocatedBndrRn +lookupLocatedSigOccRn = wrapLocM $ \ rdr_name -> do + { local_env <- getLocalRdrEnv + ; case lookupLocalRdrEnv local_env rdr_name of { + Just n -> return n ; + Nothing -> do + { mb_gre <- lookupGreLocalRn rdr_name + ; case mb_gre of + Just gre -> return (gre_name gre) + Nothing -> lookupGlobalOccRn rdr_name + }}} -- lookupInstDeclBndr is used for the binders in an -- instance declaration. Here we use the class name to @@ -255,6 +273,11 @@ lookupFamInstDeclBndr mod lrdr_name@(L _ rdr_name) -- Occurrences -------------------------------------------------- +getLookupOccRn :: RnM (Name -> Maybe Name) +getLookupOccRn + = getLocalRdrEnv `thenM` \ local_env -> + return (lookupLocalRdrEnv local_env . mkRdrUnqual . nameOccName) + lookupLocatedOccRn :: Located RdrName -> RnM (Located Name) lookupLocatedOccRn = wrapLocM lookupOccRn @@ -546,7 +569,7 @@ At the moment this just happens for * "do" notation We store the relevant Name in the HsSyn tree, in - * HsIntegral/HsFractional + * HsIntegral/HsFractional/HsIsString * NegApp * NPlusKPat * HsDo