1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/compiler/ast.py Tue Aug 30 16:51:10 2016 +0200
1.3 @@ -0,0 +1,1786 @@
1.4 +"""Python abstract syntax node definitions
1.5 +
1.6 +This file was originally generated by Tools/compiler/astgen.py
1.7 +"""
1.8 +from compiler.consts import CO_VARARGS, CO_VARKEYWORDS
1.9 +
1.10 +def flatten(seq):
1.11 + l = []
1.12 + for elt in seq:
1.13 + if isinstance(elt, (tuple, list)):
1.14 + for elt2 in flatten(elt):
1.15 + l.append(elt2)
1.16 + else:
1.17 + l.append(elt)
1.18 + return l
1.19 +
1.20 +def flatten_nodes(seq):
1.21 + return [n for n in flatten(seq) if isinstance(n, Node)]
1.22 +
1.23 +def flatten_statement(seq):
1.24 + l = []
1.25 + for elt in seq:
1.26 + if isinstance(elt, Stmt):
1.27 + l += flatten_statement(elt)
1.28 + else:
1.29 + l.append(elt)
1.30 + return l
1.31 +
1.32 +def flatten_assignment(node):
1.33 + l = []
1.34 + if isinstance(node, (AssList, AssTuple)):
1.35 + for n in node.nodes:
1.36 + l += flatten_assignment(n)
1.37 + else:
1.38 + l.append(node)
1.39 + return l
1.40 +
1.41 +def is_deletion(node):
1.42 + return isinstance(node, (AssAttr, AssName)) and node.flags == "OP_DELETE"
1.43 +
1.44 +def docstring(s):
1.45 + if s.find("\n") != -1:
1.46 + if s.find("'''") != -1:
1.47 + return '"""%s"""' % s.replace('"""', '\\"\\"\\"')
1.48 + else:
1.49 + return "'''%s'''" % s.replace("'''", "\\'\\'\\'")
1.50 + else:
1.51 + return repr(s)
1.52 +
1.53 +def indent(s):
1.54 + return s.replace("\n", "\n\t")
1.55 +
1.56 +def get_defaults(node):
1.57 +
1.58 + "Return a list of (argument name, default) tuples for the 'node'."
1.59 +
1.60 + star = (node.flags & 4 != 0) and 1 or 0
1.61 + dstar = (node.flags & 8 != 0) and 1 or 0
1.62 + argnames = node.argnames[:]
1.63 +
1.64 + # Add stars to star and dstar parameters.
1.65 +
1.66 + if star:
1.67 + argnames[-dstar-star] = "*%s" % argnames[-dstar-star]
1.68 + if dstar:
1.69 + argnames[-dstar] = "**%s" % argnames[-dstar]
1.70 +
1.71 + # Map defaults to parameters.
1.72 +
1.73 + defaults = [None] * (len(node.argnames) - star - dstar - len(node.defaults)) + list(node.defaults) + [None] * (star + dstar)
1.74 + return zip(argnames, defaults)
1.75 +
1.76 +def decode_function(node):
1.77 + return [(default and "%s=%s" % (argname, default) or argname) for (argname, default) in get_defaults(node)]
1.78 +
1.79 +nodes = {}
1.80 +
1.81 +class OperatorUser:
1.82 +
1.83 + "Operator-related node."
1.84 +
1.85 + pass
1.86 +
1.87 +class Operator(OperatorUser):
1.88 +
1.89 + "Operator node."
1.90 +
1.91 + pass
1.92 +
1.93 +class Node:
1.94 +
1.95 + "Abstract base class for ast nodes."
1.96 +
1.97 + def getChildren(self):
1.98 + pass # implemented by subclasses
1.99 +
1.100 + def __iter__(self):
1.101 + for n in self.getChildren():
1.102 + yield n
1.103 +
1.104 + def getChildNodes(self):
1.105 + pass # implemented by subclasses
1.106 +
1.107 +class EmptyNode(Node):
1.108 + pass
1.109 +
1.110 +class Expression(Node):
1.111 + # Expression is an artificial node class to support "eval"
1.112 + nodes["expression"] = "Expression"
1.113 + def __init__(self, node):
1.114 + self.node = node
1.115 +
1.116 + def getChildren(self):
1.117 + return self.node,
1.118 +
1.119 + def getChildNodes(self):
1.120 + return self.node,
1.121 +
1.122 + def __repr__(self):
1.123 + return "Expression(%r)" % (self.node,)
1.124 +
1.125 + def __str__(self):
1.126 + return str(self.node)
1.127 +
1.128 +class Add(Node, Operator):
1.129 + def __init__(self, leftright, lineno=None):
1.130 + self.left = leftright[0]
1.131 + self.right = leftright[1]
1.132 + self.lineno = lineno
1.133 +
1.134 + def getChildren(self):
1.135 + return self.left, self.right
1.136 +
1.137 + def getChildNodes(self):
1.138 + return self.left, self.right
1.139 +
1.140 + def __repr__(self):
1.141 + return "Add((%r, %r))" % (self.left, self.right)
1.142 +
1.143 + def __str__(self):
1.144 + return "(%s + %s)" % (self.left, self.right)
1.145 +
1.146 +class And(Node):
1.147 + def __init__(self, nodes, lineno=None):
1.148 + self.nodes = nodes
1.149 + self.lineno = lineno
1.150 +
1.151 + def getChildren(self):
1.152 + return tuple(flatten(self.nodes))
1.153 +
1.154 + def getChildNodes(self):
1.155 + nodelist = []
1.156 + nodelist.extend(flatten_nodes(self.nodes))
1.157 + return tuple(nodelist)
1.158 +
1.159 + def __repr__(self):
1.160 + return "And(%r)" % (self.nodes,)
1.161 +
1.162 + def __str__(self):
1.163 + return "(%s)" % " and ".join(map(str, self.nodes))
1.164 +
1.165 +class AssAttr(Node):
1.166 + def __init__(self, expr, attrname, flags, lineno=None):
1.167 + self.expr = expr
1.168 + self.attrname = attrname
1.169 + self.flags = flags
1.170 + self.lineno = lineno
1.171 +
1.172 + def getChildren(self):
1.173 + return self.expr, self.attrname, self.flags
1.174 +
1.175 + def getChildNodes(self):
1.176 + return self.expr,
1.177 +
1.178 + def __repr__(self):
1.179 + return "AssAttr(%r, %r, %r)" % (self.expr, self.attrname, self.flags)
1.180 +
1.181 + def __str__(self):
1.182 + return "%s%s.%s" % (self.flags == "OP_DELETE" and "del " or "", self.expr, self.attrname)
1.183 +
1.184 +class AssList(Node):
1.185 + def __init__(self, nodes, lineno=None):
1.186 + self.nodes = nodes
1.187 + self.lineno = lineno
1.188 +
1.189 + def getChildren(self):
1.190 + return tuple(flatten(self.nodes))
1.191 +
1.192 + def getChildNodes(self):
1.193 + nodelist = []
1.194 + nodelist.extend(flatten_nodes(self.nodes))
1.195 + return tuple(nodelist)
1.196 +
1.197 + def __repr__(self):
1.198 + return "AssList(%r)" % (self.nodes,)
1.199 +
1.200 + def __str__(self):
1.201 + nodes = flatten_assignment(self)
1.202 + if nodes and is_deletion(nodes[0]):
1.203 + return "; ".join(map(str, self.nodes))
1.204 + else:
1.205 + return "[%s]" % ", ".join(map(str, self.nodes))
1.206 +
1.207 +class AssName(Node):
1.208 + def __init__(self, name, flags, lineno=None):
1.209 + self.name = name
1.210 + self.flags = flags
1.211 + self.lineno = lineno
1.212 +
1.213 + def getChildren(self):
1.214 + return self.name, self.flags
1.215 +
1.216 + def getChildNodes(self):
1.217 + return ()
1.218 +
1.219 + def __repr__(self):
1.220 + return "AssName(%r, %r)" % (self.name, self.flags)
1.221 +
1.222 + def __str__(self):
1.223 + return "%s%s" % (self.flags == "OP_DELETE" and "del " or "", self.name)
1.224 +
1.225 +class AssTuple(Node):
1.226 + def __init__(self, nodes, lineno=None):
1.227 + self.nodes = nodes
1.228 + self.lineno = lineno
1.229 +
1.230 + def getChildren(self):
1.231 + return tuple(flatten(self.nodes))
1.232 +
1.233 + def getChildNodes(self):
1.234 + nodelist = []
1.235 + nodelist.extend(flatten_nodes(self.nodes))
1.236 + return tuple(nodelist)
1.237 +
1.238 + def __repr__(self):
1.239 + return "AssTuple(%r)" % (self.nodes,)
1.240 +
1.241 + def __str__(self):
1.242 + nodes = flatten_assignment(self)
1.243 + if nodes and is_deletion(nodes[0]):
1.244 + return "; ".join(map(str, self.nodes))
1.245 + else:
1.246 + return "(%s)" % ", ".join(map(str, self.nodes))
1.247 +
1.248 +class Assert(Node):
1.249 + def __init__(self, test, fail, lineno=None):
1.250 + self.test = test
1.251 + self.fail = fail
1.252 + self.lineno = lineno
1.253 +
1.254 + def getChildren(self):
1.255 + children = []
1.256 + children.append(self.test)
1.257 + children.append(self.fail)
1.258 + return tuple(children)
1.259 +
1.260 + def getChildNodes(self):
1.261 + nodelist = []
1.262 + nodelist.append(self.test)
1.263 + if self.fail is not None:
1.264 + nodelist.append(self.fail)
1.265 + return tuple(nodelist)
1.266 +
1.267 + def __repr__(self):
1.268 + return "Assert(%r, %r)" % (self.test, self.fail)
1.269 +
1.270 + def __str__(self):
1.271 + return "assert %s%s" % (self.test, self.fail and ", %s" % self.fail or "")
1.272 +
1.273 +class Assign(Node):
1.274 + def __init__(self, nodes, expr, lineno=None):
1.275 + self.nodes = nodes
1.276 + self.expr = expr
1.277 + self.lineno = lineno
1.278 +
1.279 + def getChildren(self):
1.280 + children = []
1.281 + children.extend(flatten(self.nodes))
1.282 + children.append(self.expr)
1.283 + return tuple(children)
1.284 +
1.285 + def getChildNodes(self):
1.286 + nodelist = []
1.287 + nodelist.extend(flatten_nodes(self.nodes))
1.288 + nodelist.append(self.expr)
1.289 + return tuple(nodelist)
1.290 +
1.291 + def __repr__(self):
1.292 + return "Assign(%r, %r)" % (self.nodes, self.expr)
1.293 +
1.294 + def __str__(self):
1.295 + return "%s = %s" % (", ".join(map(str, self.nodes)), self.expr)
1.296 +
1.297 +class AugAssign(Node, OperatorUser):
1.298 + def __init__(self, node, op, expr, lineno=None):
1.299 + self.node = node
1.300 + self.op = op
1.301 + self.expr = expr
1.302 + self.lineno = lineno
1.303 +
1.304 + def getChildren(self):
1.305 + return self.node, self.op, self.expr
1.306 +
1.307 + def getChildNodes(self):
1.308 + return self.node, self.expr
1.309 +
1.310 + def __repr__(self):
1.311 + return "AugAssign(%r, %r, %r)" % (self.node, self.op, self.expr)
1.312 +
1.313 + def __str__(self):
1.314 + return "%s %s %s" % (self.node, self.op, self.expr)
1.315 +
1.316 +class Backquote(Node):
1.317 + def __init__(self, expr, lineno=None):
1.318 + self.expr = expr
1.319 + self.lineno = lineno
1.320 +
1.321 + def getChildren(self):
1.322 + return self.expr,
1.323 +
1.324 + def getChildNodes(self):
1.325 + return self.expr,
1.326 +
1.327 + def __repr__(self):
1.328 + return "Backquote(%r)" % (self.expr,)
1.329 +
1.330 + def __str__(self):
1.331 + return "`%s`" % self.expr
1.332 +
1.333 +class Bitand(Node, Operator):
1.334 + def __init__(self, nodes, lineno=None):
1.335 + self.nodes = nodes
1.336 + self.lineno = lineno
1.337 +
1.338 + def getChildren(self):
1.339 + return tuple(flatten(self.nodes))
1.340 +
1.341 + def getChildNodes(self):
1.342 + nodelist = []
1.343 + nodelist.extend(flatten_nodes(self.nodes))
1.344 + return tuple(nodelist)
1.345 +
1.346 + def __repr__(self):
1.347 + return "Bitand(%r)" % (self.nodes,)
1.348 +
1.349 + def __str__(self):
1.350 + return "(%s)" % " & ".join(map(str, self.nodes))
1.351 +
1.352 +class Bitor(Node, Operator):
1.353 + def __init__(self, nodes, lineno=None):
1.354 + self.nodes = nodes
1.355 + self.lineno = lineno
1.356 +
1.357 + def getChildren(self):
1.358 + return tuple(flatten(self.nodes))
1.359 +
1.360 + def getChildNodes(self):
1.361 + nodelist = []
1.362 + nodelist.extend(flatten_nodes(self.nodes))
1.363 + return tuple(nodelist)
1.364 +
1.365 + def __repr__(self):
1.366 + return "Bitor(%r)" % (self.nodes,)
1.367 +
1.368 + def __str__(self):
1.369 + return "(%s)" % " | ".join(map(str, self.nodes))
1.370 +
1.371 +class Bitxor(Node, Operator):
1.372 + def __init__(self, nodes, lineno=None):
1.373 + self.nodes = nodes
1.374 + self.lineno = lineno
1.375 +
1.376 + def getChildren(self):
1.377 + return tuple(flatten(self.nodes))
1.378 +
1.379 + def getChildNodes(self):
1.380 + nodelist = []
1.381 + nodelist.extend(flatten_nodes(self.nodes))
1.382 + return tuple(nodelist)
1.383 +
1.384 + def __repr__(self):
1.385 + return "Bitxor(%r)" % (self.nodes,)
1.386 +
1.387 + def __str__(self):
1.388 + return "(%s)" % " ^ ".join(map(str, self.nodes))
1.389 +
1.390 +class Break(Node):
1.391 + def __init__(self, lineno=None):
1.392 + self.lineno = lineno
1.393 +
1.394 + def getChildren(self):
1.395 + return ()
1.396 +
1.397 + def getChildNodes(self):
1.398 + return ()
1.399 +
1.400 + def __repr__(self):
1.401 + return "Break()"
1.402 +
1.403 + def __str__(self):
1.404 + return "break"
1.405 +
1.406 +class CallFunc(Node):
1.407 + def __init__(self, node, args, star_args = None, dstar_args = None, lineno=None):
1.408 + self.node = node
1.409 + self.args = args
1.410 + self.star_args = star_args
1.411 + self.dstar_args = dstar_args
1.412 + self.lineno = lineno
1.413 +
1.414 + def getChildren(self):
1.415 + children = []
1.416 + children.append(self.node)
1.417 + children.extend(flatten(self.args))
1.418 + children.append(self.star_args)
1.419 + children.append(self.dstar_args)
1.420 + return tuple(children)
1.421 +
1.422 + def getChildNodes(self):
1.423 + nodelist = []
1.424 + nodelist.append(self.node)
1.425 + nodelist.extend(flatten_nodes(self.args))
1.426 + if self.star_args is not None:
1.427 + nodelist.append(self.star_args)
1.428 + if self.dstar_args is not None:
1.429 + nodelist.append(self.dstar_args)
1.430 + return tuple(nodelist)
1.431 +
1.432 + def __repr__(self):
1.433 + args = []
1.434 + if self.dstar_args:
1.435 + args.insert(0, repr(self.dstar_args))
1.436 + if args or self.star_args:
1.437 + args.insert(0, repr(self.star_args))
1.438 + return "CallFunc(%r, %r%s)" % (self.node, self.args, args and (", %s" % ", ".join(args)) or "")
1.439 +
1.440 + def __str__(self):
1.441 + star_args = self.star_args and ["*%s" % self.star_args] or []
1.442 + dstar_args = self.dstar_args and ["**%s" % self.dstar_args] or []
1.443 + return "%s(%s)" % (self.node, ", ".join(map(str, self.args + star_args + dstar_args)))
1.444 +
1.445 +class Class(Node):
1.446 + def __init__(self, name, bases, doc, code, decorators = None, lineno=None):
1.447 + self.name = name
1.448 + self.bases = bases
1.449 + self.doc = doc
1.450 + self.code = code
1.451 + self.decorators = decorators
1.452 + self.lineno = lineno
1.453 +
1.454 + def getChildren(self):
1.455 + children = []
1.456 + children.append(self.name)
1.457 + children.extend(flatten(self.bases))
1.458 + children.append(self.doc)
1.459 + children.append(self.code)
1.460 + children.append(self.decorators)
1.461 + return tuple(children)
1.462 +
1.463 + def getChildNodes(self):
1.464 + nodelist = []
1.465 + nodelist.extend(flatten_nodes(self.bases))
1.466 + nodelist.append(self.code)
1.467 + if self.decorators is not None:
1.468 + nodelist.append(self.decorators)
1.469 + return tuple(nodelist)
1.470 +
1.471 + def __repr__(self):
1.472 + return "Class(%r, %r, %r, %r, %r)" % (self.name, self.bases, self.doc, self.code, self.decorators)
1.473 +
1.474 + def __str__(self):
1.475 + return "%sclass %s%s:%s%s\n" % (
1.476 + self.decorators and "%s\n" % "\n".join([("@%s" % decorator) for decorator in self.decorators]) or "",
1.477 + self.name,
1.478 + self.bases and "(%s)" % ", ".join(map(str, self.bases)) or "",
1.479 + self.doc and "\n\t" + docstring(self.doc) or "",
1.480 + indent("\n%s" % self.code)
1.481 + )
1.482 +
1.483 +class Compare(Node, OperatorUser):
1.484 + def __init__(self, expr, ops, lineno=None):
1.485 + self.expr = expr
1.486 + self.ops = ops
1.487 + self.lineno = lineno
1.488 +
1.489 + def getChildren(self):
1.490 + children = []
1.491 + children.append(self.expr)
1.492 + children.extend(flatten(self.ops))
1.493 + return tuple(children)
1.494 +
1.495 + def getChildNodes(self):
1.496 + nodelist = []
1.497 + nodelist.append(self.expr)
1.498 + nodelist.extend(flatten_nodes(self.ops))
1.499 + return tuple(nodelist)
1.500 +
1.501 + def __repr__(self):
1.502 + return "Compare(%r, %r)" % (self.expr, self.ops)
1.503 +
1.504 + def __str__(self):
1.505 + return "%s %s" % (self.expr, " ".join([("%s %s" % op) for op in self.ops]))
1.506 +
1.507 +class Const(Node):
1.508 + def __init__(self, value, lineno=None):
1.509 + self.value = value
1.510 + self.lineno = lineno
1.511 +
1.512 + def getChildren(self):
1.513 + return self.value,
1.514 +
1.515 + def getChildNodes(self):
1.516 + return ()
1.517 +
1.518 + def __repr__(self):
1.519 + return "Const(%r)" % (self.value,)
1.520 +
1.521 + def __str__(self):
1.522 + return repr(self.value)
1.523 +
1.524 +class Continue(Node):
1.525 + def __init__(self, lineno=None):
1.526 + self.lineno = lineno
1.527 +
1.528 + def getChildren(self):
1.529 + return ()
1.530 +
1.531 + def getChildNodes(self):
1.532 + return ()
1.533 +
1.534 + def __repr__(self):
1.535 + return "Continue()"
1.536 +
1.537 + def __str__(self):
1.538 + return "continue"
1.539 +
1.540 +class Decorators(Node):
1.541 + def __init__(self, nodes, lineno=None):
1.542 + self.nodes = nodes
1.543 + self.lineno = lineno
1.544 +
1.545 + def getChildren(self):
1.546 + return tuple(flatten(self.nodes))
1.547 +
1.548 + def getChildNodes(self):
1.549 + nodelist = []
1.550 + nodelist.extend(flatten_nodes(self.nodes))
1.551 + return tuple(nodelist)
1.552 +
1.553 + def __repr__(self):
1.554 + return "Decorators(%r)" % (self.nodes,)
1.555 +
1.556 + def __str__(self):
1.557 + return "\n".join([("@%s" % node) for node in self.nodes])
1.558 +
1.559 +class Dict(Node):
1.560 + def __init__(self, items, lineno=None):
1.561 + self.items = items
1.562 + self.lineno = lineno
1.563 +
1.564 + def getChildren(self):
1.565 + return tuple(flatten(self.items))
1.566 +
1.567 + def getChildNodes(self):
1.568 + nodelist = []
1.569 + nodelist.extend(flatten_nodes(self.items))
1.570 + return tuple(nodelist)
1.571 +
1.572 + def __repr__(self):
1.573 + return "Dict(%r)" % (self.items,)
1.574 +
1.575 + def __str__(self):
1.576 + return "{%s}" % ", ".join([("%s : %s" % (key, value)) for (key, value) in self.items])
1.577 +
1.578 +class Discard(Node):
1.579 + def __init__(self, expr, lineno=None):
1.580 + self.expr = expr
1.581 + self.lineno = lineno
1.582 +
1.583 + def getChildren(self):
1.584 + return self.expr,
1.585 +
1.586 + def getChildNodes(self):
1.587 + return self.expr,
1.588 +
1.589 + def __repr__(self):
1.590 + return "Discard(%r)" % (self.expr,)
1.591 +
1.592 + def __str__(self):
1.593 + return str(self.expr)
1.594 +
1.595 +class Div(Node, Operator):
1.596 + def __init__(self, leftright, lineno=None):
1.597 + self.left = leftright[0]
1.598 + self.right = leftright[1]
1.599 + self.lineno = lineno
1.600 +
1.601 + def getChildren(self):
1.602 + return self.left, self.right
1.603 +
1.604 + def getChildNodes(self):
1.605 + return self.left, self.right
1.606 +
1.607 + def __repr__(self):
1.608 + return "Div((%r, %r))" % (self.left, self.right)
1.609 +
1.610 + def __str__(self):
1.611 + return "(%s / %s)" % (self.left, self.right)
1.612 +
1.613 +class Ellipsis(Node):
1.614 + def __init__(self, lineno=None):
1.615 + self.lineno = lineno
1.616 +
1.617 + def getChildren(self):
1.618 + return ()
1.619 +
1.620 + def getChildNodes(self):
1.621 + return ()
1.622 +
1.623 + def __repr__(self):
1.624 + return "Ellipsis()"
1.625 +
1.626 + def __str__(self):
1.627 + return "..."
1.628 +
1.629 +class Exec(Node):
1.630 + def __init__(self, expr, locals, globals, lineno=None):
1.631 + self.expr = expr
1.632 + self.locals = locals
1.633 + self.globals = globals
1.634 + self.lineno = lineno
1.635 +
1.636 + def getChildren(self):
1.637 + children = []
1.638 + children.append(self.expr)
1.639 + children.append(self.locals)
1.640 + children.append(self.globals)
1.641 + return tuple(children)
1.642 +
1.643 + def getChildNodes(self):
1.644 + nodelist = []
1.645 + nodelist.append(self.expr)
1.646 + if self.locals is not None:
1.647 + nodelist.append(self.locals)
1.648 + if self.globals is not None:
1.649 + nodelist.append(self.globals)
1.650 + return tuple(nodelist)
1.651 +
1.652 + def __repr__(self):
1.653 + return "Exec(%r, %r, %r)" % (self.expr, self.locals, self.globals)
1.654 +
1.655 + def __str__(self):
1.656 + return "exec %s%s%s" % (self.expr, self.locals and "in %s" % self.locals or "",
1.657 + self.globals and ", %s" % self.globals or "")
1.658 +
1.659 +class FloorDiv(Node, Operator):
1.660 + def __init__(self, leftright, lineno=None):
1.661 + self.left = leftright[0]
1.662 + self.right = leftright[1]
1.663 + self.lineno = lineno
1.664 +
1.665 + def getChildren(self):
1.666 + return self.left, self.right
1.667 +
1.668 + def getChildNodes(self):
1.669 + return self.left, self.right
1.670 +
1.671 + def __repr__(self):
1.672 + return "FloorDiv((%r, %r))" % (self.left, self.right)
1.673 +
1.674 + def __str__(self):
1.675 + return "(%s // %s)" % (self.left, self.right)
1.676 +
1.677 +class For(Node):
1.678 + def __init__(self, assign, list, body, else_, lineno=None):
1.679 + self.assign = assign
1.680 + self.list = list
1.681 + self.body = body
1.682 + self.else_ = else_
1.683 + self.lineno = lineno
1.684 +
1.685 + def getChildren(self):
1.686 + children = []
1.687 + children.append(self.assign)
1.688 + children.append(self.list)
1.689 + children.append(self.body)
1.690 + children.append(self.else_)
1.691 + return tuple(children)
1.692 +
1.693 + def getChildNodes(self):
1.694 + nodelist = []
1.695 + nodelist.append(self.assign)
1.696 + nodelist.append(self.list)
1.697 + nodelist.append(self.body)
1.698 + if self.else_ is not None:
1.699 + nodelist.append(self.else_)
1.700 + return tuple(nodelist)
1.701 +
1.702 + def __repr__(self):
1.703 + return "For(%r, %r, %r, %r)" % (self.assign, self.list, self.body, self.else_)
1.704 +
1.705 + def __str__(self):
1.706 + return "for %s in %s:%s%s" % (
1.707 + self.assign, self.list,
1.708 + indent("\n%s" % self.body),
1.709 + self.else_ and "\nelse:%s" % indent("\n%s" % self.else_) or ""
1.710 + )
1.711 +
1.712 +class From(Node):
1.713 + def __init__(self, modname, names, level, lineno=None):
1.714 + self.modname = modname
1.715 + self.names = names
1.716 + self.level = level
1.717 + self.lineno = lineno
1.718 +
1.719 + def getChildren(self):
1.720 + return self.modname, self.names, self.level
1.721 +
1.722 + def getChildNodes(self):
1.723 + return ()
1.724 +
1.725 + def __repr__(self):
1.726 + return "From(%r, %r, %r)" % (self.modname, self.names, self.level)
1.727 +
1.728 + def __str__(self):
1.729 + return "from %s import %s" % (self.modname,
1.730 + ", ".join([(alias and "%s as %s" % (name, alias) or name) for (name, alias) in self.names]))
1.731 +
1.732 +class Function(Node):
1.733 + def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=None):
1.734 + self.decorators = decorators
1.735 + self.name = name
1.736 + self.argnames = argnames
1.737 + self.defaults = defaults
1.738 + self.flags = flags
1.739 + self.doc = doc
1.740 + self.code = code
1.741 + self.lineno = lineno
1.742 + self.varargs = self.kwargs = None
1.743 + if flags & CO_VARARGS:
1.744 + self.varargs = 1
1.745 + if flags & CO_VARKEYWORDS:
1.746 + self.kwargs = 1
1.747 +
1.748 + def getChildren(self):
1.749 + children = []
1.750 + children.append(self.decorators)
1.751 + children.append(self.name)
1.752 + children.append(self.argnames)
1.753 + children.extend(flatten(self.defaults))
1.754 + children.append(self.flags)
1.755 + children.append(self.doc)
1.756 + children.append(self.code)
1.757 + return tuple(children)
1.758 +
1.759 + def getChildNodes(self):
1.760 + nodelist = []
1.761 + if self.decorators is not None:
1.762 + nodelist.append(self.decorators)
1.763 + nodelist.extend(flatten_nodes(self.defaults))
1.764 + nodelist.append(self.code)
1.765 + return tuple(nodelist)
1.766 +
1.767 + def __repr__(self):
1.768 + return "Function(%r, %r, %r, %r, %r, %r, %r)" % (self.decorators, self.name, self.argnames, self.defaults, self.flags, self.doc, self.code)
1.769 +
1.770 + def __str__(self):
1.771 + parameters = decode_function(self)
1.772 +
1.773 + return "%sdef %s(%s):%s%s\n" % (
1.774 + self.decorators and "%s\n" % "\n".join([("@%s" % decorator) for decorator in self.decorators]) or "",
1.775 + self.name,
1.776 + ", ".join(parameters),
1.777 + self.doc and "\n\n\t%s\n" % docstring(self.doc) or "",
1.778 + indent("\n%s" % self.code)
1.779 + )
1.780 +
1.781 +class GenExpr(Node):
1.782 + def __init__(self, code, lineno=None):
1.783 + self.code = code
1.784 + self.lineno = lineno
1.785 + self.argnames = ['.0']
1.786 + self.varargs = self.kwargs = None
1.787 +
1.788 + def getChildren(self):
1.789 + return self.code,
1.790 +
1.791 + def getChildNodes(self):
1.792 + return self.code,
1.793 +
1.794 + def __repr__(self):
1.795 + return "GenExpr(%r)" % (self.code,)
1.796 +
1.797 + def __str__(self):
1.798 + return str(self.code)
1.799 +
1.800 +class GenExprFor(Node):
1.801 + def __init__(self, assign, iter, ifs, lineno=None):
1.802 + self.assign = assign
1.803 + self.iter = iter
1.804 + self.ifs = ifs
1.805 + self.lineno = lineno
1.806 + self.is_outmost = False
1.807 +
1.808 + def getChildren(self):
1.809 + children = []
1.810 + children.append(self.assign)
1.811 + children.append(self.iter)
1.812 + children.extend(flatten(self.ifs))
1.813 + return tuple(children)
1.814 +
1.815 + def getChildNodes(self):
1.816 + nodelist = []
1.817 + nodelist.append(self.assign)
1.818 + nodelist.append(self.iter)
1.819 + nodelist.extend(flatten_nodes(self.ifs))
1.820 + return tuple(nodelist)
1.821 +
1.822 + def __repr__(self):
1.823 + return "GenExprFor(%r, %r, %r)" % (self.assign, self.iter, self.ifs)
1.824 +
1.825 + def __str__(self):
1.826 + return "for %s in %s%s" % (
1.827 + self.assign, self.iter,
1.828 + self.ifs and " ".join(map(str, self.ifs)) or ""
1.829 + )
1.830 +
1.831 +class GenExprIf(Node):
1.832 + def __init__(self, test, lineno=None):
1.833 + self.test = test
1.834 + self.lineno = lineno
1.835 +
1.836 + def getChildren(self):
1.837 + return self.test,
1.838 +
1.839 + def getChildNodes(self):
1.840 + return self.test,
1.841 +
1.842 + def __repr__(self):
1.843 + return "GenExprIf(%r)" % (self.test,)
1.844 +
1.845 + def __str__(self):
1.846 + return "if %s" % self.test
1.847 +
1.848 +class GenExprInner(Node):
1.849 + def __init__(self, expr, quals, lineno=None):
1.850 + self.expr = expr
1.851 + self.quals = quals
1.852 + self.lineno = lineno
1.853 +
1.854 + def getChildren(self):
1.855 + children = []
1.856 + children.append(self.expr)
1.857 + children.extend(flatten(self.quals))
1.858 + return tuple(children)
1.859 +
1.860 + def getChildNodes(self):
1.861 + nodelist = []
1.862 + nodelist.append(self.expr)
1.863 + nodelist.extend(flatten_nodes(self.quals))
1.864 + return tuple(nodelist)
1.865 +
1.866 + def __repr__(self):
1.867 + return "GenExprInner(%r, %r)" % (self.expr, self.quals)
1.868 +
1.869 + def __str__(self):
1.870 + return "%s %s" % (self.expr, " ".join(map(str, self.quals)))
1.871 +
1.872 +class Getattr(Node):
1.873 + def __init__(self, expr, attrname, lineno=None):
1.874 + self.expr = expr
1.875 + self.attrname = attrname
1.876 + self.lineno = lineno
1.877 +
1.878 + def getChildren(self):
1.879 + return self.expr, self.attrname
1.880 +
1.881 + def getChildNodes(self):
1.882 + return self.expr,
1.883 +
1.884 + def __repr__(self):
1.885 + return "Getattr(%r, %r)" % (self.expr, self.attrname)
1.886 +
1.887 + def __str__(self):
1.888 + return "%s.%s" % (self.expr, self.attrname)
1.889 +
1.890 +class Global(Node):
1.891 + def __init__(self, names, lineno=None):
1.892 + self.names = names
1.893 + self.lineno = lineno
1.894 +
1.895 + def getChildren(self):
1.896 + return self.names,
1.897 +
1.898 + def getChildNodes(self):
1.899 + return ()
1.900 +
1.901 + def __repr__(self):
1.902 + return "Global(%r)" % (self.names,)
1.903 +
1.904 + def __str__(self):
1.905 + return "global %s" % ", ".join(map(str, self.names))
1.906 +
1.907 +class If(Node):
1.908 + def __init__(self, tests, else_, lineno=None):
1.909 + self.tests = tests
1.910 + self.else_ = else_
1.911 + self.lineno = lineno
1.912 +
1.913 + def getChildren(self):
1.914 + children = []
1.915 + children.extend(flatten(self.tests))
1.916 + children.append(self.else_)
1.917 + return tuple(children)
1.918 +
1.919 + def getChildNodes(self):
1.920 + nodelist = []
1.921 + nodelist.extend(flatten_nodes(self.tests))
1.922 + if self.else_ is not None:
1.923 + nodelist.append(self.else_)
1.924 + return tuple(nodelist)
1.925 +
1.926 + def __repr__(self):
1.927 + return "If(%r, %r)" % (self.tests, self.else_)
1.928 +
1.929 + def __str__(self):
1.930 + tests = [("%sif %s:%s" % (i > 0 and "el" or "", test, indent("\n%s" % body))) for (i, (test, body)) in enumerate(self.tests)]
1.931 + return "%s%s" % (
1.932 + "\n".join(tests),
1.933 + self.else_ and "\nelse:%s" % indent("\n%s" % self.else_) or ""
1.934 + )
1.935 +
1.936 +class IfExp(Node):
1.937 + def __init__(self, test, then, else_, lineno=None):
1.938 + self.test = test
1.939 + self.then = then
1.940 + self.else_ = else_
1.941 + self.lineno = lineno
1.942 +
1.943 + def getChildren(self):
1.944 + return self.test, self.then, self.else_
1.945 +
1.946 + def getChildNodes(self):
1.947 + return self.test, self.then, self.else_
1.948 +
1.949 + def __repr__(self):
1.950 + return "IfExp(%r, %r, %r)" % (self.test, self.then, self.else_)
1.951 +
1.952 + def __str__(self):
1.953 + return "%s if %s else %s" % (self.then, self.test, self.else_)
1.954 +
1.955 +class Import(Node):
1.956 + def __init__(self, names, lineno=None):
1.957 + self.names = names
1.958 + self.lineno = lineno
1.959 +
1.960 + def getChildren(self):
1.961 + return self.names,
1.962 +
1.963 + def getChildNodes(self):
1.964 + return ()
1.965 +
1.966 + def __repr__(self):
1.967 + return "Import(%r)" % (self.names,)
1.968 +
1.969 + def __str__(self):
1.970 + return "import %s" % (
1.971 + ", ".join([(alias and "%s as %s" % (name, alias) or name) for (name, alias) in self.names]))
1.972 +
1.973 +class Invert(Node, Operator):
1.974 + def __init__(self, expr, lineno=None):
1.975 + self.expr = expr
1.976 + self.lineno = lineno
1.977 +
1.978 + def getChildren(self):
1.979 + return self.expr,
1.980 +
1.981 + def getChildNodes(self):
1.982 + return self.expr,
1.983 +
1.984 + def __repr__(self):
1.985 + return "Invert(%r)" % (self.expr,)
1.986 +
1.987 + def __str__(self):
1.988 + return "~%s" % self.expr
1.989 +
1.990 +class Keyword(Node):
1.991 + def __init__(self, name, expr, lineno=None):
1.992 + self.name = name
1.993 + self.expr = expr
1.994 + self.lineno = lineno
1.995 +
1.996 + def getChildren(self):
1.997 + return self.name, self.expr
1.998 +
1.999 + def getChildNodes(self):
1.1000 + return self.expr,
1.1001 +
1.1002 + def __repr__(self):
1.1003 + return "Keyword(%r, %r)" % (self.name, self.expr)
1.1004 +
1.1005 + def __str__(self):
1.1006 + return "%s=%s" % (self.name, self.expr)
1.1007 +
1.1008 +class Lambda(Node):
1.1009 + def __init__(self, argnames, defaults, flags, code, lineno=None):
1.1010 + self.argnames = argnames
1.1011 + self.defaults = defaults
1.1012 + self.flags = flags
1.1013 + self.code = code
1.1014 + self.lineno = lineno
1.1015 + self.varargs = self.kwargs = None
1.1016 + if flags & CO_VARARGS:
1.1017 + self.varargs = 1
1.1018 + if flags & CO_VARKEYWORDS:
1.1019 + self.kwargs = 1
1.1020 +
1.1021 + def getChildren(self):
1.1022 + children = []
1.1023 + children.append(self.argnames)
1.1024 + children.extend(flatten(self.defaults))
1.1025 + children.append(self.flags)
1.1026 + children.append(self.code)
1.1027 + return tuple(children)
1.1028 +
1.1029 + def getChildNodes(self):
1.1030 + nodelist = []
1.1031 + nodelist.extend(flatten_nodes(self.defaults))
1.1032 + nodelist.append(self.code)
1.1033 + return tuple(nodelist)
1.1034 +
1.1035 + def __repr__(self):
1.1036 + return "Lambda(%r, %r, %r, %r)" % (self.argnames, self.defaults, self.flags, self.code)
1.1037 +
1.1038 + def __str__(self):
1.1039 + parameters = decode_function(self)
1.1040 + return "lambda %s: %s" % (", ".join(parameters), self.code)
1.1041 +
1.1042 +class LeftShift(Node, Operator):
1.1043 + def __init__(self, leftright, lineno=None):
1.1044 + self.left = leftright[0]
1.1045 + self.right = leftright[1]
1.1046 + self.lineno = lineno
1.1047 +
1.1048 + def getChildren(self):
1.1049 + return self.left, self.right
1.1050 +
1.1051 + def getChildNodes(self):
1.1052 + return self.left, self.right
1.1053 +
1.1054 + def __repr__(self):
1.1055 + return "LeftShift((%r, %r))" % (self.left, self.right)
1.1056 +
1.1057 + def __str__(self):
1.1058 + return "(%s << %s)" % (self.left, self.right)
1.1059 +
1.1060 +class List(Node):
1.1061 + def __init__(self, nodes, lineno=None):
1.1062 + self.nodes = nodes
1.1063 + self.lineno = lineno
1.1064 +
1.1065 + def getChildren(self):
1.1066 + return tuple(flatten(self.nodes))
1.1067 +
1.1068 + def getChildNodes(self):
1.1069 + nodelist = []
1.1070 + nodelist.extend(flatten_nodes(self.nodes))
1.1071 + return tuple(nodelist)
1.1072 +
1.1073 + def __repr__(self):
1.1074 + return "List(%r)" % (self.nodes,)
1.1075 +
1.1076 + def __str__(self):
1.1077 + return "[%s]" % ", ".join(map(str, self.nodes))
1.1078 +
1.1079 +class ListComp(Node):
1.1080 + def __init__(self, expr, quals, lineno=None):
1.1081 + self.expr = expr
1.1082 + self.quals = quals
1.1083 + self.lineno = lineno
1.1084 +
1.1085 + def getChildren(self):
1.1086 + children = []
1.1087 + children.append(self.expr)
1.1088 + children.extend(flatten(self.quals))
1.1089 + return tuple(children)
1.1090 +
1.1091 + def getChildNodes(self):
1.1092 + nodelist = []
1.1093 + nodelist.append(self.expr)
1.1094 + nodelist.extend(flatten_nodes(self.quals))
1.1095 + return tuple(nodelist)
1.1096 +
1.1097 + def __repr__(self):
1.1098 + return "ListComp(%r, %r)" % (self.expr, self.quals)
1.1099 +
1.1100 + def __str__(self):
1.1101 + return "[%s %s]" % (self.expr, " ".join(map(str, self.quals)))
1.1102 +
1.1103 +class ListCompFor(Node):
1.1104 + def __init__(self, assign, list, ifs, lineno=None):
1.1105 + self.assign = assign
1.1106 + self.list = list
1.1107 + self.ifs = ifs
1.1108 + self.lineno = lineno
1.1109 +
1.1110 + def getChildren(self):
1.1111 + children = []
1.1112 + children.append(self.assign)
1.1113 + children.append(self.list)
1.1114 + children.extend(flatten(self.ifs))
1.1115 + return tuple(children)
1.1116 +
1.1117 + def getChildNodes(self):
1.1118 + nodelist = []
1.1119 + nodelist.append(self.assign)
1.1120 + nodelist.append(self.list)
1.1121 + nodelist.extend(flatten_nodes(self.ifs))
1.1122 + return tuple(nodelist)
1.1123 +
1.1124 + def __repr__(self):
1.1125 + return "ListCompFor(%r, %r, %r)" % (self.assign, self.list, self.ifs)
1.1126 +
1.1127 + def __str__(self):
1.1128 + return "for %s in %s%s" % (
1.1129 + self.assign, self.list,
1.1130 + self.ifs and " ".join(map(str, self.ifs)) or ""
1.1131 + )
1.1132 +
1.1133 +class ListCompIf(Node):
1.1134 + def __init__(self, test, lineno=None):
1.1135 + self.test = test
1.1136 + self.lineno = lineno
1.1137 +
1.1138 + def getChildren(self):
1.1139 + return self.test,
1.1140 +
1.1141 + def getChildNodes(self):
1.1142 + return self.test,
1.1143 +
1.1144 + def __repr__(self):
1.1145 + return "ListCompIf(%r)" % (self.test,)
1.1146 +
1.1147 + def __str__(self):
1.1148 + return " if %s" % self.test
1.1149 +
1.1150 +class SetComp(Node):
1.1151 + def __init__(self, expr, quals, lineno=None):
1.1152 + self.expr = expr
1.1153 + self.quals = quals
1.1154 + self.lineno = lineno
1.1155 +
1.1156 + def getChildren(self):
1.1157 + children = []
1.1158 + children.append(self.expr)
1.1159 + children.extend(flatten(self.quals))
1.1160 + return tuple(children)
1.1161 +
1.1162 + def getChildNodes(self):
1.1163 + nodelist = []
1.1164 + nodelist.append(self.expr)
1.1165 + nodelist.extend(flatten_nodes(self.quals))
1.1166 + return tuple(nodelist)
1.1167 +
1.1168 + def __repr__(self):
1.1169 + return "SetComp(%r, %r)" % (self.expr, self.quals)
1.1170 +
1.1171 + def __str__(self):
1.1172 + return "{%s %s}" % (self.expr, " ".join(map(str, self.quals)))
1.1173 +
1.1174 +class DictComp(Node):
1.1175 + def __init__(self, key, value, quals, lineno=None):
1.1176 + self.key = key
1.1177 + self.value = value
1.1178 + self.quals = quals
1.1179 + self.lineno = lineno
1.1180 +
1.1181 + def getChildren(self):
1.1182 + children = []
1.1183 + children.append(self.key)
1.1184 + children.append(self.value)
1.1185 + children.extend(flatten(self.quals))
1.1186 + return tuple(children)
1.1187 +
1.1188 + def getChildNodes(self):
1.1189 + nodelist = []
1.1190 + nodelist.append(self.key)
1.1191 + nodelist.append(self.value)
1.1192 + nodelist.extend(flatten_nodes(self.quals))
1.1193 + return tuple(nodelist)
1.1194 +
1.1195 + def __repr__(self):
1.1196 + return "DictComp(%r, %r, %r)" % (self.key, self.value, self.quals)
1.1197 +
1.1198 + def __str__(self):
1.1199 + return "{%s : %s %s}" % (self.key, self.value, " ".join(map(str, self.quals)))
1.1200 +
1.1201 +class Mod(Node, Operator):
1.1202 + def __init__(self, leftright, lineno=None):
1.1203 + self.left = leftright[0]
1.1204 + self.right = leftright[1]
1.1205 + self.lineno = lineno
1.1206 +
1.1207 + def getChildren(self):
1.1208 + return self.left, self.right
1.1209 +
1.1210 + def getChildNodes(self):
1.1211 + return self.left, self.right
1.1212 +
1.1213 + def __repr__(self):
1.1214 + return "Mod((%r, %r))" % (self.left, self.right)
1.1215 +
1.1216 + def __str__(self):
1.1217 + return "(%s %% %s)" % (self.left, self.right)
1.1218 +
1.1219 +class Module(Node):
1.1220 + def __init__(self, doc, node, lineno=None):
1.1221 + self.doc = doc
1.1222 + self.node = node
1.1223 + self.lineno = lineno
1.1224 +
1.1225 + def getChildren(self):
1.1226 + return self.doc, self.node
1.1227 +
1.1228 + def getChildNodes(self):
1.1229 + return self.node,
1.1230 +
1.1231 + def __repr__(self):
1.1232 + return "Module(%r, %r)" % (self.doc, self.node)
1.1233 +
1.1234 + def __str__(self):
1.1235 + return "%s%s" % (self.doc and "%s\n\n" % docstring(self.doc) or "", self.node)
1.1236 +
1.1237 +class Mul(Node, Operator):
1.1238 + def __init__(self, leftright, lineno=None):
1.1239 + self.left = leftright[0]
1.1240 + self.right = leftright[1]
1.1241 + self.lineno = lineno
1.1242 +
1.1243 + def getChildren(self):
1.1244 + return self.left, self.right
1.1245 +
1.1246 + def getChildNodes(self):
1.1247 + return self.left, self.right
1.1248 +
1.1249 + def __repr__(self):
1.1250 + return "Mul((%r, %r))" % (self.left, self.right)
1.1251 +
1.1252 + def __str__(self):
1.1253 + return "(%s * %s)" % (self.left, self.right)
1.1254 +
1.1255 +class Name(Node):
1.1256 + def __init__(self, name, lineno=None):
1.1257 + self.name = name
1.1258 + self.lineno = lineno
1.1259 +
1.1260 + def getChildren(self):
1.1261 + return self.name,
1.1262 +
1.1263 + def getChildNodes(self):
1.1264 + return ()
1.1265 +
1.1266 + def __repr__(self):
1.1267 + return "Name(%r)" % (self.name,)
1.1268 +
1.1269 + def __str__(self):
1.1270 + return str(self.name)
1.1271 +
1.1272 +class Not(Node):
1.1273 + def __init__(self, expr, lineno=None):
1.1274 + self.expr = expr
1.1275 + self.lineno = lineno
1.1276 +
1.1277 + def getChildren(self):
1.1278 + return self.expr,
1.1279 +
1.1280 + def getChildNodes(self):
1.1281 + return self.expr,
1.1282 +
1.1283 + def __repr__(self):
1.1284 + return "Not(%r)" % (self.expr,)
1.1285 +
1.1286 + def __str__(self):
1.1287 + return "not %s" % self.expr
1.1288 +
1.1289 +class Or(Node):
1.1290 + def __init__(self, nodes, lineno=None):
1.1291 + self.nodes = nodes
1.1292 + self.lineno = lineno
1.1293 +
1.1294 + def getChildren(self):
1.1295 + return tuple(flatten(self.nodes))
1.1296 +
1.1297 + def getChildNodes(self):
1.1298 + nodelist = []
1.1299 + nodelist.extend(flatten_nodes(self.nodes))
1.1300 + return tuple(nodelist)
1.1301 +
1.1302 + def __repr__(self):
1.1303 + return "Or(%r)" % (self.nodes,)
1.1304 +
1.1305 + def __str__(self):
1.1306 + return "(%s)" % " or ".join(map(str, self.nodes))
1.1307 +
1.1308 +class Pass(Node):
1.1309 + def __init__(self, lineno=None):
1.1310 + self.lineno = lineno
1.1311 +
1.1312 + def getChildren(self):
1.1313 + return ()
1.1314 +
1.1315 + def getChildNodes(self):
1.1316 + return ()
1.1317 +
1.1318 + def __repr__(self):
1.1319 + return "Pass()"
1.1320 +
1.1321 + def __str__(self):
1.1322 + return "pass"
1.1323 +
1.1324 +class Power(Node, Operator):
1.1325 + def __init__(self, leftright, lineno=None):
1.1326 + self.left = leftright[0]
1.1327 + self.right = leftright[1]
1.1328 + self.lineno = lineno
1.1329 +
1.1330 + def getChildren(self):
1.1331 + return self.left, self.right
1.1332 +
1.1333 + def getChildNodes(self):
1.1334 + return self.left, self.right
1.1335 +
1.1336 + def __repr__(self):
1.1337 + return "Power((%r, %r))" % (self.left, self.right)
1.1338 +
1.1339 + def __str__(self):
1.1340 + return "(%s ** %s)" % (self.left, self.right)
1.1341 +
1.1342 +class Print(Node):
1.1343 + def __init__(self, nodes, dest, lineno=None):
1.1344 + self.nodes = nodes
1.1345 + self.dest = dest
1.1346 + self.lineno = lineno
1.1347 +
1.1348 + def getChildren(self):
1.1349 + children = []
1.1350 + children.extend(flatten(self.nodes))
1.1351 + children.append(self.dest)
1.1352 + return tuple(children)
1.1353 +
1.1354 + def getChildNodes(self):
1.1355 + nodelist = []
1.1356 + nodelist.extend(flatten_nodes(self.nodes))
1.1357 + if self.dest is not None:
1.1358 + nodelist.append(self.dest)
1.1359 + return tuple(nodelist)
1.1360 +
1.1361 + def __repr__(self):
1.1362 + return "Print(%r, %r)" % (self.nodes, self.dest)
1.1363 +
1.1364 + def __str__(self):
1.1365 + dest = self.dest and [">>%s" % self.dest] or []
1.1366 + return "print %s," % ", ".join(map(str, dest + self.nodes))
1.1367 +
1.1368 +class Printnl(Node):
1.1369 + def __init__(self, nodes, dest, lineno=None):
1.1370 + self.nodes = nodes
1.1371 + self.dest = dest
1.1372 + self.lineno = lineno
1.1373 +
1.1374 + def getChildren(self):
1.1375 + children = []
1.1376 + children.extend(flatten(self.nodes))
1.1377 + children.append(self.dest)
1.1378 + return tuple(children)
1.1379 +
1.1380 + def getChildNodes(self):
1.1381 + nodelist = []
1.1382 + nodelist.extend(flatten_nodes(self.nodes))
1.1383 + if self.dest is not None:
1.1384 + nodelist.append(self.dest)
1.1385 + return tuple(nodelist)
1.1386 +
1.1387 + def __repr__(self):
1.1388 + return "Printnl(%r, %r)" % (self.nodes, self.dest)
1.1389 +
1.1390 + def __str__(self):
1.1391 + dest = self.dest and [">>%s" % self.dest] or []
1.1392 + return "print %s" % ", ".join(map(str, dest + self.nodes))
1.1393 +
1.1394 +class Raise(Node):
1.1395 + def __init__(self, expr1, expr2, expr3, lineno=None):
1.1396 + self.expr1 = expr1
1.1397 + self.expr2 = expr2
1.1398 + self.expr3 = expr3
1.1399 + self.lineno = lineno
1.1400 +
1.1401 + def getChildren(self):
1.1402 + children = []
1.1403 + children.append(self.expr1)
1.1404 + children.append(self.expr2)
1.1405 + children.append(self.expr3)
1.1406 + return tuple(children)
1.1407 +
1.1408 + def getChildNodes(self):
1.1409 + nodelist = []
1.1410 + if self.expr1 is not None:
1.1411 + nodelist.append(self.expr1)
1.1412 + if self.expr2 is not None:
1.1413 + nodelist.append(self.expr2)
1.1414 + if self.expr3 is not None:
1.1415 + nodelist.append(self.expr3)
1.1416 + return tuple(nodelist)
1.1417 +
1.1418 + def __repr__(self):
1.1419 + return "Raise(%r, %r, %r)" % (self.expr1, self.expr2, self.expr3)
1.1420 +
1.1421 + def __str__(self):
1.1422 + args = self.expr1 and [self.expr1] or []
1.1423 + args += self.expr2 and [self.expr2] or []
1.1424 + args += self.expr3 and [self.expr3] or []
1.1425 + return "raise %s" % ", ".join(map(str, args))
1.1426 +
1.1427 +class Return(Node):
1.1428 + def __init__(self, value, lineno=None):
1.1429 + self.value = value
1.1430 + self.lineno = lineno
1.1431 +
1.1432 + def getChildren(self):
1.1433 + return self.value,
1.1434 +
1.1435 + def getChildNodes(self):
1.1436 + return self.value,
1.1437 +
1.1438 + def __repr__(self):
1.1439 + return "Return(%r)" % (self.value,)
1.1440 +
1.1441 + def __str__(self):
1.1442 + return "return %s" % self.value
1.1443 +
1.1444 +class RightShift(Node, Operator):
1.1445 + def __init__(self, leftright, lineno=None):
1.1446 + self.left = leftright[0]
1.1447 + self.right = leftright[1]
1.1448 + self.lineno = lineno
1.1449 +
1.1450 + def getChildren(self):
1.1451 + return self.left, self.right
1.1452 +
1.1453 + def getChildNodes(self):
1.1454 + return self.left, self.right
1.1455 +
1.1456 + def __repr__(self):
1.1457 + return "RightShift((%r, %r))" % (self.left, self.right)
1.1458 +
1.1459 + def __str__(self):
1.1460 + return "(%s >> %s)" % (self.left, self.right)
1.1461 +
1.1462 +class Set(Node):
1.1463 + def __init__(self, nodes, lineno=None):
1.1464 + self.nodes = nodes
1.1465 + self.lineno = lineno
1.1466 +
1.1467 + def getChildren(self):
1.1468 + return tuple(flatten(self.nodes))
1.1469 +
1.1470 + def getChildNodes(self):
1.1471 + nodelist = []
1.1472 + nodelist.extend(flatten_nodes(self.nodes))
1.1473 + return tuple(nodelist)
1.1474 +
1.1475 + def __repr__(self):
1.1476 + return "Set(%r)" % (self.nodes,)
1.1477 +
1.1478 + def __str__(self):
1.1479 + return "{%s}" % ", ".join(map(str, self.nodes))
1.1480 +
1.1481 +class Slice(Node, OperatorUser):
1.1482 + def __init__(self, expr, flags, lower, upper, lineno=None):
1.1483 + self.expr = expr
1.1484 + self.flags = flags
1.1485 + self.lower = lower
1.1486 + self.upper = upper
1.1487 + self.lineno = lineno
1.1488 +
1.1489 + def getChildren(self):
1.1490 + children = []
1.1491 + children.append(self.expr)
1.1492 + children.append(self.flags)
1.1493 + children.append(self.lower)
1.1494 + children.append(self.upper)
1.1495 + return tuple(children)
1.1496 +
1.1497 + def getChildNodes(self):
1.1498 + nodelist = []
1.1499 + nodelist.append(self.expr)
1.1500 + if self.lower is not None:
1.1501 + nodelist.append(self.lower)
1.1502 + if self.upper is not None:
1.1503 + nodelist.append(self.upper)
1.1504 + return tuple(nodelist)
1.1505 +
1.1506 + def __repr__(self):
1.1507 + return "Slice(%r, %r, %r, %r)" % (self.expr, self.flags, self.lower, self.upper)
1.1508 +
1.1509 + def __str__(self):
1.1510 + args = [self.lower or "", self.upper or ""]
1.1511 + return "%s%s[%s]" % (self.flags == "OP_DELETE" and "del " or "", self.expr, ":".join(map(str, args)))
1.1512 +
1.1513 +class Sliceobj(Node):
1.1514 + def __init__(self, nodes, lineno=None):
1.1515 + self.nodes = nodes
1.1516 + self.lineno = lineno
1.1517 +
1.1518 + def getChildren(self):
1.1519 + return tuple(flatten(self.nodes))
1.1520 +
1.1521 + def getChildNodes(self):
1.1522 + nodelist = []
1.1523 + nodelist.extend(flatten_nodes(self.nodes))
1.1524 + return tuple(nodelist)
1.1525 +
1.1526 + def __repr__(self):
1.1527 + return "Sliceobj(%r)" % (self.nodes,)
1.1528 +
1.1529 + def __str__(self):
1.1530 + return ":".join(map(str, self.nodes))
1.1531 +
1.1532 +class Stmt(Node):
1.1533 + def __init__(self, nodes, lineno=None):
1.1534 + self.nodes = nodes
1.1535 + self.lineno = lineno
1.1536 +
1.1537 + def getChildren(self):
1.1538 + return tuple(flatten(self.nodes))
1.1539 +
1.1540 + def getChildNodes(self):
1.1541 + nodelist = []
1.1542 + nodelist.extend(flatten_nodes(self.nodes))
1.1543 + return tuple(nodelist)
1.1544 +
1.1545 + def __repr__(self):
1.1546 + return "Stmt(%r)" % (self.nodes,)
1.1547 +
1.1548 + def __str__(self):
1.1549 + return "\n".join(map(str, flatten_statement(self.nodes)))
1.1550 +
1.1551 +class Sub(Node, Operator):
1.1552 + def __init__(self, leftright, lineno=None):
1.1553 + self.left = leftright[0]
1.1554 + self.right = leftright[1]
1.1555 + self.lineno = lineno
1.1556 +
1.1557 + def getChildren(self):
1.1558 + return self.left, self.right
1.1559 +
1.1560 + def getChildNodes(self):
1.1561 + return self.left, self.right
1.1562 +
1.1563 + def __repr__(self):
1.1564 + return "Sub((%r, %r))" % (self.left, self.right)
1.1565 +
1.1566 + def __str__(self):
1.1567 + return "(%s - %s)" % (self.left, self.right)
1.1568 +
1.1569 +class Subscript(Node, OperatorUser):
1.1570 + def __init__(self, expr, flags, subs, lineno=None):
1.1571 + self.expr = expr
1.1572 + self.flags = flags
1.1573 + self.subs = subs
1.1574 + self.lineno = lineno
1.1575 +
1.1576 + def getChildren(self):
1.1577 + children = []
1.1578 + children.append(self.expr)
1.1579 + children.append(self.flags)
1.1580 + children.extend(flatten(self.subs))
1.1581 + return tuple(children)
1.1582 +
1.1583 + def getChildNodes(self):
1.1584 + nodelist = []
1.1585 + nodelist.append(self.expr)
1.1586 + nodelist.extend(flatten_nodes(self.subs))
1.1587 + return tuple(nodelist)
1.1588 +
1.1589 + def __repr__(self):
1.1590 + return "Subscript(%r, %r, %r)" % (self.expr, self.flags, self.subs)
1.1591 +
1.1592 + def __str__(self):
1.1593 + return "%s%s[%s]" % (self.flags == "OP_DELETE" and "del " or "", self.expr, ",".join(map(str, self.subs)))
1.1594 +
1.1595 +class TryExcept(Node):
1.1596 + def __init__(self, body, handlers, else_, lineno=None):
1.1597 + self.body = body
1.1598 + self.handlers = handlers
1.1599 + self.else_ = else_
1.1600 + self.lineno = lineno
1.1601 +
1.1602 + def getChildren(self):
1.1603 + children = []
1.1604 + children.append(self.body)
1.1605 + children.extend(flatten(self.handlers))
1.1606 + children.append(self.else_)
1.1607 + return tuple(children)
1.1608 +
1.1609 + def getChildNodes(self):
1.1610 + nodelist = []
1.1611 + nodelist.append(self.body)
1.1612 + nodelist.extend(flatten_nodes(self.handlers))
1.1613 + if self.else_ is not None:
1.1614 + nodelist.append(self.else_)
1.1615 + return tuple(nodelist)
1.1616 +
1.1617 + def __repr__(self):
1.1618 + return "TryExcept(%r, %r, %r)" % (self.body, self.handlers, self.else_)
1.1619 +
1.1620 + def __str__(self):
1.1621 + handlers = [
1.1622 + ("\nexcept%s%s:%s" % (spec and " %s" % spec or "", assign and ", %s" % assign or "", indent("\n%s" % statement)))
1.1623 + for (spec, assign, statement) in self.handlers
1.1624 + ]
1.1625 +
1.1626 + return "try:%s%s%s" % (
1.1627 + indent("\n%s" % self.body),
1.1628 + "".join(handlers),
1.1629 + self.else_ and "\nelse:%s" % indent("\n%s" % self.else_) or ""
1.1630 + )
1.1631 +
1.1632 +class TryFinally(Node):
1.1633 + def __init__(self, body, final, lineno=None):
1.1634 + self.body = body
1.1635 + self.final = final
1.1636 + self.lineno = lineno
1.1637 +
1.1638 + def getChildren(self):
1.1639 + return self.body, self.final
1.1640 +
1.1641 + def getChildNodes(self):
1.1642 + return self.body, self.final
1.1643 +
1.1644 + def __repr__(self):
1.1645 + return "TryFinally(%r, %r)" % (self.body, self.final)
1.1646 +
1.1647 + def __str__(self):
1.1648 + return "try:%s\nfinally:%s" % (
1.1649 + indent("\n%s" % self.body),
1.1650 + indent("\n%s" % self.final)
1.1651 + )
1.1652 +
1.1653 +class Tuple(Node):
1.1654 + def __init__(self, nodes, lineno=None):
1.1655 + self.nodes = nodes
1.1656 + self.lineno = lineno
1.1657 +
1.1658 + def getChildren(self):
1.1659 + return tuple(flatten(self.nodes))
1.1660 +
1.1661 + def getChildNodes(self):
1.1662 + nodelist = []
1.1663 + nodelist.extend(flatten_nodes(self.nodes))
1.1664 + return tuple(nodelist)
1.1665 +
1.1666 + def __repr__(self):
1.1667 + return "Tuple(%r)" % (self.nodes,)
1.1668 +
1.1669 + def __str__(self):
1.1670 + return "(%s)" % ", ".join(map(str, self.nodes))
1.1671 +
1.1672 +class UnaryAdd(Node, Operator):
1.1673 + def __init__(self, expr, lineno=None):
1.1674 + self.expr = expr
1.1675 + self.lineno = lineno
1.1676 +
1.1677 + def getChildren(self):
1.1678 + return self.expr,
1.1679 +
1.1680 + def getChildNodes(self):
1.1681 + return self.expr,
1.1682 +
1.1683 + def __repr__(self):
1.1684 + return "UnaryAdd(%r)" % (self.expr,)
1.1685 +
1.1686 + def __str__(self):
1.1687 + return "+%s" % self.expr
1.1688 +
1.1689 +class UnarySub(Node, Operator):
1.1690 + def __init__(self, expr, lineno=None):
1.1691 + self.expr = expr
1.1692 + self.lineno = lineno
1.1693 +
1.1694 + def getChildren(self):
1.1695 + return self.expr,
1.1696 +
1.1697 + def getChildNodes(self):
1.1698 + return self.expr,
1.1699 +
1.1700 + def __repr__(self):
1.1701 + return "UnarySub(%r)" % (self.expr,)
1.1702 +
1.1703 + def __str__(self):
1.1704 + return "-%s" % self.expr
1.1705 +
1.1706 +class While(Node):
1.1707 + def __init__(self, test, body, else_, lineno=None):
1.1708 + self.test = test
1.1709 + self.body = body
1.1710 + self.else_ = else_
1.1711 + self.lineno = lineno
1.1712 +
1.1713 + def getChildren(self):
1.1714 + children = []
1.1715 + children.append(self.test)
1.1716 + children.append(self.body)
1.1717 + children.append(self.else_)
1.1718 + return tuple(children)
1.1719 +
1.1720 + def getChildNodes(self):
1.1721 + nodelist = []
1.1722 + nodelist.append(self.test)
1.1723 + nodelist.append(self.body)
1.1724 + if self.else_ is not None:
1.1725 + nodelist.append(self.else_)
1.1726 + return tuple(nodelist)
1.1727 +
1.1728 + def __repr__(self):
1.1729 + return "While(%r, %r, %r)" % (self.test, self.body, self.else_)
1.1730 +
1.1731 + def __str__(self):
1.1732 + return "while %s:%s%s" % (
1.1733 + self.test,
1.1734 + indent("\n%s" % self.body),
1.1735 + self.else_ and "\nelse:%s" % indent("\n%s" % self.else_) or ""
1.1736 + )
1.1737 +
1.1738 +class With(Node):
1.1739 + def __init__(self, expr, vars, body, lineno=None):
1.1740 + self.expr = expr
1.1741 + self.vars = vars
1.1742 + self.body = body
1.1743 + self.lineno = lineno
1.1744 +
1.1745 + def getChildren(self):
1.1746 + children = []
1.1747 + children.append(self.expr)
1.1748 + children.append(self.vars)
1.1749 + children.append(self.body)
1.1750 + return tuple(children)
1.1751 +
1.1752 + def getChildNodes(self):
1.1753 + nodelist = []
1.1754 + nodelist.append(self.expr)
1.1755 + if self.vars is not None:
1.1756 + nodelist.append(self.vars)
1.1757 + nodelist.append(self.body)
1.1758 + return tuple(nodelist)
1.1759 +
1.1760 + def __repr__(self):
1.1761 + return "With(%r, %r, %r)" % (self.expr, self.vars, self.body)
1.1762 +
1.1763 + def __str__(self):
1.1764 + return "with %s%s:%s" % (
1.1765 + self.expr,
1.1766 + self.vars and " as %s" % ", ".join(map(str, self.vars)),
1.1767 + indent("\n%s" % self.body),
1.1768 + )
1.1769 +
1.1770 +class Yield(Node):
1.1771 + def __init__(self, value, lineno=None):
1.1772 + self.value = value
1.1773 + self.lineno = lineno
1.1774 +
1.1775 + def getChildren(self):
1.1776 + return self.value,
1.1777 +
1.1778 + def getChildNodes(self):
1.1779 + return self.value,
1.1780 +
1.1781 + def __repr__(self):
1.1782 + return "Yield(%r)" % (self.value,)
1.1783 +
1.1784 + def __str__(self):
1.1785 + return "yield %s" % self.value
1.1786 +
1.1787 +for name, obj in globals().items():
1.1788 + if isinstance(obj, type) and issubclass(obj, Node):
1.1789 + nodes[name.lower()] = obj