# HG changeset patch
# User paulb@localhost.localdomain
# Date 1171583441 -3600
# Node ID c471747c9c1eedf681ac54d5f07a46178ce1f699
# Parent c7eb79b764e1a97cfb35ad1b4222c07a4aa5e6f4
Fixed some duplication issues when presenting types.
diff -r c7eb79b764e1 -r c471747c9c1e viewer.py
--- a/viewer.py Fri Feb 16 00:13:09 2007 +0100
+++ b/viewer.py Fri Feb 16 00:50:41 2007 +0100
@@ -840,9 +840,7 @@
self._name_start(main_param)
self._popup_start()
self.stream.write("
\n")
- for i in range(0, len(subprograms)):
- param, default = params[i][n]
- self._parameter(subprograms[i], param)
+ self._parameter(subprograms, params, n)
self.stream.write("
\n")
self._popup_end()
self._name_end()
@@ -856,9 +854,7 @@
self._name_start(main_param)
self._popup_start()
self.stream.write("\n")
- for i in range(0, len(subprograms)):
- param, default = stars[i]
- self._parameter(subprograms[i], param)
+ self._parameter(subprograms, stars)
self.stream.write("
\n")
self._popup_end()
self._name_end()
@@ -872,18 +868,24 @@
self._name_start(main_param)
self._popup_start()
self.stream.write("\n")
- for i in range(0, len(subprograms)):
- param, default = dstars[i]
- self._parameter(subprograms[i], param)
+ self._parameter(subprograms, dstars)
self.stream.write("
\n")
self._popup_end()
self._name_end()
self._default(main_default)
first = 0
- def _parameter(self, subprogram, param):
- if hasattr(subprogram, "paramtypes"):
- self._types_list(subprogram.paramtypes[param])
+ def _parameter(self, subprograms, params, n=None):
+ types = []
+ for i in range(0, len(subprograms)):
+ subprogram = subprograms[i]
+ if n is not None:
+ param, default = params[i][n]
+ else:
+ param, default = params[i]
+ if hasattr(subprogram, "paramtypes"):
+ types += subprogram.paramtypes[param]
+ self._types_list(types)
def _default(self, default):
if default is not None and default.original is not None:
@@ -914,7 +916,7 @@
_node = node._node
if isinstance(_node, Not):
_node = _node.expr
- self._invocations_list(_node)
+ self._invocations_list(_node.active())
self.stream.write("\n")
def _invocations(self, nodes):
@@ -941,24 +943,14 @@
def _types(self, nodes):
self.stream.write("\n")
- for node in nodes:
- self._type(node)
+ all_types = [(getattr(n, "types", []) or flatten(getattr(n, "writes", {}).values())) for n in nodes]
+ types = flatten(all_types)
+ if not types:
+ self._no_types()
+ else:
+ self._types_list(types)
self.stream.write("
\n")
- def _type(self, node):
- if hasattr(node, "types"):
- if node.types:
- self._types_list(node.types)
- else:
- self._no_types()
- elif hasattr(node, "writes"):
- if node.writes:
- self._types_list(flatten(node.writes.values()))
- else:
- self._no_types()
- else:
- self._unvisited()
-
def _unvisited(self):
self.stream.write("")
self.stream.write("unvisited\n")