Skip to main content

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

Title: Applied [ HEAD & 1_1 ] Parser bugfixes

CORE
        Fixed bug36852  - outline window doesn't show all functions
        Fixed bug36764  - Bit fields cause parse errors
        Fixed bug36702  - Parser error when having function pointers as parameters

TESTS
        Added DOMTests::testBug36852().
        Added DOMTests::testBug36764().
        Moved DOMFailedTests::testBug36702() to DOMTests().

JohnC

<<cdt-core-patch.txt>> <<cdt-ui-tests-patch.txt>>

Index: dom/org/eclipse/cdt/internal/core/dom/BitField.java
===================================================================
RCS file: dom/org/eclipse/cdt/internal/core/dom/BitField.java
diff -N dom/org/eclipse/cdt/internal/core/dom/BitField.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ dom/org/eclipse/cdt/internal/core/dom/BitField.java	25 Apr 2003 16:04:25 -0000
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2001 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v0.5 
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors:
+ *     IBM Corp. - Rational Software - initial implementation
+ ******************************************************************************/
+package org.eclipse.cdt.internal.core.dom;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class BitField implements IExpressionOwner {
+
+
+	public BitField( Declarator owner )
+	{
+		ownerDeclarator= owner;
+	}
+	private final Declarator ownerDeclarator; 
+	private Expression expression = null; 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.IExpressionOwner#getExpression()
+	 */
+	public Expression getExpression() {
+		return expression;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.IExpressionOwner#setExpression(org.eclipse.cdt.internal.core.dom.Expression)
+	 */
+	public void setExpression(Expression exp) {
+		expression = exp;
+	}
+
+	/**
+	 * @return
+	 */
+	public Declarator getOwnerDeclarator() {
+		return ownerDeclarator;
+	}
+
+}
Index: dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java,v
retrieving revision 1.27
diff -u -r1.27 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	22 Apr 2003 15:22:31 -0000	1.27
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	25 Apr 2003 16:04:25 -0000
@@ -918,5 +918,20 @@
 	public void expressionName(Object expression) {
 		Expression e = (Expression)expression;
 		e.add( currName );	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#startBitfield(java.lang.Object)
+	 */
+	public Object startBitfield(Object declarator) {
+		return new BitField((Declarator)declarator);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#endBitfield(java.lang.Object)
+	 */
+	public void endBitfield(Object bitfield) {
+		BitField b = (BitField)bitfield;
+		b.getOwnerDeclarator().setBitField( b );
+	}
  
 }
Index: dom/org/eclipse/cdt/internal/core/dom/Declarator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Declarator.java,v
retrieving revision 1.11
diff -u -r1.11 Declarator.java
--- dom/org/eclipse/cdt/internal/core/dom/Declarator.java	14 Apr 2003 14:14:50 -0000	1.11
+++ dom/org/eclipse/cdt/internal/core/dom/Declarator.java	25 Apr 2003 16:04:25 -0000
@@ -207,5 +207,21 @@
 	public IDeclaratorOwner getOwnerDeclarator() {
 		return ownerDeclarator;
 	}
+	
+	private BitField bitField = null; 
+
+	/**
+	 * @return
+	 */
+	public BitField getBitField() {
+		return bitField;
+	}
+
+	/**
+	 * @param field
+	 */
+	public void setBitField(BitField field) {
+		bitField = field;
+	}
 
 }
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.36.2.3
diff -u -r1.36.2.3 ChangeLog
--- parser/ChangeLog	24 Apr 2003 21:00:48 -0000	1.36.2.3
+++ parser/ChangeLog	25 Apr 2003 16:04:25 -0000
@@ -1,3 +1,8 @@
+2003-04-25 John Camelon
+	Fixed bug36852  - outline window doesn't show all functions 
+	Fixed bug36764  - Bit fields cause parse errors 
+	Fixed bug36702  - Parser error when having function pointers as parameters 
+
 2003-04-24 John Camelon
 	Fixed Bug36799  STL Testing: Parser fails on Variable Definition 
 
Index: parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java,v
retrieving revision 1.22
diff -u -r1.22 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	22 Apr 2003 15:22:31 -0000	1.22
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	25 Apr 2003 16:04:26 -0000
@@ -716,5 +716,19 @@
 		currName.setEnd(lastToken);
 	}
 
