1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Resolution of inline friend functions in index. Bug 284690.

This commit is contained in:
Sergey Prigogin 2009-08-10 04:17:57 +00:00
parent 7ac2badc64
commit 01f10e61af
2 changed files with 16 additions and 10 deletions

View file

@ -1329,22 +1329,22 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti
// }
public void testValues() throws Exception {
IVariable v= (IVariable) getBindingFromASTName("a;", 1);
checkValue(v.getInitialValue(), -4);
asserValueEquals(v.getInitialValue(), -4);
v= (IVariable) getBindingFromASTName("b;", 1);
checkValue(v.getInitialValue(), 0);
asserValueEquals(v.getInitialValue(), 0);
v= (IVariable) getBindingFromASTName("c;", 1);
assertNull(v.getInitialValue().numericalValue());
IEnumerator e= (IEnumerator) getBindingFromASTName("e0", 2);
checkValue(e.getValue(), 0);
asserValueEquals(e.getValue(), 0);
e= (IEnumerator) getBindingFromASTName("e2", 2);
checkValue(e.getValue(), 2);
asserValueEquals(e.getValue(), 2);
e= (IEnumerator) getBindingFromASTName("e3", 2);
checkValue(e.getValue(), 3);
asserValueEquals(e.getValue(), 3);
e= (IEnumerator) getBindingFromASTName("e4", 2);
checkValue(e.getValue(), 4);
asserValueEquals(e.getValue(), 4);
e= (IEnumerator) getBindingFromASTName("e5", 2);
checkValue(e.getValue(), 5);
asserValueEquals(e.getValue(), 5);
}
// namespace ns1 { namespace ns2 {
@ -1378,7 +1378,7 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti
// void test(A a) {
// m(a);
// }
public void _testInlineFriendFunction_284690() throws Exception {
public void testInlineFriendFunction_284690() throws Exception {
getBindingFromASTName("m(a)", 1, IFunction.class);
}
@ -1484,10 +1484,10 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti
}
}
private void checkValue(IValue initialValue, int i) {
private void asserValueEquals(IValue initialValue, long i) {
assertNotNull(initialValue);
final Long numericalValue = initialValue.numericalValue();
assertNotNull(numericalValue);
assertEquals(i, numericalValue.intValue());
assertEquals(i, numericalValue.longValue());
}
}

View file

@ -2048,6 +2048,12 @@ public class CPPVisitor extends ASTQueries {
if (declSpec.isFriend()) {
isFriend= true;
}
} else if (node instanceof IASTFunctionDefinition) {
IASTFunctionDefinition funcDefinition = (IASTFunctionDefinition) node;
ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) funcDefinition.getDeclSpecifier();
if (declSpec.isFriend()) {
isFriend= true;
}
}
// Search for enclosing binding