1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 10:46:02 +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; break;
case IToken.tDOT: case IToken.tDOT:
// member access // member access
consume(IToken.tDOT); IToken dot = consume(IToken.tDOT);
IASTName name = createName(identifier()); IASTName name = createName(identifier());
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + dot.getLength());
IASTFieldReference result = createFieldReference(); IASTFieldReference result = createFieldReference();
((ASTNode) result).setOffsetAndLength( ((ASTNode) result).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getOffset(),
@ -1066,8 +1069,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
break; break;
case IToken.tARROW: case IToken.tARROW:
// member access // member access
consume(IToken.tARROW); IToken arrow = consume(IToken.tARROW);
name = createName(identifier()); name = createName(identifier());
if (name == null)
throwBacktrack(((ASTNode) firstExpression).getOffset(),
((ASTNode) firstExpression).getLength() + arrow.getLength());
result = createFieldReference(); result = createFieldReference();
((ASTNode) result).setOffsetAndLength( ((ASTNode) result).setOffsetAndLength(
((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getOffset(),

View file

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