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

bug 55163 - Parser spins on for-init-statement

This commit is contained in:
Andrew Niefer 2004-03-17 21:33:49 +00:00
parent 7c03999239
commit e6f4fa5890
4 changed files with 38 additions and 4 deletions

View file

@ -1,3 +1,6 @@
2003-03-16 Andrew Niefer
added CompleteParseASTTest.testBug55163
2004-03-12 Sean Evoy
Corrected a target definition in the plugin manifest that was flagged
as release when it should have been flagged as test. Also updated the

View file

@ -1476,4 +1476,26 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
assertFalse( i.hasNext() );
}
public void testBug55163() throws Exception
{
Writer writer = new StringWriter();
writer.write( "void foo() { \n");
writer.write( " int i, n; \n");
writer.write( " double di; \n");
writer.write( " for( i = n - 1, di = (double)( i + i ); i > 0; i-- ){ } \n");
writer.write( "}\n");
Iterator iter = parse( writer.toString() ).getDeclarations();
IASTFunction foo = (IASTFunction) iter.next();
assertFalse( iter.hasNext() );
iter = getDeclarations( foo );
IASTVariable i = (IASTVariable)iter.next();
IASTVariable n = (IASTVariable)iter.next();
IASTVariable di = (IASTVariable)iter.next();
assertAllReferences( 7, createTaskList( new Task( n ), new Task( i, 5 ), new Task( di ) ) );
}
}

View file

@ -1,3 +1,8 @@
2004-03-17 Andrew Niefer
fix bug 55163
- in for-init-statement, try expression-statement before simple-declaration since if it actually is a statement instead of a
declaration, the simple-declaration fails hard and can actually enter an infinite loop.
2004-03-16 Dave Daoust
refactor scanner for performance improvements
-changes to accountForUndo, now named readFromStream

View file

@ -503,7 +503,7 @@ public abstract class Parser extends ExpressionParser implements IParser
throw e;
}
templateDecl.setEndingOffsetAndLineNumber( lastToken.getEndOffset(), lastToken.getLineNumber() );
templateDecl.exitScope( requestor );
templateDecl.exitScope( requestor );
}
catch (BacktrackException bt)
{
@ -2822,16 +2822,20 @@ public abstract class Parser extends ExpressionParser implements IParser
*/
protected void forInitStatement( IASTScope scope ) throws BacktrackException, EndOfFileException
{
IToken mark = mark();
try
{
simpleDeclarationStrategyUnion(scope,null, null);
IASTExpression e = expression( scope );
e.acceptElement(requestor);
consume( IToken.tSEMI );
}
catch( BacktrackException bt )
{
backup( mark );
try
{
IASTExpression e = expression( scope );
e.acceptElement(requestor);
simpleDeclarationStrategyUnion(scope,null, null);
}
catch( BacktrackException b )
{