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

Bug 512262 - Remove the unnecessary ICPPEvaluationOwner interface

This also fixes some ClassCastExceptions caused by types which
implemented ICPPASTInitializerClause but not ICPPEvaluationOwner.

Change-Id: Ie624865ebe476fe760dc28e02b6aef8a43b4c621
This commit is contained in:
Nathan Ridge 2017-02-16 00:25:45 -05:00 committed by Gerrit Code Review @ Eclipse.org
parent ad845e6c3a
commit 2cd2500957
46 changed files with 105 additions and 118 deletions

View file

@ -40,7 +40,6 @@ import org.eclipse.cdt.internal.core.dom.parser.CStringValue;
import org.eclipse.cdt.internal.core.dom.parser.FloatingPointValue; import org.eclipse.cdt.internal.core.dom.parser.FloatingPointValue;
import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser; import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.core.parser.ParserException;
import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor; import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
@ -102,7 +101,7 @@ public class TestBase extends IndexBindingResolutionTestBase {
private IValue getValue() throws Exception { private IValue getValue() throws Exception {
ICPPASTInitializerClause point = getLastDeclarationInitializer(); ICPPASTInitializerClause point = getLastDeclarationInitializer();
ICPPEvaluation evaluation = ((ICPPEvaluationOwner) point).getEvaluation(); ICPPEvaluation evaluation = point.getEvaluation();
return evaluation.getValue(point); return evaluation.getValue(point);
} }

View file

@ -57,6 +57,7 @@ import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTBinaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTBinaryExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionCallExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
@ -64,7 +65,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.SizeAndAlignment; import org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.SizeAndAlignment;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
@ -83,8 +83,8 @@ public class ValueFactory {
return val; return val;
} }
if (expr instanceof ICPPEvaluationOwner) { if (expr instanceof ICPPASTInitializerClause) {
ICPPEvaluation evaluation = ((ICPPEvaluationOwner) expr).getEvaluation(); ICPPEvaluation evaluation = ((ICPPASTInitializerClause) expr).getEvaluation();
return evaluation.getValue(expr); return evaluation.getValue(expr);
} }
return IntegralValue.UNKNOWN; return IntegralValue.UNKNOWN;
@ -614,8 +614,8 @@ public class ValueFactory {
return val.numberValue(); return val.numberValue();
} }
if (expr instanceof ICPPEvaluationOwner) { if (expr instanceof ICPPASTInitializerClause) {
ICPPEvaluation eval = ((ICPPEvaluationOwner) expr).getEvaluation(); ICPPEvaluation eval = ((ICPPASTInitializerClause) expr).getEvaluation();
if (eval.isConstantExpression(expr) && !eval.isValueDependent()) if (eval.isConstantExpression(expr) && !eval.isValueDependent())
return eval.getValue(expr).numberValue(); return eval.getValue(expr).numberValue();
} }

View file

@ -51,7 +51,6 @@ import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTRangeBasedForStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTRangeBasedForStatement;
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName; import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
/** /**
@ -214,7 +213,7 @@ public abstract class VariableReadWriteFlags {
private IType getArgumentType(IASTInitializerClause argument) { private IType getArgumentType(IASTInitializerClause argument) {
if (argument instanceof ICPPASTInitializerClause) { if (argument instanceof ICPPASTInitializerClause) {
return ((ICPPEvaluationOwner) argument).getEvaluation().getType(argument); return ((ICPPASTInitializerClause) argument).getEvaluation().getType(argument);
} else if (argument instanceof IASTExpression) { } else if (argument instanceof IASTExpression) {
return ((IASTExpression) argument).getExpressionType(); return ((IASTExpression) argument).getExpressionType();
} }

View file

@ -32,7 +32,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinary;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTArraySubscriptExpression extends ASTNode public class CPPASTArraySubscriptExpression extends ASTNode
implements ICPPASTArraySubscriptExpression, IASTAmbiguityParent, ICPPEvaluationOwner { implements ICPPASTArraySubscriptExpression, IASTAmbiguityParent {
private ICPPASTExpression arrayExpression; private ICPPASTExpression arrayExpression;
private ICPPASTInitializerClause subscriptExp; private ICPPASTInitializerClause subscriptExp;
private ICPPEvaluation evaluation; private ICPPEvaluation evaluation;
@ -196,8 +196,8 @@ public class CPPASTArraySubscriptExpression extends ASTNode
if (arrayExpression == null || subscriptExp == null) if (arrayExpression == null || subscriptExp == null)
return EvalFixed.INCOMPLETE; return EvalFixed.INCOMPLETE;
return new EvalBinary(EvalBinary.op_arrayAccess, return new EvalBinary(EvalBinary.op_arrayAccess,
((ICPPEvaluationOwner) arrayExpression).getEvaluation(), arrayExpression.getEvaluation(),
((ICPPEvaluationOwner) subscriptExp).getEvaluation(), subscriptExp.getEvaluation(),
this); this);
} }

View file

@ -36,7 +36,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinary;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTBinaryExpression extends ASTNode implements ICPPASTBinaryExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTBinaryExpression extends ASTNode implements ICPPASTBinaryExpression, IASTAmbiguityParent {
private int fOperator; private int fOperator;
private ICPPASTExpression fOperand1; private ICPPASTExpression fOperand1;
private ICPPASTInitializerClause fOperand2; private ICPPASTInitializerClause fOperand2;
@ -280,8 +280,8 @@ public class CPPASTBinaryExpression extends ASTNode implements ICPPASTBinaryExpr
if (fOperand1 == null || fOperand2 == null) if (fOperand1 == null || fOperand2 == null)
return EvalFixed.INCOMPLETE; return EvalFixed.INCOMPLETE;
ICPPEvaluation eval1 = ((ICPPEvaluationOwner) fOperand1).getEvaluation(); ICPPEvaluation eval1 = fOperand1.getEvaluation();
ICPPEvaluation eval2 = ((ICPPEvaluationOwner) fOperand2).getEvaluation(); ICPPEvaluation eval2 = fOperand2.getEvaluation();
return new EvalBinary(fOperator, eval1, eval2, this); return new EvalBinary(fOperator, eval1, eval2, this);
} }

View file

@ -25,7 +25,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinaryTypeId; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinaryTypeId;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTBinaryTypeIdExpression extends ASTNode implements ICPPASTExpression, IASTBinaryTypeIdExpression, ICPPEvaluationOwner { public class CPPASTBinaryTypeIdExpression extends ASTNode implements ICPPASTExpression, IASTBinaryTypeIdExpression {
private Operator fOperator; private Operator fOperator;
private IASTTypeId fOperand1; private IASTTypeId fOperand1;
private IASTTypeId fOperand2; private IASTTypeId fOperand2;

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; import org.eclipse.cdt.core.dom.ast.IASTCaseStatement;
import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecCase; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecCase;
/** /**
@ -93,7 +94,7 @@ public class CPPASTCaseStatement extends CPPASTAttributeOwner implements IASTCas
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner caseExpr = (ICPPEvaluationOwner) getExpression(); ICPPASTExpression caseExpr = (ICPPASTExpression) getExpression();
ICPPEvaluation caseExprEval = caseExpr.getEvaluation(); ICPPEvaluation caseExprEval = caseExpr.getEvaluation();
return new ExecCase(caseExprEval); return new ExecCase(caseExprEval);
} }

View file

@ -33,7 +33,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId;
/** /**
* Cast expression for C++ * Cast expression for C++
*/ */
public class CPPASTCastExpression extends ASTNode implements ICPPASTCastExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTCastExpression extends ASTNode implements ICPPASTCastExpression, IASTAmbiguityParent {
private int fOperator; private int fOperator;
private ICPPASTExpression fOperand; private ICPPASTExpression fOperand;
private IASTTypeId fTypeId; private IASTTypeId fTypeId;
@ -167,7 +167,7 @@ public class CPPASTCastExpression extends ASTNode implements ICPPASTCastExpressi
if (type == null || type instanceof IProblemType) if (type == null || type instanceof IProblemType)
return EvalFixed.INCOMPLETE; return EvalFixed.INCOMPLETE;
return new EvalTypeId(type, this, false, ((ICPPEvaluationOwner) fOperand).getEvaluation()); return new EvalTypeId(type, this, false, fOperand.getEvaluation());
} }
@Override @Override

