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
+7 -3
View File
@@ -46,10 +46,12 @@ Edge::EdgeType Edge::intToType(int value)
case 0x2000:
return EDGE_TEMPLATE_SPECIALIZATION_OF;
case 0x4000:
return EDGE_INCLUDE;
return EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF;
case 0x8000:
return EDGE_AGGREGATION;
return EDGE_INCLUDE;
case 0x10000:
return EDGE_AGGREGATION;
case 0x20000:
return EDGE_MACRO_USAGE;
}
@@ -194,6 +196,8 @@ std::string Edge::getTypeString(EdgeType type)
return "template_default_argument";
case EDGE_TEMPLATE_SPECIALIZATION_OF:
return "template_specialization";
case EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF:
return "template_member_specialization";
case EDGE_INCLUDE:
return "include";
case EDGE_AGGREGATION:
@@ -236,7 +240,7 @@ std::ostream& operator<<(std::ostream& ostream, const Edge& edge)
return ostream;
}
bool Edge::checkType() const
bool Edge::checkType() const // TODO: remove this function
{
Node::NodeTypeMask complexTypeMask = Node::NODE_CLASS | Node::NODE_STRUCT | Node:: NODE_TEMPLATE_PARAMETER_TYPE;
Node::NodeTypeMask typeMask = Node::NODE_ENUM | Node::NODE_TYPEDEF | complexTypeMask;
+19 -18
View File
@@ -18,26 +18,27 @@ public:
typedef int EdgeTypeMask;
enum EdgeType : EdgeTypeMask
{
EDGE_NONE = 0x0,
EDGE_MEMBER = 0x1,
EDGE_TYPE_OF = 0x2,
EDGE_RETURN_TYPE_OF = 0x4, // unused: see Storage::addFunctionNode()
EDGE_PARAMETER_TYPE_OF = 0x8, // unused: see Storage::addFunctionNode()
EDGE_TYPE_USAGE = 0x10,
EDGE_USAGE = 0x20,
EDGE_CALL = 0x40,
EDGE_INHERITANCE = 0x80,
EDGE_OVERRIDE = 0x100,
EDGE_TYPEDEF_OF = 0x200,
EDGE_TEMPLATE_PARAMETER = 0x400,
EDGE_TEMPLATE_ARGUMENT = 0x800,
EDGE_TEMPLATE_DEFAULT_ARGUMENT = 0x1000,
EDGE_TEMPLATE_SPECIALIZATION_OF = 0x2000,
EDGE_NONE = 0x0,
EDGE_MEMBER = 0x1,
EDGE_TYPE_OF = 0x2,
EDGE_RETURN_TYPE_OF = 0x4, // unused: see Storage::addFunctionNode()
EDGE_PARAMETER_TYPE_OF = 0x8, // unused: see Storage::addFunctionNode()
EDGE_TYPE_USAGE = 0x10,
EDGE_USAGE = 0x20,
EDGE_CALL = 0x40,
EDGE_INHERITANCE = 0x80,
EDGE_OVERRIDE = 0x100,
EDGE_TYPEDEF_OF = 0x200,
EDGE_TEMPLATE_PARAMETER = 0x400,
EDGE_TEMPLATE_ARGUMENT = 0x800,
EDGE_TEMPLATE_DEFAULT_ARGUMENT = 0x1000,
EDGE_TEMPLATE_SPECIALIZATION_OF = 0x2000,
EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF = 0x4000,
EDGE_INCLUDE = 0x4000,
EDGE_INCLUDE = 0x8000,
EDGE_AGGREGATION = 0x8000,
EDGE_MACRO_USAGE = 0x10000,
EDGE_AGGREGATION = 0x10000,
EDGE_MACRO_USAGE = 0x20000,
};
static int typeToInt(EdgeType type);