1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 01:35:39 +02:00
John Camelon 2004-04-28 17:30:17 +00:00
parent d730ff0f94
commit 54aa75f147
4 changed files with 51 additions and 3 deletions

View file

@ -24,6 +24,7 @@ import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.parser.ast.IASTVariable;
@ -183,4 +184,20 @@ public class SelectionParseTest extends CompleteParseBaseTest {
assertEquals( destructor.getName(), "~Gonzo" ); //$NON-NLS-1$ assertEquals( destructor.getName(), "~Gonzo" ); //$NON-NLS-1$
assertTrue( destructor.isDestructor() ); assertTrue( destructor.isDestructor() );
} }
public void testBug60264() throws Exception
{
Writer writer = new StringWriter();
writer.write( "namespace Muppets { int i; }\n" ); //$NON-NLS-1$
writer.write( "int main(int argc, char **argv) { Muppets::i = 1; }\n" ); //$NON-NLS-1$
String code = writer.toString();
int index = code.indexOf( "Muppets::"); //$NON-NLS-1$
IASTNode node = parse( code, index, index + 7 );
assertNotNull( node );
assertTrue( node instanceof IASTNamespaceDefinition );
IASTNamespaceDefinition namespace = (IASTNamespaceDefinition) node;
assertEquals( namespace.getName(), "Muppets"); //$NON-NLS-1$
assertEquals( namespace.getStartingLine(), 1 );
}
} }

View file

@ -53,4 +53,9 @@ public interface ITokenDuple {
public abstract boolean syntaxOfName(); public abstract boolean syntaxOfName();
public String extractNameFromTemplateId(); public String extractNameFromTemplateId();
/**
* @param duple
* @return
*/
public boolean contains(ITokenDuple duple);
} }

View file

@ -352,9 +352,16 @@ public class ASTExpression extends ASTNode implements IASTExpression
{ {
if( expression == null ) return false; if( expression == null ) return false;
if( expression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION && if( expression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION &&
expression instanceof ASTExpression && expression instanceof ASTExpression )
((ASTExpression)expression).getIdExpressionTokenDuple().equals( duple ) ) {
ITokenDuple expressionDuple = ((ASTExpression)expression).getIdExpressionTokenDuple();
// check equality
if( expressionDuple.equals( duple ) )
return true; return true;
// check subduple
if( expressionDuple.contains( duple ) )
return true;
}
return false; return false;
} }
} }

View file

@ -475,4 +475,23 @@ public class TokenDuple implements ITokenDuple {
return nameBuffer.toString(); return nameBuffer.toString();
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ITokenDuple#contains(org.eclipse.cdt.core.parser.ITokenDuple)
*/
public boolean contains(ITokenDuple duple) {
if( duple == null ) return false;
boolean foundFirst = false;
boolean foundLast = false;
Iterator i = iterator();
while( i.hasNext() )
{
IToken current = (IToken) i.next();
if( current == firstToken ) foundFirst = true;
if( current == lastToken ) foundLast = true;
if( foundFirst && foundLast ) break;
}
return ( foundFirst && foundLast );
}
} }