1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-05 16:56:04 +02:00

Fixed VariableReadWriteFlagsTest.testImplicitArgument.

This commit is contained in:
Sergey Prigogin 2012-02-07 20:40:29 -08:00
parent e683d197ac
commit a9662b7f9f
3 changed files with 16 additions and 2 deletions

View file

@ -152,7 +152,7 @@ public class VariableReadWriteFlagsTest extends AST2BaseTest {
// a.m1();
// a.m2();
// };
public void _testImplicitArgument() throws Exception {
public void testImplicitArgument() throws Exception {
AssertionHelper a = getCPPAssertionHelper();
a.assertReadWriteFlags("a.m1", READ | WRITE);
a.assertReadWriteFlags("a.m2", READ);

View file

@ -146,7 +146,7 @@ public abstract class VariableReadWriteFlags {
}
if (expr instanceof IASTFunctionCallExpression) {
if (node.getPropertyInParent() == IASTFunctionCallExpression.FUNCTION_NAME) {
return READ;
return rwFunctionName((IASTExpression) node);
}
return rwArgumentForFunctionCall((IASTFunctionCallExpression) expr, node, indirection);
}
@ -160,6 +160,10 @@ public abstract class VariableReadWriteFlags {
return READ | WRITE; // fall back
}
protected int rwFunctionName(IASTExpression node) {
return READ;
}
protected int rwArgumentForFunctionCall(final IASTFunctionCallExpression funcCall,
IASTNode argument, int indirection) {
final IASTInitializerClause[] args = funcCall.getArguments();

View file

@ -12,6 +12,7 @@
package org.eclipse.cdt.internal.core.dom.parser.cpp.semantics;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTImplicitName;
import org.eclipse.cdt.core.dom.ast.IASTImplicitNameOwner;
import org.eclipse.cdt.core.dom.ast.IASTName;
@ -25,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
import org.eclipse.cdt.internal.core.dom.parser.VariableReadWriteFlags;
@ -91,6 +93,14 @@ public final class CPPVariableReadWriteFlags extends VariableReadWriteFlags {
return super.rwInUnaryExpression(node, expr, indirection);
}
@Override
protected int rwFunctionName(IASTExpression node) {
IType type= node.getExpressionType();
if (type instanceof ICPPFunctionType && !((ICPPFunctionType) type).isConst())
return READ | WRITE;
return READ;
}
@Override
protected int rwAssignmentToType(IType type, int indirection) {
if (indirection == 0) {