# 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)