mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 299911. Split CPPTemplateArgument class into CPPTemplateTypeArgument
and CPPTemplateNonTypeArgument.
This commit is contained in:
parent
927f0e7082
commit
403732a175
23 changed files with 244 additions and 101 deletions
|
@ -55,7 +55,7 @@ import org.eclipse.cdt.core.index.IIndexBinding;
|
|||
import org.eclipse.cdt.core.index.IIndexMacro;
|
||||
import org.eclipse.cdt.core.index.IndexFilter;
|
||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInstanceCache;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
|
@ -226,7 +226,7 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
|
|||
assertInstance(b1, ICPPInstanceCache.class);
|
||||
|
||||
ICPPInstanceCache ct= (ICPPInstanceCache) b1;
|
||||
ICPPSpecialization inst= ct.getInstance(new ICPPTemplateArgument[]{new CPPTemplateArgument((IType)b0)});
|
||||
ICPPSpecialization inst= ct.getInstance(new ICPPTemplateArgument[]{new CPPTemplateTypeArgument((IType)b0)});
|
||||
assertInstance(inst, ICPPClassType.class);
|
||||
ICPPClassType c2t= (ICPPClassType) inst;
|
||||
ICPPBase[] bases= c2t.getBases();
|
||||
|
|
|
@ -56,7 +56,7 @@ import org.eclipse.cdt.core.index.IIndexBinding;
|
|||
import org.eclipse.cdt.core.index.IndexFilter;
|
||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
|
||||
|
@ -1556,8 +1556,8 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
|
|||
IBinding inst2= CPPTemplates.instantiate(tmplDef, inst.getTemplateArguments(), name);
|
||||
assertSame(inst, inst2);
|
||||
|
||||
IBinding charInst1= CPPTemplates.instantiate(tmplDef, new ICPPTemplateArgument[] {new CPPTemplateArgument(new CPPBasicType(Kind.eChar, 0))}, name);
|
||||
IBinding charInst2= CPPTemplates.instantiate(tmplDef, new ICPPTemplateArgument[] {new CPPTemplateArgument(new CPPBasicType(Kind.eChar, 0))}, name);
|
||||
IBinding charInst1= CPPTemplates.instantiate(tmplDef, new ICPPTemplateArgument[] {new CPPTemplateTypeArgument(new CPPBasicType(Kind.eChar, 0))}, name);
|
||||
IBinding charInst2= CPPTemplates.instantiate(tmplDef, new ICPPTemplateArgument[] {new CPPTemplateTypeArgument(new CPPBasicType(Kind.eChar, 0))}, name);
|
||||
assertSame(charInst1, charInst2);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser;
|
|||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
/**
|
||||
|
@ -61,6 +62,7 @@ public interface ITypeMarshalBuffer {
|
|||
IValue unmarshalValue() throws CoreException;
|
||||
IBinding unmarshalBinding() throws CoreException;
|
||||
ISerializableEvaluation unmarshalEvaluation() throws CoreException;
|
||||
ICPPTemplateArgument unmarshalTemplateArgument() throws CoreException;
|
||||
int getByte() throws CoreException;
|
||||
int getShort() throws CoreException;
|
||||
int getInt() throws CoreException;
|
||||
|
@ -71,6 +73,7 @@ public interface ITypeMarshalBuffer {
|
|||
void marshalValue(IValue value) throws CoreException;
|
||||
void marshalBinding(IBinding binding) throws CoreException;
|
||||
void marshalEvaluation(ISerializableEvaluation eval, boolean includeValue) throws CoreException;
|
||||
void marshalTemplateArgument(ICPPTemplateArgument arg) throws CoreException;
|
||||
void putByte(byte data);
|
||||
void putShort(short data);
|
||||
void putInt(int data);
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2008, 2012 Wind River Systems, Inc. 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
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.PRVALUE;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameterPackType;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
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.core.runtime.Assert;
|
||||
|
||||
/**
|
||||
* Implementation of non-type template argument, used by AST and index.
|
||||
*/
|
||||
public class CPPTemplateNonTypeArgument implements ICPPTemplateArgument {
|
||||
private final ICPPEvaluation fEvaluation;
|
||||
|
||||
public CPPTemplateNonTypeArgument(ICPPEvaluation evaluation) {
|
||||
Assert.isNotNull(evaluation);
|
||||
fEvaluation= evaluation;
|
||||
}
|
||||
|
||||
public CPPTemplateNonTypeArgument(IValue value, IType type) {
|
||||
fEvaluation = new EvalFixed(type, PRVALUE, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeValue() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonTypeValue() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IType getTypeValue() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IValue getNonTypeValue() {
|
||||
return fEvaluation.getValue(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IType getTypeOfNonTypeValue() {
|
||||
return fEvaluation.getTypeOrFunctionSet(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPackExpansion() {
|
||||
return fEvaluation.getTypeOrFunctionSet(null) instanceof ICPPParameterPackType;
|
||||
}
|
||||
|
||||
@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 EvalFixed) {
|
||||
EvalFixed fixed = (EvalFixed) fEvaluation;
|
||||
evaluation = new EvalFixed(t, fixed.getValueCategory(), fixed.getValue());
|
||||
} else {
|
||||
evaluation = new EvalTypeId(t, fEvaluation);
|
||||
}
|
||||
return new CPPTemplateNonTypeArgument(evaluation);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSameValue(ICPPTemplateArgument arg) {
|
||||
return getNonTypeValue().equals(arg.getNonTypeValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getNonTypeValue().toString();
|
||||
}
|
||||
|
||||
public ICPPEvaluation getEvaluation() {
|
||||
return fEvaluation;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2005, 2010 IBM Corporation and others.
|
||||
* Copyright (c) 2005, 2012 IBM Corporation 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
|
||||
|
@ -81,7 +81,7 @@ public class CPPTemplateNonTypeParameter extends CPPTemplateParameter
|
|||
ICPPASTInitializerList list= (ICPPASTInitializerList) dc;
|
||||
switch (list.getSize()) {
|
||||
case 0:
|
||||
return new CPPTemplateArgument(Value.create(0), getType());
|
||||
return new CPPTemplateNonTypeArgument(Value.create(0), getType());
|
||||
case 1:
|
||||
dc= list.getClauses()[0];
|
||||
if (dc instanceof IASTExpression) {
|
||||
|
@ -95,7 +95,7 @@ public class CPPTemplateNonTypeParameter extends CPPTemplateParameter
|
|||
|
||||
IValue val= Value.create(d, Value.MAX_RECURSION_DEPTH);
|
||||
IType t= getType();
|
||||
return new CPPTemplateArgument(val, t);
|
||||
return new CPPTemplateNonTypeArgument(val, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -131,7 +131,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
if (d == null)
|
||||
return null;
|
||||
|
||||
return new CPPTemplateArgument(d);
|
||||
return new CPPTemplateTypeArgument(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2008, 2009 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2008, 2012 Wind River Systems, Inc. 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
|
@ -17,47 +18,39 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
|||
import org.eclipse.core.runtime.Assert;
|
||||
|
||||
/**
|
||||
* Implementation of template arguments, used by ast and index.
|
||||
* Implementation of type template arguments, used by AST and index.
|
||||
*/
|
||||
public class CPPTemplateArgument implements ICPPTemplateArgument {
|
||||
public class CPPTemplateTypeArgument implements ICPPTemplateArgument {
|
||||
private final IType fType;
|
||||
private final IValue fValue;
|
||||
|
||||
public CPPTemplateArgument(IValue value, IType type) {
|
||||
Assert.isNotNull(value);
|
||||
fType= type;
|
||||
fValue= value;
|
||||
}
|
||||
|
||||
public CPPTemplateArgument(IType type) {
|
||||
public CPPTemplateTypeArgument(IType type) {
|
||||
Assert.isNotNull(type);
|
||||
fType= type;
|
||||
fValue= null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeValue() {
|
||||
return fValue == null;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonTypeValue() {
|
||||
return fValue != null;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IType getTypeValue() {
|
||||
return isTypeValue() ? fType : null;
|
||||
return fType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IValue getNonTypeValue() {
|
||||
return fValue;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IType getTypeOfNonTypeValue() {
|
||||
return isNonTypeValue() ? fType : null;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -70,10 +63,7 @@ public class CPPTemplateArgument implements ICPPTemplateArgument {
|
|||
if (fType instanceof ICPPParameterPackType) {
|
||||
IType t= ((ICPPParameterPackType) fType).getType();
|
||||
if (t != null) {
|
||||
if (fValue != null) {
|
||||
return new CPPTemplateArgument(fValue, t);
|
||||
}
|
||||
return new CPPTemplateArgument(t);
|
||||
return new CPPTemplateTypeArgument(t);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -81,16 +71,11 @@ public class CPPTemplateArgument implements ICPPTemplateArgument {
|
|||
|
||||
@Override
|
||||
public boolean isSameValue(ICPPTemplateArgument arg) {
|
||||
if (fValue != null) {
|
||||
return fValue.equals(arg.getNonTypeValue());
|
||||
}
|
||||
return fType.isSameType(arg.getTypeValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (fValue != null)
|
||||
return fValue.toString();
|
||||
return fType.toString();
|
||||
}
|
||||
}
|
|
@ -78,7 +78,7 @@ public class CPPTemplateTypeParameter extends CPPTemplateParameter implements
|
|||
if (t == null)
|
||||
return null;
|
||||
|
||||
return new CPPTemplateArgument(t);
|
||||
return new CPPTemplateTypeArgument(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -16,12 +16,14 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
|
|||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ISerializableType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.Value;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
|
@ -103,6 +105,16 @@ public abstract class CPPEvaluation implements ICPPEvaluation {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void marshalTemplateArgument(ICPPTemplateArgument arg) throws CoreException {
|
||||
if (arg instanceof CPPTemplateNonTypeArgument) {
|
||||
putByte(VALUE);
|
||||
((CPPTemplateNonTypeArgument) arg).getEvaluation().marshal(this, true);
|
||||
} else {
|
||||
marshalType(arg.getTypeValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putByte(byte value) {
|
||||
appendSeparator();
|
||||
|
@ -160,6 +172,11 @@ public abstract class CPPEvaluation implements ICPPEvaluation {
|
|||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument unmarshalTemplateArgument() throws CoreException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getByte() throws CoreException {
|
||||
throw new UnsupportedOperationException();
|
||||
|
|
|
@ -123,11 +123,12 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPMethodTemplateSpecializat
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPParameterPackType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateDefinition;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeParameter;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTemplateParameter;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeParameter;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTypedefSpecialization;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownBinding;
|
||||
|
@ -492,11 +493,11 @@ public class CPPTemplates {
|
|||
if (tp.isParameterPack()) {
|
||||
t= new CPPParameterPackType(t);
|
||||
}
|
||||
args[i] = new CPPTemplateArgument(t);
|
||||
args[i] = new CPPTemplateTypeArgument(t);
|
||||
} else if (tp instanceof ICPPTemplateNonTypeParameter) {
|
||||
// Non-type template parameter pack already has type 'ICPPParameterPackType'
|
||||
final ICPPTemplateNonTypeParameter nttp = (ICPPTemplateNonTypeParameter) tp;
|
||||
args[i] = new CPPTemplateArgument(Value.create(nttp), nttp.getType());
|
||||
args[i] = new CPPTemplateNonTypeArgument(Value.create(nttp), nttp.getType());
|
||||
} else {
|
||||
assert false;
|
||||
}
|
||||
|
@ -1083,14 +1084,14 @@ public class CPPTemplates {
|
|||
final IType instType= instantiateType(origType, tpMap, packOffset, within, point);
|
||||
if (origType == instType && origValue == instValue)
|
||||
return arg;
|
||||
return new CPPTemplateArgument(instValue, instType);
|
||||
return new CPPTemplateNonTypeArgument(instValue, instType);
|
||||
}
|
||||
|
||||
final IType orig= arg.getTypeValue();
|
||||
final IType inst= instantiateType(orig, tpMap, packOffset, within, point);
|
||||
if (orig == inst)
|
||||
return arg;
|
||||
return new CPPTemplateArgument(inst);
|
||||
return new CPPTemplateTypeArgument(inst);
|
||||
}
|
||||
|
||||
private static CPPTemplateParameterMap instantiateArgumentMap(ICPPTemplateParameterMap orig, ICPPTemplateParameterMap tpMap,
|
||||
|
@ -1138,7 +1139,7 @@ public class CPPTemplates {
|
|||
return type;
|
||||
}
|
||||
// The parameter types need to be adjusted.
|
||||
for (int i=0; i<params.length; i++) {
|
||||
for (int i= 0; i < params.length; i++) {
|
||||
IType p= params[i];
|
||||
if (!isDependentType(p)) {
|
||||
params[i]= CPPVisitor.adjustParameterType(p, true);
|
||||
|
@ -1651,7 +1652,7 @@ public class CPPTemplates {
|
|||
if (args.length != specArgs.length) {
|
||||
return false;
|
||||
}
|
||||
for (int i=0; i < args.length; i++) {
|
||||
for (int i= 0; i < args.length; i++) {
|
||||
if (!specArgs[i].isSameValue(args[i]))
|
||||
return false;
|
||||
}
|
||||
|
@ -1671,12 +1672,12 @@ public class CPPTemplates {
|
|||
for (int i = 0; i < args.length; i++) {
|
||||
IASTNode arg= args[i];
|
||||
if (arg instanceof IASTTypeId) {
|
||||
result[i]= new CPPTemplateArgument(CPPVisitor.createType((IASTTypeId) arg));
|
||||
result[i]= new CPPTemplateTypeArgument(CPPVisitor.createType((IASTTypeId) arg));
|
||||
} else if (arg instanceof IASTExpression) {
|
||||
IASTExpression expr= (IASTExpression) arg;
|
||||
IType type= expr.getExpressionType();
|
||||
IValue value= Value.create((IASTExpression) arg, Value.MAX_RECURSION_DEPTH);
|
||||
result[i]= new CPPTemplateArgument(value, type);
|
||||
result[i]= new CPPTemplateNonTypeArgument(value, type);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unexpected type: " + arg.getClass().getName()); //$NON-NLS-1$
|
||||
}
|
||||
|
@ -1763,7 +1764,7 @@ public class CPPTemplates {
|
|||
static ICPPFunction[] instantiateConversionTemplates(ICPPFunction[] functions, IType conversionType, IASTNode point) {
|
||||
boolean checkedForDependentType= false;
|
||||
ICPPFunction[] result= functions;
|
||||
int i=0;
|
||||
int i= 0;
|
||||
boolean done= false;
|
||||
for (ICPPFunction f : functions) {
|
||||
ICPPFunction inst = f;
|
||||
|
@ -1888,7 +1889,7 @@ public class CPPTemplates {
|
|||
CPPTemplateParameterMap map = new CPPTemplateParameterMap(argLen);
|
||||
for (int i = 0; i < argLen; i++) {
|
||||
final ICPPTemplateParameter tpar = tpars[i];
|
||||
final CPPTemplateArgument arg = uniqueArg(tpar);
|
||||
final ICPPTemplateArgument arg = uniqueArg(tpar);
|
||||
args[i]= arg;
|
||||
if (tpar.isParameterPack()) {
|
||||
map.put(tpar, new ICPPTemplateArgument[] {arg});
|
||||
|
@ -1904,12 +1905,12 @@ public class CPPTemplates {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static CPPTemplateArgument uniqueArg(final ICPPTemplateParameter tpar) throws DOMException {
|
||||
final CPPTemplateArgument arg;
|
||||
private static ICPPTemplateArgument uniqueArg(final ICPPTemplateParameter tpar) throws DOMException {
|
||||
final ICPPTemplateArgument arg;
|
||||
if (tpar instanceof ICPPTemplateNonTypeParameter) {
|
||||
arg = new CPPTemplateArgument(Value.unique(), ((ICPPTemplateNonTypeParameter) tpar).getType());
|
||||
arg = new CPPTemplateNonTypeArgument(Value.unique(), ((ICPPTemplateNonTypeParameter) tpar).getType());
|
||||
} else {
|
||||
arg = new CPPTemplateArgument(new UniqueType(tpar.isParameterPack()));
|
||||
arg = new CPPTemplateTypeArgument(new UniqueType(tpar.isParameterPack()));
|
||||
}
|
||||
return arg;
|
||||
}
|
||||
|
@ -2074,7 +2075,7 @@ public class CPPTemplates {
|
|||
final CPPTemplateParameterMap transferMap= new CPPTemplateParameterMap(tpars1Len);
|
||||
for (int i = 0; i < tpars1Len; i++) {
|
||||
final ICPPTemplateParameter param = tpars1[i];
|
||||
final CPPTemplateArgument arg = uniqueArg(param);
|
||||
final ICPPTemplateArgument arg = uniqueArg(param);
|
||||
args[i]= arg;
|
||||
transferMap.put(param, arg);
|
||||
}
|
||||
|
@ -2173,7 +2174,7 @@ public class CPPTemplates {
|
|||
pType= instantiateType(pType, map, -1, null, point);
|
||||
}
|
||||
if (argType instanceof ICPPUnknownType || argType instanceof ISemanticProblem || isNonTypeArgumentConvertible(pType, argType, point)) {
|
||||
return new CPPTemplateArgument(arg.getNonTypeValue(), pType);
|
||||
return new CPPTemplateNonTypeArgument(arg.getNonTypeValue(), pType);
|
||||
}
|
||||
return null;
|
||||
|
||||
|
@ -2187,8 +2188,8 @@ public class CPPTemplates {
|
|||
|
||||
private static boolean matchTemplateTemplateParameters(ICPPTemplateParameter[] pParams,
|
||||
ICPPTemplateParameter[] aParams) throws DOMException {
|
||||
int pi=0;
|
||||
int ai=0;
|
||||
int pi= 0;
|
||||
int ai= 0;
|
||||
while (pi < pParams.length && ai < aParams.length) {
|
||||
final ICPPTemplateParameter pp = pParams[pi];
|
||||
final ICPPTemplateParameter ap = aParams[ai];
|
||||
|
|
|
@ -191,7 +191,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTypedef;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope;
|
||||
|
@ -2029,7 +2029,7 @@ public class CPPVisitor extends ASTQueries {
|
|||
return new ProblemType(ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE);
|
||||
}
|
||||
type = (IType) CPPTemplates.instantiate(initializer_list_template,
|
||||
new ICPPTemplateArgument[] { new CPPTemplateArgument(type) }, initClause);
|
||||
new ICPPTemplateArgument[] { new CPPTemplateTypeArgument(type) }, initClause);
|
||||
if (type instanceof IProblemBinding) {
|
||||
return new ProblemType(ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE);
|
||||
}
|
||||
|
@ -2058,7 +2058,7 @@ public class CPPVisitor extends ASTQueries {
|
|||
type = t;
|
||||
if (initClause instanceof ICPPASTInitializerList) {
|
||||
type = (IType) CPPTemplates.instantiate(initializer_list_template,
|
||||
new ICPPTemplateArgument[] { new CPPTemplateArgument(type) }, initClause);
|
||||
new ICPPTemplateArgument[] { new CPPTemplateTypeArgument(type) }, initClause);
|
||||
}
|
||||
return decorateType(type, declSpec, declarator);
|
||||
}
|
||||
|
|
|
@ -159,7 +159,10 @@ public class EvalID extends CPPEvaluation {
|
|||
buffer.putCharArray(fName);
|
||||
buffer.marshalBinding(fNameOwner);
|
||||
if (fTemplateArgs != null) {
|
||||
// mstodo marshall arguments
|
||||
buffer.putShort((short) fTemplateArgs.length);
|
||||
for (ICPPTemplateArgument arg : fTemplateArgs) {
|
||||
buffer.marshalTemplateArgument(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,7 +174,11 @@ public class EvalID extends CPPEvaluation {
|
|||
IBinding nameOwner= buffer.unmarshalBinding();
|
||||
ICPPTemplateArgument[] args= null;
|
||||
if ((firstByte & ITypeMarshalBuffer.FLAG3) != 0) {
|
||||
// mstodo marshall arguments
|
||||
int len= buffer.getShort();
|
||||
args = new ICPPTemplateArgument[len];
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
args[i]= buffer.unmarshalTemplateArgument();
|
||||
}
|
||||
}
|
||||
return new EvalID(fieldOwner, nameOwner, name, addressOf, qualified, args);
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionType;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPQualifierType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
||||
|
||||
|
@ -511,7 +511,7 @@ public class SemanticUtil {
|
|||
final IType type= arg.getTypeValue();
|
||||
final IType newType= getSimplifiedType(type);
|
||||
if (newType != type) {
|
||||
return new CPPTemplateArgument(newType);
|
||||
return new CPPTemplateTypeArgument(newType);
|
||||
}
|
||||
}
|
||||
return arg;
|
||||
|
|
|
@ -60,8 +60,9 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
|
||||
|
||||
|
@ -723,7 +724,7 @@ public class TemplateArgumentDeduction {
|
|||
if (parID >= 0) {
|
||||
ICPPTemplateArgument old= fDeducedArgs.getArgument(parID, fPackOffset);
|
||||
if (old == null) {
|
||||
if (!deduce(parID, new CPPTemplateArgument(as, new CPPBasicType(ICPPBasicType.Kind.eInt, 0)))) {
|
||||
if (!deduce(parID, new CPPTemplateNonTypeArgument(as, new CPPBasicType(ICPPBasicType.Kind.eInt, 0)))) {
|
||||
return false;
|
||||
}
|
||||
} else if (!as.equals(old.getNonTypeValue())) {
|
||||
|
@ -764,7 +765,7 @@ public class TemplateArgumentDeduction {
|
|||
}
|
||||
if (a == null)
|
||||
return false;
|
||||
return deduce(((ICPPTemplateParameter)p).getParameterID(), new CPPTemplateArgument(a));
|
||||
return deduce(((ICPPTemplateParameter)p).getParameterID(), new CPPTemplateTypeArgument(a));
|
||||
} else if (p instanceof ICPPTemplateInstance) {
|
||||
if (!(a instanceof ICPPTemplateInstance))
|
||||
return false;
|
||||
|
@ -792,7 +793,7 @@ public class TemplateArgumentDeduction {
|
|||
if (current != null) {
|
||||
if (current.isNonTypeValue() || !current.getTypeValue().isSameType(aTemplate))
|
||||
return false;
|
||||
} else if (!deduce(tparId, new CPPTemplateArgument(aTemplate))) {
|
||||
} else if (!deduce(tparId, new CPPTemplateTypeArgument(aTemplate))) {
|
||||
return false;
|
||||
}
|
||||
} else if (!aTemplate.isSameType(pTemplate)) {
|
||||
|
|
|
@ -233,7 +233,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory {
|
|||
throw new CompositingNotImplementedError();
|
||||
}
|
||||
|
||||
private ICPPEvaluation getCompositeEvaluation(ICPPEvaluation eval) {
|
||||
public ICPPEvaluation getCompositeEvaluation(ICPPEvaluation eval) {
|
||||
if (eval == null)
|
||||
return null;
|
||||
if (eval instanceof EvalBinary) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2011 Symbian Software Systems and others.
|
||||
* Copyright (c) 2007, 2012 Symbian Software Systems 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
|
||||
|
@ -9,6 +9,7 @@
|
|||
* Andrew Ferguson (Symbian) - Initial implementation
|
||||
* Bryan Wilkinson (QNX)
|
||||
* Markus Schorn (Wind River Systems)
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.index.composite.cpp;
|
||||
|
||||
|
@ -16,7 +17,6 @@ import org.eclipse.cdt.core.CCorePlugin;
|
|||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
|
@ -26,8 +26,10 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.core.index.IIndexBinding;
|
||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
|
||||
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
|
||||
|
||||
|
@ -91,22 +93,18 @@ public class TemplateInstanceUtil {
|
|||
}
|
||||
|
||||
static ICPPTemplateArgument convert(ICompositesFactory cf, ICPPTemplateArgument arg) throws DOMException {
|
||||
if (arg == null)
|
||||
return null;
|
||||
if (arg.isNonTypeValue()) {
|
||||
final IType t= arg.getTypeOfNonTypeValue();
|
||||
final IType t2= cf.getCompositeType(t);
|
||||
final IValue v= arg.getNonTypeValue();
|
||||
final IValue v2= cf.getCompositeValue(v);
|
||||
if (t != t2 || v != v2) {
|
||||
return new CPPTemplateArgument(v2, t2);
|
||||
if (arg instanceof CPPTemplateTypeArgument) {
|
||||
final IType typeValue = arg.getTypeValue();
|
||||
IType t= cf.getCompositeType(typeValue);
|
||||
if (t != typeValue) {
|
||||
return new CPPTemplateTypeArgument(t);
|
||||
}
|
||||
} else if (arg instanceof CPPTemplateNonTypeArgument) {
|
||||
ICPPEvaluation eval = ((CPPTemplateNonTypeArgument) arg).getEvaluation();
|
||||
ICPPEvaluation eval2 = ((CPPCompositesFactory) cf).getCompositeEvaluation(eval);
|
||||
if (eval2 != eval) {
|
||||
return new CPPTemplateNonTypeArgument(eval2);
|
||||
}
|
||||
return arg;
|
||||
}
|
||||
final IType typeValue = arg.getTypeValue();
|
||||
IType t= cf.getCompositeType(typeValue);
|
||||
if (t != typeValue) {
|
||||
return new CPPTemplateTypeArgument(t);
|
||||
}
|
||||
return arg;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2010 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2009, 2012 Wind River Systems, Inc. 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.pdom.db;
|
||||
|
||||
|
@ -16,11 +17,15 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
|
|||
import org.eclipse.cdt.core.dom.ast.ISemanticProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ISerializableType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ProblemType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.Value;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
@ -93,7 +98,7 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer {
|
|||
|
||||
byte firstByte= fBuffer[fPos];
|
||||
if (firstByte == BINDING_TYPE) {
|
||||
fPos+= 2;
|
||||
fPos += 2;
|
||||
long rec= getRecordPointer();
|
||||
return (IBinding) fLinkage.getNode(rec);
|
||||
} else if (firstByte == NULL_TYPE || firstByte == UNSTORABLE_TYPE) {
|
||||
|
@ -182,6 +187,27 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer {
|
|||
return Value.unmarshal(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void marshalTemplateArgument(ICPPTemplateArgument arg) throws CoreException {
|
||||
if (arg instanceof CPPTemplateNonTypeArgument) {
|
||||
putByte(VALUE);
|
||||
((CPPTemplateNonTypeArgument) arg).getEvaluation().marshal(this, true);
|
||||
} else {
|
||||
marshalType(arg.getTypeValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICPPTemplateArgument unmarshalTemplateArgument() throws CoreException {
|
||||
int firstByte= getByte();
|
||||
if (firstByte == VALUE) {
|
||||
return new CPPTemplateNonTypeArgument((ICPPEvaluation) unmarshalEvaluation());
|
||||
} else {
|
||||
fPos--;
|
||||
return new CPPTemplateTypeArgument(unmarshalType());
|
||||
}
|
||||
}
|
||||
|
||||
private void request(int i) {
|
||||
if (fBuffer == null) {
|
||||
if (i <= Database.TYPE_SIZE) {
|
||||
|
|
|
@ -15,6 +15,8 @@ import org.eclipse.cdt.core.dom.ast.IType;
|
|||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ProblemType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||
|
@ -94,9 +96,9 @@ public class PDOMCPPArgumentList {
|
|||
}
|
||||
IValue val= linkage.loadValue(rec + VALUE_OFFSET);
|
||||
if (val != null) {
|
||||
result[i]= new CPPTemplateArgument(val, type);
|
||||
result[i]= new CPPTemplateNonTypeArgument(val, type);
|
||||
} else {
|
||||
result[i]= new CPPTemplateArgument(type);
|
||||
result[i]= new CPPTemplateTypeArgument(type);
|
||||
}
|
||||
rec += NODE_SIZE;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,11 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
|
||||
|
@ -114,11 +119,6 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
|||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Container for c++-entities.
|
||||
*/
|
||||
|
@ -1109,5 +1109,4 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
}
|
||||
throw new CoreException(CCorePlugin.createStatus("Cannot unmarshal an evaluation, first byte=" + firstByte)); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
||||
|
@ -72,7 +73,7 @@ class PDOMCPPTemplateNonTypeParameter extends PDOMCPPBinding
|
|||
IValue val= getLinkage().loadValue(record + DEFAULTVAL);
|
||||
if (val == null)
|
||||
return null;
|
||||
return new CPPTemplateArgument(val, getType());
|
||||
return new CPPTemplateNonTypeArgument(val, getType());
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return null;
|
||||
|
|
|
@ -16,7 +16,9 @@ import org.eclipse.cdt.core.dom.ast.IValue;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ProblemType;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateNonTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||
|
@ -148,9 +150,9 @@ public class PDOMCPPTemplateParameterMap {
|
|||
IValue val= linkage.loadValue(rec + VALUE_OFFSET);
|
||||
ICPPTemplateArgument arg;
|
||||
if (val != null) {
|
||||
arg= new CPPTemplateArgument(val, type);
|
||||
arg= new CPPTemplateNonTypeArgument(val, type);
|
||||
} else {
|
||||
arg= new CPPTemplateArgument(type);
|
||||
arg= new CPPTemplateTypeArgument(type);
|
||||
}
|
||||
return arg;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType;
|
||||
|
@ -169,7 +169,7 @@ public class PDOMCPPTemplateTemplateParameter extends PDOMCPPBinding
|
|||
if (d == null)
|
||||
return null;
|
||||
|
||||
return new CPPTemplateArgument(d);
|
||||
return new CPPTemplateTypeArgument(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument;
|
||||
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.index.IIndexCPPBindingConstants;
|
||||
|
@ -155,7 +155,7 @@ class PDOMCPPTemplateTypeParameter extends PDOMCPPBinding implements IPDOMMember
|
|||
if (d == null)
|
||||
return null;
|
||||
|
||||
return new CPPTemplateArgument(d);
|
||||
return new CPPTemplateTypeArgument(d);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Reference in a new issue