Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Quick Parser Bugfixes

Title: Quick Parser Bugfixes

CORE
        Fixed error in Elaborated Enumeration Types. 
        Fixed Bug36559  - Parsing Templates...
        Fixed Bug36634  - Enum start line error

TESTS
        Updated DOMTests::testBug36600().
        Updated LineNumberTest::testDOMLineNos(). 
        Added DOMTests::testBug36559(). 

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

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.31
diff -u -r1.31 ChangeLog
--- ChangeLog	17 Apr 2003 13:41:45 -0000	1.31
+++ ChangeLog	17 Apr 2003 17:39:09 -0000
@@ -1,3 +1,8 @@
+2003-04-17 John Camelon
+	Updated DOMTests::testBug36600().
+	Updated LineNumberTest::testDOMLineNos().  
+	Added DOMTests::testBug36559().  
+
 2003-04-16 John Camelon
 	Added DOMTests::testBug36532().
 	Added DOMTests::testBug36432(). 
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.22
diff -u -r1.22 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	17 Apr 2003 13:41:45 -0000	1.22
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	17 Apr 2003 17:39:10 -0000
@@ -1309,7 +1309,25 @@
 	public void testBug36600() throws Exception
 	{
 		TranslationUnit tu = parse( "enum mad_flow (*input_func)(void *, struct mad_stream *);");
+		assertEquals( tu.getDeclarations().size(), 1 );
+		SimpleDeclaration simple = (SimpleDeclaration)tu.getDeclarations().get(0);
+		ElaboratedTypeSpecifier elab = (ElaboratedTypeSpecifier)simple.getTypeSpecifier();
+		assertEquals( elab.getClassKey(), ClassKey.t_enum );
+		assertEquals( elab.getName().toString(), "mad_flow");
+		assertEquals( simple.getDeclarators().size(), 1 );
+		Declarator declarator = (Declarator)simple.getDeclarators().get(0);        
+		assertNull( declarator.getName() );
+		assertNotNull( declarator.getDeclarator() );
 		
+		tu = parse( "enum mad_layer layer;");
+		assertEquals( tu.getDeclarations().size(),  1);
+		SimpleDeclaration declaration = (SimpleDeclaration)tu.getDeclarations().get(0);
+		elab = (ElaboratedTypeSpecifier)declaration.getTypeSpecifier();
+		assertEquals( elab.getClassKey(), ClassKey.t_enum);
+		assertEquals( elab.getName().toString(), "mad_layer");
+		assertEquals( declaration.getDeclarators().size(), 1);
+		assertEquals( ((Declarator)declaration.getDeclarators().get(0)).getName().toString(), "layer" ); 
+
 	}
 	
 	public void testBug36247() throws Exception
@@ -1365,6 +1383,44 @@
 			}
 			
 		}
+		
+	}
+	
+	
+	public void testBug36559() throws Exception
+	{
+		Writer code = new StringWriter(); 
+		code.write( "namespace myNameSpace {\n" ); 
+		code.write( "template<typename T=short> class B {};\n" );
+		code.write( "template<> class B<int> {};\n" ); 
+		code.write( "}\n" ); 
+		TranslationUnit tu = parse( code.toString() ); 
+		assertEquals( tu.getDeclarations().size(),1);
+		NamespaceDefinition definition = (NamespaceDefinition)tu.getDeclarations().get(0);
+		assertEquals( definition.getName().toString(), "myNameSpace");
+		assertEquals( definition.getDeclarations().size(),  2 );
+		TemplateDeclaration templateDeclaration = (TemplateDeclaration)definition.getDeclarations().get(0);
+		assertFalse( templateDeclaration.isExported());
+		assertEquals( templateDeclaration.getTemplateParms().getDeclarations().size(), 1 );
+		TemplateParameter parm = (TemplateParameter)templateDeclaration.getTemplateParms().getDeclarations().get(0);
+		assertEquals( parm.getKind(), TemplateParameter.k_typename );
+		assertEquals( parm.getName().toString(), "T");
+		assertEquals( parm.getTypeId().toString(), "short");
+		assertEquals( templateDeclaration.getDeclarations().size(),  1 );
+		SimpleDeclaration classB = (SimpleDeclaration)templateDeclaration.getDeclarations().get(0);
+		assertEquals( classB.getDeclarators().size(), 0 );
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getName().toString(), "B" );
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getClassKey(), ClassKey.t_class ); 
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getDeclarations().size(), 0 ); 
+		
+		ExplicitTemplateDeclaration etd = (ExplicitTemplateDeclaration)definition.getDeclarations().get(1);
+		assertEquals( etd.getKind(), ExplicitTemplateDeclaration.k_specialization );
+		assertEquals( etd.getDeclarations().size(), 1 );
+		classB = (SimpleDeclaration)etd.getDeclarations().get(0);
+		assertEquals( classB.getDeclarators().size(), 0 );
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getName().toString(), "B<int>" );
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getClassKey(), ClassKey.t_class ); 
+		assertEquals( ((ClassSpecifier)classB.getTypeSpecifier()).getDeclarations().size(), 0 ); 
 		
 	}
 }
Index: parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java,v
retrieving revision 1.2
diff -u -r1.2 LineNumberTest.java
--- parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java	16 Apr 2003 13:49:36 -0000	1.2
+++ parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java	17 Apr 2003 17:39:10 -0000
@@ -21,6 +21,7 @@
 
 import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
 import org.eclipse.cdt.internal.core.dom.DOMBuilder;
