1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[98528] Fixed EOC handling in sizeof and cast expression in C and the cpp style condition.

This commit is contained in:
Doug Schaefer 2005-06-21 19:03:06 +00:00
parent 4732db0ae8
commit 892cf79f6e
3 changed files with 31 additions and 8 deletions

View file

@ -1485,9 +1485,12 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
result.setTypeId(typeId);
typeId.setParent(result);
typeId.setPropertyInParent(IASTCastExpression.TYPE_ID);
result.setOperand(subExpression);
subExpression.setParent(result);
subExpression.setPropertyInParent(IASTCastExpression.OPERAND);
if (subExpression != null) { // which it can be in a completion
result.setOperand(subExpression);
subExpression.setParent(result);
subExpression.setPropertyInParent(IASTCastExpression.OPERAND);
}
return result;
}

View file

@ -819,8 +819,16 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
try {
try {
typeId = typeId(false);
consume(IToken.tRPAREN);
castExpression = castExpression();
switch (LT(1)) {
case IToken.tRPAREN:
consume();
castExpression = castExpression();
break;
case IToken.tEOC:
break;
default:
throw backtrack;
}
} catch (BacktrackException bte) {
backup(mark);
throwBacktrack(bte);
@ -828,7 +836,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
return buildTypeIdUnaryExpression(IASTCastExpression.op_cast,
typeId, castExpression, startingOffset,
calculateEndOffset(castExpression));
LT(1) == IToken.tEOC ? LA(1).getEndOffset() : calculateEndOffset(castExpression));
} catch (BacktrackException b) {
}
}
@ -869,7 +877,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
try {
consume(IToken.tLPAREN);
typeId = typeId(false);
lastOffset = consume(IToken.tRPAREN).getEndOffset();
switch (LT(1)) {
case IToken.tRPAREN:
case IToken.tEOC:
lastOffset = consume().getEndOffset();
break;
default:
throw backtrack;
}
} catch (BacktrackException bt) {
backup(mark);
typeId = null;

View file

@ -5115,8 +5115,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
IToken mark = mark();
try {
IASTExpression e = expression();
if (LT(1) != IToken.tRPAREN)
switch (LT(1)) {
case IToken.tRPAREN:
case IToken.tEOC:
return e;
default:
throwBacktrack(LA(1));
}
return e;
} catch (BacktrackException bt) {
backup(mark);