# HG changeset patch # User Paul Boddie # Date 1352417773 -3600 # Node ID 0abf0d2ef16df5b867e0aab70747dd71d50a7415 # Parent d2a82fdab2af42c2b83461786ab5b312989925e5 Added support for the _module annotation on operator-related nodes. diff -r d2a82fdab2af -r 0abf0d2ef16d compiler/ast.py --- a/compiler/ast.py Sat Jul 14 23:36:14 2012 +0200 +++ b/compiler/ast.py Fri Nov 09 00:36:13 2012 +0100 @@ -63,6 +63,13 @@ self._attrtypes = None self._attrspecifictypes = None +class OperatorUser: + + "Operator-related node." + + def __init__(self): + self._module = None + class Node(AttributeUser): "Abstract base class for ast nodes." @@ -108,9 +115,10 @@ def visit(self, visitor, *args): return visitor.visitExpression(self, *args) -class Add(Node): +class Add(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -314,9 +322,10 @@ def visit(self, visitor, *args): return visitor.visitAssign(self, *args) -class AugAssign(Node): +class AugAssign(Node, OperatorUser): def __init__(self, node, op, expr, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.node = node self.op = op self.expr = expr @@ -358,9 +367,10 @@ def visit(self, visitor, *args): return visitor.visitBackquote(self, *args) -class Bitand(Node): +class Bitand(Node, OperatorUser): def __init__(self, nodes, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.nodes = nodes self.lineno = lineno @@ -381,9 +391,10 @@ def visit(self, visitor, *args): return visitor.visitBitand(self, *args) -class Bitor(Node): +class Bitor(Node, OperatorUser): def __init__(self, nodes, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.nodes = nodes self.lineno = lineno @@ -404,9 +415,10 @@ def visit(self, visitor, *args): return visitor.visitBitor(self, *args) -class Bitxor(Node): +class Bitxor(Node, OperatorUser): def __init__(self, nodes, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.nodes = nodes self.lineno = lineno @@ -531,9 +543,10 @@ def visit(self, visitor, *args): return visitor.visitClass(self, *args) -class Compare(Node): +class Compare(Node, OperatorUser): def __init__(self, expr, ops, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.ops = ops self.lineno = lineno @@ -667,9 +680,10 @@ def visit(self, visitor, *args): return visitor.visitDiscard(self, *args) -class Div(Node): +class Div(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -743,9 +757,10 @@ def visit(self, visitor, *args): return visitor.visitExec(self, *args) -class FloorDiv(Node): +class FloorDiv(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1120,9 +1135,10 @@ def visit(self, visitor, *args): return visitor.visitImport(self, *args) -class Invert(Node): +class Invert(Node, OperatorUser): def __init__(self, expr, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.lineno = lineno @@ -1201,9 +1217,10 @@ def visit(self, visitor, *args): return visitor.visitLambda(self, *args) -class LeftShift(Node): +class LeftShift(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1329,9 +1346,10 @@ def visit(self, visitor, *args): return visitor.visitListCompIf(self, *args) -class Mod(Node): +class Mod(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1377,9 +1395,10 @@ def visit(self, visitor, *args): return visitor.visitModule(self, *args) -class Mul(Node): +class Mul(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1491,9 +1510,10 @@ def visit(self, visitor, *args): return visitor.visitPass(self, *args) -class Power(Node): +class Power(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1631,9 +1651,10 @@ def visit(self, visitor, *args): return visitor.visitReturn(self, *args) -class RightShift(Node): +class RightShift(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1653,9 +1674,10 @@ def visit(self, visitor, *args): return visitor.visitRightShift(self, *args) -class Slice(Node): +class Slice(Node, OperatorUser): def __init__(self, expr, flags, lower, upper, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.flags = flags self.lower = lower @@ -1737,9 +1759,10 @@ def visit(self, visitor, *args): return visitor.visitStmt(self, *args) -class Sub(Node): +class Sub(Node, OperatorUser): def __init__(self, leftright, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.left = leftright[0] self.right = leftright[1] self.lineno = lineno @@ -1759,9 +1782,10 @@ def visit(self, visitor, *args): return visitor.visitSub(self, *args) -class Subscript(Node): +class Subscript(Node, OperatorUser): def __init__(self, expr, flags, subs, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.flags = flags self.subs = subs @@ -1878,9 +1902,10 @@ def visit(self, visitor, *args): return visitor.visitTuple(self, *args) -class UnaryAdd(Node): +class UnaryAdd(Node, OperatorUser): def __init__(self, expr, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.lineno = lineno @@ -1899,9 +1924,10 @@ def visit(self, visitor, *args): return visitor.visitUnaryAdd(self, *args) -class UnarySub(Node): +class UnarySub(Node, OperatorUser): def __init__(self, expr, lineno=None): Node.__init__(self) + OperatorUser.__init__(self) self.expr = expr self.lineno = lineno