some expression generator things missing, fixes [ticket:18]
diff --git a/lib/mako/ast.py b/lib/mako/ast.py index c07cd81..a17969b 100644 --- a/lib/mako/ast.py +++ b/lib/mako/ast.py
@@ -230,13 +230,32 @@ if node.upper is not None: self.visit(node.upper) self.buf.write("]") + def visitDict(self, node): + self.buf.write("{") + c = node.getChildren() + for i in range(0, len(c), 2): + self.visit(c[i]) + self.buf.write(": ") + self.visit(c[i+1]) + if i<len(c) -2: + self.buf.write(", ") + self.buf.write("}") + def visitList(self, node): + self.buf.write("[") + c = node.getChildren() + for i in range(0, len(c)): + self.visit(c[i]) + if i<len(c) - 1: + self.buf.write(", ") + self.buf.write("]") def visitCallFunc(self, node, *args): self.visit(node.node) self.buf.write("(") - self.visit(node.args[0]) - for a in node.args[1:]: - self.buf.write(", ") - self.visit(a) + if len(node.args): + self.visit(node.args[0]) + for a in node.args[1:]: + self.buf.write(", ") + self.visit(a) self.buf.write(")") \ No newline at end of file
diff --git a/test/ast.py b/test/ast.py index c35d1a2..aab9fd7 100644 --- a/test/ast.py +++ b/test/ast.py
@@ -151,6 +151,18 @@ #print "result:", eval(code, local_dict) assert(eval(code, local_dict) == eval(newcode, local_dict)) + local_dict={'f':lambda :9, 'x':7} + code = "x+f()" + astnode = parse(code) + newcode = ast.ExpressionGenerator(astnode).value() + assert(eval(code, local_dict)) == eval(newcode, local_dict) + + for code in ["repr({'x':7,'y':18})", "repr([])", "repr({})", "repr([{3:[]}])", "repr({'x':37*2 + len([6,7,8])})", "repr([1, 2, {}, {'x':'7'}])"]: + local_dict={} + astnode = parse(code) + newcode = ast.ExpressionGenerator(astnode).value() + assert(eval(code, local_dict)) == eval(newcode, local_dict) + if __name__ == '__main__': unittest.main()