diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index 7f29770..a160d29 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -2,9 +2,6 @@
 
 This file is automatically generated.
 """
-# XXX performance issues:
-# 1. getChildren() could be more efficient for many cases
-
 from types import TupleType, ListType
 from consts import CO_VARARGS, CO_VARKEYWORDS
 
@@ -193,7 +190,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Sub(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Sub((%s, %s))" % (repr(self.left), repr(self.right))
 
 class ListCompIf(Node):
     nodes["listcompif"] = "ListCompIf"
@@ -212,7 +209,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Div(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Div((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Discard(Node):
     nodes["discard"] = "Discard"
@@ -240,7 +237,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "RightShift(%s, %s)" % (repr(self.left), repr(self.right))
+        return "RightShift((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Continue(Node):
     nodes["continue"] = "Continue"
@@ -280,7 +277,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "LeftShift(%s, %s)" % (repr(self.left), repr(self.right))
+        return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Mul(Node):
     nodes["mul"] = "Mul"
@@ -290,7 +287,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Mul(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Mul((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Yield(Node):
     nodes["yield"] = "Yield"
@@ -368,7 +365,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Mod(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Mod((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Class(Node):
     nodes["class"] = "Class"
@@ -466,7 +463,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Power(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Power((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Ellipsis(Node):
     nodes["ellipsis"] = "Ellipsis"
@@ -486,15 +483,6 @@
     def __repr__(self):
         return "Return(%s)" % (repr(self.value),)
 
-class Yield(Node):
-    nodes["yield"] = "Yield"
-    def __init__(self, value):
-        self.value = value
-    def _getChildren(self):
-        return self.value,
-    def __repr__(self):
-        return "Yield(%s)" % repr(self.value)
-
 class Add(Node):
     nodes["add"] = "Add"
     def __init__(self, (left, right)):
@@ -503,7 +491,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Add(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Add((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Function(Node):
     nodes["function"] = "Function"
diff --git a/Tools/compiler/astgen.py b/Tools/compiler/astgen.py
index 9386bf0..c0eb464 100644
--- a/Tools/compiler/astgen.py
+++ b/Tools/compiler/astgen.py
@@ -81,6 +81,8 @@
         print >> buf, "    def __repr__(self):"
         if self.argnames:
             fmt = COMMA.join(["%s"] * self.nargs)
+            if '(' in self.args:
+                fmt = '(%s)' % fmt
             vals = ["repr(self.%s)" % name for name in self.argnames]
             vals = COMMA.join(vals)
             if self.nargs == 1:
diff --git a/Tools/compiler/compiler/ast.py b/Tools/compiler/compiler/ast.py
index 7f29770..a160d29 100644
--- a/Tools/compiler/compiler/ast.py
+++ b/Tools/compiler/compiler/ast.py
@@ -2,9 +2,6 @@
 
 This file is automatically generated.
 """
-# XXX performance issues:
-# 1. getChildren() could be more efficient for many cases
-
 from types import TupleType, ListType
 from consts import CO_VARARGS, CO_VARKEYWORDS
 
@@ -193,7 +190,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Sub(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Sub((%s, %s))" % (repr(self.left), repr(self.right))
 
 class ListCompIf(Node):
     nodes["listcompif"] = "ListCompIf"
@@ -212,7 +209,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Div(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Div((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Discard(Node):
     nodes["discard"] = "Discard"
@@ -240,7 +237,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "RightShift(%s, %s)" % (repr(self.left), repr(self.right))
+        return "RightShift((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Continue(Node):
     nodes["continue"] = "Continue"
@@ -280,7 +277,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "LeftShift(%s, %s)" % (repr(self.left), repr(self.right))
+        return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Mul(Node):
     nodes["mul"] = "Mul"
@@ -290,7 +287,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Mul(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Mul((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Yield(Node):
     nodes["yield"] = "Yield"
@@ -368,7 +365,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Mod(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Mod((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Class(Node):
     nodes["class"] = "Class"
@@ -466,7 +463,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Power(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Power((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Ellipsis(Node):
     nodes["ellipsis"] = "Ellipsis"
@@ -486,15 +483,6 @@
     def __repr__(self):
         return "Return(%s)" % (repr(self.value),)
 
-class Yield(Node):
-    nodes["yield"] = "Yield"
-    def __init__(self, value):
-        self.value = value
-    def _getChildren(self):
-        return self.value,
-    def __repr__(self):
-        return "Yield(%s)" % repr(self.value)
-
 class Add(Node):
     nodes["add"] = "Add"
     def __init__(self, (left, right)):
@@ -503,7 +491,7 @@
     def _getChildren(self):
         return self.left, self.right
     def __repr__(self):
-        return "Add(%s, %s)" % (repr(self.left), repr(self.right))
+        return "Add((%s, %s))" % (repr(self.left), repr(self.right))
 
 class Function(Node):
     nodes["function"] = "Function"
diff --git a/Tools/compiler/compiler/astgen.py b/Tools/compiler/compiler/astgen.py
index 9386bf0..c0eb464 100644
--- a/Tools/compiler/compiler/astgen.py
+++ b/Tools/compiler/compiler/astgen.py
@@ -81,6 +81,8 @@
         print >> buf, "    def __repr__(self):"
         if self.argnames:
             fmt = COMMA.join(["%s"] * self.nargs)
+            if '(' in self.args:
+                fmt = '(%s)' % fmt
             vals = ["repr(self.%s)" % name for name in self.argnames]
             vals = COMMA.join(vals)
             if self.nargs == 1:
