[pypy-svn] r5948 - in pypy/trunk/src: goal/translate_pypy pypy/translator
arigo at codespeak.net
arigo at codespeak.net
Fri Aug 13 16:27:57 CEST 2004
Author: arigo
Date: Fri Aug 13 16:27:57 2004
New Revision: 5948
Modified:
pypy/trunk/src/goal/translate_pypy/graphserver.py
pypy/trunk/src/pypy/translator/annrpython.py
Log:
Record and display the whole history of the bindings of each variable.
Modified: pypy/trunk/src/goal/translate_pypy/graphserver.py
==============================================================================
--- pypy/trunk/src/goal/translate_pypy/graphserver.py (original)
+++ pypy/trunk/src/goal/translate_pypy/graphserver.py Fri Aug 13 16:27:57 2004
@@ -1,6 +1,7 @@
import BaseHTTPServer
from cStringIO import StringIO
import httpserver
+from httpserver import htmlquote
from pypy.translator.tool.pygame.graphviewer import GraphViewer
from pypy.translator.tool.make_dot import make_dot_graphs
@@ -11,8 +12,11 @@
self.translator = translator
self.viewercache = {}
self.binding_by_name = {}
+ self.binding_history = {}
for var, s_value in self.translator.annotator.bindings.items():
self.binding_by_name[var.name] = '%s : %r' % (var.name, s_value)
+ for var, history in self.translator.annotator.bindingshistory.items():
+ self.binding_history[var.name] = history
def getviewer(self, i):
t = self.translator
@@ -54,10 +58,22 @@
def varloader(self, n, **options):
n = n[0]
- import textwrap
- data = textwrap.fill(self.binding_by_name[n])
- data = '=== %s ===\n\n%s' % (n, data)
- return StringIO(data), 'text/plain'
+ s = self.binding_by_name[n]
+ assert s.startswith('%s :' % n)
+ s = s[len('%s :' % n):]
+ data = '<html><head><title>%s</title></head><body>' % n
+ data += '<h1>%s</h1>' % n
+ data += '<p>%s</p>' % htmlquote(s)
+ if n in self.binding_history:
+ lines = ['<li>%s' % htmlquote(repr(s))
+ for s in self.binding_history[n]]
+ lines.reverse()
+ data += '<h2>Previous values</h2>'
+ data += '<ul>'
+ data += '\n'.join(lines)
+ data += '</ul>'
+ data += '</body></html>'
+ return StringIO(data), 'text/html'
def serve(self, port=8000):
httpserver.register('', self.indexloader)
Modified: pypy/trunk/src/pypy/translator/annrpython.py
==============================================================================
--- pypy/trunk/src/pypy/translator/annrpython.py (original)
+++ pypy/trunk/src/pypy/translator/annrpython.py Fri Aug 13 16:27:57 2004
@@ -24,6 +24,7 @@
self.bindings = {} # map Variables to SomeValues
self.annotated = {} # set of blocks already seen
self.notify = {} # {block: {factory-to-invalidate-when-done}}
+ self.bindingshistory = {}# map Variables to lists of SomeValues
self.bookkeeper = Bookkeeper(self)
#___ convenience high-level interface __________________
@@ -117,6 +118,14 @@
else:
raise TypeError, 'Variable or Constant expected, got %r' % (arg,)
+ def setbinding(self, arg, s_value):
+ if arg in self.bindings:
+ # for debugging purposes, record the history of bindings that
+ # have been given to this variable
+ history = self.bindingshistory.setdefault(arg, [])
+ history.append(self.bindings[arg])
+ self.bindings[arg] = s_value
+
#___ interface for annotator.factory _______
@@ -246,7 +255,7 @@
def bindinputargs(self, block, inputcells):
# Create the initial bindings for the input args of a block.
for a, cell in zip(block.inputargs, inputcells):
- self.bindings[a] = cell
+ self.setbinding(a, cell)
self.annotated[block] = False # must flowin.
def mergeinputargs(self, block, inputcells):
@@ -288,7 +297,7 @@
raise BlockedInference # the operation cannot succeed
assert isinstance(resultcell, annmodel.SomeObject)
assert isinstance(op.result, Variable)
- self.bindings[op.result] = resultcell # bind resultcell to op.result
+ self.setbinding(op.result, resultcell) # bind resultcell to op.result
def default_consider_op(self, *args):
return annmodel.SomeObject()
More information about the Pypy-commit
mailing list