mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-16 12:45:41 +02:00
Attempt to fix 189300, NPE in name resolution.
This commit is contained in:
parent
d57d4ab642
commit
ca372582f4
1 changed files with 24 additions and 9 deletions
|
@ -843,16 +843,26 @@ public class CPPVisitor {
|
||||||
binding = (IBinding) t;
|
binding = (IBinding) t;
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
|
boolean done= true;
|
||||||
|
IScope scope= null;
|
||||||
if( binding instanceof ICPPClassType ){
|
if( binding instanceof ICPPClassType ){
|
||||||
return ((ICPPClassType)binding).getCompositeScope();
|
scope= ((ICPPClassType)binding).getCompositeScope();
|
||||||
} else if( binding instanceof ICPPNamespace ){
|
} else if( binding instanceof ICPPNamespace ){
|
||||||
return ((ICPPNamespace)binding).getNamespaceScope();
|
scope= ((ICPPNamespace)binding).getNamespaceScope();
|
||||||
} else if( binding instanceof ICPPInternalUnknown ){
|
} else if( binding instanceof ICPPInternalUnknown ){
|
||||||
return ((ICPPInternalUnknown)binding).getUnknownScope();
|
scope= ((ICPPInternalUnknown)binding).getUnknownScope();
|
||||||
} else if( binding instanceof IProblemBinding ){
|
} else if( binding instanceof IProblemBinding ){
|
||||||
if( binding instanceof ICPPScope )
|
if( binding instanceof ICPPScope )
|
||||||
return (IScope) binding;
|
scope= (IScope) binding;
|
||||||
return new CPPScope.CPPScopeProblem( names[i-1], IProblemBinding.SEMANTIC_BAD_SCOPE, names[i-1].toCharArray() );
|
}
|
||||||
|
else {
|
||||||
|
done= false;
|
||||||
|
}
|
||||||
|
if (done) {
|
||||||
|
if (scope == null) {
|
||||||
|
return new CPPScope.CPPScopeProblem( names[i-1], IProblemBinding.SEMANTIC_BAD_SCOPE, names[i-1].toCharArray() );
|
||||||
|
}
|
||||||
|
return scope;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( ((ICPPASTQualifiedName)parent).isFullyQualified() )
|
else if( ((ICPPASTQualifiedName)parent).isFullyQualified() )
|
||||||
|
@ -860,12 +870,13 @@ public class CPPVisitor {
|
||||||
return parent.getTranslationUnit().getScope();
|
return parent.getTranslationUnit().getScope();
|
||||||
}
|
}
|
||||||
} else if( parent instanceof ICPPASTFieldReference ){
|
} else if( parent instanceof ICPPASTFieldReference ){
|
||||||
IASTExpression owner = ((ICPPASTFieldReference)parent).getFieldOwner();
|
final ICPPASTFieldReference fieldReference = (ICPPASTFieldReference)parent;
|
||||||
|
IASTExpression owner = fieldReference.getFieldOwner();
|
||||||
IType type = getExpressionType( owner );
|
IType type = getExpressionType( owner );
|
||||||
if( ((ICPPASTFieldReference)parent).isPointerDereference() ){
|
if( fieldReference.isPointerDereference() ){
|
||||||
type= CPPSemantics.getUltimateTypeUptoPointers(type);
|
type= CPPSemantics.getUltimateTypeUptoPointers(type);
|
||||||
if( type instanceof ICPPClassType ){
|
if( type instanceof ICPPClassType ){
|
||||||
ICPPFunction op = CPPSemantics.findOperator( (IASTFieldReference)parent, (ICPPClassType) type );
|
ICPPFunction op = CPPSemantics.findOperator( fieldReference, (ICPPClassType) type );
|
||||||
if( op != null ){
|
if( op != null ){
|
||||||
type = op.getType().getReturnType();
|
type = op.getType().getReturnType();
|
||||||
}
|
}
|
||||||
|
@ -873,7 +884,11 @@ public class CPPVisitor {
|
||||||
}
|
}
|
||||||
type = CPPSemantics.getUltimateType( type, false );
|
type = CPPSemantics.getUltimateType( type, false );
|
||||||
if( type instanceof ICPPClassType ){
|
if( type instanceof ICPPClassType ){
|
||||||
return ((ICPPClassType) type).getCompositeScope();
|
IScope scope= ((ICPPClassType) type).getCompositeScope();
|
||||||
|
if (scope == null) {
|
||||||
|
scope= new CPPScope.CPPScopeProblem(fieldReference, IProblemBinding.SEMANTIC_BAD_SCOPE, name.toCharArray() );
|
||||||
|
}
|
||||||
|
return scope;
|
||||||
}
|
}
|
||||||
} else if( parent instanceof IASTGotoStatement || parent instanceof IASTLabelStatement ){
|
} else if( parent instanceof IASTGotoStatement || parent instanceof IASTLabelStatement ){
|
||||||
while( !(parent instanceof IASTFunctionDefinition) ){
|
while( !(parent instanceof IASTFunctionDefinition) ){
|
||||||
|
|
Loading…
Add table
Reference in a new issue