-	Name currName = null; 
+	Name currName = null;
+
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#startBitfield(java.lang.Object)
+	 */
+	public Object startBitfield(Object declarator) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#endBitfield(java.lang.Object)
+	 */
+	public void endBitfield(Object bitfield) {
+	} 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java,v
retrieving revision 1.21
diff -u -r1.21 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	22 Apr 2003 15:22:31 -0000	1.21
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	25 Apr 2003 16:04:26 -0000
@@ -138,5 +138,8 @@
 	public void		templateTypeParameterAbort( Object typeParm );
 	public void 	templateTypeParameterInitialTypeId( Object typeParm );
 	public void 	templateTypeParameterEnd( Object typeParm );
+
+	public Object 	startBitfield(Object declarator);
+	public void  	endBitfield(Object bitfield);
 	
 }
Index: parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java,v
retrieving revision 1.21
diff -u -r1.21 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	22 Apr 2003 15:22:31 -0000	1.21
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	25 Apr 2003 16:04:26 -0000
@@ -622,4 +622,17 @@
 	public void expressionName(Object expression) {
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#startBitfield(java.lang.Object)
+	 */
+	public Object startBitfield(Object declarator) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#endBitfield(java.lang.Object)
+	 */
+	public void endBitfield(Object bitfield) {
+	}
+
 }
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.36.2.2
diff -u -r1.36.2.2 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	24 Apr 2003 21:00:48 -0000	1.36.2.2
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	25 Apr 2003 16:04:27 -0000
@@ -891,13 +891,15 @@
 						catch( Backtrack bt )
 						{
 							elaboratedTypeSpecifier(decl);
-							return;
+							flags.setEncounteredTypename(true);
+							break;
 						}
 					}
 					else
 					{
 						elaboratedTypeSpecifier(decl);
-						return;
+						flags.setEncounteredTypename(true);
+						break;
 					}
 				case Token.t_enum:
 					if( !parm )
@@ -905,19 +907,21 @@
 						try
 						{
 							enumSpecifier(decl);
-							return;
+							break;
 						}
 						catch( Backtrack bt )
 						{
 							// this is an elaborated class specifier
 							elaboratedTypeSpecifier(decl);
-							return;
+							flags.setEncounteredTypename(true);
+							break;
 						}
 					}
 					else
 					{
 						elaboratedTypeSpecifier(decl);
-						return;
+						flags.setEncounteredTypename(true);
+						break;
 					}
 				default:
 					break declSpecifiers;
@@ -1428,6 +1432,16 @@
 							try{ callback.arrayDeclaratorEnd( array );} catch( Exception e ) {}
 						}
 						continue;
+					case Token.tCOLON:
+						consume( Token.tCOLON );
+						Object bitfield = null; 
+						try{ bitfield = callback.startBitfield( declarator );} catch( Exception e ) {}
+						Object expression = null; 
+						try{ expression = callback.expressionBegin( bitfield );} catch( Exception e ) {} 
+						constantExpression(expression);
+						try{ callback.expressionEnd( expression ); } catch( Exception e ) {}
+						try{ callback.endBitfield( bitfield );} catch( Exception e ) {}
+						
 					default:
 						break;
 				}
@@ -2337,7 +2351,9 @@
 		switch (type) {
 			// TO DO: we need more literals...
 			case Token.tINTEGER:
+			case Token.tFLOATINGPT:
 			case Token.tSTRING:
+			case Token.tLSTRING:
 			case Token.t_false: 
 			case Token.t_true:			
 				try{ callback.expressionTerminal(expression, consume());} catch( Exception e ) {}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.37.2.4
diff -u -r1.37.2.4 ChangeLog
--- ChangeLog	24 Apr 2003 21:00:50 -0000	1.37.2.4
+++ ChangeLog	25 Apr 2003 16:04:41 -0000
@@ -1,3 +1,8 @@
+2003-04-25 John Camelon
+	Added DOMTests::testBug36852(). 
+	Added DOMTests::testBug36764().
+	Moved DOMFailedTests::testBug36702() to DOMTests(). 
+
 2003-04-24 John Camelon
 	Moved fixed tests from FailedTests to DOMTests. 
 	Added DOMTests::testBug36799().
Index: failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java,v
retrieving revision 1.3.2.2
diff -u -r1.3.2.2 DOMFailedTest.java
--- failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java	24 Apr 2003 21:00:50 -0000	1.3.2.2
+++ failures/org/eclipse/cdt/core/parser/failedTests/DOMFailedTest.java	25 Apr 2003 16:04:41 -0000
@@ -64,26 +64,4 @@
 		failTest("FUNCTION_MACRO( 1, a );\n	int i;");
 	}
 
