mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Content assist support in for statement.
This commit is contained in:
parent
80830d7267
commit
9d949fe555
3 changed files with 58 additions and 13 deletions
|
@ -1703,19 +1703,46 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
|
||||||
consume(IToken.tLPAREN);
|
consume(IToken.tLPAREN);
|
||||||
IASTNode init = forInitStatement();
|
IASTNode init = forInitStatement();
|
||||||
IASTExpression for_condition = null;
|
IASTExpression for_condition = null;
|
||||||
if (LT(1) != IToken.tSEMI)
|
switch (LT(1)) {
|
||||||
|
case IToken.tSEMI:
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
for_condition = condition();
|
for_condition = condition();
|
||||||
consume(IToken.tSEMI);
|
|
||||||
IASTExpression iterationExpression = null;
|
|
||||||
if (LT(1) != IToken.tRPAREN) {
|
|
||||||
iterationExpression = expression();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
switch (LT(1)) {
|
||||||
|
case IToken.tSEMI:
|
||||||
|
consume(IToken.tSEMI);
|
||||||
|
break;
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw backtrack;
|
||||||
|
}
|
||||||
|
IASTExpression iterationExpression = null;
|
||||||
|
switch (LT(1)) {
|
||||||
|
case IToken.tRPAREN:
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
iterationExpression = expression();
|
||||||
|
}
|
||||||
|
switch (LT(1)) {
|
||||||
|
case IToken.tRPAREN:
|
||||||
consume(IToken.tRPAREN);
|
consume(IToken.tRPAREN);
|
||||||
IASTStatement for_body = statement();
|
break;
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw backtrack;
|
||||||
|
}
|
||||||
IASTForStatement for_statement = createForStatement();
|
IASTForStatement for_statement = createForStatement();
|
||||||
|
IASTStatement for_body = null;
|
||||||
|
if (LT(1) != IToken.tEOC) {
|
||||||
|
for_body = statement();
|
||||||
((ASTNode) for_statement).setOffsetAndLength(startOffset,
|
((ASTNode) for_statement).setOffsetAndLength(startOffset,
|
||||||
calculateEndOffset(for_body) - startOffset);
|
calculateEndOffset(for_body) - startOffset);
|
||||||
|
}
|
||||||
|
|
||||||
if (init instanceof IASTDeclaration) {
|
if (init instanceof IASTDeclaration) {
|
||||||
for_statement.setInit((IASTDeclaration) init);
|
for_statement.setInit((IASTDeclaration) init);
|
||||||
|
@ -1738,9 +1765,11 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
|
||||||
iterationExpression.setParent(for_statement);
|
iterationExpression.setParent(for_statement);
|
||||||
iterationExpression.setPropertyInParent(IASTForStatement.ITERATION);
|
iterationExpression.setPropertyInParent(IASTForStatement.ITERATION);
|
||||||
}
|
}
|
||||||
|
if (for_body != null) {
|
||||||
for_statement.setBody(for_body);
|
for_statement.setBody(for_body);
|
||||||
for_body.setParent(for_statement);
|
for_body.setParent(for_statement);
|
||||||
for_body.setPropertyInParent(IASTForStatement.BODY);
|
for_body.setPropertyInParent(IASTForStatement.BODY);
|
||||||
|
}
|
||||||
return for_statement;
|
return for_statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2215,7 +2215,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
IASTExpression e = null;
|
IASTExpression e = null;
|
||||||
if( LT(1) != IToken.tSEMI )
|
if( LT(1) != IToken.tSEMI )
|
||||||
e = expression();
|
e = expression();
|
||||||
|
switch (LT(1)) {
|
||||||
|
case IToken.tSEMI:
|
||||||
consume(IToken.tSEMI);
|
consume(IToken.tSEMI);
|
||||||
|
break;
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw backtrack;
|
||||||
|
}
|
||||||
// TODO is this a problem? Should we wrap this in an expression
|
// TODO is this a problem? Should we wrap this in an expression
|
||||||
// statement?
|
// statement?
|
||||||
return e;
|
return e;
|
||||||
|
|
|
@ -4420,7 +4420,15 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
IASTExpression e = null;
|
IASTExpression e = null;
|
||||||
if (LT(1) != IToken.tSEMI)
|
if (LT(1) != IToken.tSEMI)
|
||||||
e = expression();
|
e = expression();
|
||||||
|
switch (LT(1)) {
|
||||||
|
case IToken.tSEMI:
|
||||||
consume(IToken.tSEMI);
|
consume(IToken.tSEMI);
|
||||||
|
break;
|
||||||
|
case IToken.tEOC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw backtrack;
|
||||||
|
}
|
||||||
return e;
|
return e;
|
||||||
} catch (BacktrackException bt) {
|
} catch (BacktrackException bt) {
|
||||||
backup(mark);
|
backup(mark);
|
||||||
|
|
Loading…
Add table
Reference in a new issue