From 892cf79f6ee05976b19ef27b01b722b0ec7ea655 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 21 Jun 2005 19:03:06 +0000 Subject: [PATCH] [98528] Fixed EOC handling in sizeof and cast expression in C and the cpp style condition. --- .../parser/AbstractGNUSourceCodeParser.java | 9 +++++--- .../core/dom/parser/c/GNUCSourceParser.java | 23 +++++++++++++++---- .../dom/parser/cpp/GNUCPPSourceParser.java | 7 +++++- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index 96caa26e7f7..0d745f315ab 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -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; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 451edbf5a07..5c9845e8d3c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -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; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 96a68c43a16..fb0a1ce6e7b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -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);