[commit: ghc] master: Only allow special NeverActive syntax for RULES. (c56c355)

Simon Peyton Jones <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/c56c355b0f5504f8afd062ca4c78a8bb40905299

>---------------------------------------------------------------

commit c56c355b0f5504f8afd062ca4c78a8bb40905299
Author: Andrew Farmer <[email protected]>
Date:   Thu Dec 6 15:47:33 2012 -0600

    Only allow special NeverActive syntax for RULES.

>---------------------------------------------------------------

 compiler/parser/Parser.y.pp       |   17 +++++++++++++----
 docs/users_guide/glasgow_exts.xml |    3 +++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/compiler/parser/Parser.y.pp b/compiler/parser/Parser.y.pp
index 1907ab3..510d7c4 100644
--- a/compiler/parser/Parser.y.pp
+++ b/compiler/parser/Parser.y.pp
@@ -870,16 +870,17 @@ rules   :: { OrdList (LHsDecl RdrName) }
         |  {- empty -}                          { nilOL }
 
 rule    :: { LHsDecl RdrName }
-        : STRING activation rule_forall infixexp '=' exp
+        : STRING rule_activation rule_forall infixexp '=' exp
              { LL $ RuleD (HsRule (getSTRING $1) 
                                   ($2 `orElse` AlwaysActive) 
                                   $3 $4 placeHolderNames $6 placeHolderNames) }
 
-activation :: { Maybe Activation } 
+-- Rules can be specified to be NeverActive, unlike inline/specialize pragmas
+rule_activation :: { Maybe Activation } 
         : {- empty -}                           { Nothing }
-        | explicit_activation                   { Just $1 }
+        | rule_explicit_activation              { Just $1 }
 
-explicit_activation :: { Activation }  -- In brackets
+rule_explicit_activation :: { Activation }  -- In brackets
         : '[' INTEGER ']'               { ActiveAfter  (fromInteger (getINTEGER $2)) }
         | '[' '~' INTEGER ']'           { ActiveBefore (fromInteger (getINTEGER $3)) }
         | '[' '~' ']'                   { NeverActive }
@@ -1374,6 +1375,14 @@ sigdecl :: { Located (OrdList (LHsDecl RdrName)) }
         | '{-# SPECIALISE' 'instance' inst_type '#-}'
                 { LL $ unitOL (LL $ SigD (SpecInstSig $3)) }
 
+activation :: { Maybe Activation } 
+        : {- empty -}                           { Nothing }
+        | explicit_activation                   { Just $1 }
+
+explicit_activation :: { Activation }  -- In brackets
+        : '[' INTEGER ']'               { ActiveAfter  (fromInteger (getINTEGER $2)) }
+        | '[' '~' INTEGER ']'           { ActiveBefore (fromInteger (getINTEGER $3)) }
+
 -----------------------------------------------------------------------------
 -- Expressions
 
diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml
index 7898677..49b6ea3 100644
--- a/docs/users_guide/glasgow_exts.xml
+++ b/docs/users_guide/glasgow_exts.xml
@@ -9469,6 +9469,9 @@ The "[2]" means that the rule is active in Phase 2 and subsequent phases.  The i
 notation "[~2]" is also accepted, meaning that the rule is active up to, but not including,
 Phase 2.
 </para>
+<para>
+Rules support the special phase-control notation "[~]", which means the rule is never active.
+</para>
 </listitem>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.