data: Template Member Specialization Edge

* Added a new edge that connects a method of an implicitly specialized template class to its definition in the unspecialized template class.
* Added a test case for this.
* Made methods that have an invalid source location stored as undefined.
This commit is contained in:
malte_langkabel
2015-10-13 13:29:36 +02:00
parent 27bf5108ab
commit e61171cc85
8 changed files with 133 additions and 40 deletions
+19 -1
View File
@@ -317,7 +317,7 @@ Id Storage::onMethodParsed(
){
log("method", method.getFullName(), location);
Id nodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_METHOD, method, true);
Id nodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_METHOD, method, location.isValid() && scopeLocation.isValid());
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
addAccess(nodeId, access);
@@ -621,6 +621,24 @@ Id Storage::onTemplateRecordSpecializationParsed(
return specializedNodeId;
}
Id Storage::onTemplateMemberFunctionSpecializationParsed(
const ParseLocation& location, const ParseFunction& instantiatedFunction, const ParseFunction& specializedFunction
){
log(
"template member function specialization",
instantiatedFunction.getFullName() + " -> " + specializedFunction.getFullName(),
location
);
Id instantiatedFunctionNodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_FUNCTION, instantiatedFunction, false);
Id specializedFunctionNodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_FUNCTION, specializedFunction, false);
Id edgeId = addEdge(instantiatedFunctionNodeId, specializedFunctionNodeId, Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF, location);
return edgeId;
}
Id Storage::onTemplateFunctionParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, const ParseFunction function
){