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) { if (argsContainDependentType) {
return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, arguments); return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, actualArgs);
} }
ICPPSpecialization instance = ((ICPPInternalTemplateInstantiator) template).getInstance(actualArgs); ICPPSpecialization instance = ((ICPPInternalTemplateInstantiator) template).getInstance(actualArgs);
@ -1898,9 +1898,12 @@ public class CPPTemplates {
} catch (DOMException e) { } catch (DOMException e) {
return e.getProblem(); return e.getProblem();
} }
instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, arguments); instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, actualArgs);
if (template instanceof ICPPInternalTemplate) if (template instanceof ICPPInternalTemplate) {
((ICPPInternalTemplate) template).addSpecialization(arguments, instance); final ICPPInternalTemplate internalTmpl = (ICPPInternalTemplate) template;
internalTmpl.addSpecialization(arguments, instance);
internalTmpl.addSpecialization(actualArgs, instance);
}
return 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.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding; 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.index.IndexCPPSignatureUtil;
import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.BTree; 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 { 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; Integer hash = null;
try { try {
hash = IndexCPPSignatureUtil.getSignatureHash(binding); hash = IndexCPPSignatureUtil.getSignatureHash(binding);
} catch (DOMException e) { } catch (DOMException e) {
} }
if(hash != null) { 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); 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) { if (parent instanceof IPDOMMemberOwner) {
int localToFileRec= getLocalToFileRec(parent, binding); int localToFileRec= getLocalToFileRec(parent, binding);
return CPPFindBinding.findBinding(parent, this, binding, localToFileRec, parent instanceof ICPPSpecialization); return CPPFindBinding.findBinding(parent, this, binding, localToFileRec);
} }
return null; return null;
} }