From 8230e97539ff10655d82eeff49e18b3abaee8c45 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 22 Apr 2005 18:20:13 +0000 Subject: [PATCH] Start at content assist for constructor initializers. --- .../parser/AbstractGNUSourceCodeParser.java | 5 ++- .../dom/parser/cpp/GNUCPPSourceParser.java | 44 ++++++++++++++----- 2 files changed, 37 insertions(+), 12 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 df35ee099f5..37b10bb7060 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 @@ -488,9 +488,12 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { */ protected IASTCompoundStatement compoundStatement() throws EndOfFileException, BacktrackException { + IASTCompoundStatement result = createCompoundStatement(); + if (LT(1) == IToken.tEOC) + return result; + int startingOffset = consume(IToken.tLBRACE).getOffset(); - IASTCompoundStatement result = createCompoundStatement(); ((ASTNode) result).setOffset(startingOffset); result.setPropertyInParent(IASTFunctionDefinition.FUNCTION_BODY); while (LT(1) != IToken.tRBRACE && LT(1) != IToken.tEOC) { 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 aedc72057f7..932f391628c 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 @@ -2808,6 +2808,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { constructorChain = new ArrayList( DEFAULT_CONSTRUCTOR_CHAIN_LIST_SIZE); ctorInitializer(constructorChain); + hasFunctionBody = true; break; case IToken.tLBRACE: break; @@ -2954,19 +2955,35 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { protected void ctorInitializer(List collection) throws EndOfFileException, BacktrackException { consume(IToken.tCOLON); - for (;;) { - if (LT(1) == IToken.tLBRACE) - break; + ctorLoop: for (;;) { ITokenDuple duple = name(); IASTName name = createName(duple); - consume(IToken.tLPAREN); + int end; IASTExpression expressionList = null; + switch (LT(1)) { + case IToken.tLPAREN: + consume(IToken.tLPAREN); - if (LT(1) != IToken.tRPAREN) - expressionList = expression(); + if (LT(1) != IToken.tRPAREN) + expressionList = expression(); - int end = consume(IToken.tRPAREN).getEndOffset(); + switch (LT(1)) { + case IToken.tRPAREN: + case IToken.tEOC: + end = consume().getEndOffset(); + break; + default: + throw backtrack; + } + break; + case IToken.tEOC: + end = consume().getEndOffset(); + break; + default: + throw backtrack; + } + ICPPASTConstructorChainInitializer ctorInitializer = createConstructorChainInitializer(); ((ASTNode) ctorInitializer).setOffsetAndLength(duple .getStartOffset(), end - duple.getStartOffset()); @@ -2982,11 +2999,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { .setPropertyInParent(ICPPASTConstructorChainInitializer.INITIALIZER); } collection.add(ctorInitializer); - if (LT(1) == IToken.tLBRACE) - break; - consume(IToken.tCOMMA); - } + switch (LT(1)) { + case IToken.tCOMMA: + consume(IToken.tCOMMA); + break; + case IToken.tLBRACE: + case IToken.tEOC: + break ctorLoop; + } + } } /**