View file

@ -31,7 +31,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
* Gnu-extension: ({ ... }) * Gnu-extension: ({ ... })
*/ */
public class CPPASTCompoundStatementExpression extends ASTNode public class CPPASTCompoundStatementExpression extends ASTNode
implements IGNUASTCompoundStatementExpression, ICPPASTExpression, ICPPEvaluationOwner { implements IGNUASTCompoundStatementExpression, ICPPASTExpression {
private IASTCompoundStatement fStatement; private IASTCompoundStatement fStatement;
private ICPPEvaluation fEval; private ICPPEvaluation fEval;
private IASTImplicitDestructorName[] fImplicitDestructorNames; private IASTImplicitDestructorName[] fImplicitDestructorNames;
@ -79,8 +79,8 @@ public class CPPASTCompoundStatementExpression extends ASTNode
IASTStatement st = statements[statements.length - 1]; IASTStatement st = statements[statements.length - 1];
if (st instanceof IASTExpressionStatement) { if (st instanceof IASTExpressionStatement) {
IASTExpressionStatement exprStmt = (IASTExpressionStatement) st; IASTExpressionStatement exprStmt = (IASTExpressionStatement) st;
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) exprStmt.getExpression(); ICPPASTExpression expr = (ICPPASTExpression) exprStmt.getExpression();
fEval= new EvalCompoundStatementExpression(evalOwner.getEvaluation(), this); fEval= new EvalCompoundStatementExpression(expr.getEvaluation(), this);
} }
} }
} }

View file

