let get_subgraph v =
let mk_subgraph name attrib =
let attrib = (`Style `Filled) :: attrib in
Some { Graph.Graphviz.DotAttributes.sg_name= name;
Graph.Graphviz.DotAttributes.sg_attributes = attrib }
in
match N.elem_key v with
| K.CallStmt call | K.SigCallKey (call, _) ->
let call_stmt = K.call_from_id call in
let name = "Call"^(string_of_int call_stmt.sid) in
let call_txt =
Pretty_utils.sfprintf "%a"
(fun fmt ->
Cil.defaultCilPrinter#pStmtKind call_stmt fmt
)
call_stmt.skind in
let call_txt = String.escaped call_txt in
let attrib = [(`Label (name^" : "^call_txt))] in
let attrib = (`Fillcolor 0xB38B4D) :: attrib in
mk_subgraph name attrib
| K.SigKey k ->
let pack_inputs_outputs = false in
if pack_inputs_outputs then
begin
let is_in = match k with S.In _ -> true | _ -> false in
let name = if is_in then "Inputs" else "Outputs" in
let color = if is_in then 0x90EE90 else 0x6495ED in
let attrib = [] in
let attrib = (`Fillcolor color) :: attrib in
mk_subgraph name attrib
end
else
None
| _ -> None