[
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;
}
}