1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fixed Bug 71839 [Parser] Parser in infinite loop (ExpressionParser.errorHandling())

This commit is contained in:
John Camelon 2004-08-19 03:29:26 +00:00
parent f110584379
commit b9768b37d5
2 changed files with 26 additions and 46 deletions

View file

@ -558,7 +558,7 @@ public class Scanner2Test extends BaseScanner2Test
}
}
public void testIfs()
public void testIfs() throws Exception
{
try
{
@ -601,34 +601,24 @@ public class Scanner2Test extends BaseScanner2Test
fail(EXCEPTION_THROWN + e.toString());
}
try
{
initializeScanner(
"#ifndef FIVE \n" + //$NON-NLS-1$
"#define FIVE 5\n" + //$NON-NLS-1$
"#endif \n" + //$NON-NLS-1$
"#ifndef TEN\n" + //$NON-NLS-1$
"#define TEN 2 * FIVE\n" + //$NON-NLS-1$
"#endif\n" + //$NON-NLS-1$
"#if TEN != 10\n" + //$NON-NLS-1$
"#define MISTAKE 1\n" + //$NON-NLS-1$
"#error Five does not equal 10\n" + //$NON-NLS-1$
"#endif\n"); //$NON-NLS-1$
scanner.addDefinition("FIVE", "55"); //$NON-NLS-1$ //$NON-NLS-2$
validateEOF();
fail(EXPECTED_FAILURE);
}
catch (ScannerException se)
{
validateBalance(1);
validateDefinition("FIVE", "55"); //$NON-NLS-1$ //$NON-NLS-2$
validateDefinition("TEN", "2 * FIVE"); //$NON-NLS-1$ //$NON-NLS-2$
validateDefinition("MISTAKE", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
catch (Exception e)
{
fail(EXCEPTION_THROWN + e.toString());
}
Callback callback = new Callback( ParserMode.QUICK_PARSE );
initializeScanner(
"#ifndef FIVE \n" + //$NON-NLS-1$
"#define FIVE 5\n" + //$NON-NLS-1$
"#endif \n" + //$NON-NLS-1$
"#ifndef TEN\n" + //$NON-NLS-1$
"#define TEN 2 * FIVE\n" + //$NON-NLS-1$
"#endif\n" + //$NON-NLS-1$
"#if TEN != 10\n" + //$NON-NLS-1$
"#define MISTAKE 1\n" + //$NON-NLS-1$
"#error Five does not equal 10\n" + //$NON-NLS-1$
"#endif\n", ParserMode.QUICK_PARSE, callback); //$NON-NLS-1$
scanner.addDefinition("FIVE", "55"); //$NON-NLS-1$ //$NON-NLS-2$
validateEOF();
validateDefinition("FIVE", "55"); //$NON-NLS-1$ //$NON-NLS-2$
validateDefinition("TEN", "2 * FIVE"); //$NON-NLS-1$ //$NON-NLS-2$
validateDefinition("MISTAKE", "1"); //$NON-NLS-1$ //$NON-NLS-2$
assertFalse( callback.problems.isEmpty() );
try
{
@ -669,22 +659,8 @@ public class Scanner2Test extends BaseScanner2Test
fail(EXCEPTION_THROWN + e.toString());
}
try
{
initializeScanner("#if ! 0\n#error Correct!\n#endif"); //$NON-NLS-1$
scanner.nextToken();
fail(EXPECTED_FAILURE);
}
catch (ScannerException se)
{
validateBalance(1);
// TODO define problems
//assertEquals( se.getProblem().getID(), IProblem.PREPROCESSOR_POUND_ERROR);
}
catch (Exception e)
{
fail(EXCEPTION_THROWN + e.toString());
}
initializeScanner("#if ! 0\n#error Correct!\n#endif"); //$NON-NLS-1$
validateEOF();
}
public void testPreprocessorMacros()

View file

@ -1294,7 +1294,11 @@ public class Scanner2 implements IScanner, IScannerData {
handleInvalidCompletion();
return;
case ppError:
throw new ScannerException(null);
start = bufferPos[bufferStackPos];
skipToNewLine();
len = bufferPos[bufferStackPos] - start;
handleProblem( IProblem.PREPROCESSOR_POUND_ERROR, start, CharArrayUtils.extract( buffer, start, len ));
break;
case ppEndif:
if( !branchState( BRANCH_END ) )
handleProblem( IProblem.PREPROCESSOR_UNBALANCE_CONDITION, start, ppKeywords.findKey( buffer, start, len ) );