# HG changeset patch # User paulb@jeremy # Date 1159916741 -7200 # Node ID 50cfa7dd7f31538cca11298d60eb01a9182bf54f # Parent eb536453519ed7c31fb9de401044da94a0e5bfd0 Improved exception handling in annotate. Made the assignment test valid. diff -r eb536453519e -r 50cfa7dd7f31 annotate.py --- a/annotate.py Tue Oct 03 00:50:03 2006 +0200 +++ b/annotate.py Wed Oct 04 01:05:41 2006 +0200 @@ -67,6 +67,18 @@ system = System() +# Exceptions. + +class FailureError(Exception): + def __init__(self, exc, node, *args): + Exception.__init__(self, *args) + self.nodes = [node] + self.exc = exc + def add(self, node): + self.nodes.append(node) + def __str__(self): + return "%s, %s" % (self.exc, self.nodes) + # Annotation. class Annotator(Visitor): @@ -207,10 +219,11 @@ def dispatch(self, node, *args): try: return Visitor.dispatch(self, node, *args) - except: - print "Failed using node", node - #print "Original AST node", getattr(node, "original", None) + except FailureError, exc: + exc.add(node) raise + except Exception, exc: + raise FailureError(exc, node) def visitLoadRef(self, loadref): self.namespace.set_types([Attribute(None, loadref.ref)]) diff -r eb536453519e -r 50cfa7dd7f31 tests/assign.py --- a/tests/assign.py Tue Oct 03 00:50:03 2006 +0200 +++ b/tests/assign.py Wed Oct 04 01:05:41 2006 +0200 @@ -1,5 +1,6 @@ class A: pass a = A() +a.x = 1, 2, 3 c = b = a.x [x, y, z] = c x, y, z = c diff -r eb536453519e -r 50cfa7dd7f31 tests/augassign.py --- a/tests/augassign.py Tue Oct 03 00:50:03 2006 +0200 +++ b/tests/augassign.py Wed Oct 04 01:05:41 2006 +0200 @@ -1,3 +1,5 @@ +a = [1,2,3] +b = [4,5] a += b a.b += c a.b().c += d