1.1 --- a/micropython/common.py Sun Aug 29 02:40:57 2010 +0200
1.2 +++ b/micropython/common.py Mon Aug 30 01:04:30 2010 +0200
1.3 @@ -76,7 +76,7 @@
1.4 program unit within which it is found.
1.5 """
1.6
1.7 - return node.unit.parent.has_key(node.unit.name)
1.8 + return hasattr(node, "unit") and node.unit.parent.has_key(node.unit.name)
1.9
1.10 # Errors.
1.11
2.1 --- a/micropython/report.py Sun Aug 29 02:40:57 2010 +0200
2.2 +++ b/micropython/report.py Mon Aug 30 01:04:30 2010 +0200
2.3 @@ -57,6 +57,7 @@
2.4 .class { margin-top: 1em; margin-bottom: 1em; }
2.5 .function { margin-top: 1em; margin-bottom: 1em; }
2.6 .body { padding-left: 2em; }
2.7 + .for, .if, .tryexcept, .tryfinally, .while { margin-bottom: 1em; }
2.8 .keyword { color: yellow; }
2.9 .comment { color: blue; }
2.10 .class-name { color: cyan; }
2.11 @@ -213,12 +214,15 @@
2.12
2.13 def _doc(self, node):
2.14 if node.doc is not None:
2.15 - self.stream.write("<pre class='doc'>")
2.16 - self.stream.write('"""')
2.17 - output = textwrap.dedent(node.doc.replace('"""', '\\"\\"\\"'))
2.18 - self.stream.write(self._text(output))
2.19 - self.stream.write('"""')
2.20 - self.stream.write("</pre>\n")
2.21 + self._docstring(node.doc)
2.22 +
2.23 + def _docstring(self, s):
2.24 + self.stream.write("<pre class='doc'>")
2.25 + self.stream.write('"""')
2.26 + output = textwrap.dedent(s.replace('"""', '\\"\\"\\"'))
2.27 + self.stream.write(self._text(output))
2.28 + self.stream.write('"""')
2.29 + self.stream.write("</pre>\n")
2.30
2.31 def _object_name_def(self, module, obj, classes=None):
2.32
2.33 @@ -443,6 +447,7 @@
2.34
2.35 def visitClass(self, node):
2.36 if not used_by_unit(node):
2.37 + self._docstring('"Class %s not generated."' % node.name)
2.38 return
2.39
2.40 # Use inspected details where possible.
2.41 @@ -547,6 +552,7 @@
2.42
2.43 def visitFunction(self, node):
2.44 if not used_by_unit(node):
2.45 + self._docstring('"Function %s not generated."' % node.name)
2.46 return
2.47
2.48 if hasattr(node, "unit"):
2.49 @@ -1054,7 +1060,14 @@
2.50 for n, param in enumerate(fn.positional_names):
2.51 if not first:
2.52 self.stream.write(", ")
2.53 - self._assname(param, node)
2.54 +
2.55 + # Handle tuple parameters.
2.56 +
2.57 + if isinstance(param, tuple):
2.58 + self._tuple_parameter(param, node)
2.59 + else:
2.60 + self._assname(param, node)
2.61 +
2.62 n_default = n - first_with_default
2.63 if n_default >= 0:
2.64 self._default(fn.defaults[n_default])
2.65 @@ -1070,6 +1083,25 @@
2.66 self.stream.write(", **")
2.67 self._name(fn.dstar_name)
2.68
2.69 + def _tuple_parameter(self, parameters, node):
2.70 + self.stream.write("(")
2.71 +
2.72 + first = 1
2.73 + for param in parameters:
2.74 + if not first:
2.75 + self.stream.write(", ")
2.76 +
2.77 + # Handle tuples.
2.78 +
2.79 + if isinstance(param, tuple):
2.80 + self._tuple_parameter(param, node)
2.81 + else:
2.82 + self._assname(param, node)
2.83 +
2.84 + first = 0
2.85 +
2.86 + self.stream.write(")")
2.87 +
2.88 def _default(self, default):
2.89 self.stream.write("=")
2.90 self.dispatch(default)