2.1 --- a/simplify.py Fri Dec 08 23:41:20 2006 +0100
2.2 +++ b/simplify.py Sat Dec 09 00:36:06 2006 +0100
2.3 @@ -50,9 +50,9 @@
2.4 Covered: Add, And, AssAttr, AssList, AssName, AssTuple, Assign, AugAssign,
2.5 Break, CallFunc, Class, Compare, Const, Continue, Dict, Discard,
2.6 Div, FloorDiv, For, From, Function, Getattr, Global, If, Import,
2.7 - Invert, Keyword, Lambda, List, Module, Mul, Name, Not, Or, Pass,
2.8 - Power, Print, Printnl, Raise, Return, Slice, Stmt, Sub, Subscript,
2.9 - TryExcept, TryFinally, Tuple, While, UnaryAdd, UnarySub.
2.10 + Invert, Keyword, Lambda, List, Mod, Module, Mul, Name, Not, Or,
2.11 + Pass, Power, Print, Printnl, Raise, Return, Slice, Stmt, Sub,
2.12 + Subscript, TryExcept, TryFinally, Tuple, While, UnaryAdd, UnarySub.
2.13
2.14 Missing: Assert, Backquote, Bitand, Bitor, Bitxor, Decorators, Ellipsis,
2.15 Exec, LeftShift, ListComp, ListCompFor, ListCompIf, RightShift,
2.16 @@ -710,7 +710,13 @@
2.17 def visitFrom(self, from_):
2.18 result = Assign(from_, 1)
2.19 code = []
2.20 - code.append(StoreTemp(expr=Import(name=from_.modname)))
2.21 + _names = []
2.22 + code.append(
2.23 + StoreTemp(
2.24 + expr=Import(name=from_.modname)
2.25 + )
2.26 + )
2.27 + from_._modname = code[-1].expr
2.28 for name, alias in from_.names:
2.29 code.append(
2.30 StoreName(
2.31 @@ -720,8 +726,10 @@
2.32 name=(alias or name)
2.33 )
2.34 )
2.35 + _names.append(code[-1].expr)
2.36 code.append(ReleaseTemp())
2.37 result.code = code
2.38 + from_._names = _names
2.39 return result
2.40
2.41 def _visitFunction(self, function, subprogram):
2.42 @@ -876,11 +884,14 @@
2.43 def visitImport(self, import_):
2.44 result = Assign(import_, 1)
2.45 code = []
2.46 + _names = []
2.47 for path, alias in import_.names:
2.48 importer = Import(name=path)
2.49 top = alias or path.split(".")[0]
2.50 code.append(StoreName(expr=importer, name=top))
2.51 + _names.append(code[-1].expr)
2.52 result.code = code
2.53 + import_._names = _names
2.54 return result
2.55
2.56 def visitInvert(self, invert):
2.57 @@ -911,6 +922,9 @@
2.58 def visitList(self, list):
2.59 return self._visitBuiltin(list, "list")
2.60
2.61 + def visitMod(self, mod):
2.62 + return self._visitBinary(mod, "__mod__", "__rmod__")
2.63 +
2.64 def visitMul(self, mul):
2.65 return self._visitBinary(mul, "__mul__", "__rmul__")
2.66
3.1 --- a/viewer.py Fri Dec 08 23:41:20 2006 +0100
3.2 +++ b/viewer.py Sat Dec 09 00:36:06 2006 +0100
3.3 @@ -38,7 +38,7 @@
3.4 <title>Module</title>
3.5 <style type="text/css">
3.6 body {
3.7 - padding-top: 4em; padding-bottom: 4em;
3.8 + padding-bottom: 4em;
3.9 font-size: 14pt; font-family: monospace;
3.10 background-color: black; color: white;
3.11 }
3.12 @@ -126,14 +126,14 @@
3.13
3.14 Covered: Add, And, AssAttr, AssList, AssName, AssTuple, Assign, AugAssign,
3.15 Break, CallFunc, Class, Compare, Const, Continue, Dict, Discard,
3.16 - Div, FloorDiv, For, Function, Getattr, Global, If, Keyword, Lambda,
3.17 - List, Module, Mul, Name, Not, Or, Pass, Print, Printnl, Raise,
3.18 - Return, Slice, Stmt, Sub, Subscript, TryExcept, TryFinally, Tuple,
3.19 - UnaryAdd, UnarySub, While.
3.20 + Div, FloorDiv, For, From, Function, Getattr, Global, If, Import,
3.21 + Keyword, Lambda, List, Mod, Module, Mul, Name, Not, Or, Pass,
3.22 + Power, Print, Printnl, Raise, Return, Slice, Stmt, Sub, Subscript,
3.23 + TryExcept, TryFinally, Tuple, UnaryAdd, UnarySub, While.
3.24
3.25 Missing: Assert, Backquote, Bitand, Bitor, Bitxor, Decorators, Ellipsis,
3.26 - Exec, From, Import, Invert, LeftShift, ListComp, ListCompFor,
3.27 - ListCompIf, Mod, Power, RightShift, Sliceobj, Yield.
3.28 + Exec, Invert, LeftShift, ListComp, ListCompFor, ListCompIf,
3.29 + RightShift, Sliceobj, Yield.
3.30 """
3.31
3.32 def __init__(self, stream):
3.33 @@ -253,6 +253,32 @@
3.34 self.stream.write("</div>\n")
3.35 self.stream.write("</div>\n")
3.36
3.37 + def visitFrom(self, node):
3.38 + self.stream.write("<div class='from'>\n")
3.39 + self._keyword("from")
3.40 + self.stream.write("<span class='name'>\n")
3.41 + self.stream.write(node.modname)
3.42 + self._popup_start()
3.43 + self._types(node._modname)
3.44 + self._popup_end()
3.45 + self.stream.write("</span>\n")
3.46 + self._keyword("import")
3.47 + first = 1
3.48 + for (name, alias), _name in map(None, node.names, node._names):
3.49 + if not first:
3.50 + self.stream.write(",\n")
3.51 + if alias:
3.52 + self.stream.write(name + " ")
3.53 + self._keyword("as")
3.54 + self.stream.write("<span class='name'>\n")
3.55 + self.stream.write(alias or name)
3.56 + self._popup_start()
3.57 + self._types(_name)
3.58 + self._popup_end()
3.59 + self.stream.write("</span>\n")
3.60 + first = 0
3.61 + self.stream.write("</div>\n")
3.62 +
3.63 def visitFunction(self, node):
3.64 definition = node._node
3.65 subprogram = definition.expr.ref
3.66 @@ -325,6 +351,25 @@
3.67 self.stream.write("</div>\n")
3.68 self.stream.write("</div>\n")
3.69
3.70 + def visitImport(self, node):
3.71 + self.stream.write("<div class='import'>\n")
3.72 + self._keyword("import")
3.73 + first = 1
3.74 + for (name, alias), _name in map(None, node.names, node._names):
3.75 + if not first:
3.76 + self.stream.write(",\n")
3.77 + if alias:
3.78 + self.stream.write(name + " ")
3.79 + self._keyword("as")
3.80 + self.stream.write("<span class='name'>\n")
3.81 + self.stream.write(alias or name)
3.82 + self._popup_start()
3.83 + self._types(_name)
3.84 + self._popup_end()
3.85 + self.stream.write("</span>\n")
3.86 + first = 0
3.87 + self.stream.write("</div>\n")
3.88 +
3.89 def visitPass(self, node):
3.90 self.stream.write("<div class='pass'>\n")
3.91 self._keyword("pass")
3.92 @@ -617,6 +662,9 @@
3.93
3.94 visitList = visitAssList
3.95
3.96 + def visitMod(self, node):
3.97 + self._visitBinary(node, "mod", "%")
3.98 +
3.99 def visitMul(self, node):
3.100 self._visitBinary(node, "mul", "*")
3.101