From fe9a0ddd82a8b9573bc514fef881507affce7feb Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Tue, 5 Aug 2008 03:53:26 +0000 Subject: [PATCH] Bug 233889. --- .../tests/IndexCPPBindingResolutionTest.java | 2 +- .../dom/parser/cpp/CPPPointerToMemberType.java | 15 +++++++++++++-- .../dom/parser/cpp/semantics/CPPSemantics.java | 11 +++++------ .../pdom/dom/cpp/PDOMCPPPointerToMemberType.java | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java index ff2a7f66e00..fa65f079490 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java @@ -1008,7 +1008,7 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti // func(&C::m1); // func(&C::m2); // } - public void _testAddressOfConstMethod_233889() throws Exception { + public void testAddressOfConstMethod_233889() throws Exception { IBinding fn1= getBindingFromASTName("func(&C::m1", 4, ICPPFunction.class); IBinding fn2= getBindingFromASTName("func(&C::m2", 4, ICPPFunction.class); assertNotSame(fn1, fn2); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java index 76a72110037..22d7bb2628a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPPointerToMemberType; import org.eclipse.cdt.internal.core.index.IIndexType; @@ -30,7 +31,7 @@ import org.eclipse.cdt.internal.core.index.IIndexType; * @author aniefer */ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointerToMemberType { - private ICPPASTPointerToMember operator; + private ICPPASTPointerToMember operator; private IType classType; // Can be either ICPPClassType or ICPPTemplateTypeParameter /** @@ -75,7 +76,7 @@ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointe ICPPASTPointerToMember pm = operator; IASTName name = pm.getName(); if (name instanceof ICPPASTQualifiedName) { - IASTName[] ns = ((ICPPASTQualifiedName)name).getNames(); + IASTName[] ns = ((ICPPASTQualifiedName) name).getNames(); if (ns.length > 1) name = ns[ns.length - 2]; else @@ -91,4 +92,14 @@ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointe } return classType; } + + @Override + public boolean isConst() { + return super.isConst() || (getType() instanceof ICPPFunctionType && ((ICPPFunctionType) getType()).isConst()); + } + + @Override + public boolean isVolatile() { + return super.isVolatile() || (getType() instanceof ICPPFunctionType && ((ICPPFunctionType) getType()).isVolatile()); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 8cd19ba1190..472df3e1395 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -665,7 +665,6 @@ public class CPPSemantics { nextTmplScope= enclosingTemplateScope(data.astName); } - while (nextScope != null || nextTmplScope != null) { // when the non-template scope is no longer contained within the first template scope, // we use the template scope for the next iteration. @@ -2040,7 +2039,7 @@ public class CPPSemantics { final IType[] targetParameters = getTargetParameterTypes(currFn); final int useImplicitObj = (currFn instanceof ICPPMethod && !(currFn instanceof ICPPConstructor)) ? 1 : 0; final int sourceLen= Math.max(sourceParameters.length + useImplicitObj, 1); - final int numTargetParams= Math.max(targetParameters.length, 1+useImplicitObj); + final int numTargetParams= Math.max(targetParameters.length, 1 + useImplicitObj); if (currFnCost == null || currFnCost.length != sourceLen) { currFnCost= new Cost[sourceLen]; @@ -2051,13 +2050,13 @@ public class CPPSemantics { boolean isImpliedObject= false; for (int j = 0; j < sourceLen; j++) { if (useImplicitObj > 0) { - isImpliedObject= j==0; + isImpliedObject= (j == 0); source= isImpliedObject ? impliedObjectType : sourceParameters[j - 1]; - Object se= isImpliedObject || data.functionParameters.length==0 ? null : data.functionParameters[j - 1]; - sourceExp= se instanceof IASTExpression ? (IASTExpression) se : null; + Object se= isImpliedObject || data.functionParameters.length == 0 ? null : data.functionParameters[j - 1]; + sourceExp= se instanceof IASTExpression ? (IASTExpression) se : null; } else { source = sourceParameters[j]; - Object se= data.functionParameters.length==0 ? null : data.functionParameters[j]; + Object se= data.functionParameters.length == 0 ? null : data.functionParameters[j]; sourceExp= se instanceof IASTExpression ? (IASTExpression) se : null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPPointerToMemberType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPPointerToMemberType.java index 7e198a50fa2..3eb6960ba8e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPPointerToMemberType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPPointerToMemberType.java @@ -87,7 +87,7 @@ class PDOMCPPPointerToMemberType extends PDOMPointerType implements ICPPPointerT } @Override public Object clone() { - return new PDOMCPPPointerToMemberTypeClone(this); + return new PDOMCPPPointerToMemberTypeClone((ICPPPointerToMemberType) delegate); } }