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:
parent
6535040bd9
commit
b8da02462e
1 changed files with 9 additions and 9 deletions
|
@ -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) {
|
||||||
return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate);
|
if (declarator != null) {
|
||||||
|
return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate);
|
||||||
|
}
|
||||||
} else if (declSpecifier instanceof IASTSimpleDeclSpecifier) {
|
} else if (declSpecifier instanceof IASTSimpleDeclSpecifier) {
|
||||||
return createTypedefOrFunctionOrVariable(parent, declSpecifier, declarator, isTemplate);
|
if (declarator != null) {
|
||||||
|
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,13 +566,12 @@ 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();
|
||||||
|
|
Loading…
Add table
Reference in a new issue