1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Add bindings for specialization to the index only once, bug 207477.

This commit is contained in:
Markus Schorn 2008-05-29 08:51:48 +00:00
parent a5e61e2f26
commit 8737024fef
3 changed files with 10 additions and 10 deletions

View file

@ -1878,7 +1878,7 @@ public class CPPTemplates {
}
if (argsContainDependentType) {
return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, arguments);
return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, actualArgs);
}
ICPPSpecialization instance = ((ICPPInternalTemplateInstantiator) template).getInstance(actualArgs);
@ -1898,9 +1898,12 @@ public class CPPTemplates {
} catch (DOMException e) {
return e.getProblem();
}
instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, arguments);
if (template instanceof ICPPInternalTemplate)
((ICPPInternalTemplate) template).addSpecialization(arguments, instance);
instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, actualArgs);
if (template instanceof ICPPInternalTemplate) {
final ICPPInternalTemplate internalTmpl = (ICPPInternalTemplate) template;
internalTmpl.addSpecialization(arguments, instance);
internalTmpl.addSpecialization(actualArgs, instance);
}
return instance;
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.internal.core.index.IndexCPPSignatureUtil;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.BTree;
@ -132,17 +133,13 @@ public class CPPFindBinding extends FindBinding {
}
public static PDOMBinding findBinding(PDOMNode node, PDOMLinkage linkage, IBinding binding, int localToFileRec) throws CoreException {
return findBinding(node, linkage, binding, localToFileRec, false);
}
public static PDOMBinding findBinding(PDOMNode node, PDOMLinkage linkage, IBinding binding, int localToFileRec, boolean searchSpecializations) throws CoreException {
Integer hash = null;
try {
hash = IndexCPPSignatureUtil.getSignatureHash(binding);
} catch (DOMException e) {
}
if(hash != null) {
return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), linkage.getBindingType(binding), hash.intValue(), localToFileRec, searchSpecializations);
return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), linkage.getBindingType(binding), hash.intValue(), localToFileRec, binding instanceof ICPPSpecialization);
}
return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), new int[] {linkage.getBindingType(binding)}, localToFileRec);
}

View file

@ -669,7 +669,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
}
if (parent instanceof IPDOMMemberOwner) {
int localToFileRec= getLocalToFileRec(parent, binding);
return CPPFindBinding.findBinding(parent, this, binding, localToFileRec, parent instanceof ICPPSpecialization);
return CPPFindBinding.findBinding(parent, this, binding, localToFileRec);
}
return null;
}