1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-02 05:45:58 +02:00

Fixed 74328 - [Scanner][IProblem] char * initialization problem

This commit is contained in:
John Camelon 2004-09-20 19:24:38 +00:00
parent 14bbb07c98
commit bea93881a3
5 changed files with 25 additions and 18 deletions

View file

@ -2110,7 +2110,18 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
writer.write( "using namespace N; \n" ); writer.write( "using namespace N; \n" );
writer.write( "PINT pint; \n" ); writer.write( "PINT pint; \n" );
parse( writer.toString() ); parse( writer.toString() );
assertTrue( callback.problems.isEmpty() );
} }
public void testBug74328() throws Exception
{
Writer writer = new StringWriter();
writer.write( "int\n" );
writer.write( "main(int argc, char **argv) {\n" );
writer.write( " char *sign;\n" );
writer.write( "sign = \"\"; // IProblem generated here, syntax error\n" );
writer.write( "return argc;\n" );
writer.write( "}\n" );
parse( writer.toString() );
}
} }

View file

@ -1851,4 +1851,12 @@ public class Scanner2Test extends BaseScanner2Test
assertEquals( t.getOffset(), offset + 3 ); assertEquals( t.getOffset(), offset + 3 );
assertEquals( t.getLineNumber(), 2 ); assertEquals( t.getLineNumber(), 2 );
} }
public void testBug74328() throws Exception
{
initializeScanner( "\"\";\n" ); //$NON-NLS-1$
validateString( ""); //$NON-NLS-1$
validateToken( IToken.tSEMI );
validateEOF();
}
} }

View file

@ -54,8 +54,5 @@ public interface IASTSimpleTypeSpecifier extends IASTTypeSpecifier
public boolean isImaginary(); public boolean isImaginary();
public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException; public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException;
/**
* @param referenceManager
*/
public void releaseReferences();
} }

View file

@ -4035,9 +4035,6 @@ public class Parser implements IParserData, IParser
((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber( ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
lastToken.getEndOffset(), lastToken.getLineNumber()); lastToken.getEndOffset(), lastToken.getLineNumber());
declaration.acceptElement( requestor ); declaration.acceptElement( requestor );
if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( );
} }
return declaration; return declaration;
} }
@ -4046,9 +4043,6 @@ public class Parser implements IParserData, IParser
declaration.enterScope( requestor ); declaration.enterScope( requestor );
try try
{ {
if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( );
if ( !( declaration instanceof IASTScope ) ) if ( !( declaration instanceof IASTScope ) )
throwBacktrack(firstOffset, endOffset, firstLine, fn); throwBacktrack(firstOffset, endOffset, firstLine, fn);
@ -4092,15 +4086,11 @@ public class Parser implements IParserData, IParser
return null; return null;
} catch( BacktrackException be ) } catch( BacktrackException be )
{ {
if( simpleTypeSpecifier != null )
simpleTypeSpecifier.releaseReferences();
throwBacktrack(be); throwBacktrack(be);
return null; return null;
} }
catch( EndOfFileException eof ) catch( EndOfFileException eof )
{ {
if( simpleTypeSpecifier != null )
simpleTypeSpecifier.releaseReferences();
throw eof; throw eof;
} }
} }

View file

@ -865,8 +865,9 @@ public class Scanner2 implements IScanner, IScannerData {
return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((IMacro)bufferData[bufferStackPos]).getName().length, getCurrentFilename(), getLineNumber( bufferPos[mostRelevant] + 1)); return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((IMacro)bufferData[bufferStackPos]).getName().length, getCurrentFilename(), getLineNumber( bufferPos[mostRelevant] + 1));
} }
IToken i = 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 ) if( buffer != null && buffer.length == 0 && signal != IToken.tSTRING && signal != IToken.tLSTRING )
bufferPos[bufferStackPos] += 1; //ensure we don't hit infinite loops bufferPos[bufferStackPos] += 1; //TODO - remove this hack at some point
return i; return i;
} }