1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00
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
This commit is contained in:
John Camelon 2003-04-25 16:13:17 +00:00
parent 1afa3710ae
commit c8a467dc65
11 changed files with 179 additions and 28 deletions

View file

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

View file

@ -918,5 +918,20 @@ public class DOMBuilder implements IParserCallback
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 );
}
}

View file

@ -207,5 +207,21 @@ public class Declarator implements IExpressionOwner, IDeclaratorOwner {
public IDeclaratorOwner getOwnerDeclarator() {
return ownerDeclarator;
}
private BitField bitField = null;
/**
* @return
*/
public BitField getBitField() {
return bitField;
}
/**
* @param field
*/
public void setBitField(BitField field) {
bitField = field;
}
}

View file

@ -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

View file

@ -716,5 +716,19 @@ public class ExpressionEvaluator implements IParserCallback {
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) {
}
}

View file

@ -138,5 +138,8 @@ public interface IParserCallback {
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);
}

View file

@ -622,4 +622,17 @@ public class NullParserCallback implements IParserCallback {
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) {
}
}

View file

@ -891,13 +891,15 @@ c, quick);
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 @@ c, quick);
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 @@ c, quick);
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 @@ c, quick);
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 ) {}

View file

@ -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().

View file

@ -64,26 +64,4 @@ public class DOMFailedTest extends BaseDOMTest {
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() );
}
}

View file

@ -1654,5 +1654,44 @@ public class DOMTests extends BaseDOMTest {
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() );
}
}