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