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()