@Override public ICPPTemplateArgument getExpansionPattern() { IType type = fEvaluation.getTypeOrFunctionSet(null); if (type instanceof ICPPParameterPackType) { IType t = ((ICPPParameterPackType) type).getType(); if (t != null) { ICPPEvaluation evaluation; if (fEvaluation instanceof EvalParameterPack) { evaluation = ((EvalParameterPack) fEvaluation).getExpansionPattern(); } else { evaluation = new EvalTypeId(t, fEvaluation.getTemplateDefinition(), fEvaluation); } return new CPPTemplateNonTypeArgument(evaluation, null); } } return null; }
public CPPTemplateNonTypeArgument(ICPPEvaluation evaluation, IASTNode point) { Assert.isNotNull(evaluation); if (evaluation instanceof EvalFixed || point == null || evaluation.isTypeDependent() || evaluation.isValueDependent()) { fEvaluation = evaluation; } else { IValue value = evaluation.getValue(point); // Avoid nesting EvalFixed's as nesting causes the signature to be different. if (value.getEvaluation() instanceof EvalFixed) { fEvaluation = value.getEvaluation(); } else { fEvaluation = new EvalFixed( evaluation.getTypeOrFunctionSet(point), evaluation.getValueCategory(point), value); } } }
@Override public boolean isPackExpansion() { return fEvaluation.getTypeOrFunctionSet(null) instanceof ICPPParameterPackType; }
@Override public IType getTypeOfNonTypeValue() { return fEvaluation.getTypeOrFunctionSet(null); }
@Override public IValue getNonTypeValue() { return fEvaluation.getValue(null); }