mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +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:
parent
ad845e6c3a
commit
2cd2500957
46 changed files with 105 additions and 118 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
|
||||||
ICPPEvaluationOwner clause = (ICPPEvaluationOwner) initializerClause;
|
|
||||||
args[i] = clause.getEvaluation();
|
args[i] = clause.getEvaluation();
|
||||||
} else {
|
|
||||||
args[i] = EvalFixed.INCOMPLETE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue