Source:
private IASTInitializerClause initClause() throws EndOfFileException, BacktrackException { final int offset = LA(1).getOffset(); if (LT(1) != IToken.tLBRACE) return expression(ExprKind.eAssignment); consume(IToken.tLBRACE); IASTInitializerList result = nodeFactory.newInitializerList(); if (supportGCCStyleDesignators && LT(1) == IToken.tRBRACE) { int endOffset= consume().getEndOffset(); setRange(result, offset, endOffset); return result; } for (;;) { final int checkOffset= LA(1).getOffset(); List<? extends ICASTDesignator> designator= designatorList(); if (designator == null) { IASTInitializerClause clause= initClause(); if (maximumTrivialExpressionsInAggregateInitializers <= result.getSize()) { if (!ASTQueries.canContainName(clause)) { translationUnit.setHasNodesOmitted(true); clause= null; } } result.addClause(clause); } else { ICASTDesignatedInitializer desigInitializer = nodeFactory.newDesignatedInitializer((IASTInitializerClause) null); setRange(desigInitializer, designator.get(0)); for (ICASTDesignator d : designator) { desigInitializer.addDesignator(d); } if (LT(1) != IToken.tEOC) { if (LT(1) == IToken.tASSIGN) consume(IToken.tASSIGN); IASTInitializerClause clause= initClause(); desigInitializer.setOperand(clause); adjustLength(desigInitializer, clause); } result.addClause(desigInitializer); } boolean canContinue= LT(1) == IToken.tCOMMA; if (canContinue) consume(); switch (LT(1)) { case IToken.tRBRACE: int lastOffset = consume().getEndOffset(); setRange(result, offset, lastOffset); return result; case IToken.tEOC: setRange(result, offset, LA(1).getOffset()); return result; } if (!canContinue || LA(1).getOffset() == checkOffset) { throwBacktrack(offset, LA(1).getEndOffset() - offset); } } }

Target:
private IASTInitializerClause initClause() throws EndOfFileException, BacktrackException { final int offset = LA(1).getOffset(); if (LT(1) != IToken.tLBRACE) return expression(ExprKind.eAssignment); consume(IToken.tLBRACE); IASTInitializerList result = nodeFactory.newInitializerList(); if (supportGCCStyleDesignators && LT(1) == IToken.tRBRACE) { int endOffset= consume().getEndOffset(); setRange(result, offset, endOffset); return result; } for (;;) { final int checkOffset= LA(1).getOffset(); List<? extends ICASTDesignator> designator= designatorList(); if (designator == null) { IASTInitializerClause clause= initClause(); if (result.getSize() >= maximumTrivialExpressionsInAggregateInitializers && !ASTQueries.canContainName(clause)) { translationUnit.setHasNodesOmitted(true); clause= null; } result.addClause(clause); } else { ICASTDesignatedInitializer desigInitializer = nodeFactory.newDesignatedInitializer((IASTInitializerClause) null); setRange(desigInitializer, designator.get(0)); for (ICASTDesignator d : designator) { desigInitializer.addDesignator(d); } if (LT(1) != IToken.tEOC) { if (LT(1) == IToken.tASSIGN) consume(IToken.tASSIGN); IASTInitializerClause clause= initClause(); desigInitializer.setOperand(clause); adjustLength(desigInitializer, clause); } result.addClause(desigInitializer); } boolean canContinue= LT(1) == IToken.tCOMMA; if (canContinue) consume(); switch (LT(1)) { case IToken.tRBRACE: int lastOffset = consume().getEndOffset(); setRange(result, offset, lastOffset); return result; case IToken.tEOC: setRange(result, offset, LA(1).getOffset()); return result; } if (!canContinue || LA(1).getOffset() == checkOffset) { throwBacktrack(offset, LA(1).getEndOffset() - offset); } } }