1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

Fixed Bug 86323 [Lengths] IASTSimpleDeclaration for the for-init-statement includes ';' in length

This commit is contained in:
John Camelon 2005-02-23 19:49:24 +00:00
parent a0f0ff7593
commit 646f923f97
3 changed files with 23 additions and 7 deletions

View file

@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IASTForStatement;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTFunctionStyleMacroParameter;
@ -219,9 +220,9 @@ public class DOMLocationTests extends AST2BaseTest {
String code = "enum hue { red, blue, green };"; //$NON-NLS-1$
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP);
IASTSimpleDeclaration d = (IASTSimpleDeclaration) tu.getDeclarations()[0];
IASTEnumerationSpecifier enum = (IASTEnumerationSpecifier) d
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) d
.getDeclSpecifier();
IASTEnumerationSpecifier.IASTEnumerator enumerator = enum
IASTEnumerationSpecifier.IASTEnumerator enumerator = enumeration
.getEnumerators()[0];
assertSoleLocation(enumerator, code.indexOf("red"), "red".length()); //$NON-NLS-1$ //$NON-NLS-2$
}
@ -448,4 +449,14 @@ public class DOMLocationTests extends AST2BaseTest {
IASTDeclarator d = sd.getDeclarators()[0];
assertSoleLocation( d, code.indexOf("*p = (int []){2, 4}"), "*p = (int []){2, 4}".length() ); //$NON-NLS-1$//$NON-NLS-2$
}
public void testBug86323() throws Exception {
String code = "void f() { int i=0; for (; i<10; i++) { } }";
for (ParserLanguage p = ParserLanguage.C; p != null; p = (p == ParserLanguage.C) ? ParserLanguage.CPP
: null) {
IASTTranslationUnit tu = parse(code, p);
IASTForStatement for_stmt = (IASTForStatement) ((IASTCompoundStatement)((IASTFunctionDefinition)tu.getDeclarations()[0]).getBody()).getStatements()[1];
assertNull( for_stmt.getInitDeclaration() );
}
}
}

View file

@ -2180,7 +2180,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
EndOfFileException {
IToken mark = mark();
try {
IASTExpression e = expression();
IASTExpression e = null;
if( LT(1) != IToken.tSEMI )
e = expression();
consume(IToken.tSEMI);
// TODO is this a problem? Should we wrap this in an expression
// statement?

View file

@ -4305,10 +4305,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
EndOfFileException {
IToken mark = mark();
try {
IASTExpression e = expression();
consume(IToken.tSEMI);
return e;
IASTExpression e = null;
if( LT(1) != IToken.tSEMI )
e = expression();
consume(IToken.tSEMI);
// TODO is this a problem? Should we wrap this in an expression
// statement?
return e;
} catch (BacktrackException bt) {
backup(mark);
try {