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

NPE for illegal friend declarations on global scope, bug 292174.

This commit is contained in:
Markus Schorn 2009-10-14 11:22:27 +00:00
parent 241e84b54e
commit 0cfed67288

View file

@ -891,22 +891,26 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
ICPPASTElaboratedTypeSpecifier elaboratedSpecifier = (ICPPASTElaboratedTypeSpecifier)parentNode;
if (elaboratedSpecifier.isFriend()) {
pdomName.setIsFriendSpecifier(true);
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
PDOMBinding enclClassBinding= enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
((PDOMCPPClassType)enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
if (enclClassName != null) {
PDOMBinding enclClassBinding = enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
}
}
}
} else if (parentNode instanceof ICPPASTFunctionDeclarator) {
if (parentNode.getParent() instanceof IASTSimpleDeclaration) {
IASTSimpleDeclaration grandparentNode = (IASTSimpleDeclaration) parentNode.getParent();
if (grandparentNode.getDeclSpecifier() instanceof ICPPASTDeclSpecifier) {
if (((ICPPASTDeclSpecifier)grandparentNode.getDeclSpecifier()).isFriend()) {
if (((ICPPASTDeclSpecifier) grandparentNode.getDeclSpecifier()).isFriend()) {
pdomName.setIsFriendSpecifier(true);
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
PDOMBinding enclClassBinding= enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
((PDOMCPPClassType)enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
if (enclClassName != null) {
PDOMBinding enclClassBinding = enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
}
}
}
}
@ -951,11 +955,13 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
}
}
if (pdomName.isFriendSpecifier()) {
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
PDOMBinding enclClassBinding= enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
PDOMCPPClassType ownerClass = (PDOMCPPClassType)enclClassBinding;
ownerClass.removeFriend(pdomName);
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
if (enclClassName != null) {
PDOMBinding enclClassBinding = enclClassName.getBinding();
if (enclClassBinding instanceof PDOMCPPClassType) {
PDOMCPPClassType ownerClass = (PDOMCPPClassType) enclClassBinding;
ownerClass.removeFriend(pdomName);
}
}
}
}