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

Patch for Devin Steffler.

Fixed 100248 	[DOM AST] NPE in AbstractGNUSourceCodeParser.calculateEndOffset(..)
This commit is contained in:
John Camelon 2005-07-05 18:52:27 +00:00
parent 3ec82a67ca
commit 66495196b7
2 changed files with 23 additions and 6 deletions

View file

@ -1047,8 +1047,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
break;
case IToken.tDOT:
// member access
consume(IToken.tDOT);
IToken dot = consume(IToken.tDOT);
IASTName name = createName(identifier());
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + dot.getLength());
IASTFieldReference result = createFieldReference();
((ASTNode) result).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(),
@ -1066,8 +1069,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
break;
case IToken.tARROW:
// member access
consume(IToken.tARROW);
IToken arrow = consume(IToken.tARROW);
name = createName(identifier());
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + arrow.getLength());
result = createFieldReference();
((ASTNode) result).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(),

View file

@ -960,9 +960,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
forNewExpression);
} catch (BacktrackException bt) {
backup(mark);
if (declarator != null || declSpecifier != null)
throwBacktrack(startingOffset, figureEndOffset(declSpecifier,
declarator)
- startingOffset);
else
throwBacktrack(startingOffset, bt.getLength());
}
if (declarator != null) {
if (declarator.getName().toCharArray().length > 0) {
@ -1585,7 +1588,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
break;
case IToken.tDOT:
// member access
consume(IToken.tDOT);
IToken dot = consume(IToken.tDOT);
if (LT(1) == IToken.t_template) {
consume(IToken.t_template);
isTemplate = true;
@ -1593,6 +1596,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
IASTName name = idExpression();
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + dot.getLength());
ICPPASTFieldReference fieldReference = createFieldReference();
((ASTNode) fieldReference).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(),
@ -1612,7 +1619,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
break;
case IToken.tARROW:
// member access
consume(IToken.tARROW);
IToken arrow = consume(IToken.tARROW);
if (LT(1) == IToken.t_template) {
consume(IToken.t_template);
@ -1621,6 +1628,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
name = idExpression();
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + arrow.getLength());
fieldReference = createFieldReference();
((ASTNode) fieldReference).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(),