mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Fixes potential NPEs.
This commit is contained in:
parent
ae39bd607b
commit
5dacb8918f
3 changed files with 34 additions and 31 deletions
|
@ -1141,6 +1141,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
|
|||
} else {
|
||||
IToken la = LA(1);
|
||||
throwBacktrack(la.getOffset(), la.getLength());
|
||||
return null; // line is never reached, hint for the parser
|
||||
}
|
||||
IASTExpression initialValue = null;
|
||||
if (LT(1) == IToken.tASSIGN) {
|
||||
|
|
|
@ -1256,13 +1256,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
try {
|
||||
lookAheadForDeclarator(flags);
|
||||
} catch (FoundDeclaratorException e) {
|
||||
ICASTSimpleDeclSpecifier declSpec = null;
|
||||
if (typeofExpression != null) {
|
||||
declSpec = createGCCSimpleTypeSpecifier();
|
||||
((IGCCASTSimpleDeclSpecifier) declSpec).setTypeofExpression(typeofExpression);
|
||||
} else {
|
||||
declSpec = createSimpleTypeSpecifier();
|
||||
}
|
||||
ICASTSimpleDeclSpecifier declSpec= createSimpleTypeSpecifier();
|
||||
|
||||
declSpec.setConst(isConst);
|
||||
declSpec.setRestrict(isRestrict);
|
||||
|
@ -1276,12 +1270,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
declSpec.setUnsigned(isUnsigned);
|
||||
declSpec.setSigned(isSigned);
|
||||
declSpec.setShort(isShort);
|
||||
if( typeofExpression != null && last == null ){
|
||||
((ASTNode)declSpec).setOffsetAndLength( (ASTNode)typeofExpression );
|
||||
} else {
|
||||
((ASTNode) declSpec).setOffsetAndLength(startingOffset,
|
||||
(last != null) ? last.getEndOffset() - startingOffset : 0);
|
||||
}
|
||||
((ASTNode) declSpec).setOffsetAndLength(startingOffset,
|
||||
(last != null) ? last.getEndOffset() - startingOffset : 0);
|
||||
e.declSpec = declSpec;
|
||||
throw e;
|
||||
}
|
||||
|
@ -1385,7 +1375,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
declSpec.setInline(isInline);
|
||||
declSpec.setStorageClass(storageClass);
|
||||
|
||||
((ASTNode) declSpec).setOffsetAndLength(startingOffset, last.getEndOffset() - startingOffset);
|
||||
if (last != null) {
|
||||
((ASTNode) declSpec).setOffsetAndLength(startingOffset, last.getEndOffset() - startingOffset);
|
||||
}
|
||||
IASTName name = createName(identifier);
|
||||
declSpec.setName(name);
|
||||
return declSpec;
|
||||
|
@ -1462,6 +1454,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
break;
|
||||
default:
|
||||
throwBacktrack(mark.getOffset(), mark.getLength());
|
||||
return null; // line never reached, hint for the parser.
|
||||
}
|
||||
|
||||
// if __attribute__ or __declspec occurs after struct/union/class and before the identifier
|
||||
|
@ -1636,13 +1629,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
switch (LT(1)) {
|
||||
case IToken.tCOMMA:
|
||||
last = consume();
|
||||
seenParameter = false;
|
||||
parmNames[i] = createName(identifier());
|
||||
seenParameter = true;
|
||||
break;
|
||||
case IToken.tIDENTIFIER:
|
||||
if (seenParameter)
|
||||
throwBacktrack(startingOffset, last.getEndOffset() - startingOffset);
|
||||
|
||||
parmNames[i] = createName(identifier());
|
||||
|
||||
seenParameter = true;
|
||||
break;
|
||||
case IToken.tRPAREN:
|
||||
|
@ -1694,8 +1688,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
|||
parmDeclarations[i] = declaration;
|
||||
} else {
|
||||
parmDeclarations[i] = createKnRCProblemDeclaration(
|
||||
((ASTNode) declaration).getLength(),
|
||||
((ASTNode) declaration).getOffset());
|
||||
((ASTNode) decl).getLength(),
|
||||
((ASTNode) decl).getOffset());
|
||||
}
|
||||
} catch (BacktrackException b) {
|
||||
parmDeclarations[i] = createKnRCProblemDeclaration(
|
||||
|
|
|
@ -1414,7 +1414,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
switch (n.length) {
|
||||
case 0:
|
||||
throwBacktrack(LA(1));
|
||||
break;
|
||||
return null; // line is never reached, hint for the parser
|
||||
case 1:
|
||||
if (n[0] instanceof IASTTypeId) {
|
||||
firstExpression = buildTypeIdExpression(
|
||||
|
@ -1424,6 +1424,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
firstExpression = buildUnaryExpression(
|
||||
ICPPASTUnaryExpression.op_typeid,
|
||||
(IASTExpression) n[0], so, lastOffset);
|
||||
} else {
|
||||
throwBacktrack(LA(1));
|
||||
return null; // line is never reached, hint for the parser
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
|
@ -1439,6 +1442,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
((ASTNode) ambExpr).setOffsetAndLength((ASTNode) e2);
|
||||
firstExpression = ambExpr;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert false;
|
||||
throwBacktrack(LA(1));
|
||||
return null; // line is never reached, hint for the parser
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -3056,21 +3064,15 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
catch( FoundDeclaratorException fde )
|
||||
{
|
||||
ICPPASTSimpleDeclSpecifier simpleDeclSpec = null;
|
||||
if (isLongLong || typeofExpression != null) {
|
||||
if (isLongLong) {
|
||||
simpleDeclSpec = createGPPSimpleDeclSpecifier();
|
||||
((IGPPASTSimpleDeclSpecifier) simpleDeclSpec).setLongLong(isLongLong);
|
||||
if (typeofExpression != null) {
|
||||
((IGPPASTSimpleDeclSpecifier) simpleDeclSpec).setTypeofExpression(typeofExpression);
|
||||
}
|
||||
} else
|
||||
simpleDeclSpec = createSimpleDeclSpecifier();
|
||||
|
||||
if( last == null && typeofExpression != null ){
|
||||
((ASTNode) simpleDeclSpec).setOffsetAndLength((ASTNode) typeofExpression);
|
||||
} else {
|
||||
int l = last != null ? last.getEndOffset() - firstToken.getOffset() : 0;
|
||||
((ASTNode) simpleDeclSpec).setOffsetAndLength(firstToken.getOffset(), l);
|
||||
}
|
||||
int l = last != null ? last.getEndOffset() - firstToken.getOffset() : 0;
|
||||
((ASTNode) simpleDeclSpec).setOffsetAndLength(firstToken.getOffset(), l);
|
||||
|
||||
simpleDeclSpec.setConst(isConst);
|
||||
simpleDeclSpec.setVolatile(isVolatile);
|
||||
if (simpleDeclSpec instanceof IGPPASTDeclSpecifier)
|
||||
|
@ -3203,7 +3205,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
nameSpec.setStorageClass(storageClass);
|
||||
nameSpec.setVirtual(isVirtual);
|
||||
nameSpec.setExplicit(isExplicit);
|
||||
((ASTNode) nameSpec).setOffsetAndLength(startOffset, last.getEndOffset() - startOffset);
|
||||
if (last != null) {
|
||||
((ASTNode) nameSpec).setOffsetAndLength(startOffset, last.getEndOffset() - startOffset);
|
||||
}
|
||||
else {
|
||||
((ASTNode) nameSpec).setOffsetAndLength(startOffset, duple.getLastToken().getEndOffset() - startOffset);
|
||||
}
|
||||
return nameSpec;
|
||||
}
|
||||
ICPPASTSimpleDeclSpecifier simpleDeclSpec = null;
|
||||
|
@ -3830,7 +3837,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
backup(mark);
|
||||
throwBacktrack(mark.getOffset(), endOffset - mark.getOffset());
|
||||
}
|
||||
int endOffset = (mark != null) ? mark.getEndOffset() : 0;
|
||||
int endOffset= mark.getEndOffset();
|
||||
backup(mark);
|
||||
throwBacktrack(mark.getOffset(), endOffset - mark.getOffset());
|
||||
|
||||
|
@ -3869,6 +3876,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
break;
|
||||
default:
|
||||
throwBacktrack(mark.getOffset(), mark.getLength());
|
||||
return null; // line is never reached, hint for the parser
|
||||
}
|
||||
|
||||
IASTName name = null;
|
||||
|
|
Loading…
Add table
Reference in a new issue