1.1 --- a/viewer.py Sun Dec 03 00:50:06 2006 +0100
1.2 +++ b/viewer.py Sun Dec 03 00:51:30 2006 +0100
1.3 @@ -157,6 +157,7 @@
1.4 .conditional,
1.5 .operator,
1.6 .iterator,
1.7 + .call,
1.8 .returns
1.9 {
1.10 position: relative;
1.11 @@ -168,6 +169,7 @@
1.12 .conditional:hover > .popup,
1.13 .operator:hover > .popup,
1.14 .iterator:hover > .popup,
1.15 + .call:hover > .popup,
1.16 .returns:hover > .popup
1.17 {
1.18 display: block;
1.19 @@ -192,13 +194,13 @@
1.20 Covered: Add, And, AssAttr, AssList, AssName, AssTuple, Assign, AugAssign,
1.21 Break, CallFunc, Class, Compare, Const, Continue, Dict, Discard,
1.22 Div, FloorDiv, For, Function, Getattr, If, Keyword, Lambda, List,
1.23 - Module, Mul, Name, Not, Or, Pass, Raise, Return, Slice, Stmt, Sub,
1.24 - Subscript, TryExcept, TryFinally, Tuple, UnaryAdd, UnarySub, While.
1.25 + Module, Mul, Name, Not, Or, Pass, Print, Printnl, Raise, Return,
1.26 + Slice, Stmt, Sub, Subscript, TryExcept, TryFinally, Tuple,
1.27 + UnaryAdd, UnarySub, While.
1.28
1.29 Missing: Assert, Backquote, Bitand, Bitor, Bitxor, Decorators, Ellipsis,
1.30 Exec, From, Global, Import, Invert, LeftShift, ListComp,
1.31 - ListCompFor, ListCompIf, Mod, Power, Print, Printnl, RightShift,
1.32 - Sliceobj, Yield.
1.33 + ListCompFor, ListCompIf, Mod, Power, RightShift, Sliceobj, Yield.
1.34 """
1.35
1.36 def __init__(self, stream):
1.37 @@ -212,13 +214,14 @@
1.38 self.stream.write(html_footer)
1.39
1.40 def dispatch(self, node):
1.41 - try:
1.42 - ASTVisitor.dispatch(self, node)
1.43 - except ViewerError, exc:
1.44 - exc.add(node)
1.45 - raise
1.46 - except Exception, exc:
1.47 - raise ViewerError(exc, node)
1.48 + ASTVisitor.dispatch(self, node)
1.49 + #try:
1.50 + # ASTVisitor.dispatch(self, node)
1.51 + #except ViewerError, exc:
1.52 + # exc.add(node)
1.53 + # raise
1.54 + #except Exception, exc:
1.55 + # raise ViewerError(exc, node)
1.56
1.57 def visitModule(self, node):
1.58 self.default(node)
1.59 @@ -393,6 +396,31 @@
1.60 self._keyword("pass")
1.61 self.stream.write("</div>\n")
1.62
1.63 + def visitPrint(self, node):
1.64 + self.stream.write("<div class='print'>\n")
1.65 + self._keyword("print")
1.66 + if node.dest is not None:
1.67 + self.stream.write(">>\n")
1.68 + self.dispatch(node.dest)
1.69 + for n in node.nodes:
1.70 + self.dispatch(n)
1.71 + self.stream.write(",\n")
1.72 + self.stream.write("</div>\n")
1.73 +
1.74 + def visitPrintnl(self, node):
1.75 + self.stream.write("<div class='printnl'>\n")
1.76 + self._keyword("print")
1.77 + if node.dest is not None:
1.78 + self.stream.write(">>\n")
1.79 + self.dispatch(node.dest)
1.80 + first = 1
1.81 + for n in node.nodes:
1.82 + if not first:
1.83 + self.stream.write(",\n")
1.84 + self.dispatch(n)
1.85 + first = 0
1.86 + self.stream.write("</div>\n")
1.87 +
1.88 def visitRaise(self, node):
1.89 self.stream.write("<div class='raise'>\n")
1.90 self._keyword("raise")
1.91 @@ -477,7 +505,7 @@
1.92 self.stream.write("<span class='conditional'>\n")
1.93 self._keyword("while")
1.94 self._popup_start()
1.95 - self._invocations(node.test)
1.96 + self._invocations(node._node.expr.ref.code[0].test)
1.97 self._popup_end()
1.98 self.stream.write("</span>\n")
1.99 self.dispatch(node.test)
1.100 @@ -585,7 +613,12 @@
1.101 def visitCallFunc(self, node):
1.102 self.stream.write("<span class='callfunc'>\n")
1.103 self.dispatch(node.node)
1.104 + self.stream.write("<span class='call'>\n")
1.105 self.stream.write("(")
1.106 + self._popup_start()
1.107 + self._invocations(node._node)
1.108 + self._popup_end()
1.109 + self.stream.write("</span>\n")
1.110 first = 1
1.111 for arg in node.args:
1.112 if not first: