[project @ 2004-02-24 10:34:21 by simonmar]
authorsimonmar <unknown>
Tue, 24 Feb 2004 10:34:21 +0000 (10:34 +0000)
committersimonmar <unknown>
Tue, 24 Feb 2004 10:34:21 +0000 (10:34 +0000)
Fix line-comments.  The problem was that eg.

   --->

at the beginning of a line was matched by the line-comment rule,
because the varsym rule isn't valid at this point (we're in the bol
state).  Fix is to split the line-comment regex into two:

"--"\-* [^$symbol] .* ;
"--"\-* / { atEOL } ;

so a sequence of dashes on its own is only treated as a comment if
we're at the end of the line (or file).  Otherwise the dashes must be
followed by a non-symbol character.

ghc/compiler/parser/Lexer.x

index e83bf94..2d01a18 100644 (file)
@@ -108,7 +108,8 @@ $white_no_nl+                               ;
 -- have to exclude those.
 -- The regex says: "munch all the characters after the dashes, as long as
 -- the first one is not a symbol".
-"--"\-* ([^$symbol] .*)?               ;
+"--"\-* [^$symbol] .*                  ;
+"--"\-* / { atEOL }                    ;
 
 -- 'bol' state: beginning of a line.  Slurp up all the whitespace (including
 -- blank lines) until we find a non-whitespace character, then do layout
@@ -582,6 +583,8 @@ notFollowedBy char _ _ _ (_,buf) = atEnd buf || currentChar buf /= char
 notFollowedBySymbol _ _ _ (_,buf)
   = atEnd buf || currentChar buf `notElem` "!#$%&*+./<=>?@\\^|-~"
 
+atEOL _ _ _ (_,buf) = atEnd buf || currentChar buf == '\n'
+
 ifExtension pred bits _ _ _ = pred bits
 
 {-