mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
Bug 486671 - Store value of variable template in index
Change-Id: Ifd045faca2f95be8b3e53da49b4c50b0a3c470b3
This commit is contained in:
parent
3f64140125
commit
3c8a5002ba
4 changed files with 23 additions and 7 deletions
|
@ -11,6 +11,7 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.index.tests;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IVariable;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFieldTemplate;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariableInstance;
|
||||
|
@ -197,4 +198,15 @@ public class IndexCPPVariableTemplateResolutionTest extends IndexBindingResoluti
|
|||
assertEquals(c.getClass(),
|
||||
((ICPPVariableTemplatePartialSpecialization) cOfIntPtr.getSpecializedBinding()).getPrimaryTemplate().getClass());
|
||||
}
|
||||
|
||||
// template <typename T>
|
||||
// constexpr bool templ = true;
|
||||
|
||||
// struct A {};
|
||||
// constexpr bool waldo = templ<A>;
|
||||
public void testStorageOfUninstantiatedValue_bug486671() {
|
||||
checkBindings();
|
||||
IVariable waldo = getBindingFromASTName("waldo", 5);
|
||||
assertVariableValue(waldo, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
|||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||
import org.eclipse.cdt.core.dom.ast.IValue;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
|
||||
|
@ -505,12 +506,14 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
private final IPDOMCPPTemplateParameter[] fTemplateParameters;
|
||||
private final ICPPTemplateParameter[] fOriginalTemplateParameters;
|
||||
private final IType fOriginalType;
|
||||
private final IValue fOriginalValue;
|
||||
|
||||
public ConfigureVariableTemplate(ICPPVariableTemplate original, PDOMCPPVariable template) throws DOMException {
|
||||
fTemplate = template;
|
||||
fTemplateParameters= (IPDOMCPPTemplateParameter[]) ((ICPPVariableTemplate)template).getTemplateParameters();
|
||||
fOriginalTemplateParameters= original.getTemplateParameters();
|
||||
fOriginalType= original.getType();
|
||||
fOriginalValue= original.getInitialValue();
|
||||
postProcesses.add(this);
|
||||
}
|
||||
|
||||
|
@ -521,7 +524,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
if (tp != null)
|
||||
tp.configure(fOriginalTemplateParameters[i]);
|
||||
}
|
||||
PDOMCPPVariableTemplate.initData(fTemplate, fOriginalType);
|
||||
PDOMCPPVariableTemplate.initData(fTemplate, fOriginalType, fOriginalValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,13 +48,12 @@ class PDOMCPPVariable extends PDOMCPPBinding implements ICPPVariable {
|
|||
db.putByte(record + ANNOTATIONS, encodeFlags(variable));
|
||||
if (setTypeAndValue) {
|
||||
setType(parent.getLinkage(), variable.getType());
|
||||
setValue(db, variable);
|
||||
setValue(variable.getInitialValue());
|
||||
}
|
||||
}
|
||||
|
||||
private void setValue(Database db, IVariable variable) throws CoreException {
|
||||
IValue val = variable.getInitialValue();
|
||||
getLinkage().storeValue(record + VALUE_OFFSET, val);
|
||||
protected void setValue(IValue value) throws CoreException {
|
||||
getLinkage().storeValue(record + VALUE_OFFSET, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -64,7 +63,7 @@ class PDOMCPPVariable extends PDOMCPPBinding implements ICPPVariable {
|
|||
IVariable var= (IVariable) newBinding;
|
||||
IType newType= var.getType();
|
||||
setType(linkage, newType);
|
||||
setValue(db, var);
|
||||
setValue(var.getInitialValue());
|
||||
db.putByte(record + ANNOTATIONS, encodeFlags(var));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
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.ICPPPartialSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
|
||||
|
@ -94,9 +95,10 @@ public class PDOMCPPVariableTemplate extends PDOMCPPVariable implements ICPPVari
|
|||
return RECORD_SIZE;
|
||||
}
|
||||
|
||||
public static void initData(PDOMCPPVariable binding, IType fOriginalType) {
|
||||
public static void initData(PDOMCPPVariable binding, IType fOriginalType, IValue fOriginalValue) {
|
||||
try {
|
||||
binding.setType(binding.getLinkage(), fOriginalType);
|
||||
binding.setValue(fOriginalValue);
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue