1
0
Fork 0
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:
Markus Schorn 2008-04-09 15:42:09 +00:00
parent ae39bd607b
commit 5dacb8918f
3 changed files with 34 additions and 31 deletions

View file

@ -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) {

View file

@ -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(

View file

@ -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;