diff --git a/ghc/compiler/parser/hslexer.flex b/ghc/compiler/parser/hslexer.flex index 02bc1ef711b5a7cf8255840233eb21836f5c59dc..037bee49c31dce64a8c626b31c55a2a4fe0055a3 100644 --- a/ghc/compiler/parser/hslexer.flex +++ b/ghc/compiler/parser/hslexer.flex @@ -114,6 +114,7 @@ static BOOLEAN noGap = TRUE; /* For checking string gaps */ static BOOLEAN forgetindent = FALSE; /* Don't bother applying indentation rules */ static int nested_comments; /* For counting comment nesting depth */ +static int comment_start; /* OLD: Hacky definition of yywrap: see flex doc. @@ -336,19 +337,19 @@ NL [\n\r] } <Code,GlaExt>"{-#"{WS}*"GENERATE_SPECS" { /* these are handled by hscpp */ - nested_comments =1; + nested_comments =1; comment_start = hsplineno; PUSH_STATE(Comment); } <Code,GlaExt>"{-#"{WS}*"OPTIONS" { /* these are for the driver! */ - nested_comments =1; + nested_comments =1; comment_start = hsplineno; PUSH_STATE(Comment); } <Code,GlaExt>"{-#"{WS}*"SOURCE"{WS}*"#"?"-}" { /* these are used by `make depend' and the compiler to indicate that a module should be imported from source */ - nested_comments =1; + nested_comments =1; comment_start = hsplineno; RETURN(SOURCE_UPRAGMA); } @@ -357,7 +358,7 @@ NL [\n\r] input_filename, hsplineno); format_string(stderr, (unsigned char *) yytext, yyleng); fputs("'\n", stderr); - nested_comments = 1; + nested_comments = 1; comment_start = hsplineno; PUSH_STATE(Comment); } <UserPragma>"#-}" { POP_STATE; RETURN(END_UPRAGMA); } @@ -848,7 +849,7 @@ NL [\n\r] %} <Code,GlaExt,UserPragma,StringEsc>"{-" { - noGap = FALSE; nested_comments = 1; PUSH_STATE(Comment); + noGap = FALSE; nested_comments = 1; comment_start = hsplineno; PUSH_STATE(Comment); } <Comment>[^-{]* | @@ -932,8 +933,10 @@ NL [\n\r] hsperror("unterminated character literal"); } <Comment><<EOF>> { + char errbuf[ERR_BUF_SIZE]; hsplineno = hslineno; hspcolno = hscolno; - hsperror("unterminated comment"); + sprintf(errbuf, "unterminated comment (which started on line %d)", comment_start); + hsperror(errbuf); } <String,StringEsc><<EOF>> { hsplineno = hslineno; hspcolno = hscolno;