From bea93881a346f0fa7a7630bbec250f39d402f250 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Mon, 20 Sep 2004 19:24:38 +0000 Subject: [PATCH] Fixed 74328 - [Scanner][IProblem] char * initialization problem --- .../cdt/core/parser/tests/CompleteParseASTTest.java | 13 ++++++++++++- .../core/parser/tests/scanner2/Scanner2Test.java | 8 ++++++++ .../core/parser/ast/IASTSimpleTypeSpecifier.java | 5 +---- .../eclipse/cdt/internal/core/parser/Parser.java | 12 +----------- .../cdt/internal/core/parser/scanner2/Scanner2.java | 5 +++-- 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 7f44f288c9b..2ca723da4cd 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -2110,7 +2110,18 @@ public class CompleteParseASTTest extends CompleteParseBaseTest writer.write( "using namespace N; \n" ); writer.write( "PINT pint; \n" ); 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() ); + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index 509b2eb5b75..5e3b95dacea 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -1851,4 +1851,12 @@ public class Scanner2Test extends BaseScanner2Test assertEquals( t.getOffset(), offset + 3 ); assertEquals( t.getLineNumber(), 2 ); } + + public void testBug74328() throws Exception + { + initializeScanner( "\"\";\n" ); //$NON-NLS-1$ + validateString( ""); //$NON-NLS-1$ + validateToken( IToken.tSEMI ); + validateEOF(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java index a3e45888004..09a794e37bd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java @@ -54,8 +54,5 @@ public interface IASTSimpleTypeSpecifier extends IASTTypeSpecifier public boolean isImaginary(); public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException; - /** - * @param referenceManager - */ - public void releaseReferences(); + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 08bfe06cef4..0c085b6c742 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -4035,9 +4035,6 @@ public class Parser implements IParserData, IParser ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber( lastToken.getEndOffset(), lastToken.getLineNumber()); declaration.acceptElement( requestor ); - if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier ) - ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( ); - } return declaration; } @@ -4045,10 +4042,7 @@ public class Parser implements IParserData, IParser endDeclaration( declaration ); declaration.enterScope( requestor ); try - { - if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier ) - ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( ); - + { if ( !( declaration instanceof IASTScope ) ) throwBacktrack(firstOffset, endOffset, firstLine, fn); @@ -4092,15 +4086,11 @@ public class Parser implements IParserData, IParser return null; } catch( BacktrackException be ) { - if( simpleTypeSpecifier != null ) - simpleTypeSpecifier.releaseReferences(); throwBacktrack(be); return null; } catch( EndOfFileException eof ) { - if( simpleTypeSpecifier != null ) - simpleTypeSpecifier.releaseReferences(); throw eof; } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index d62486ef454..b4732053c55 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -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)); } 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 + if( buffer != null && buffer.length == 0 && signal != IToken.tSTRING && signal != IToken.tLSTRING ) + bufferPos[bufferStackPos] += 1; //TODO - remove this hack at some point + return i; }