-	public void testBug36702() throws Exception
-	{
-		Writer code = new StringWriter(); 
-		code.write( "void mad_decoder_init(struct mad_decoder *, void *,\n" ); 
-		code.write( "			  enum mad_flow (*)(void *, struct mad_stream *),\n" ); 
-		code.write( "			  enum mad_flow (*)(void *, struct mad_header const *),\n" ); 
-		code.write( "			  enum mad_flow (*)(void *,\n" ); 
-		code.write( "					struct mad_stream const *,\n" ); 
-		code.write( "					struct mad_frame *),\n" ); 
-		code.write( "			  enum mad_flow (*)(void *,\n" ); 
-		code.write( "					struct mad_header const *,\n" ); 
-		code.write( "					struct mad_pcm *),\n" ); 
-		code.write( "			  enum mad_flow (*)(void *,\n" ); 
-		code.write( "					struct mad_stream *,\n" ); 
-		code.write( "					struct mad_frame *),\n" ); 
-		code.write( "			  enum mad_flow (*)(void *, void *, unsigned int *)\n" ); 
-		code.write( ");\n" );  
-		
-		failTest( code.toString() );
-		
-	}
-
 }
Index: failures/org/eclipse/cdt/core/parser/failedTests/MiscFailedTests.java
===================================================================
RCS file: failures/org/eclipse/cdt/core/parser/failedTests/MiscFailedTests.java
diff -N failures/org/eclipse/cdt/core/parser/failedTests/MiscFailedTests.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ failures/org/eclipse/cdt/core/parser/failedTests/MiscFailedTests.java	25 Apr 2003 16:04:42 -0000
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2001 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v0.5 
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors:
+ *     IBM Corp. - Rational Software - initial implementation
+ ******************************************************************************/
+package org.eclipse.cdt.core.parser.failedTests;
+
+import org.eclipse.cdt.core.parser.tests.BaseDOMTest;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class MiscFailedTests extends BaseDOMTest {
+
+	public MiscFailedTests( String arg )
+	{
+		super( arg );
+	}
+	
+
+}
Index: parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java,v
retrieving revision 1.25.2.2
diff -u -r1.25.2.2 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	24 Apr 2003 21:00:50 -0000	1.25.2.2
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	25 Apr 2003 16:04:43 -0000
@@ -1654,5 +1654,44 @@
 		assertEquals( tu.getDeclarations().size(), 1 );
 	}
 
+	public void testBug36852() throws Exception
+	{
+		Writer code = new StringWriter(); 
+		code.write( "int CBT::senseToAllRect( double id_standardQuot = DOSE, double id_minToleranz =15.0,\n" );  
+		code.write( "double id_maxToleranz = 15.0, unsigned int iui_minY = 0, \n" );
+		code.write( "unsigned int iui_maxY = HEIGHT );\n" );
+		TranslationUnit tu = parse( code.toString() );
+	}
+
+	public void testBug36764() throws Exception
+	{
+		TranslationUnit tu = parse( "struct{ int x : 4; int y : 8; };" );
+		assertEquals( tu.getDeclarations().size(), 1 );
+		assertEquals( ((ClassSpecifier)((SimpleDeclaration)tu.getDeclarations().get(0)).getTypeSpecifier()).getDeclarations().size(), 2 );   
+	}
+
+	public void testBug36702() throws Exception
+	{
+		Writer code = new StringWriter(); 
+		code.write( "void mad_decoder_init(struct mad_decoder *, void *,\n" ); 
+		code.write( "			  enum mad_flow (*)(void *, struct mad_stream *),\n" ); 
+		code.write( "			  enum mad_flow (*)(void *, struct mad_header const *),\n" ); 
+		code.write( "			  enum mad_flow (*)(void *,\n" ); 
+		code.write( "					struct mad_stream const *,\n" ); 
+		code.write( "					struct mad_frame *),\n" ); 
+		code.write( "			  enum mad_flow (*)(void *,\n" ); 
+		code.write( "					struct mad_header const *,\n" ); 
+		code.write( "					struct mad_pcm *),\n" ); 
+		code.write( "			  enum mad_flow (*)(void *,\n" ); 
+		code.write( "					struct mad_stream *,\n" ); 
+		code.write( "					struct mad_frame *),\n" ); 
+		code.write( "			  enum mad_flow (*)(void *, void *, unsigned int *)\n" ); 
+		code.write( ");\n" );  
+		
+		TranslationUnit tu = parse( code.toString() );
+		
+	}
+
+
 }
 

Back to the top