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

Made some classes and methods final. Some code cleanup.

Change-Id: Id93278dba3863baa6cdac67aba56801616dacee3
This commit is contained in:
Sergey Prigogin 2016-10-08 18:00:31 -07:00 committed by Gerrit Code Review @ Eclipse.org
parent b59d930ed4
commit 4c4fb739b1
8 changed files with 72 additions and 65 deletions

View file

@ -83,17 +83,17 @@ public class IntegralValue implements IValue {
}
@Override
public Number numberValue() {
public final Number numberValue() {
return fFixedValue == null ? null : parseLong(fFixedValue);
}
@Override
public ICPPEvaluation getEvaluation() {
public final ICPPEvaluation getEvaluation() {
return fEvaluation;
}
@Override
public char[] getSignature() {
public final char[] getSignature() {
if (fSignature == null) {
fSignature = fFixedValue != null ? fFixedValue : fEvaluation.getSignature();
}
@ -315,35 +315,35 @@ public class IntegralValue implements IValue {
}
@Override
public int numberOfSubValues() {
public final int numberOfSubValues() {
return 1;
}
@Override
public ICPPEvaluation getSubValue(int index) {
return index == 0 ? (fEvaluation != null ? fEvaluation : EvalFixed.INCOMPLETE) : EvalFixed.INCOMPLETE;
public final ICPPEvaluation getSubValue(int index) {
return index == 0 && fEvaluation != null ? fEvaluation : EvalFixed.INCOMPLETE;
}
@Override
public ICPPEvaluation[] getAllSubValues() {
public final ICPPEvaluation[] getAllSubValues() {
return new ICPPEvaluation[] { getEvaluation() };
}
@Override
public void setSubValue(int position, ICPPEvaluation newValue) {
if (fEvaluation == null) {
throw new RuntimeException("trying to set incomplete value"); //$NON-NLS-1$
throw new IllegalStateException("Trying to set incomplete value"); //$NON-NLS-1$
}
if (position == 0) {
fEvaluation = newValue;
} else {
throw new RuntimeException("invalid offset in POD value: " + position); //$NON-NLS-1$
throw new IllegalArgumentException("Invalid offset in POD value: " + position); //$NON-NLS-1$
}
}
@Override
public IValue clone() {
char[] newFixedValue = fFixedValue != null ? Arrays.copyOf(fFixedValue, fFixedValue.length) : null;
char[] newFixedValue = fFixedValue == null ? null : Arrays.copyOf(fFixedValue, fFixedValue.length);
return new IntegralValue(newFixedValue, fEvaluation);
}
}

View file

@ -32,9 +32,9 @@ import org.eclipse.core.runtime.CoreException;
* Represents an access to a sub-value of a composite value, identified by an index.
* Composite values can include arrays, structures, and parameter packs (see {@code CompositeValue}).
*/
public class EvalCompositeAccess implements ICPPEvaluation {
private final ICPPEvaluation parent; // the composite value being accessed
private final int elementId; // the index of the sub-value being accessed
public final class EvalCompositeAccess implements ICPPEvaluation {
private final ICPPEvaluation parent; // The composite value being accessed
private final int elementId; // The index of the sub-value being accessed
public EvalCompositeAccess(ICPPEvaluation parent, int elementId) {
this.parent = parent;
@ -42,7 +42,7 @@ public class EvalCompositeAccess implements ICPPEvaluation {
}
public void update(ICPPEvaluation newValue) {
parent.getValue(null).setSubValue(getElementId(), newValue);
parent.getValue(null).setSubValue(elementId, newValue);
}
@Override
@ -51,7 +51,7 @@ public class EvalCompositeAccess implements ICPPEvaluation {
}
private ICPPEvaluation getTargetEvaluation() {
return getParent().getValue(null).getSubValue(getElementId());
return parent.getValue(null).getSubValue(elementId);
}
@Override
@ -84,13 +84,13 @@ public class EvalCompositeAccess implements ICPPEvaluation {
return arrayType.getType();
} else if (type instanceof InitializerListType) {
InitializerListType initListType = (InitializerListType) type;
return initListType.getEvaluation().getClauses()[getElementId()].getType(point);
return initListType.getEvaluation().getClauses()[elementId].getType(point);
} else if (type instanceof ICompositeType) {
ICompositeType compositeType = (ICompositeType) type;
return compositeType.getFields()[getElementId()].getType();
return compositeType.getFields()[elementId].getType();
} else if (type instanceof ParameterPackType) {
ParameterPackType parameterPackType = (ParameterPackType) type;
return parameterPackType.getTypes()[getElementId()];
return parameterPackType.getTypes()[elementId];
} else if (type instanceof ICPPBasicType) {
return type;
}
@ -99,7 +99,7 @@ public class EvalCompositeAccess implements ICPPEvaluation {
@Override
public IValue getValue(IASTNode point) {
return getTargetEvaluation().getValue(null);
return getTargetEvaluation().getValue(point);
}
@Override
@ -118,7 +118,7 @@ public class EvalCompositeAccess implements ICPPEvaluation {
return getTargetEvaluation().computeForFunctionCall(record, context);
} else {
ICPPEvaluation evaluatedComposite = parent.computeForFunctionCall(record, context);
return evaluatedComposite.getValue(context.getPoint()).getSubValue(getElementId()).computeForFunctionCall(record, context);
return evaluatedComposite.getValue(context.getPoint()).getSubValue(elementId).computeForFunctionCall(record, context);
}
}

View file

@ -34,12 +34,10 @@ import org.eclipse.core.runtime.CoreException;
/**
* Performs evaluation of an expression.
*/
public class EvalFixed extends CPPEvaluation {
public final class EvalFixed extends CPPEvaluation {
public static final ICPPEvaluation INCOMPLETE =
new EvalFixed(ProblemType.UNKNOWN_FOR_EXPRESSION, PRVALUE, IntegralValue.ERROR);
private final IType fType;
private final IValue fValue;
private final ValueCategory fValueCategory;

View file

@ -18,6 +18,8 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti
import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.REF;
import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF;
import java.util.Arrays;
import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
@ -46,9 +48,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode;
import org.eclipse.core.runtime.CoreException;
import java.util.Arrays;
public class EvalFunctionCall extends CPPDependentEvaluation {
public final class EvalFunctionCall extends CPPDependentEvaluation {
private final ICPPEvaluation[] fArguments;
private ICPPFunction fOverload = CPPFunction.UNINITIALIZED_FUNCTION;
private IType fType;
@ -156,8 +156,7 @@ public class EvalFunctionCall extends CPPDependentEvaluation {
if (eval == this) {
return IntegralValue.create(eval);
}
IValue value = eval.getValue(point);
return value;
return eval.getValue(point);
}
@Override

View file

@ -19,7 +19,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.core.runtime.CoreException;
public class EvalPointer extends EvalReference {
public final class EvalPointer extends EvalReference {
// The position will only be nonzero if the EvalReference has a referredSubValue,
// not a referredBinding.
private int position;

View file

@ -50,27 +50,27 @@ public class EvalReference extends CPPDependentEvaluation {
}
@Override
public boolean isInitializerList() {
public final boolean isInitializerList() {
return getTargetEvaluation().isInitializerList();
}
@Override
public boolean isFunctionSet() {
public final boolean isFunctionSet() {
return getTargetEvaluation().isFunctionSet();
}
@Override
public boolean isTypeDependent() {
public final boolean isTypeDependent() {
return getTargetEvaluation().isTypeDependent();
}
@Override
public boolean isValueDependent() {
public final boolean isValueDependent() {
return getTargetEvaluation().isValueDependent();
}
@Override
public boolean isConstantExpression(IASTNode point) {
public final boolean isConstantExpression(IASTNode point) {
return getTargetEvaluation().isConstantExpression(point);
}
@ -81,10 +81,10 @@ public class EvalReference extends CPPDependentEvaluation {
@Override
public IValue getValue(IASTNode point) {
return getTargetEvaluation().getValue(null);
return getTargetEvaluation().getValue(point);
}
public ICPPEvaluation getTargetEvaluation() {
public final ICPPEvaluation getTargetEvaluation() {
if (referredSubValue != null) {
return referredSubValue;
}
@ -104,7 +104,7 @@ public class EvalReference extends CPPDependentEvaluation {
}
}
public IBinding getReferredBinding() {
public final IBinding getReferredBinding() {
return referredBinding;
}

View file

@ -57,22 +57,23 @@ public class EvalUtil {
return null;
}
// a return value != null means that there was a return, break or continue in that statement
// A return value != null means that there was a return, break or continue in that statement.
public static ICPPExecution executeStatement(ICPPExecution exec, ActivationRecord record, ConstexprEvaluationContext context) {
if (exec instanceof ExecExpressionStatement
|| exec instanceof ExecDeclarationStatement
|| exec instanceof ExecCase
|| exec instanceof ExecDefault) {
|| exec instanceof ExecDeclarationStatement
|| exec instanceof ExecCase
|| exec instanceof ExecDefault) {
exec.executeForFunctionCall(record, context.recordStep());
return null;
} else if (exec instanceof ExecCompoundStatement
|| exec instanceof ExecWhile
|| exec instanceof ExecFor
|| exec instanceof ExecRangeBasedFor
|| exec instanceof ExecDo
|| exec instanceof ExecIf
|| exec instanceof ExecSwitch) {
}
if (exec instanceof ExecCompoundStatement
|| exec instanceof ExecWhile
|| exec instanceof ExecFor
|| exec instanceof ExecRangeBasedFor
|| exec instanceof ExecDo
|| exec instanceof ExecIf
|| exec instanceof ExecSwitch) {
ICPPExecution innerResult = exec.executeForFunctionCall(record, context.recordStep());
if (innerResult instanceof ExecReturn || innerResult instanceof ExecBreak || innerResult instanceof ExecContinue) {
return innerResult;
@ -80,16 +81,16 @@ public class EvalUtil {
return ExecIncomplete.INSTANCE;
}
return null;
} else {
return exec;
}
return exec;
}
private static boolean isUpdateable(ICPPEvaluation eval) {
return eval instanceof EvalBinding || (eval instanceof EvalReference && !(eval instanceof EvalPointer)) || eval instanceof EvalCompositeAccess;
}
/*
/**
* Returns a pair of evaluations, each representing the value of 'eval'.
* The first, "updateable", is an lvalue (EvalBinding, EvalReference, or EvalCompositeAccess).
* The second, "fixed", is a value (usually EvalFixed or EvalPointer).
@ -132,7 +133,7 @@ public class EvalUtil {
}
/**
* Get the initial value of the given variable, evaluated in the context of
* Returns the initial value of the given variable, evaluated in the context of
* the given activation record.
*/
public static ICPPEvaluation getVariableValue(ICPPVariable variable, ActivationRecord record) {

View file

@ -32,7 +32,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution;
import org.eclipse.cdt.internal.core.dom.parser.cpp.InstantiationContext;
import org.eclipse.core.runtime.CoreException;
public class ExecDeclarator implements ICPPExecution {
public final class ExecDeclarator implements ICPPExecution {
private final ICPPBinding declaredBinding;
private final ICPPEvaluation initializerEval;
@ -69,16 +69,17 @@ public class ExecDeclarator implements ICPPExecution {
ICPPEvaluation computedInitializerEval = initializerEval.computeForFunctionCall(record, context.recordStep());
//if a compositevalue with only one member is initialized with an initializer list
//it evaluates to a EvalFixed with a Value instead of a CompositeValue because the initializer list
//doesn't know that it is initializing a composite.
// If a composite value with only one member is initialized with an initializer list,
// it evaluates to a EvalFixed with a Value instead of a CompositeValue because the initializer list
// doesn't know that it is initializing a composite.
IType nestedType = SemanticUtil.getNestedType(type, TDEF | REF | CVTYPE);
if (isClassType(nestedType) && computedInitializerEval instanceof EvalFixed) {
EvalFixed evalFixed = (EvalFixed) computedInitializerEval;
IValue val = evalFixed.getValue();
if (!(val instanceof CompositeValue)) {
CompositeValue compVal = new CompositeValue(initializerEval, new ICPPEvaluation[]{evalFixed});
computedInitializerEval = new EvalFixed(type, computedInitializerEval.getValueCategory(context.getPoint()), compVal);
computedInitializerEval =
new EvalFixed(type, computedInitializerEval.getValueCategory(context.getPoint()), compVal);
}
}
@ -93,7 +94,8 @@ public class ExecDeclarator implements ICPPExecution {
ICPPEvaluation defaultValue = new EvalTypeId(type, context.getPoint(), false, new ICPPEvaluation[]{});
return new EvalFixed(type, defaultValue.getValueCategory(context.getPoint()), defaultValue.getValue(context.getPoint()));
} else {
return new EvalFixed(type, computedInitializerEval.getValueCategory(context.getPoint()), computedInitializerEval.getValue(context.getPoint()));
return new EvalFixed(type, computedInitializerEval.getValueCategory(context.getPoint()),
computedInitializerEval.getValue(context.getPoint()));
}
}
@ -109,7 +111,8 @@ public class ExecDeclarator implements ICPPExecution {
return initialValue;
}
private ICPPEvaluation createReferenceValue(ActivationRecord record, ConstexprEvaluationContext context, ICPPEvaluation computedInitializerEval) {
private ICPPEvaluation createReferenceValue(ActivationRecord record, ConstexprEvaluationContext context,
ICPPEvaluation computedInitializerEval) {
ICPPEvaluation initValue = initializerEval;
if (!(initValue instanceof EvalBinding)) {
initValue = initializerEval.getValue(context.getPoint()).getSubValue(0);
@ -124,7 +127,8 @@ public class ExecDeclarator implements ICPPExecution {
}
}
private ICPPEvaluation createPointerValue(ActivationRecord record, ConstexprEvaluationContext context, ICPPEvaluation computedInitializerEval) {
private ICPPEvaluation createPointerValue(ActivationRecord record, ConstexprEvaluationContext context,
ICPPEvaluation computedInitializerEval) {
ICPPEvaluation initValue = initializerEval.getValue(context.getPoint()).getSubValue(0);
if (isPointerToArray(initValue, context)) {
EvalCompositeAccess arrayPointer = new EvalCompositeAccess(computedInitializerEval, 0);
@ -148,15 +152,18 @@ public class ExecDeclarator implements ICPPExecution {
return eval.getType(context.getPoint()) instanceof IArrayType;
}
private static ICPPEvaluation createReferenceFromBinding(ActivationRecord record, ConstexprEvaluationContext context, EvalBinding evalBinding) {
private static ICPPEvaluation createReferenceFromBinding(ActivationRecord record,
ConstexprEvaluationContext context, EvalBinding evalBinding) {
return new EvalReference(record, evalBinding.getBinding(), context.getPoint());
}
private static ICPPEvaluation createReferenceFromCompositeAccess(ActivationRecord record, ConstexprEvaluationContext context, EvalCompositeAccess evalCompAccess) {
private static ICPPEvaluation createReferenceFromCompositeAccess(ActivationRecord record,
ConstexprEvaluationContext context, EvalCompositeAccess evalCompAccess) {
return new EvalReference(record, evalCompAccess, context.getPoint());
}
private static ICPPEvaluation createPointerFromCompositeAccess(ActivationRecord record, ConstexprEvaluationContext context, EvalCompositeAccess evalCompAccess) {
private static ICPPEvaluation createPointerFromCompositeAccess(ActivationRecord record,
ConstexprEvaluationContext context, EvalCompositeAccess evalCompAccess) {
return new EvalPointer(record, evalCompAccess, context.getPoint());
}
@ -197,10 +204,12 @@ public class ExecDeclarator implements ICPPExecution {
ICPPVariable declaredVariable = (ICPPVariable) declaredBinding;
newDeclaredBinding = CPPTemplates.createVariableSpecialization(context, declaredVariable);
} else {
newDeclaredBinding = (ICPPBinding)CPPTemplates.createSpecialization(context.getContextSpecialization(), declaredBinding, context.getPoint());
newDeclaredBinding = (ICPPBinding)CPPTemplates.createSpecialization(context.getContextSpecialization(),
declaredBinding, context.getPoint());
}
ICPPEvaluation newInitializerEval = initializerEval != null ? initializerEval.instantiate(context, maxDepth) : null;
ICPPEvaluation newInitializerEval =
initializerEval == null ? null : initializerEval.instantiate(context, maxDepth);
return new ExecDeclarator(newDeclaredBinding, newInitializerEval);
}