@@ -151,6 +151,7 @@ object ('a)
151151 method get_constraint : xpr_t
152152 method get_stack_arguments : (int * xpr_t) list
153153 method get_register_arguments: (variable_t * xpr_t) list
154+ method write_xml : xml_element_int -> unit
154155
155156 (* printing *)
156157 method toPretty : pretty_t
@@ -223,7 +224,7 @@ class callgraph_edge_t
223224 (callsite :ctxt_iaddress_t )
224225 (_argExprs :(int * string * xpr_t) list )
225226 :callgraph_edge_int =
226- object (_ :'a )
227+ object (self :'a )
227228
228229 method compare (other:'a ) =
229230 let l0 = src#compare other#get_source in
@@ -246,6 +247,18 @@ object (_:'a)
246247
247248 method get_register_arguments = []
248249
250+ method write_xml (node: xml_element_int ) =
251+ let set = node#setAttribute in
252+ let seta t a = set t a#to_hex_string in
253+ let tgtinfo = new callgraph_node_info_t self#get_target in
254+ let tgtnode = xmlElement " tgt" in
255+ begin
256+ seta " src" self#get_source;
257+ set " cs" self#get_callsite;
258+ tgtinfo#write_xml tgtnode;
259+ node#appendChildren [tgtnode]
260+ end
261+
249262 method toPretty =
250263 LBLOCK [ src#toPretty ; STR " -> " ;
251264 callgraph_node_to_pretty tgt ; STR " @ " ;
@@ -349,7 +362,14 @@ object (self)
349362 let eNode = xmlElement " edges" in
350363 let edges = ref [] in
351364 let _ = out_n#iter (fun _ s -> edges := s#toList @ ! edges) in
352- node#appendChildren [ eNode ]
365+ let _ =
366+ List. iter (fun e ->
367+ let edgenode = xmlElement " edge" in
368+ begin
369+ e#write_xml edgenode;
370+ eNode#appendChildren [edgenode]
371+ end ) ! edges in
372+ node#appendChildren [eNode]
353373
354374end
355375
0 commit comments