# HG changeset patch # User Paul Boddie # Date 1352417773 -3600 # Node ID 4662ae29da435a6417fe2100b78aa91018a16553 # Parent 67922f10430b438c11988329fcda8e5816e5132b Added support for the _module annotation on operator-related nodes. diff -r 67922f10430b -r 4662ae29da43 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 @@ -1386,9 +1403,10 @@ def visit(self, visitor, *args): return visitor.visitDictComp(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 @@ -1434,9 +1452,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 @@ -1548,9 +1567,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 @@ -1688,9 +1708,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 @@ -1732,9 +1753,10 @@ def visit(self, visitor, *args): return visitor.visitSet(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 @@ -1816,9 +1838,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 @@ -1838,9 +1861,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 @@ -1957,9 +1981,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 @@ -1978,9 +2003,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