1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 09:46:02 +02:00

Brutally painful Parser2 fixes.

This commit is contained in:
John Camelon 2004-11-23 14:50:24 +00:00
parent edd4a3ebf0
commit 894e597b9e

View file

@ -865,7 +865,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
try try
{ {
declSpecifier = declSpecifierSeq(false, true); declSpecifier = declSpecifierSeq(false, false);
declarator = declarator( SimpleDeclarationStrategy.TRY_CONSTRUCTOR ); declarator = declarator( SimpleDeclarationStrategy.TRY_CONSTRUCTOR );
} }
catch( BacktrackException bt ) catch( BacktrackException bt )
@ -989,10 +989,17 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
backtrackMarker = mark(); backtrackMarker = mark();
newPlacementExpressions = expression(); newPlacementExpressions = expression();
consume(IToken.tRPAREN); consume(IToken.tRPAREN);
if (templateIdScopes.size() > 0) { if( LT(1) == IToken.tLBRACKET )
templateIdScopes.pop(); {
} //pop 1st Parent backup( backtrackMarker );
placementParseFailure = false; if (templateIdScopes.size() > 0) {
templateIdScopes.pop();
} //pop 1st Parent
placementParseFailure = true;
throwBacktrack( backtrackMarker.getOffset(), backtrackMarker.getEndOffset(), backtrackMarker.getLineNumber(), backtrackMarker.getFilename() );
}
else
placementParseFailure = false;
if (LT(1) == IToken.tLPAREN) { if (LT(1) == IToken.tLPAREN) {
beforeSecondParen = mark(); beforeSecondParen = mark();
consume(IToken.tLPAREN); consume(IToken.tLPAREN);
@ -3237,7 +3244,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
List arrayMods = Collections.EMPTY_LIST; List arrayMods = Collections.EMPTY_LIST;
List exceptionSpecIds = Collections.EMPTY_LIST; List exceptionSpecIds = Collections.EMPTY_LIST;
boolean encounteredVarArgs = false; boolean encounteredVarArgs = false;
boolean tryEncountered = true; boolean tryEncountered = false;
IASTExpression bitField = null; IASTExpression bitField = null;
boolean isFunction = false; boolean isFunction = false;
boolean isPureVirtual = false, isConst = false, isVolatile = false; boolean isPureVirtual = false, isConst = false, isVolatile = false;
@ -3247,15 +3254,26 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
consumePointerOperators(pointerOps); consumePointerOperators(pointerOps);
if (LT(1) == IToken.tLPAREN) { if (LT(1) == IToken.tLPAREN) {
consume(); IToken mark = mark();
innerDecl = declarator(strategy); try
consume(IToken.tRPAREN); {
consume();
innerDecl = declarator(strategy);
consume(IToken.tRPAREN);
}
catch( BacktrackException bte )
{
backup( mark );
}
declaratorName = createName(); declaratorName = createName();
} else } else
{ {
try try
{ {
declaratorName = createName( consumeTemplatedOperatorName() ); ITokenDuple d = consumeTemplatedOperatorName();
declaratorName = createName( d );
if( d.isConversion() )
isFunction = true;
} }
catch( BacktrackException bt ) catch( BacktrackException bt )
{ {