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:
parent
3ec82a67ca
commit
66495196b7
2 changed files with 23 additions and 6 deletions
|
@ -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(),
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Add table
Reference in a new issue