@ -29,7 +29,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalConditional;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTConditionalExpression extends ASTNode public class CPPASTConditionalExpression extends ASTNode
implements IASTConditionalExpression, ICPPASTExpression, IASTAmbiguityParent, ICPPEvaluationOwner { implements IASTConditionalExpression, ICPPASTExpression, IASTAmbiguityParent {
private ICPPASTExpression fCondition; private ICPPASTExpression fCondition;
private ICPPASTExpression fPositive; private ICPPASTExpression fPositive;
private ICPPASTExpression fNegative; private ICPPASTExpression fNegative;
@ -179,9 +179,9 @@ public class CPPASTConditionalExpression extends ASTNode
if (fCondition == null || fNegative == null) { if (fCondition == null || fNegative == null) {
fEval= EvalFixed.INCOMPLETE; fEval= EvalFixed.INCOMPLETE;
} else { } else {
final ICPPEvaluation condEval = ((ICPPEvaluationOwner) fCondition).getEvaluation(); final ICPPEvaluation condEval = fCondition.getEvaluation();
final ICPPEvaluation posEval = fPositive == null ? null : ((ICPPEvaluationOwner) fPositive).getEvaluation(); final ICPPEvaluation posEval = fPositive == null ? null : fPositive.getEvaluation();
final ICPPEvaluation negEval = ((ICPPEvaluationOwner) fNegative).getEvaluation(); final ICPPEvaluation negEval = fNegative.getEvaluation();
fEval= new EvalConditional(condEval, posEval, negEval, fEval= new EvalConditional(condEval, posEval, negEval,
isThrowExpression(fPositive), isThrowExpression(fNegative), this); isThrowExpression(fPositive), isThrowExpression(fNegative), this);
} }

View file

@ -57,7 +57,7 @@ public class CPPASTDecltypeSpecifier extends ASTNode
StringBuilder buffer = new StringBuilder(); StringBuilder buffer = new StringBuilder();
buffer.append(Keywords.cDECLTYPE); buffer.append(Keywords.cDECLTYPE);
buffer.append(Keywords.cpLPAREN); buffer.append(Keywords.cpLPAREN);
buffer.append(((ICPPEvaluationOwner) fDecltypeExpression).getEvaluation().getSignature()); buffer.append(fDecltypeExpression.getEvaluation().getSignature());
buffer.append(Keywords.cpRPAREN); buffer.append(Keywords.cpRPAREN);
final int len = buffer.length(); final int len = buffer.length();
fSignature = new char[len]; fSignature = new char[len];

View file

@ -33,7 +33,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.DestructorCallColl
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTDeleteExpression extends ASTNode implements ICPPASTDeleteExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTDeleteExpression extends ASTNode implements ICPPASTDeleteExpression, IASTAmbiguityParent {
private static final ICPPEvaluation EVALUATION = new EvalFixed(CPPSemantics.VOID_TYPE, PRVALUE, IntegralValue.UNKNOWN); private static final ICPPEvaluation EVALUATION = new EvalFixed(CPPSemantics.VOID_TYPE, PRVALUE, IntegralValue.UNKNOWN);
private IASTExpression operand; private IASTExpression operand;

View file

@ -23,7 +23,7 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
* Implementation for designated initializers. * Implementation for designated initializers.
*/ */
public class CPPASTDesignatedInitializer extends ASTNode public class CPPASTDesignatedInitializer extends ASTNode
implements ICPPASTDesignatedInitializer, IASTAmbiguityParent, ICPPEvaluationOwner { implements ICPPASTDesignatedInitializer, IASTAmbiguityParent {
private ICPPASTInitializerClause rhs; private ICPPASTInitializerClause rhs;
private ICPPASTDesignator[] designators = ICPPASTDesignator.EMPTY_ARRAY; private ICPPASTDesignator[] designators = ICPPASTDesignator.EMPTY_ARRAY;
private int designatorsPos; private int designatorsPos;
@ -83,7 +83,7 @@ public class CPPASTDesignatedInitializer extends ASTNode
@Override @Override
public ICPPEvaluation getEvaluation() { public ICPPEvaluation getEvaluation() {
return ((ICPPEvaluationOwner) rhs).getEvaluation(); return rhs.getEvaluation();
} }
@Override @Override

View file

@ -16,6 +16,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDoStatement;
import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecDo; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecDo;
@ -120,7 +121,7 @@ public class CPPASTDoStatement extends CPPASTAttributeOwner implements IASTDoSta
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner conditionExpr = (ICPPEvaluationOwner) getCondition(); ICPPASTExpression conditionExpr = (ICPPASTExpression) getCondition();
ICPPEvaluation conditionEval = conditionExpr.getEvaluation(); ICPPEvaluation conditionEval = conditionExpr.getEvaluation();
ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(getBody()); ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(getBody());
return new ExecDo(conditionEval, bodyExec); return new ExecDo(conditionEval, bodyExec);

View file

@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTImplicitDestructorName;
import org.eclipse.cdt.core.dom.ast.IASTImplicitName; import org.eclipse.cdt.core.dom.ast.IASTImplicitName;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpressionList; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpressionList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.ArrayUtil;
@ -30,7 +31,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.DestructorCallColl
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalComma; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalComma;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTExpressionList extends ASTNode implements ICPPASTExpressionList, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTExpressionList extends ASTNode implements ICPPASTExpressionList, IASTAmbiguityParent {
private IASTExpression[] expressions = new IASTExpression[2]; private IASTExpression[] expressions = new IASTExpression[2];
/** /**
@ -187,7 +188,7 @@ public class CPPASTExpressionList extends ASTNode implements ICPPASTExpressionLi
ICPPEvaluation[] evals= new ICPPEvaluation[exprs.length]; ICPPEvaluation[] evals= new ICPPEvaluation[exprs.length];
for (int i = 0; i < evals.length; i++) { for (int i = 0; i < evals.length; i++) {
evals[i]= ((ICPPEvaluationOwner) exprs[i]).getEvaluation(); evals[i]= ((ICPPASTExpression) exprs[i]).getEvaluation();
} }
return new EvalComma(evals, this); return new EvalComma(evals, this);
} }

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecExpressionStatement; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecExpressionStatement;
/** /**
@ -93,8 +94,8 @@ public class CPPASTExpressionStatement extends CPPASTAttributeOwner implements I
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) getExpression(); ICPPASTExpression expr = (ICPPASTExpression) getExpression();
ICPPEvaluation exprEval = evalOwner.getEvaluation(); ICPPEvaluation exprEval = expr.getEvaluation();
return new ExecExpressionStatement(exprEval); return new ExecExpressionStatement(exprEval);
} }
} }

View file

@ -56,7 +56,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalMemberAccess;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
public class CPPASTFieldReference extends ASTNode public class CPPASTFieldReference extends ASTNode
implements ICPPASTFieldReference, IASTAmbiguityParent, ICPPASTCompletionContext, ICPPEvaluationOwner { implements ICPPASTFieldReference, IASTAmbiguityParent, ICPPASTCompletionContext {
private boolean fIsTemplate; private boolean fIsTemplate;
private boolean fIsDeref; private boolean fIsDeref;
private ICPPASTExpression fOwner; private ICPPASTExpression fOwner;
@ -281,7 +281,7 @@ public class CPPASTFieldReference extends ASTNode
} }
private ICPPEvaluation createEvaluation() { private ICPPEvaluation createEvaluation() {
ICPPEvaluation ownerEval = ((ICPPEvaluationOwner) fOwner).getEvaluation(); ICPPEvaluation ownerEval = fOwner.getEvaluation();
if (!ownerEval.isTypeDependent()) { if (!ownerEval.isTypeDependent()) {
IType ownerType= EvalMemberAccess.getFieldOwnerType(ownerEval.getType(this), fIsDeref, this, null, false); IType ownerType= EvalMemberAccess.getFieldOwnerType(ownerEval.getType(this), fIsDeref, this, null, false);
if (ownerType != null) { if (ownerType != null) {

View file

@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTImplicitDestructorName;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTForStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTForStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.DestructorCallCollector; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.DestructorCallCollector;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil;
@ -229,11 +230,11 @@ public class CPPASTForStatement extends CPPASTAttributeOwner implements ICPPASTF
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPExecution initializerExec = EvalUtil.getExecutionFromStatement(getInitializerStatement()); ICPPExecution initializerExec = EvalUtil.getExecutionFromStatement(getInitializerStatement());
ICPPEvaluationOwner conditionExpr = (ICPPEvaluationOwner) getConditionExpression(); ICPPASTExpression conditionExpr = (ICPPASTExpression) getConditionExpression();
ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration(); ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration();
ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null; ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null;
ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null; ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null;
ICPPEvaluationOwner iterationExpr = (ICPPEvaluationOwner) getIterationExpression(); ICPPASTExpression iterationExpr = (ICPPASTExpression) getIterationExpression();
ICPPEvaluation iterationEval = iterationExpr != null ? iterationExpr.getEvaluation() : null; ICPPEvaluation iterationEval = iterationExpr != null ? iterationExpr.getEvaluation() : null;
ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(getBody()); ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(getBody());
return new ExecFor(initializerExec, conditionExprEval, conditionDeclExec, iterationEval, bodyExec); return new ExecFor(initializerExec, conditionExprEval, conditionDeclExec, iterationEval, bodyExec);

View file

@ -34,6 +34,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionCallExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
@ -49,7 +50,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.LookupData; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.LookupData;
public class CPPASTFunctionCallExpression extends ASTNode public class CPPASTFunctionCallExpression extends ASTNode
implements ICPPASTFunctionCallExpression, IASTAmbiguityParent, ICPPEvaluationOwner { implements ICPPASTFunctionCallExpression, IASTAmbiguityParent {
private ICPPASTExpression fFunctionName; private ICPPASTExpression fFunctionName;
private IASTInitializerClause[] fArguments; private IASTInitializerClause[] fArguments;
@ -281,14 +282,14 @@ public class CPPASTFunctionCallExpression extends ASTNode
return conversion; return conversion;
ICPPEvaluation[] args= new ICPPEvaluation[fArguments.length + 1]; ICPPEvaluation[] args= new ICPPEvaluation[fArguments.length + 1];
args[0]= ((ICPPEvaluationOwner) fFunctionName).getEvaluation(); args[0]= fFunctionName.getEvaluation();
for (int i = 1; i < args.length; i++) { for (int i = 1; i < args.length; i++) {
args[i]= ((ICPPEvaluationOwner) fArguments[i - 1]).getEvaluation(); args[i]= ((ICPPASTInitializerClause) fArguments[i - 1]).getEvaluation();
} }
ICPPEvaluation fieldOwnerEval = null; ICPPEvaluation fieldOwnerEval = null;
if (fFunctionName instanceof ICPPASTFieldReference) { if (fFunctionName instanceof ICPPASTFieldReference) {
ICPPASTFieldReference fieldRef = (ICPPASTFieldReference) fFunctionName; ICPPASTFieldReference fieldRef = (ICPPASTFieldReference) fFunctionName;
ICPPEvaluationOwner fieldOwner = (ICPPEvaluationOwner) fieldRef.getFieldOwner(); ICPPASTExpression fieldOwner = fieldRef.getFieldOwner();
fieldOwnerEval = fieldOwner.getEvaluation(); fieldOwnerEval = fieldOwner.getEvaluation();
} }
return new EvalFunctionCall(args, fieldOwnerEval, this); return new EvalFunctionCall(args, fieldOwnerEval, this);
@ -301,7 +302,7 @@ public class CPPASTFunctionCallExpression extends ASTNode
if (b instanceof IType) { if (b instanceof IType) {
ICPPEvaluation[] args= new ICPPEvaluation[fArguments.length]; ICPPEvaluation[] args= new ICPPEvaluation[fArguments.length];
for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) {
args[i]= ((ICPPEvaluationOwner) fArguments[i]).getEvaluation(); args[i]= ((ICPPASTInitializerClause) fArguments[i]).getEvaluation();
} }
return new EvalTypeId((IType) b, this, false, args); return new EvalTypeId((IType) b, this, false, args);

View file

@ -33,7 +33,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.FunctionSetType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
public class CPPASTIdExpression extends ASTNode public class CPPASTIdExpression extends ASTNode
implements IASTIdExpression, ICPPASTExpression, ICPPASTCompletionContext, ICPPEvaluationOwner { implements IASTIdExpression, ICPPASTExpression, ICPPASTCompletionContext {
private IASTName fName; private IASTName fName;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;
private IASTImplicitDestructorName[] fImplicitDestructorNames; private IASTImplicitDestructorName[] fImplicitDestructorNames;

View file

@ -19,6 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTIfStatement;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecIf; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecIf;
@ -220,7 +221,7 @@ public class CPPASTIfStatement extends CPPASTAttributeOwner implements ICPPASTIf
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner conditionExpr = (ICPPEvaluationOwner) getConditionExpression(); ICPPASTExpression conditionExpr = (ICPPASTExpression) getConditionExpression();
ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration(); ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration();
ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null; ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null;
ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null; ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null;

View file

@ -27,7 +27,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalInitList;
/** /**
* e.g.: int a[]= {1,2,3}; * e.g.: int a[]= {1,2,3};
*/ */
public class CPPASTInitializerList extends ASTNode implements ICPPASTInitializerList, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTInitializerList extends ASTNode implements ICPPASTInitializerList, IASTAmbiguityParent {
private static final ICPPASTInitializerClause[] NO_CLAUSES = {}; private static final ICPPASTInitializerClause[] NO_CLAUSES = {};
private ICPPASTInitializerClause[] initializers; private ICPPASTInitializerClause[] initializers;
private int initializersPos= -1; private int initializersPos= -1;

View file

@ -29,7 +29,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
/** /**
* Implementation for lambda expressions. * Implementation for lambda expressions.
*/ */
public class CPPASTLambdaExpression extends ASTNode implements ICPPASTLambdaExpression, ICPPEvaluationOwner { public class CPPASTLambdaExpression extends ASTNode implements ICPPASTLambdaExpression {
private static final ICPPASTCapture[] NO_CAPTURES = {}; private static final ICPPASTCapture[] NO_CAPTURES = {};
private CaptureDefault fCaptureDefault; private CaptureDefault fCaptureDefault;

View file

@ -49,7 +49,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.ExpressionEvaluator.EvalExce
/** /**
* Represents a C++ literal. * Represents a C++ literal.
*/ */
public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralExpression, ICPPEvaluationOwner { public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralExpression {
private static final EvalFixed EVAL_TRUE = new EvalFixed(CPPBasicType.BOOLEAN, PRVALUE, IntegralValue.create(true)); private static final EvalFixed EVAL_TRUE = new EvalFixed(CPPBasicType.BOOLEAN, PRVALUE, IntegralValue.create(true));
private static final EvalFixed EVAL_FALSE = new EvalFixed(CPPBasicType.BOOLEAN, PRVALUE, IntegralValue.create(false)); private static final EvalFixed EVAL_FALSE = new EvalFixed(CPPBasicType.BOOLEAN, PRVALUE, IntegralValue.create(false));
private static final EvalFixed EVAL_NULL_PTR = new EvalFixed(CPPBasicType.NULL_PTR, PRVALUE, IntegralValue.create(0)); private static final EvalFixed EVAL_NULL_PTR = new EvalFixed(CPPBasicType.NULL_PTR, PRVALUE, IntegralValue.create(0));

View file

@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeId;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTNaryTypeIdExpression extends ASTNode implements ICPPASTNaryTypeIdExpression, ICPPEvaluationOwner { public class CPPASTNaryTypeIdExpression extends ASTNode implements ICPPASTNaryTypeIdExpression {
private Operator fOperator; private Operator fOperator;
private ICPPASTTypeId[] fOperands; private ICPPASTTypeId[] fOperands;

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.dom.ast.IArrayType;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
@ -48,7 +49,7 @@ import org.eclipse.core.runtime.Assert;
/** /**
* Represents a new expression [expr.new]. * Represents a new expression [expr.new].
*/ */
public class CPPASTNewExpression extends ASTNode implements ICPPASTNewExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTNewExpression extends ASTNode implements ICPPASTNewExpression, IASTAmbiguityParent {
private IASTInitializerClause[] fPlacement; private IASTInitializerClause[] fPlacement;
private IASTTypeId fTypeId; private IASTTypeId fTypeId;
private IASTInitializer fInitializer; private IASTInitializer fInitializer;
@ -293,7 +294,7 @@ public class CPPASTNewExpression extends ASTNode implements ICPPASTNewExpression
IASTInitializerClause[] args = ((ICPPASTConstructorInitializer) fInitializer).getArguments(); IASTInitializerClause[] args = ((ICPPASTConstructorInitializer) fInitializer).getArguments();
arguments= new ICPPEvaluation[args.length]; arguments= new ICPPEvaluation[args.length];
for (int i = 0; i < arguments.length; i++) { for (int i = 0; i < arguments.length; i++) {
arguments[i] = ((ICPPEvaluationOwner) args[i]).getEvaluation(); arguments[i] = ((ICPPASTInitializerClause) args[i]).getEvaluation();
} }
} }
fEvaluation = EvalTypeId.createForNewExpression(t, this, false, arguments); fEvaluation = EvalTypeId.createForNewExpression(t, this, false, arguments);

View file

@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTImplicitDestructorName; import org.eclipse.cdt.core.dom.ast.IASTImplicitDestructorName;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPackExpansionExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPackExpansionExpression;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
@ -25,7 +26,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalParameterPack;
/** /**
* Implementation of pack expansion expression. * Implementation of pack expansion expression.
*/ */
public class CPPASTPackExpansionExpression extends ASTNode implements ICPPASTPackExpansionExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTPackExpansionExpression extends ASTNode implements ICPPASTPackExpansionExpression, IASTAmbiguityParent {
private IASTExpression fPattern; private IASTExpression fPattern;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;
@ -63,7 +64,7 @@ public class CPPASTPackExpansionExpression extends ASTNode implements ICPPASTPac
@Override @Override
public ICPPEvaluation getEvaluation() { public ICPPEvaluation getEvaluation() {
if (fEvaluation == null) { if (fEvaluation == null) {
fEvaluation = new EvalParameterPack(((ICPPEvaluationOwner) fPattern).getEvaluation(), this); fEvaluation = new EvalParameterPack(((ICPPASTExpression) fPattern).getEvaluation(), this);
} }
return fEvaluation; return fEvaluation;
} }

View file

@ -22,7 +22,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
public class CPPASTProblemExpression extends CPPASTProblemOwner implements IASTProblemExpression, ICPPASTExpression, ICPPEvaluationOwner { public class CPPASTProblemExpression extends CPPASTProblemOwner implements IASTProblemExpression, ICPPASTExpression {
public CPPASTProblemExpression() { public CPPASTProblemExpression() {
super(); super();

View file

@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IArrayType;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTRangeBasedForStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTRangeBasedForStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
@ -239,7 +240,7 @@ public class CPPASTRangeBasedForStatement extends CPPASTAttributeOwner implement
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ExecSimpleDeclaration declarationExec = (ExecSimpleDeclaration)((ICPPExecutionOwner) fDeclaration).getExecution(); ExecSimpleDeclaration declarationExec = (ExecSimpleDeclaration)((ICPPExecutionOwner) fDeclaration).getExecution();
ICPPEvaluation initClauseEval = ((ICPPEvaluationOwner) fInitClause).getEvaluation(); ICPPEvaluation initClauseEval = ((ICPPASTInitializerClause) fInitClause).getEvaluation();
ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(fBody); ICPPExecution bodyExec = EvalUtil.getExecutionFromStatement(fBody);
IASTImplicitName[] implicitNames = getImplicitNames(); IASTImplicitName[] implicitNames = getImplicitNames();
ICPPFunction begin = null; ICPPFunction begin = null;

View file

@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTInitializerClause; import org.eclipse.cdt.core.dom.ast.IASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; import org.eclipse.cdt.core.dom.ast.IASTReturnStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecIncomplete; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecIncomplete;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecReturn; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecReturn;
@ -106,8 +107,8 @@ public class CPPASTReturnStatement extends CPPASTAttributeOwner implements IASTR
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
if (retValue instanceof ICPPEvaluationOwner) { if (retValue instanceof ICPPASTInitializerClause) {
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) retValue; ICPPASTInitializerClause evalOwner = (ICPPASTInitializerClause) retValue;
return new ExecReturn(evalOwner.getEvaluation()); return new ExecReturn(evalOwner.getEvaluation());
} }
return ExecIncomplete.INSTANCE; return ExecIncomplete.INSTANCE;

View file

@ -34,7 +34,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId;
public class CPPASTSimpleTypeConstructorExpression extends ASTNode public class CPPASTSimpleTypeConstructorExpression extends ASTNode
implements ICPPASTSimpleTypeConstructorExpression, IASTImplicitNameOwner, ICPPEvaluationOwner { implements ICPPASTSimpleTypeConstructorExpression, IASTImplicitNameOwner {
private ICPPASTDeclSpecifier fDeclSpec; private ICPPASTDeclSpecifier fDeclSpec;
private IASTInitializer fInitializer; private IASTInitializer fInitializer;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;

View file

@ -19,6 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompoundStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSwitchStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSwitchStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecSimpleDeclaration; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecSimpleDeclaration;
@ -161,7 +162,7 @@ public class CPPASTSwitchStatement extends CPPASTAttributeOwner implements ICPPA
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner controllerExpr = (ICPPEvaluationOwner) getControllerExpression(); ICPPASTExpression controllerExpr = (ICPPASTExpression) getControllerExpression();
ICPPExecutionOwner controllerDecl = (ICPPExecutionOwner) getControllerDeclaration(); ICPPExecutionOwner controllerDecl = (ICPPExecutionOwner) getControllerDeclaration();
ICPPEvaluation controllerExprEval = controllerExpr != null ? controllerExpr.getEvaluation() : null; ICPPEvaluation controllerExprEval = controllerExpr != null ? controllerExpr.getEvaluation() : null;
ExecSimpleDeclaration controllerDeclExec = controllerDecl != null ? (ExecSimpleDeclaration) controllerDecl.getExecution() : null; ExecSimpleDeclaration controllerDeclExec = controllerDecl != null ? (ExecSimpleDeclaration) controllerDecl.getExecution() : null;

View file

@ -24,7 +24,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUnaryTypeID; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUnaryTypeID;
public class CPPASTTypeIdExpression extends ASTNode implements ICPPASTTypeIdExpression, ICPPEvaluationOwner { public class CPPASTTypeIdExpression extends ASTNode implements ICPPASTTypeIdExpression {
private int fOperator; private int fOperator;
private IASTTypeId fTypeId; private IASTTypeId fTypeId;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;

View file

@ -32,7 +32,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId;
* Type id initializer expression for C++, type-id { initializer } * Type id initializer expression for C++, type-id { initializer }
*/ */
public class CPPASTTypeIdInitializerExpression extends ASTNode public class CPPASTTypeIdInitializerExpression extends ASTNode
implements IASTTypeIdInitializerExpression, ICPPASTExpression, ICPPEvaluationOwner { implements IASTTypeIdInitializerExpression, ICPPASTExpression {
private IASTTypeId fTypeId; private IASTTypeId fTypeId;
private IASTInitializer fInitializer; private IASTInitializer fInitializer;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;
@ -146,7 +146,7 @@ public class CPPASTTypeIdInitializerExpression extends ASTNode
if (type == null || type instanceof IProblemType) if (type == null || type instanceof IProblemType)
return EvalFixed.INCOMPLETE; return EvalFixed.INCOMPLETE;
return new EvalTypeId(type, this, false, ((ICPPEvaluationOwner) initializer).getEvaluation()); return new EvalTypeId(type, this, false, ((ICPPASTInitializerClause) initializer).getEvaluation());
} }
@Override @Override

View file

@ -41,7 +41,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.FunctionSetType;
/** /**
* Unary expression in c++ * Unary expression in c++
*/ */
public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpression, IASTAmbiguityParent, ICPPEvaluationOwner { public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpression, IASTAmbiguityParent {
private int fOperator; private int fOperator;
private ICPPASTExpression fOperand; private ICPPASTExpression fOperand;
private ICPPEvaluation fEvaluation; private ICPPEvaluation fEvaluation;
@ -196,7 +196,7 @@ public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpres
if (fOperand == null) if (fOperand == null)
return EvalFixed.INCOMPLETE; return EvalFixed.INCOMPLETE;
final ICPPEvaluation nestedEval = ((ICPPEvaluationOwner) fOperand).getEvaluation(); final ICPPEvaluation nestedEval = fOperand.getEvaluation();
if (fOperator == op_bracketedPrimary) if (fOperator == op_bracketedPrimary)
return nestedEval; return nestedEval;

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecSimpleDeclaration; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecSimpleDeclaration;
@ -158,7 +159,7 @@ public class CPPASTWhileStatement extends CPPASTAttributeOwner implements ICPPAS
@Override @Override
public ICPPExecution getExecution() { public ICPPExecution getExecution() {
ICPPEvaluationOwner conditionExpr = (ICPPEvaluationOwner) getCondition(); ICPPASTExpression conditionExpr = (ICPPASTExpression) getCondition();
ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration(); ICPPExecutionOwner conditionDecl = (ICPPExecutionOwner) getConditionDeclaration();
ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null; ICPPEvaluation conditionExprEval = conditionExpr != null ? conditionExpr.getEvaluation() : null;
ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null; ExecSimpleDeclaration conditionDeclExec = conditionDecl != null ? (ExecSimpleDeclaration) conditionDecl.getExecution() : null;

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
@ -45,8 +46,8 @@ public class CPPConstructor extends CPPMethod implements ICPPConstructor {
private static ICPPEvaluation getMemberEvaluation(ICPPField member, ICPPASTConstructorChainInitializer chainInitializer, IASTNode point) { private static ICPPEvaluation getMemberEvaluation(ICPPField member, ICPPASTConstructorChainInitializer chainInitializer, IASTNode point) {
final IASTInitializer initializer = chainInitializer.getInitializer(); final IASTInitializer initializer = chainInitializer.getInitializer();
if (initializer instanceof ICPPEvaluationOwner) { if (initializer instanceof ICPPASTInitializerClause) {
return ((ICPPEvaluationOwner) initializer).getEvaluation(); return ((ICPPASTInitializerClause) initializer).getEvaluation();
} else if (initializer instanceof ICPPASTConstructorInitializer) { } else if (initializer instanceof ICPPASTConstructorInitializer) {
IBinding constructor = CPPSemantics.findImplicitlyCalledConstructor(chainInitializer); IBinding constructor = CPPSemantics.findImplicitlyCalledConstructor(chainInitializer);
if (constructor == null) { if (constructor == null) {

View file

@ -35,6 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
@ -302,14 +303,13 @@ public class CPPVariable extends PlatformObject implements ICPPInternalVariable
return new EvalConstructor(getType(), constructor, arguments, declarator); return new EvalConstructor(getType(), constructor, arguments, declarator);
} else if (initializer instanceof IASTEqualsInitializer) { } else if (initializer instanceof IASTEqualsInitializer) {
IASTEqualsInitializer equalsInitializer = (IASTEqualsInitializer) initializer; IASTEqualsInitializer equalsInitializer = (IASTEqualsInitializer) initializer;
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) equalsInitializer.getInitializerClause(); ICPPASTInitializerClause clause = (ICPPASTInitializerClause) equalsInitializer.getInitializerClause();
return evalOwner.getEvaluation(); return clause.getEvaluation();
} else if (initializer instanceof ICPPASTInitializerList) { } else if (initializer instanceof ICPPASTInitializerList) {
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) initializer; return ((ICPPASTInitializerClause) initializer).getEvaluation();
return evalOwner.getEvaluation();
} else if (initializer instanceof ICPPASTConstructorInitializer) { } else if (initializer instanceof ICPPASTConstructorInitializer) {
ICPPASTConstructorInitializer ctorInitializer = (ICPPASTConstructorInitializer) initializer; ICPPASTConstructorInitializer ctorInitializer = (ICPPASTConstructorInitializer) initializer;
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) ctorInitializer.getArguments()[0]; ICPPASTInitializerClause evalOwner = (ICPPASTInitializerClause) ctorInitializer.getArguments()[0];
return evalOwner.getEvaluation(); return evalOwner.getEvaluation();
} else if (initializer == null) { } else if (initializer == null) {
return null; return null;

View file

@ -1,16 +0,0 @@
/*******************************************************************************
* Copyright (c) 2016 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
public interface ICPPEvaluationOwner {
/**
* Returns the evaluation object for this expression.
*/
ICPPEvaluation getEvaluation();
}

View file

@ -118,6 +118,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTForStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLambdaExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLambdaExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification;
@ -229,7 +230,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPASTInternalScope;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPClassSpecializationScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPClassSpecializationScope;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalNamespaceScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalNamespaceScope;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
@ -1291,7 +1291,7 @@ public class CPPSemantics {
if (expression instanceof ICPPASTLiteralExpression) { if (expression instanceof ICPPASTLiteralExpression) {
final ICPPASTLiteralExpression litExpr = (ICPPASTLiteralExpression) expression; final ICPPASTLiteralExpression litExpr = (ICPPASTLiteralExpression) expression;
if (litExpr.getKind() == IASTLiteralExpression.lk_this) { if (litExpr.getKind() == IASTLiteralExpression.lk_this) {
final IType thisType = SemanticUtil.getNestedType(((ICPPEvaluationOwner) litExpr).getEvaluation().getType(litExpr), TDEF | ALLCVQ | PTR | ARRAY | MPTR | REF); final IType thisType = SemanticUtil.getNestedType(litExpr.getEvaluation().getType(litExpr), TDEF | ALLCVQ | PTR | ARRAY | MPTR | REF);
if (thisType instanceof ICPPUnknownBinding || thisType instanceof ICPPTemplateDefinition) { if (thisType instanceof ICPPUnknownBinding || thisType instanceof ICPPTemplateDefinition) {
result[0]= true; result[0]= true;
return PROCESS_ABORT; return PROCESS_ABORT;
@ -3177,7 +3177,7 @@ public class CPPSemantics {
// If we're in a dependent context, we don't have enough information // If we're in a dependent context, we don't have enough information
// to resolve the function set. // to resolve the function set.
if (((ICPPEvaluationOwner) parent).getEvaluation().isTypeDependent()) { if (((ICPPASTExpression) parent).getEvaluation().isTypeDependent()) {
return CPPDeferredFunction.createForCandidates(functionSet.getBindings()); return CPPDeferredFunction.createForCandidates(functionSet.getBindings());
} }
} }
@ -3431,7 +3431,7 @@ public class CPPSemantics {
public static ICPPFunction findOverloadedOperator(ICPPASTNewExpression expr) { public static ICPPFunction findOverloadedOperator(ICPPASTNewExpression expr) {
OverloadableOperator op = OverloadableOperator.fromNewExpression(expr); OverloadableOperator op = OverloadableOperator.fromNewExpression(expr);
final ICPPEvaluation evaluation = ((ICPPEvaluationOwner) expr).getEvaluation(); final ICPPEvaluation evaluation = expr.getEvaluation();
if (evaluation.isTypeDependent()) if (evaluation.isTypeDependent())
return null; return null;
@ -3448,8 +3448,7 @@ public class CPPSemantics {
args[1]= arg2; args[1]= arg2;
int i= 2; int i= 2;
for (IASTInitializerClause p : placement) { for (IASTInitializerClause p : placement) {
final ICPPEvaluationOwner arg = (ICPPEvaluationOwner) p; final ICPPEvaluation a = ((ICPPASTInitializerClause) p).getEvaluation();
final ICPPEvaluation a = arg.getEvaluation();
if (a.isTypeDependent()) if (a.isTypeDependent())
return null; return null;
args[i++]= a; args[i++]= a;
@ -3467,7 +3466,7 @@ public class CPPSemantics {
ICPPEvaluation[] args = { ICPPEvaluation[] args = {
new EvalFixed(type, LVALUE, IntegralValue.UNKNOWN), new EvalFixed(type, LVALUE, IntegralValue.UNKNOWN),
((ICPPEvaluationOwner) expr.getOperand()).getEvaluation() ((ICPPASTExpression) expr.getOperand()).getEvaluation()
}; };
return findOverloadedOperator(expr, null, args, type, op, LookupMode.GLOBALS_IF_NO_MEMBERS); return findOverloadedOperator(expr, null, args, type, op, LookupMode.GLOBALS_IF_NO_MEMBERS);
} }
@ -3555,7 +3554,7 @@ public class CPPSemantics {
if (initializer instanceof IASTEqualsInitializer) { if (initializer instanceof IASTEqualsInitializer) {
// Copy initialization. // Copy initialization.
IASTEqualsInitializer eqInit= (IASTEqualsInitializer) initializer; IASTEqualsInitializer eqInit= (IASTEqualsInitializer) initializer;
ICPPEvaluationOwner evalOwner = (ICPPEvaluationOwner) eqInit.getInitializerClause(); ICPPASTInitializerClause evalOwner = (ICPPASTInitializerClause) eqInit.getInitializerClause();
final ICPPEvaluation evaluation = evalOwner.getEvaluation(); final ICPPEvaluation evaluation = evalOwner.getEvaluation();
IType sourceType= evaluation.getType(typeId); IType sourceType= evaluation.getType(typeId);
ValueCategory isLValue= evaluation.getValueCategory(typeId); ValueCategory isLValue= evaluation.getValueCategory(typeId);
@ -3576,7 +3575,7 @@ public class CPPSemantics {
} }
} else if (initializer instanceof ICPPASTInitializerList) { } else if (initializer instanceof ICPPASTInitializerList) {
// List initialization. // List initialization.
ICPPEvaluation eval= ((ICPPEvaluationOwner) initializer).getEvaluation(); ICPPEvaluation eval= ((ICPPASTInitializerClause) initializer).getEvaluation();
if (eval instanceof EvalInitList) { if (eval instanceof EvalInitList) {
Cost c= Conversions.listInitializationSequence((EvalInitList) eval, type, UDCMode.ALLOWED, true, typeId); Cost c= Conversions.listInitializationSequence((EvalInitList) eval, type, UDCMode.ALLOWED, true, typeId);
if (c.converts()) { if (c.converts()) {

View file

@ -183,7 +183,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPASTInternalTemplateDecla
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPComputableFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPComputableFunction;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInstanceCache; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInstanceCache;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
@ -2206,7 +2205,7 @@ public class CPPTemplates {
result[i]= new CPPTemplateTypeArgument(CPPVisitor.createType((IASTTypeId) arg)); result[i]= new CPPTemplateTypeArgument(CPPVisitor.createType((IASTTypeId) arg));
} else if (arg instanceof ICPPASTExpression) { } else if (arg instanceof ICPPASTExpression) {
ICPPASTExpression expr= (ICPPASTExpression) arg; ICPPASTExpression expr= (ICPPASTExpression) arg;
result[i]= new CPPTemplateNonTypeArgument(((ICPPEvaluationOwner) expr).getEvaluation(), expr); result[i]= new CPPTemplateNonTypeArgument(expr.getEvaluation(), expr);
} else if (arg instanceof ICPPASTAmbiguousTemplateArgument) { } else if (arg instanceof ICPPASTAmbiguousTemplateArgument) {
IProblemBinding problem = new ProblemBinding(id, IProblemBinding.SEMANTIC_INVALID_TEMPLATE_ARGUMENTS); IProblemBinding problem = new ProblemBinding(id, IProblemBinding.SEMANTIC_INVALID_TEMPLATE_ARGUMENTS);
throw new DOMException(problem); throw new DOMException(problem);

View file

@ -110,6 +110,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTEnumerationSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldDesignator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldDesignator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
@ -221,7 +222,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariableTemplate; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariableTemplate;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType;
@ -2018,7 +2018,7 @@ public class CPPVisitor extends ASTQueries {
IASTInitializerClause[] clauses = ((IASTInitializerList) clause).getClauses(); IASTInitializerClause[] clauses = ((IASTInitializerList) clause).getClauses();
sizeValue = IntegralValue.create(clauses.length); sizeValue = IntegralValue.create(clauses.length);
} else if (clause instanceof ICPPASTLiteralExpression) { } else if (clause instanceof ICPPASTLiteralExpression) {
ICPPEvaluation value = ((ICPPEvaluationOwner) clause).getEvaluation(); ICPPEvaluation value = ((ICPPASTExpression) clause).getEvaluation();
IType valueType = value.getType(clause); IType valueType = value.getType(clause);
if (valueType instanceof IArrayType) { if (valueType instanceof IArrayType) {
sizeValue = ((IArrayType) valueType).getSize(); sizeValue = ((IArrayType) valueType).getSize();
@ -2223,7 +2223,7 @@ public class CPPVisitor extends ASTQueries {
} }
} }
type = decorateType(type, declSpec, declarator); type = decorateType(type, declSpec, declarator);
final ICPPEvaluation evaluation = ((ICPPEvaluationOwner) initClause).getEvaluation(); final ICPPEvaluation evaluation = initClause.getEvaluation();
initType= evaluation.getType(declarator); initType= evaluation.getType(declarator);
valueCat= evaluation.getValueCategory(declarator); valueCat= evaluation.getValueCategory(declarator);
if (initType == null || initType instanceof ISemanticProblem) { if (initType == null || initType instanceof ISemanticProblem) {

View file

@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
@ -42,7 +43,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredFunction;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPExecution;
import org.eclipse.cdt.internal.core.dom.parser.cpp.InstantiationContext; import org.eclipse.cdt.internal.core.dom.parser.cpp.InstantiationContext;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
@ -267,13 +267,8 @@ public final class EvalConstructor extends CPPDependentEvaluation {
private static ICPPEvaluation[] evaluateArguments(IASTInitializerClause... clauses) { private static ICPPEvaluation[] evaluateArguments(IASTInitializerClause... clauses) {
ICPPEvaluation[] args = new ICPPEvaluation[clauses.length]; ICPPEvaluation[] args = new ICPPEvaluation[clauses.length];
for (int i = 0; i < clauses.length; i++) { for (int i = 0; i < clauses.length; i++) {
IASTInitializerClause initializerClause = clauses[i]; ICPPASTInitializerClause clause = (ICPPASTInitializerClause) clauses[i];
if (initializerClause instanceof ICPPEvaluationOwner) { args[i] = clause.getEvaluation();
ICPPEvaluationOwner clause = (ICPPEvaluationOwner) initializerClause;
args[i] = clause.getEvaluation();
} else {
args[i] = EvalFixed.INCOMPLETE;
}
} }
return args; return args;
} }

View file

@ -55,6 +55,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldDesignator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldDesignator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNameSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNameSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
@ -75,7 +76,6 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTranslationUnit;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPCompositeBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPCompositeBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
/** /**
* Context data for IASTName lookup * Context data for IASTName lookup
@ -524,7 +524,7 @@ public class LookupData extends ScopeLookupData {
public void setFunctionArguments(boolean containsImpliedObject, IASTInitializerClause... exprs) { public void setFunctionArguments(boolean containsImpliedObject, IASTInitializerClause... exprs) {
ICPPEvaluation[] evals= new ICPPEvaluation[exprs.length]; ICPPEvaluation[] evals= new ICPPEvaluation[exprs.length];
for (int i = 0; i < evals.length; i++) { for (int i = 0; i < evals.length; i++) {
evals[i]= ((ICPPEvaluationOwner) exprs[i]).getEvaluation(); evals[i]= ((ICPPASTInitializerClause) exprs[i]).getEvaluation();
} }
setFunctionArguments(containsImpliedObject, evals); setFunctionArguments(containsImpliedObject, evals);
} }

View file

@ -84,7 +84,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPQualifierType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
import org.eclipse.cdt.internal.core.index.IIndexScope; import org.eclipse.cdt.internal.core.index.IIndexScope;
@ -874,7 +873,7 @@ public class SemanticUtil {
clause= list.getClauses()[0]; clause= list.getClauses()[0];
break; break;
default: default:
return ((ICPPEvaluationOwner) init).getEvaluation().getValue(init); return ((ICPPASTInitializerList) init).getEvaluation().getValue(init);
} }
} }
@ -883,7 +882,7 @@ public class SemanticUtil {
} }
if (clause instanceof ICPPASTInitializerList) { if (clause instanceof ICPPASTInitializerList) {
return ((ICPPEvaluationOwner) clause).getEvaluation().getValue(clause); return ((ICPPASTInitializerList) clause).getEvaluation().getValue(clause);
} }
return IntegralValue.UNKNOWN; return IntegralValue.UNKNOWN;
} }

View file

@ -37,7 +37,6 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluationOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
import org.eclipse.cdt.internal.qt.core.index.IQMethod; import org.eclipse.cdt.internal.qt.core.index.IQMethod;
@ -142,7 +141,7 @@ public class ASTUtil {
return null; return null;
ICPPASTInitializerClause cppInit = (ICPPASTInitializerClause) init; ICPPASTInitializerClause cppInit = (ICPPASTInitializerClause) init;
ICPPEvaluation eval = ((ICPPEvaluationOwner)cppInit).getEvaluation(); ICPPEvaluation eval = cppInit.getEvaluation();
return eval == null ? null : getBaseType(eval.getType(cppInit)); return eval == null ? null : getBaseType(eval.getType(cppInit));
} }