1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for 206573: NPE in CModelBuilder2 with illegal typedef

This commit is contained in:
Anton Leherbauer 2007-10-17 10:24:59 +00:00
parent 6535040bd9
commit b8da02462e

View file

@ -551,9 +551,13 @@ public class CModelBuilder2 implements IContributedModelBuilder {
return createEnumeration(parent, (IASTEnumerationSpecifier)declSpecifier); return createEnumeration(parent, (IASTEnumerationSpecifier)declSpecifier);
} }
} else if (declSpecifier instanceof IASTNamedTypeSpecifier) { } else if (declSpecifier instanceof IASTNamedTypeSpecifier) {
if (declarator != null) {
return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate); return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate);
}
} else if (declSpecifier instanceof IASTSimpleDeclSpecifier) { } else if (declSpecifier instanceof IASTSimpleDeclSpecifier) {
if (declarator != null) {
return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate); return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate);
}
} else { } else {
assert false : "TODO: " + declSpecifier.getClass().getName(); //$NON-NLS-1$ assert false : "TODO: " + declSpecifier.getClass().getName(); //$NON-NLS-1$
} }
@ -562,14 +566,13 @@ public class CModelBuilder2 implements IContributedModelBuilder {
private CElement createTypedefOrFunctionOrVariable(Parent parent, IASTDeclSpecifier declSpecifier, private CElement createTypedefOrFunctionOrVariable(Parent parent, IASTDeclSpecifier declSpecifier,
IASTDeclarator declarator, boolean isTemplate) throws CModelException { IASTDeclarator declarator, boolean isTemplate) throws CModelException {
assert declarator != null;
if (declSpecifier.getStorageClass() == IASTDeclSpecifier.sc_typedef) { if (declSpecifier.getStorageClass() == IASTDeclSpecifier.sc_typedef) {
return createTypeDef(parent, declSpecifier, declarator); return createTypeDef(parent, declSpecifier, declarator);
} }
if (declarator != null) {
if (declarator instanceof IASTFunctionDeclarator && !hasNestedPointerOperators(declarator)) { if (declarator instanceof IASTFunctionDeclarator && !hasNestedPointerOperators(declarator)) {
return createFunctionDeclaration(parent, declSpecifier, (IASTFunctionDeclarator)declarator, isTemplate); return createFunctionDeclaration(parent, declSpecifier, (IASTFunctionDeclarator)declarator, isTemplate);
} }
}
return createVariable(parent, declSpecifier, declarator, isTemplate); return createVariable(parent, declSpecifier, declarator, isTemplate);
} }
@ -842,9 +845,6 @@ public class CModelBuilder2 implements IContributedModelBuilder {
} }
private VariableDeclaration createVariable(Parent parent, IASTDeclSpecifier specifier, IASTDeclarator declarator, boolean isTemplate) throws CModelException { private VariableDeclaration createVariable(Parent parent, IASTDeclSpecifier specifier, IASTDeclarator declarator, boolean isTemplate) throws CModelException {
if (declarator == null) {
return null;
}
IASTDeclarator nestedDeclarator= declarator; IASTDeclarator nestedDeclarator= declarator;
while (nestedDeclarator.getNestedDeclarator() != null) { while (nestedDeclarator.getNestedDeclarator() != null) {
nestedDeclarator= nestedDeclarator.getNestedDeclarator(); nestedDeclarator= nestedDeclarator.getNestedDeclarator();