From: simonpj Date: Thu, 23 Dec 2004 11:50:57 +0000 (+0000) Subject: [project @ 2004-12-23 11:50:55 by simonpj] X-Git-Tag: Initial_conversion_from_CVS_complete~1315 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=c97ea0ce7025c0fc56b02b171843ed50c00ef75d;p=ghc-hetmet.git [project @ 2004-12-23 11:50:55 by simonpj] Enable scoped type variables only where there is an explicit forall --- diff --git a/ghc/compiler/parser/Lexer.x b/ghc/compiler/parser/Lexer.x index 1d0a5e7..0a2f3c5 100644 --- a/ghc/compiler/parser/Lexer.x +++ b/ghc/compiler/parser/Lexer.x @@ -506,7 +506,7 @@ reservedWordsFM = listToUFM $ ( "where", ITwhere, 0 ), ( "_scc_", ITscc, 0 ), -- ToDo: remove - ( "forall", ITforall, bit glaExtsBit), + ( "forall", ITforall, bit tvBit), ( "mdo", ITmdo, bit glaExtsBit), ( "foreign", ITforeign, bit ffiBit), @@ -542,7 +542,7 @@ reservedSymsFM = listToUFM $ ,("!", ITbang, 0) ,("*", ITstar, bit glaExtsBit) -- For data T (a::*) = MkT - ,(".", ITdot, bit glaExtsBit) -- For 'forall a . t' + ,(".", ITdot, bit tvBit) -- For 'forall a . t' ,("-<", ITlarrowtail, bit arrowsBit) ,(">-", ITrarrowtail, bit arrowsBit) @@ -1160,6 +1160,7 @@ parrBit = 2 arrowsBit = 4 thBit = 5 ipBit = 6 +tvBit = 7 -- Scoped type variables enables 'forall' keyword glaExtsEnabled, ffiEnabled, parrEnabled :: Int -> Bool glaExtsEnabled flags = testBit flags glaExtsBit @@ -1168,6 +1169,7 @@ parrEnabled flags = testBit flags parrBit arrowsEnabled flags = testBit flags arrowsBit thEnabled flags = testBit flags thBit ipEnabled flags = testBit flags ipBit +tvEnabled flags = testBit flags tvBit -- create a parse state -- @@ -1190,6 +1192,7 @@ mkPState buf loc flags = .|. arrowsBit `setBitIf` dopt Opt_Arrows flags .|. thBit `setBitIf` dopt Opt_TH flags .|. ipBit `setBitIf` dopt Opt_ImplicitParams flags + .|. tvBit `setBitIf` dopt Opt_ScopedTypeVariables flags -- setBitIf :: Int -> Bool -> Int b `setBitIf` cond | cond = bit b diff --git a/ghc/compiler/rename/RnEnv.lhs b/ghc/compiler/rename/RnEnv.lhs index d43a4e3..710bd6e 100644 --- a/ghc/compiler/rename/RnEnv.lhs +++ b/ghc/compiler/rename/RnEnv.lhs @@ -644,7 +644,9 @@ bindSigTyVarsFV sigs thing_inside bindLocalNamesFV tvs thing_inside } where tvs = [ hsLTyVarName ltv - | L _ (Sig _ (L _ (HsForAllTy _ ltvs _ _))) <- sigs, ltv <- ltvs ] + | L _ (Sig _ (L _ (HsForAllTy Explicit ltvs _ _))) <- sigs, ltv <- ltvs ] + -- Note the pattern-match on "Explicit"; we only bind + -- type variables from signatures with an explicit top-level for-all extendTyVarEnvFVRn :: [Name] -> RnM (a, FreeVars) -> RnM (a, FreeVars)