mirror of
https://github.com/python/cpython.git
synced 2024-12-01 11:15:56 +01:00
5477f529d6
Add support for floor division (// and //=) The implementation of getChildren() and getChildNodes() is intended to be faster, because it avoids calling flatten() on every return value. But it's not clear that it is a lot faster, because constructing a tuple with just the right values ends up being slow. (Too many attribute lookups probably.) The ast.txt file is much more complicated, with funny characters at the ends of names (*, &, !) to indicate the types of each child node. The astgen script is also much more complex, making me wonder if it's still useful.
88 lines
2.0 KiB
Plaintext
88 lines
2.0 KiB
Plaintext
# This file describes the nodes of the AST in ast.py. The module is
|
|
# generated by astgen.py.
|
|
# The descriptions use the following special notation to describe
|
|
# properties of the children:
|
|
# * this child is not a node
|
|
# ! this child is a sequence that contains nodes in it
|
|
# & this child may be set to None
|
|
# = ... a default value for the node constructor (optional args)
|
|
Module: doc*, node
|
|
Stmt: nodes!
|
|
Function: name*, argnames*, defaults!, flags*, doc*, code
|
|
Lambda: argnames*, defaults!, flags*, code
|
|
Class: name*, bases!, doc*, code
|
|
Pass:
|
|
Break:
|
|
Continue:
|
|
For: assign, list, body, else_&
|
|
While: test, body, else_&
|
|
If: tests!, else_&
|
|
Exec: expr, locals&, globals&
|
|
From: modname*, names*
|
|
Import: names*
|
|
Raise: expr1&, expr2&, expr3&
|
|
TryFinally: body, final
|
|
TryExcept: body, handlers!, else_&
|
|
Return: value
|
|
Yield: value
|
|
Const: value*
|
|
Print: nodes!, dest&
|
|
Printnl: nodes!, dest&
|
|
Discard: expr
|
|
AugAssign: node, op*, expr
|
|
Assign: nodes!, expr
|
|
AssTuple: nodes!
|
|
AssList: nodes!
|
|
AssName: name*, flags*
|
|
AssAttr: expr, attrname*, flags*
|
|
ListComp: expr, quals!
|
|
ListCompFor: assign, list, ifs!
|
|
ListCompIf: test
|
|
List: nodes!
|
|
Dict: items!
|
|
Not: expr
|
|
Compare: expr, ops!
|
|
Name: name*
|
|
Global: names
|
|
Backquote: expr
|
|
Getattr: expr, attrname*
|
|
CallFunc: node, args!, star_args& = None, dstar_args& = None
|
|
Keyword: name*, expr
|
|
Subscript: expr, flags*, subs!
|
|
Ellipsis:
|
|
Sliceobj: nodes!
|
|
Slice: expr, flags*, lower&, upper&
|
|
Assert: test, fail&
|
|
Tuple: nodes!
|
|
Or: nodes!
|
|
And: nodes!
|
|
Bitor: nodes!
|
|
Bitxor: nodes!
|
|
Bitand: nodes!
|
|
LeftShift: (left, right)
|
|
RightShift: (left, right)
|
|
Add: (left, right)
|
|
Sub: (left, right)
|
|
Mul: (left, right)
|
|
Div: (left, right)
|
|
Mod: (left, right)
|
|
Power: (left, right)
|
|
FloorDiv: (left, right)
|
|
UnaryAdd: expr
|
|
UnarySub: expr
|
|
Invert: expr
|
|
|
|
init(Function):
|
|
self.varargs = self.kwargs = None
|
|
if flags & CO_VARARGS:
|
|
self.varargs = 1
|
|
if flags & CO_VARKEYWORDS:
|
|
self.kwargs = 1
|
|
|
|
init(Lambda):
|
|
self.varargs = self.kwargs = None
|
|
if flags & CO_VARARGS:
|
|
self.varargs = 1
|
|
if flags & CO_VARKEYWORDS:
|
|
self.kwargs = 1
|