Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied [HEAD] Parser bugfixes

CORE
        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. 


TESTS
        Added/moved tests as necessary for bugfix 40842 & 40843. 

JohnC


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.39
diff -u -r1.39 ChangeLog
--- ChangeLog	28 Jul 2003 17:21:50 -0000	1.39
+++ ChangeLog	28 Jul 2003 20:46:41 -0000
@@ -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.
Index: failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java,v
retrieving revision 1.1
diff -u -r1.1 FullParseFailedTests.java
--- failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java	28 Jul 2003 17:21:50 -0000	1.1
+++ failures/org/eclipse/cdt/core/parser/failedTests/FullParseFailedTests.java	28 Jul 2003 20:46:41 -0000
@@ -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 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;
 	}
+
 }
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.7
diff -u -r1.7 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	25 Jul 2003 14:49:18 -0000	1.7
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	28 Jul 2003 20:46:41 -0000
@@ -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 @@
 			 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() );
+	}	 
 	 
 }
Index: parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java,v
retrieving revision 1.5
diff -u -r1.5 QuickParseASTTests.java
--- parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java	28 Jul 2003 14:18:39 -0000	1.5
+++ parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java	28 Jul 2003 20:46:42 -0000
@@ -429,7 +429,7 @@
 	}
 	
 	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); ");
 	}
Index: suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java,v
retrieving revision 1.8
diff -u -r1.8 AutomatedIntegrationSuite.java
--- suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java	28 Jul 2003 17:21:50 -0000	1.8
+++ suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java	28 Jul 2003 20:46:42 -0000
@@ -98,7 +98,7 @@
 		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"));
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.89
diff -u -r1.89 ChangeLog
--- parser/ChangeLog	28 Jul 2003 15:40:36 -0000	1.89
+++ parser/ChangeLog	28 Jul 2003 20:46:20 -0000
@@ -1,4 +1,9 @@
 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"<name>" 
 
 2003-07-28 Victor Mozgin
Index: parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java,v
retrieving revision 1.2
diff -u -r1.2 IASTAbstractDeclaration.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java	17 Jul 2003 20:15:13 -0000	1.2
+++ parser/org/eclipse/cdt/core/parser/ast/IASTAbstractDeclaration.java	28 Jul 2003 20:46:20 -0000
@@ -19,9 +19,8 @@
 public interface IASTAbstractDeclaration extends IASTTypeSpecifierOwner
 {
 	public boolean isConst();
-	 
 	public Iterator getPointerOperators();
-	 
 	public Iterator getArrayModifiers();
+	
 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.82
diff -u -r1.82 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	28 Jul 2003 14:18:36 -0000	1.82
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	28 Jul 2003 20:46:22 -0000
@@ -88,9 +88,18 @@
      */
     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 
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java,v
retrieving revision 1.8
diff -u -r1.8 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	25 Jul 2003 14:49:17 -0000	1.8
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	28 Jul 2003 20:46:22 -0000
@@ -713,6 +713,10 @@
         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 @@
          	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 @@
 		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 @@
 			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 @@
         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)
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java,v
retrieving revision 1.9
diff -u -r1.9 ParserSymbolTable.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	25 Jul 2003 00:35:39 -0000	1.9
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	28 Jul 2003 20:46:24 -0000
@@ -2485,10 +2485,13 @@
 				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();

Back to the top