[pypy-commit] jitviewer default: simplify and reintroduce cssclass, this time saneish

fijal noreply at buildbot.pypy.org
Tue Dec 27 11:26:38 CET 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r182:7d2ec216e348
Date: 2011-12-27 12:25 +0200
http://bitbucket.org/pypy/jitviewer/changeset/7d2ec216e348/

Log:	simplify and reintroduce cssclass, this time saneish

diff --git a/_jitviewer/parser.py b/_jitviewer/parser.py
--- a/_jitviewer/parser.py
+++ b/_jitviewer/parser.py
@@ -2,20 +2,6 @@
 import cgi
 from pypy.tool.jitlogparser import parser
 
-class Html(str):
-    def __html__(self):
-        return self
-
-    def plaintext(self):
-        # This is not a general way to strip tags, but it's good enough to use
-        # in tests
-        s = re.sub('<.*?>', '', self)
-        s = s.replace("&lt;", "<")
-        s = s.replace("&gt;", ">")
-        s = s.replace("&amp;", "&")
-        return s
-
-
 def cssclass(cls, s, **kwds):
     cls = re.sub("[^\w]", "_", cls)
     attrs = ['%s="%s"' % (name, value) for name, value in kwds.iteritems()]
@@ -26,9 +12,15 @@
 def _new_binop(name):
     name = cgi.escape(name)
     def f(self):
-        return '%s = %s %s %s' % (self.getres(), self.getarg(0), name, self.getarg(1))
+        return '%s = %s %s %s' % (self.wrap_html(self.res),
+                                  self.wrap_html(self.args[0]),
+                                  name, self.wrap_html(self.args[1]))
     return f
 
+class Html(str):
+    def __html__(self):
+        return self
+
 class OpHtml(parser.Op):
     """
     Subclass of Op with human-friendly html representation
@@ -43,11 +35,11 @@
             return "single-operation"
 
     def html_repr(self):
-        s = getattr(self, 'repr_' + self.name, self.repr)()
+        s = getattr(self, 'repr_' + self.name, self.default_repr)()
         return Html(s)
 
-    #def _getvar(self, v):
-    #    return cssclass(v, v, onmouseover='highlight_var(this)', onmouseout='disable_var(this)')
+    def wrap_html(self, v):
+        return cssclass(v, v, onmouseover='highlight_var(this)', onmouseout='disable_var(this)')
 
     for bin_op, name in [('==', 'int_eq'),
                          ('!=', 'int_ne'),
@@ -67,20 +59,22 @@
         locals()['repr_' + name] = _new_binop(bin_op)
 
     def repr_guard_true(self):
-        return 'guard(%s is true)' % self.getarg(0)
+        return 'guard(%s is true)' % self.wrap_html(self.args[0])
 
     def repr_guard_false(self):
-        return 'guard(%s is false)' % self.getarg(0)
+        return 'guard(%s is false)' % self.wrap_html(self.args[0])
 
     def repr_guard_value(self):
-        return 'guard(%s == %s)' % (self.getarg(0), self.getarg(1))
+        return 'guard(%s == %s)' % (self.wrap_html(self.args[0]),
+                                    self.wrap_html(self.args[1]))
 
     def repr_guard_isnull(self):
-        return 'guard(%s is null)' % self.getarg(0)
+        return 'guard(%s is null)' % self.wrap_html(self.args[0])
 
     def repr_getfield_raw(self):
         name, field = self.descr.split(' ')[1].rsplit('.', 1)
-        return '%s = ((%s)%s).%s' % (self.getres(), name, self.getarg(0), field[2:])
+        return '%s = ((%s)%s).%s' % (self.wrap_html(self.res), name,
+                                     self.wrap_html(self.args[0]), field[2:])
 
     def repr_getfield_gc(self):
         fullname, field = self.descr.split(' ')[1].rsplit('.', 1)
@@ -95,29 +89,40 @@
         field = cssclass('fieldname', field)
             
         obj = self.getarg(0)
-        return '%s = ((%s.%s)%s).%s' % (self.getres(), namespace, classname, obj, field)
+        return '%s = ((%s.%s)%s).%s' % (self.wrap_html(self.res),
+                                        namespace, classname, obj, field)
 
     def repr_getfield_gc_pure(self):
         return self.repr_getfield_gc() + " [pure]"
 
     def repr_setfield_raw(self):
         name, field = self.descr.split(' ')[1].rsplit('.', 1)
-        return '((%s)%s).%s = %s' % (name, self.getarg(0), field[2:], self.getarg(1))
+        return '((%s)%s).%s = %s' % (name, self.wrap_html(self.args[0]),
+                                     field[2:], self.wrap_html(self.args[1]))
 
     def repr_setfield_gc(self):
         name, field = self.descr.split(' ')[1].rsplit('.', 1)
-        return '((%s)%s).%s = %s' % (name, self.getarg(0), field, self.getarg(1))
+        return '((%s)%s).%s = %s' % (name, self.wrap_html(self.args[0]),
+                                     field, self.wrap_html(self.args[1]))
 
     def repr_jump(self):
         no = int(re.search("\d+", self.descr).group(0))
         return ("<a href='' onclick='show_loop(%d);return false'>" % no +
-                self.repr() + "</a>")
+                self.default_repr() + "</a>")
+
+    def default_repr(self):
+        args = [self.wrap_html(arg) for arg in self.args]
+        if self.descr is not None:
+            args.append('descr=%s' % cgi.escape(self.descr))
+        arglist = ', '.join(args)
+        if self.res is not None:
+            return '%s = %s(%s)' % (self.wrap_html(self.res), self.name,
+                                    arglist)
+        else:
+            return '%s(%s)' % (self.name, arglist)
 
     repr_call_assembler = repr_jump
 
-    def getdescr(self):
-        return cgi.escape(self.descr)
-
     #def repr_call_assembler(self):
     #    xxxx
 
diff --git a/_jitviewer/test/test_parser.py b/_jitviewer/test/test_parser.py
--- a/_jitviewer/test/test_parser.py
+++ b/_jitviewer/test/test_parser.py
@@ -1,4 +1,4 @@
-from _jitviewer.parser import ParserWithHtmlRepr, parse_log_counts, cssclass
+from _jitviewer.parser import ParserWithHtmlRepr, cssclass
 import py
 
 def parse(input):
@@ -11,18 +11,8 @@
     guard_true(i9, descr=<Guard2>) []
     i13 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
     ''').operations
-    assert ops[0].html_repr().plaintext() == 'i9 = i7 < 1003'
-    assert ops[2].html_repr().plaintext() == 'i13 = ((pypysig_long_struct)151937600).value'
-
-def test_parse_log_count():
-    py.test.skip('fixme')
-    class Loop(object):
-        pass
-    
-    loops = [Loop() for i in range(13)]
-    nums = parse_log_counts(LINES, loops)
-    assert nums[5] == 2000
-    assert loops[9].count == 2000
+    assert '<' in ops[0].html_repr()
+    assert 'pypysig_long_struct' in ops[2].html_repr()
 
 def test_highlight_var():
     ops = parse('''


More information about the pypy-commit mailing list