1.1 --- a/compiler/ast.py Sat Jul 14 23:36:14 2012 +0200
1.2 +++ b/compiler/ast.py Fri Nov 09 00:36:13 2012 +0100
1.3 @@ -63,6 +63,13 @@
1.4 self._attrtypes = None
1.5 self._attrspecifictypes = None
1.6
1.7 +class OperatorUser:
1.8 +
1.9 + "Operator-related node."
1.10 +
1.11 + def __init__(self):
1.12 + self._module = None
1.13 +
1.14 class Node(AttributeUser):
1.15
1.16 "Abstract base class for ast nodes."
1.17 @@ -108,9 +115,10 @@
1.18 def visit(self, visitor, *args):
1.19 return visitor.visitExpression(self, *args)
1.20
1.21 -class Add(Node):
1.22 +class Add(Node, OperatorUser):
1.23 def __init__(self, leftright, lineno=None):
1.24 Node.__init__(self)
1.25 + OperatorUser.__init__(self)
1.26 self.left = leftright[0]
1.27 self.right = leftright[1]
1.28 self.lineno = lineno
1.29 @@ -314,9 +322,10 @@
1.30 def visit(self, visitor, *args):
1.31 return visitor.visitAssign(self, *args)
1.32
1.33 -class AugAssign(Node):
1.34 +class AugAssign(Node, OperatorUser):
1.35 def __init__(self, node, op, expr, lineno=None):
1.36 Node.__init__(self)
1.37 + OperatorUser.__init__(self)
1.38 self.node = node
1.39 self.op = op
1.40 self.expr = expr
1.41 @@ -358,9 +367,10 @@
1.42 def visit(self, visitor, *args):
1.43 return visitor.visitBackquote(self, *args)
1.44
1.45 -class Bitand(Node):
1.46 +class Bitand(Node, OperatorUser):
1.47 def __init__(self, nodes, lineno=None):
1.48 Node.__init__(self)
1.49 + OperatorUser.__init__(self)
1.50 self.nodes = nodes
1.51 self.lineno = lineno
1.52
1.53 @@ -381,9 +391,10 @@
1.54 def visit(self, visitor, *args):
1.55 return visitor.visitBitand(self, *args)
1.56
1.57 -class Bitor(Node):
1.58 +class Bitor(Node, OperatorUser):
1.59 def __init__(self, nodes, lineno=None):
1.60 Node.__init__(self)
1.61 + OperatorUser.__init__(self)
1.62 self.nodes = nodes
1.63 self.lineno = lineno
1.64
1.65 @@ -404,9 +415,10 @@
1.66 def visit(self, visitor, *args):
1.67 return visitor.visitBitor(self, *args)
1.68
1.69 -class Bitxor(Node):
1.70 +class Bitxor(Node, OperatorUser):
1.71 def __init__(self, nodes, lineno=None):
1.72 Node.__init__(self)
1.73 + OperatorUser.__init__(self)
1.74 self.nodes = nodes
1.75 self.lineno = lineno
1.76
1.77 @@ -531,9 +543,10 @@
1.78 def visit(self, visitor, *args):
1.79 return visitor.visitClass(self, *args)
1.80
1.81 -class Compare(Node):
1.82 +class Compare(Node, OperatorUser):
1.83 def __init__(self, expr, ops, lineno=None):
1.84 Node.__init__(self)
1.85 + OperatorUser.__init__(self)
1.86 self.expr = expr
1.87 self.ops = ops
1.88 self.lineno = lineno
1.89 @@ -667,9 +680,10 @@
1.90 def visit(self, visitor, *args):
1.91 return visitor.visitDiscard(self, *args)
1.92
1.93 -class Div(Node):
1.94 +class Div(Node, OperatorUser):
1.95 def __init__(self, leftright, lineno=None):
1.96 Node.__init__(self)
1.97 + OperatorUser.__init__(self)
1.98 self.left = leftright[0]
1.99 self.right = leftright[1]
1.100 self.lineno = lineno
1.101 @@ -743,9 +757,10 @@
1.102 def visit(self, visitor, *args):
1.103 return visitor.visitExec(self, *args)
1.104
1.105 -class FloorDiv(Node):
1.106 +class FloorDiv(Node, OperatorUser):
1.107 def __init__(self, leftright, lineno=None):
1.108 Node.__init__(self)
1.109 + OperatorUser.__init__(self)
1.110 self.left = leftright[0]
1.111 self.right = leftright[1]
1.112 self.lineno = lineno
1.113 @@ -1120,9 +1135,10 @@
1.114 def visit(self, visitor, *args):
1.115 return visitor.visitImport(self, *args)
1.116
1.117 -class Invert(Node):
1.118 +class Invert(Node, OperatorUser):
1.119 def __init__(self, expr, lineno=None):
1.120 Node.__init__(self)
1.121 + OperatorUser.__init__(self)
1.122 self.expr = expr
1.123 self.lineno = lineno
1.124
1.125 @@ -1201,9 +1217,10 @@
1.126 def visit(self, visitor, *args):
1.127 return visitor.visitLambda(self, *args)
1.128
1.129 -class LeftShift(Node):
1.130 +class LeftShift(Node, OperatorUser):
1.131 def __init__(self, leftright, lineno=None):
1.132 Node.__init__(self)
1.133 + OperatorUser.__init__(self)
1.134 self.left = leftright[0]
1.135 self.right = leftright[1]
1.136 self.lineno = lineno
1.137 @@ -1386,9 +1403,10 @@
1.138 def visit(self, visitor, *args):
1.139 return visitor.visitDictComp(self, *args)
1.140
1.141 -class Mod(Node):
1.142 +class Mod(Node, OperatorUser):
1.143 def __init__(self, leftright, lineno=None):
1.144 Node.__init__(self)
1.145 + OperatorUser.__init__(self)
1.146 self.left = leftright[0]
1.147 self.right = leftright[1]
1.148 self.lineno = lineno
1.149 @@ -1434,9 +1452,10 @@
1.150 def visit(self, visitor, *args):
1.151 return visitor.visitModule(self, *args)
1.152
1.153 -class Mul(Node):
1.154 +class Mul(Node, OperatorUser):
1.155 def __init__(self, leftright, lineno=None):
1.156 Node.__init__(self)
1.157 + OperatorUser.__init__(self)
1.158 self.left = leftright[0]
1.159 self.right = leftright[1]
1.160 self.lineno = lineno
1.161 @@ -1548,9 +1567,10 @@
1.162 def visit(self, visitor, *args):
1.163 return visitor.visitPass(self, *args)
1.164
1.165 -class Power(Node):
1.166 +class Power(Node, OperatorUser):
1.167 def __init__(self, leftright, lineno=None):
1.168 Node.__init__(self)
1.169 + OperatorUser.__init__(self)
1.170 self.left = leftright[0]
1.171 self.right = leftright[1]
1.172 self.lineno = lineno
1.173 @@ -1688,9 +1708,10 @@
1.174 def visit(self, visitor, *args):
1.175 return visitor.visitReturn(self, *args)
1.176
1.177 -class RightShift(Node):
1.178 +class RightShift(Node, OperatorUser):
1.179 def __init__(self, leftright, lineno=None):
1.180 Node.__init__(self)
1.181 + OperatorUser.__init__(self)
1.182 self.left = leftright[0]
1.183 self.right = leftright[1]
1.184 self.lineno = lineno
1.185 @@ -1732,9 +1753,10 @@
1.186 def visit(self, visitor, *args):
1.187 return visitor.visitSet(self, *args)
1.188
1.189 -class Slice(Node):
1.190 +class Slice(Node, OperatorUser):
1.191 def __init__(self, expr, flags, lower, upper, lineno=None):
1.192 Node.__init__(self)
1.193 + OperatorUser.__init__(self)
1.194 self.expr = expr
1.195 self.flags = flags
1.196 self.lower = lower
1.197 @@ -1816,9 +1838,10 @@
1.198 def visit(self, visitor, *args):
1.199 return visitor.visitStmt(self, *args)
1.200
1.201 -class Sub(Node):
1.202 +class Sub(Node, OperatorUser):
1.203 def __init__(self, leftright, lineno=None):
1.204 Node.__init__(self)
1.205 + OperatorUser.__init__(self)
1.206 self.left = leftright[0]
1.207 self.right = leftright[1]
1.208 self.lineno = lineno
1.209 @@ -1838,9 +1861,10 @@
1.210 def visit(self, visitor, *args):
1.211 return visitor.visitSub(self, *args)
1.212
1.213 -class Subscript(Node):
1.214 +class Subscript(Node, OperatorUser):
1.215 def __init__(self, expr, flags, subs, lineno=None):
1.216 Node.__init__(self)
1.217 + OperatorUser.__init__(self)
1.218 self.expr = expr
1.219 self.flags = flags
1.220 self.subs = subs
1.221 @@ -1957,9 +1981,10 @@
1.222 def visit(self, visitor, *args):
1.223 return visitor.visitTuple(self, *args)
1.224
1.225 -class UnaryAdd(Node):
1.226 +class UnaryAdd(Node, OperatorUser):
1.227 def __init__(self, expr, lineno=None):
1.228 Node.__init__(self)
1.229 + OperatorUser.__init__(self)
1.230 self.expr = expr
1.231 self.lineno = lineno
1.232
1.233 @@ -1978,9 +2003,10 @@
1.234 def visit(self, visitor, *args):
1.235 return visitor.visitUnaryAdd(self, *args)
1.236
1.237 -class UnarySub(Node):
1.238 +class UnarySub(Node, OperatorUser):
1.239 def __init__(self, expr, lineno=None):
1.240 Node.__init__(self)
1.241 + OperatorUser.__init__(self)
1.242 self.expr = expr
1.243 self.lineno = lineno
1.244