diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index fc7492a5c92..b7a2535e9b6 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2003-07-28 John Camelon + Added/moved tests as necessary for bugfix 40842 & 40843. + 2003-07-28 Andrew Niefer This patch creates a new failing test class : FullParseFailedTests. This is for writing failed tests on the parser doing COMPLETE_PARSE. diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java index ff8d84fe73b..e1a3b4efc7c 100644 --- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java +++ b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java @@ -13,8 +13,8 @@ */ package org.eclipse.cdt.core.parser.failedTests; -import java.io.StringWriter; -import java.io.Writer; +import junit.framework.Test; +import junit.framework.TestSuite; import org.eclipse.cdt.core.parser.tests.BaseASTTest; @@ -32,14 +32,10 @@ public class FullParseFailedTests extends BaseASTTest { public FullParseFailedTests(String name) { super(name); } - - public void testBug40842() throws Exception{ - Writer code = new StringWriter(); - - //note that if the parse fails at EOF, parse.failParse never sets - //parsePassed = false because it will throw EOF on LA(1), so get - //around this by adding more code after the error. - code.write("class A {} a;\n int x;"); - assertCodeFailsFullParse(code.toString()); + + public static Test suite() { + TestSuite suite = new TestSuite(FullParseFailedTests.class.getName()); + return suite; } + } \ No newline at end of file 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 2c5cef62a09..10f07387cb3 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 @@ -11,6 +11,8 @@ package org.eclipse.cdt.core.parser.tests; import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; import java.util.ArrayList; import java.util.Hashtable; import java.util.Iterator; @@ -810,6 +812,22 @@ public class CompleteParseASTTest extends TestCase assertEquals( fromAST[i], theTruth[i]); } } - + + public void testBug40842() throws Exception{ + Writer code = new StringWriter(); + + code.write("class A {} a;\n"); + Iterator i = parse(code.toString()).getDeclarations(); + IASTVariable instanceA = (IASTVariable)i.next(); + assertFalse( i.hasNext() ); + } + + public void testOverride() throws Exception + { + Iterator i = parse( "void foo();\n void foo( int );\n").getDeclarations(); + IASTFunction f1 = (IASTFunction)i.next(); + IASTFunction f2 = (IASTFunction)i.next(); + assertFalse( i.hasNext() ); + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java index b938bd0c59b..c097a6bd3bc 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java @@ -429,7 +429,7 @@ public class QuickParseASTTests extends BaseASTTest } public void testBug36290() throws Exception { - parse("typedef void ( A:: * pFunction ) ( void ); "); + parse("typedef void ( A:: * pMethod ) ( void ); "); parse("typedef void (boo) ( void ); "); parse("typedef void boo (void); "); } diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java index e5a8af6d1a4..b7c70473bdf 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java @@ -98,7 +98,7 @@ public class AutomatedIntegrationSuite extends TestSuite suite.addTestSuite(LokiFailures.class); suite.addTestSuite(STLFailedTests.class); suite.addTestSuite(CModelElementsFailedTests.class); - suite.addTestSuite(FullParseFailedTests.class); + suite.addTest(FullParseFailedTests.suite()); // Last test to trigger report generation suite.addTest(suite.new GenerateReport("generateReport")); diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 1c449ce066a..03e051b9ffe 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,8 @@ +2003-07-28 John Camelon + Fixed Bug 40842 - Parser: NPE while parsing class declaration in full parse mode + Fixed Bug 40843 - Parser: failParse doesn't set parsePassed = false on EOF. + Fixed Miscellaneous overrides issues involving parameters & functions. + 2003-07-28 John Camelon Fixed Bug 40730 : Parser is not searching the include path for #include"" diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java index 196658951fb..441bc2809ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java @@ -19,9 +19,8 @@ import java.util.Iterator; public interface IASTAbstractDeclaration extends IASTTypeSpecifierOwner { public boolean isConst(); - public Iterator getPointerOperators(); - public Iterator getArrayModifiers(); + } 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 bac71c4805a..04bc98982a2 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 @@ -88,9 +88,18 @@ public class Parser implements IParser */ protected void failParse() throws EndOfFile { - if (firstErrorOffset == DEFAULT_OFFSET) - firstErrorOffset = LA(1).getOffset(); - parsePassed = false; + try + { + if (firstErrorOffset == DEFAULT_OFFSET) + firstErrorOffset = LA(1).getOffset(); + } catch( EndOfFile eof ) + { + throw eof; + } + finally + { + parsePassed = false; + } } /** * This is the standard cosntructor that we expect the Parser to be instantiated diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index 4de954467d8..316e9100d04 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -713,6 +713,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto setFunctionTypeInfoBits(isInline, isFriend, isStatic, symbol); List references = new ArrayList(); + setParameter( symbol, returnType, false, references ); + setParameters( symbol, references, parameters.iterator() ); + + try { ownerScope.addSymbol( symbol ); @@ -722,9 +726,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto throw new ASTSemanticException(); } - setParameter( symbol, returnType, false, references ); - setParameters( symbol, references, parameters.iterator() ); - + ASTFunction function = new ASTFunction( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references ); try { @@ -901,6 +903,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto setMethodTypeInfoBits( symbol, isConst, isVolatile, isVirtual, isExplicit ); List references = new ArrayList(); + setParameter( symbol, returnType, false, references ); + setParameters( symbol, references, parameters.iterator() ); + try { ownerScope.addSymbol( symbol ); @@ -910,8 +915,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto throw new ASTSemanticException(); } - setParameter( symbol, returnType, false, references ); - setParameters( symbol, references, parameters.iterator() ); + ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references, isConstructor, isDestructor, isPureVirtual, visibility ); try @@ -1006,19 +1010,26 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto newSymbol.getTypeInfo().setBit( isStatic, TypeInfo.isStatic ); newSymbol.getTypeInfo().setBit( abstractDeclaration.isConst(), TypeInfo.isConst ); } + protected ISymbol cloneSimpleTypeSymbol( String name, IASTAbstractDeclaration abstractDeclaration, List references) { - ISymbol newSymbol = null; + ISymbol newSymbol = null; + ISymbol symbolToBeCloned = null; if( abstractDeclaration.getTypeSpecifier() instanceof ASTSimpleTypeSpecifier ) { - ISymbol symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol(); - newSymbol = (ISymbol)symbolToBeCloned.clone(); - newSymbol.setName( name ); + symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol(); references.addAll( ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences() ); } + else if( abstractDeclaration.getTypeSpecifier() instanceof ASTClassSpecifier ) + { + symbolToBeCloned = ((ASTClassSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol(); + } + newSymbol = (ISymbol) symbolToBeCloned.clone(); + newSymbol.setName( name ); + return newSymbol; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java index 78a22ce37dd..31e1efc9573 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java @@ -2485,10 +2485,13 @@ public class ParserSymbolTable { return false; } - int size = getParameterList().size(); - if( function.getParameterList().size() != size ){ + int size = ( getParameterList() == null ) ? 0 : getParameterList().size(); + int fsize = ( function.getParameterList() == null ) ? 0 : function.getParameterList().size(); + if( fsize != size ){ return false; } + if( fsize == 0 ) + return true; Iterator iter = getParameterList().iterator(); Iterator fIter = function.getParameterList().iterator();