Prevent lexer errors being raised if a parser error is pending.
authorChristopher L. Conway <christopherleeconway@gmail.com>
Wed, 26 May 2010 17:53:33 +0000 (17:53 +0000)
committerChristopher L. Conway <christopherleeconway@gmail.com>
Wed, 26 May 2010 17:53:33 +0000 (17:53 +0000)
This fixes a bug Dejan has often whined about but never filed.

src/parser/antlr_input.cpp

index fc03a2903bc8a9e09d893b81cc53c5d01d780c4f..300b181a6ebb1bc890cb5733f063d6b60ae7abdd 100644 (file)
@@ -159,8 +159,12 @@ void AntlrInput::lexerError(pANTLR3_BASE_RECOGNIZER recognizer) {
   AntlrInput *input = (AntlrInput*) parser->getInput();
   AlwaysAssert(input!=NULL);
 
-  // Call the error display routine
-  input->parseError("Error finding next token.");
+  /* Call the error display routine *if* there's not already a 
+   * parse error pending.  If a parser error is pending, this
+   * error is probably less important, so we just drop it. */
+  if( input->d_parser->rec->state->error == ANTLR3_FALSE ) {
+    input->parseError("Error finding next token.");
+  }
 }
 
 void AntlrInput::parseError(const std::string& message)