xref: /aosp_15_r20/external/clang/utils/analyzer/ubiviz (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li#!/usr/bin/env python
2*67e74705SXin Li#
3*67e74705SXin Li#                     The LLVM Compiler Infrastructure
4*67e74705SXin Li#
5*67e74705SXin Li# This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li# License. See LICENSE.TXT for details.
7*67e74705SXin Li#
8*67e74705SXin Li##===----------------------------------------------------------------------===##
9*67e74705SXin Li#
10*67e74705SXin Li# This script reads visualization data emitted by the static analyzer for
11*67e74705SXin Li# display in Ubigraph.
12*67e74705SXin Li#
13*67e74705SXin Li##===----------------------------------------------------------------------===##
14*67e74705SXin Li
15*67e74705SXin Liimport xmlrpclib
16*67e74705SXin Liimport sys
17*67e74705SXin Li
18*67e74705SXin Lidef Error(message):
19*67e74705SXin Li    print >> sys.stderr, 'ubiviz: ' + message
20*67e74705SXin Li    sys.exit(1)
21*67e74705SXin Li
22*67e74705SXin Lidef StreamData(filename):
23*67e74705SXin Li  file = open(filename)
24*67e74705SXin Li  for ln in file:
25*67e74705SXin Li    yield eval(ln)
26*67e74705SXin Li  file.close()
27*67e74705SXin Li
28*67e74705SXin Lidef Display(G, data):
29*67e74705SXin Li  action = data[0]
30*67e74705SXin Li  if action == 'vertex':
31*67e74705SXin Li    vertex = data[1]
32*67e74705SXin Li    G.new_vertex_w_id(vertex)
33*67e74705SXin Li    for attribute in data[2:]:
34*67e74705SXin Li      G.set_vertex_attribute(vertex, attribute[0], attribute[1])
35*67e74705SXin Li  elif action == 'edge':
36*67e74705SXin Li    src = data[1]
37*67e74705SXin Li    dst = data[2]
38*67e74705SXin Li    edge = G.new_edge(src,dst)
39*67e74705SXin Li    for attribute in data[3:]:
40*67e74705SXin Li      G.set_edge_attribute(edge, attribute[0], attribute[1])
41*67e74705SXin Li  elif action == "vertex_style":
42*67e74705SXin Li    style_id = data[1]
43*67e74705SXin Li    parent_id = data[2]
44*67e74705SXin Li    G.new_vertex_style_w_id(style_id, parent_id)
45*67e74705SXin Li    for attribute in data[3:]:
46*67e74705SXin Li      G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
47*67e74705SXin Li  elif action == "vertex_style_attribute":
48*67e74705SXin Li    style_id = data[1]
49*67e74705SXin Li    for attribute in data[2:]:
50*67e74705SXin Li      G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
51*67e74705SXin Li  elif action == "change_vertex_style":
52*67e74705SXin Li     vertex_id = data[1]
53*67e74705SXin Li     style_id = data[2]
54*67e74705SXin Li     G.change_vertex_style(vertex_id,style_id)
55*67e74705SXin Li
56*67e74705SXin Lidef main(args):
57*67e74705SXin Li  if len(args) == 0:
58*67e74705SXin Li    Error('no input files')
59*67e74705SXin Li
60*67e74705SXin Li  server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2')
61*67e74705SXin Li  G = server.ubigraph
62*67e74705SXin Li
63*67e74705SXin Li  for arg in args:
64*67e74705SXin Li    G.clear()
65*67e74705SXin Li    for x in StreamData(arg):
66*67e74705SXin Li      Display(G,x)
67*67e74705SXin Li
68*67e74705SXin Li  sys.exit(0)
69*67e74705SXin Li
70*67e74705SXin Li
71*67e74705SXin Liif __name__ == '__main__':
72*67e74705SXin Li    main(sys.argv[1:])
73*67e74705SXin Li
74