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

Fixed 73524 - CDT 2.0.1 freezes after trying to open a large .c file

This commit is contained in:
John Camelon 2004-09-09 18:33:49 +00:00
parent f3b030d85d
commit a76ec38690
2 changed files with 22 additions and 1 deletions

View file

@ -2224,4 +2224,12 @@ public class QuickParseASTTests extends BaseASTTest
assertTrue( quickParseCallback.problems.isEmpty() ); assertTrue( quickParseCallback.problems.isEmpty() );
assertEquals( t.getName(), "testQueries"); //$NON-NLS-1$ assertEquals( t.getName(), "testQueries"); //$NON-NLS-1$
} }
public void testBug73524() throws Exception
{
Writer writer = new StringWriter();
writer.write( "static char fmt_1002[] = \"(/,\\002At iterate\\002,i5,4x,\\002f= \\002,1p,d12\\\r\n" ); //$NON-NLS-1$
writer.write( ".5,4x,\\002|proj g|= \\002,1p,d12.5)\";" ); //$NON-NLS-1$
IASTVariable v = (IASTVariable) assertSoleDeclaration( writer.toString(), ParserLanguage.C );
}
} }

View file

@ -799,7 +799,10 @@ public class Scanner2 implements IScanner, IScannerData {
return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((ObjectStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1) ); return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((ObjectStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1) );
return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((FunctionStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1)); return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((FunctionStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1));
} }
return new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1)); IToken i = new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1));
if( buffer != null && buffer.length == 0 )
bufferPos[bufferStackPos] += 1; //ensure we don't hit infinite loops
return i;
} }
private IToken scanIdentifier() { private IToken scanIdentifier() {
@ -926,6 +929,16 @@ public class Scanner2 implements IScanner, IScannerData {
if( !escaped ) if( !escaped )
break; break;
} }
else if ( c == '\r')
{
if( bufferPos[bufferStackPos] + 1 < bufferLimit[bufferStackPos] &&
buffer[bufferPos[bufferStackPos] + 1 ] == '\n' )
{
++bufferPos[bufferStackPos];
if( !escaped)
break;
}
}
escaped = false; escaped = false;
} }
--stringLen; --stringLen;