1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

fix bug 89990

when looking for name matches in a scope, don't consider qualified names because
they are really from another scope.
This commit is contained in:
Andrew Niefer 2005-04-01 19:40:55 +00:00
parent 0202a904bd
commit 6e68f25d05

View file

@ -1175,13 +1175,13 @@ public class CPPSemantics {
dtor = dtor.getNestedDeclarator(); dtor = dtor.getNestedDeclarator();
IASTName declName = dtor.getName(); IASTName declName = dtor.getName();
scope.addName( declName ); scope.addName( declName );
if( !data.typesOnly && nameMatches( data, declName.toCharArray() ) ) { if( !data.typesOnly && nameMatches( data, declName ) ) {
return declName; return declName;
} }
} else if( node instanceof ICPPASTTemplateParameter ){ } else if( node instanceof ICPPASTTemplateParameter ){
IASTName name = CPPTemplates.getTemplateParameterName( (ICPPASTTemplateParameter) node ); IASTName name = CPPTemplates.getTemplateParameterName( (ICPPASTTemplateParameter) node );
scope.addName( name ); scope.addName( name );
if( nameMatches( data, name.toCharArray() ) ) { if( nameMatches( data, name ) ) {
return name; return name;
} }
} }
@ -1198,7 +1198,7 @@ public class CPPSemantics {
IASTName declaratorName = declarator.getName(); IASTName declaratorName = declarator.getName();
scope.addName( declaratorName ); scope.addName( declaratorName );
if( !data.typesOnly || simpleDeclaration.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef ) { if( !data.typesOnly || simpleDeclaration.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef ) {
if( nameMatches( data, declaratorName.toCharArray() ) ) { if( nameMatches( data, declaratorName ) ) {
return declaratorName; return declaratorName;
} }
} }
@ -1209,20 +1209,20 @@ public class CPPSemantics {
if( declarators.length == 0 && declSpec instanceof IASTElaboratedTypeSpecifier ){ if( declarators.length == 0 && declSpec instanceof IASTElaboratedTypeSpecifier ){
IASTName elabName = ((IASTElaboratedTypeSpecifier)declSpec).getName(); IASTName elabName = ((IASTElaboratedTypeSpecifier)declSpec).getName();
scope.addName( elabName ); scope.addName( elabName );
if( nameMatches( data, elabName.toCharArray() ) ) { if( nameMatches( data, elabName ) ) {
return elabName; return elabName;
} }
} else if( declSpec instanceof ICPPASTCompositeTypeSpecifier ){ } else if( declSpec instanceof ICPPASTCompositeTypeSpecifier ){
IASTName compName = ((IASTCompositeTypeSpecifier)declSpec).getName(); IASTName compName = ((IASTCompositeTypeSpecifier)declSpec).getName();
scope.addName( compName ); scope.addName( compName );
if( nameMatches( data, compName.toCharArray() ) ) { if( nameMatches( data, compName ) ) {
return compName; return compName;
} }
} else if( declSpec instanceof IASTEnumerationSpecifier ){ } else if( declSpec instanceof IASTEnumerationSpecifier ){
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) declSpec; IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) declSpec;
IASTName eName = enumeration.getName(); IASTName eName = enumeration.getName();
scope.addName( eName ); scope.addName( eName );
if( nameMatches( data, eName.toCharArray() ) ) { if( nameMatches( data, eName ) ) {
return eName; return eName;
} }
//check enumerators too //check enumerators too
@ -1232,7 +1232,7 @@ public class CPPSemantics {
if( enumerator == null ) break; if( enumerator == null ) break;
eName = enumerator.getName(); eName = enumerator.getName();
scope.addName( eName ); scope.addName( eName );
if( !data.typesOnly && nameMatches( data, eName.toCharArray() ) ) { if( !data.typesOnly && nameMatches( data, eName ) ) {
return eName; return eName;
} }
} }
@ -1245,18 +1245,18 @@ public class CPPSemantics {
name = ns[ ns.length - 1 ]; name = ns[ ns.length - 1 ];
} }
scope.addName( name ); scope.addName( name );
if( nameMatches( data, name.toCharArray() ) ) { if( nameMatches( data, name ) ) {
return name; return name;
} }
} else if( declaration instanceof ICPPASTNamespaceDefinition ){ } else if( declaration instanceof ICPPASTNamespaceDefinition ){
IASTName namespaceName = ((ICPPASTNamespaceDefinition) declaration).getName(); IASTName namespaceName = ((ICPPASTNamespaceDefinition) declaration).getName();
scope.addName( namespaceName ); scope.addName( namespaceName );
if( nameMatches( data, namespaceName.toCharArray() ) ) if( nameMatches( data, namespaceName ) )
return namespaceName; return namespaceName;
} else if( declaration instanceof ICPPASTNamespaceAlias ){ } else if( declaration instanceof ICPPASTNamespaceAlias ){
IASTName alias = ((ICPPASTNamespaceAlias) declaration).getAlias(); IASTName alias = ((ICPPASTNamespaceAlias) declaration).getAlias();
scope.addName( alias ); scope.addName( alias );
if( nameMatches( data, alias.toCharArray() ) ) if( nameMatches( data, alias ) )
return alias; return alias;
} else } else
@ -1268,7 +1268,7 @@ public class CPPSemantics {
IASTName declName = declarator.getName(); IASTName declName = declarator.getName();
scope.addName( declName ); scope.addName( declName );
if( !data.typesOnly && nameMatches( data, declName.toCharArray() ) ) { if( !data.typesOnly && nameMatches( data, declName ) ) {
return declName; return declName;
} }
} }
@ -1276,9 +1276,15 @@ public class CPPSemantics {
return null; return null;
} }
private static final boolean nameMatches( LookupData data, char[] potential ){ private static final boolean nameMatches( LookupData data, IASTName potential ){
return ( (data.prefixLookup && CharArrayUtils.equals( potential, 0, data.name.length, data.name )) || if( potential instanceof ICPPASTQualifiedName ){
(!data.prefixLookup && CharArrayUtils.equals( potential, data.name )) ); //A qualified name implies the name actually belongs to a different scope, and should
//not be considered here.
return false;
}
char[] c = potential.toCharArray();
return ( (data.prefixLookup && CharArrayUtils.equals( c, 0, data.name.length, data.name )) ||
(!data.prefixLookup && CharArrayUtils.equals( c, data.name )) );
} }
private static void addDefinition( IBinding binding, IASTName name ){ private static void addDefinition( IBinding binding, IASTName name ){