+import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier;
 import org.eclipse.cdt.internal.core.dom.IOffsetable;
 import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
 import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
@@ -134,7 +135,9 @@
 	
 		validateLineNumbers( (SimpleDeclaration)declarations.get(1), 25, 27);
 		validateLineNumbers( (TemplateDeclaration)declarations.get(2), 34, 35);
-		validateLineNumbers( (SimpleDeclaration)declarations.get(3), 38, 43);
+		SimpleDeclaration d = (SimpleDeclaration)declarations.get(3);
+		validateLineNumbers( d, 38, 43);
+		validateLineNumbers( ((EnumerationSpecifier)d.getTypeSpecifier()), 38, 43);
 		
 	}
 	
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.24
diff -u -r1.24 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	17 Apr 2003 13:41:43 -0000	1.24
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	17 Apr 2003 17:38:51 -0000
@@ -338,7 +338,10 @@
 				break;
 			case Token.t_union:
 				kind = ClassKey.t_union;
-				break;			
+				break;
+			case Token.t_enum:
+				kind = ClassKey.t_enum; 
+				break;
 		}
 
 		ElaboratedTypeSpecifier elab = null;
@@ -637,7 +640,7 @@
 		es.setStartToken(enumKey);
 		decl.setTypeSpecifier(es);
 		((IOffsetable)es).setStartingOffset( enumKey.getOffset() );
-		((IOffsetable)es).setStartingOffset( parser.getLineNumberForOffset(enumKey.getOffset()) );
+		((IOffsetable)es).setTopLine( parser.getLineNumberForOffset(enumKey.getOffset()) );
 		return es;
 	}
 
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.32
diff -u -r1.32 ChangeLog
--- parser/ChangeLog	17 Apr 2003 13:41:43 -0000	1.32
+++ parser/ChangeLog	17 Apr 2003 17:38:51 -0000
@@ -1,3 +1,8 @@
+2003-04-17 John Camelon
+	Fixed error in Elaborated Enumeration Types.  
+	Fixed Bug36559  - Parsing Templates... 
+	Fixed Bug36634  - Enum start line error 
+
 2003-04-16 John Camelon
 	Fixed Bug36532  -   Hang on partial template definition.
 	Fixed Bug36432  -   Trying to open attached source code hangs Eclipse. 
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.32
diff -u -r1.32 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	17 Apr 2003 13:41:43 -0000	1.32
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	17 Apr 2003 17:38:52 -0000
@@ -347,7 +347,7 @@
 
 	protected void templateParameterList( Object templateDeclaration ) throws EndOfFile, Backtrack {
 		// if we have gotten this far then we have a true template-declaration
-		// iterate through the template parameter list
+		// iterate through the template parameter listtt
 		
 		Object templateParameterList = null;
 		
@@ -372,7 +372,7 @@
 						if( LT(1) == Token.tASSIGN ) // optional = type-id
 						{
 							consume( Token.tASSIGN );
-							identifier(); // type-id
+							typeId(); // type-id
 							try{ callback.templateTypeParameterInitialTypeId( currentTemplateParm ); }catch( Exception e ) {}
 						}
 					}
@@ -400,7 +400,7 @@
 					if( LT(1) == Token.tASSIGN ) // optional = type-id
 					{
 						consume( Token.tASSIGN );
-						name(); 
+						typeId(); 
 						try{ callback.templateTypeParameterInitialTypeId( newTemplateParm );} catch( Exception e ) {}
 					}
 				}
@@ -753,8 +753,7 @@
 							callback.elaboratedTypeSpecifierName( elab ); 
 							callback.elaboratedTypeSpecifierEnd( elab );
 						} catch( Exception e ) {}
-						encounteredTypename = true;
-						break;
+						return;
 					}
 				case Token.t_enum:
 					try
@@ -772,8 +771,8 @@
 							callback.elaboratedTypeSpecifierName( elab );
 							callback.elaboratedTypeSpecifierEnd( elab );
 						} catch( Exception e ) {}
+						return;
 					}
-					break;
 				default:
 					break declSpecifiers;
 			}
@@ -1944,7 +1943,8 @@
 			name();
 			return;
 		} catch (Backtrack b) {
-			boolean encountered = false;
+			Token begin = LA(1); 
+			Token end = null;
 			simpleMods:
 			for( ; ; )
 			{
@@ -1953,8 +1953,7 @@
 					case Token.t_short:
 					case Token.t_unsigned:
 					case Token.t_long:
-						encountered = true;
-						consume(); 
+						end = consume(); 
 						break;
 					case Token.t_int:
 					case Token.t_char:
@@ -1963,14 +1962,21 @@
 					case Token.t_float:
 					case Token.t_wchar_t:
 					case Token.t_void: 
-						encountered = true;
-						consume(); 
+						end = consume(); 
 					default:
 						break simpleMods;
 				}
 			}
-			if( encountered )
-				return;
+			if( end != null )
+			{
+				try
+				{
+					callback.nameBegin( begin );
+					callback.nameEnd( end );
+				} catch( Exception e ) {}
+			}
+			else
+				throw backtrack;
 		}
 	}
 	

Back to the top