@@ -42,6 +42,10 @@ Node *Builder::newValueNode() {
4242 return newNode (NodeKind::Value);
4343}
4444
45+ Node *Builder::newTypeNode () {
46+ return newNode (NodeKind::Type);
47+ }
48+
4549// / Edge Connectors
4650
4751void Builder::connectModule (Node *moduleNode, Node *anyNode) {
@@ -56,6 +60,14 @@ void Builder::connectFunction(Node *functionNode, Node *anyNode) {
5660 newEdge (anyNode->getID (), functionNode->getID ())->setKind (EdgeKind::Function);
5761}
5862
63+ void Builder::connectArgument (Node *functionNode, Node *argumentNode, unsigned order) {
64+ assert (functionNode->getKind () == NodeKind::Function);
65+
66+ Edge *edge = newEdge (functionNode->getID (), argumentNode->getID ());
67+ edge->setKind (EdgeKind::Argument);
68+ edge->setOrder (order);
69+ }
70+
5971void Builder::connectInstruction (Node *instructionNode, Node *anyNode) {
6072 assert (instructionNode->getKind () == NodeKind::Instruction);
6173
@@ -70,10 +82,57 @@ void Builder::connectBasicBlocks(Node *successor, Node *predecessor) {
7082 newEdge (successor->getID (), predecessor->getID ())->setKind (EdgeKind::Predecessor);
7183}
7284
73- void Builder::connectOperand (Node *instructionNode, Node *anyValue, unsigned index ) {
85+ void Builder::connectOperand (Node *instructionNode, Node *anyValue, unsigned order ) {
7486 assert (instructionNode->getKind () == NodeKind::Instruction);
7587
7688 Edge *edge = newEdge (instructionNode->getID (), anyValue->getID ());
7789 edge->setKind (EdgeKind::Operand);
78- edge->setOrder (index);
90+ edge->setOrder (order);
91+ }
92+
93+ void Builder::connectPointeeType (Node *pointerNode, Node *pointeeNode) {
94+ assert (pointerNode->getKind () == NodeKind::Type);
95+ assert (pointeeNode->getKind () == NodeKind::Type);
96+
97+ newEdge (pointerNode->getID (), pointeeNode->getID ())->setKind (EdgeKind::PointeeType);
98+ }
99+
100+ void Builder::connectFunctionParameterType (Node *functionType, Node *parameterType,
101+ unsigned order) {
102+ assert (functionType->getKind () == NodeKind::Type);
103+ assert (parameterType->getKind () == NodeKind::Type);
104+
105+ Edge *edge = newEdge (functionType->getID (), parameterType->getID ());
106+ edge->setKind (EdgeKind::ParameterType);
107+ edge->setOrder (order);
108+ }
109+
110+ void Builder::connectFunctionReturnType (Node *functionType, Node *returnType) {
111+ assert (functionType->getKind () == NodeKind::Type);
112+ assert (returnType->getKind () == NodeKind::Type);
113+
114+ newEdge (functionType->getID (), returnType->getID ())->setKind (EdgeKind::ReturnType);
115+ }
116+
117+ void Builder::connectStructElementType (llvm2graphml::Node *structType,
118+ llvm2graphml::Node *elementType, unsigned order) {
119+ assert (structType->getKind () == NodeKind::Type);
120+ assert (elementType->getKind () == NodeKind::Type);
121+
122+ Edge *edge = newEdge (structType->getID (), elementType->getID ());
123+ edge->setKind (EdgeKind::ElementType);
124+ edge->setOrder (order);
125+ }
126+
127+ void Builder::connectElementType (Node *type, Node *elementType) {
128+ assert (type->getKind () == NodeKind::Type);
129+ assert (elementType->getKind () == NodeKind::Type);
130+
131+ newEdge (type->getID (), elementType->getID ())->setKind (EdgeKind::ElementType);
132+ }
133+
134+ void Builder::connectType (Node *type, Node *node) {
135+ assert (type->getKind () == NodeKind::Type);
136+
137+ newEdge (node->getID (), type->getID ())->setKind (EdgeKind::Type);
79138}
0 commit comments