# HG changeset patch # User paulb@localhost.localdomain # Date 1180311489 -7200 # Node ID 384e8cc2768f2725ff2c974553849d8de220af8d # Parent 0edf357fee41e67e2c0c9110a1579e687d20b97d Fixed the tuple class __init__ and __add__ methods. Added an explicit "annotated" attribute on simplified nodes. Added browser support for showing nodes which are missing types. Extended the tuple example. diff -r 0edf357fee41 -r 384e8cc2768f lib/builtins.py --- a/lib/builtins.py Mon May 28 00:51:46 2007 +0200 +++ b/lib/builtins.py Mon May 28 02:18:09 2007 +0200 @@ -795,7 +795,7 @@ return s class tuple: - def __init__(self, *args): + def __init__(self, args): for arg in args: self.value = value @@ -828,10 +828,10 @@ return int() def __add__(self, other): - result = tuple(self) + result = list(self) for value in other: result.append(value) - return result + return tuple(result) def __str__(self): return str() diff -r 0edf357fee41 -r 384e8cc2768f simplify/annotate.py --- a/simplify/annotate.py Mon May 28 00:51:46 2007 +0200 +++ b/simplify/annotate.py Mon May 28 02:18:09 2007 +0200 @@ -83,6 +83,7 @@ self.init(node, attr) self.combine(getattr(node, attr), types) + node.annotated = 1 def combine(self, target, types): diff -r 0edf357fee41 -r 384e8cc2768f simplify/simplified/program.py --- a/simplify/simplified/program.py Mon May 28 00:51:46 2007 +0200 +++ b/simplify/simplified/program.py Mon May 28 02:18:09 2007 +0200 @@ -25,6 +25,7 @@ from simplify.simplified.utils import Structure, WithName, name import sys +import operator # Simplified program nodes. @@ -92,6 +93,7 @@ # Annotations. self.types = set() + self.annotated = 0 def __repr__(self): @@ -212,6 +214,15 @@ return self.copies.values() or [self] + def is_annotated(self): + + """ + Return whether active copies of this node (or this node itself) is + annotated. + """ + + return reduce(operator.or_, [n.annotated for n in self.active()]) + # Node manipulation functions. def copy(self, instance=None, new_name=None): diff -r 0edf357fee41 -r 384e8cc2768f simplify/viewer.py --- a/simplify/viewer.py Mon May 28 00:51:46 2007 +0200 +++ b/simplify/viewer.py Mon May 28 02:18:09 2007 +0200 @@ -90,6 +90,10 @@ float: right; } + .no-types { + background-color: #FF0000; + } + .op, .name, .attr, @@ -621,11 +625,17 @@ self.stream.write("\n") self.dispatch(node.expr) self.stream.write("\n") - self.stream.write(".%s\n" % self._text(node.attrname)) + self.stream.write(".") + types = self._types(targets) + if not target.is_annotated() or types: + self._name_start(node.attrname) + else: + self._name_start(node.attrname, "no-types") self._popup( self._scopes(targets) + - self._types(targets) + types ) + self._name_end() self.stream.write("\n") self.stream.write("\n") @@ -639,10 +649,14 @@ def visitAssName(self, node): target = node._node targets = target.active() - self._name_start(target.name) + types = self._types(targets) + if not target.is_annotated() or types: + self._name_start(target.name) + else: + self._name_start(target.name, "no-types") self._popup( self._scopes(targets) + - self._types(targets) + types ) self._name_end() @@ -735,11 +749,17 @@ self.stream.write("\n") self.dispatch(node.expr) self.stream.write("\n") - self.stream.write(".%s\n" % self._text(node.attrname)) + self.stream.write(".") + types = self._types(targets) + if not target.is_annotated() or types: + self._name_start(node.attrname) + else: + self._name_start(node.attrname, "no-types") self._popup( self._scopes(targets) + - self._types(targets) + types ) + self._name_end() self.stream.write("\n") self.stream.write("\n") @@ -814,10 +834,14 @@ def visitName(self, node): target = node._node targets = target.active() - self._name_start(target.name) + types = self._types(targets) + if not target.is_annotated() or types: + self._name_start(target.name) + else: + self._name_start(target.name, "no-types") self._popup( self._scopes(targets) + - self._types(targets) + types ) self._name_end() diff -r 0edf357fee41 -r 384e8cc2768f tests/tuple.py --- a/tests/tuple.py Mon May 28 00:51:46 2007 +0200 +++ b/tests/tuple.py Mon May 28 02:18:09 2007 +0200 @@ -1,2 +1,3 @@ t = (1, "2", 3) a, b, c = t +d, e, f, g, h = t + ("4", 5)