Changes from Python 3.8 to Python 3.9ΒΆ

--- /home/docs/checkouts/readthedocs.org/user_builds/restrictedpython/checkouts/latest/docs/contributing/ast/python3_8.ast
+++ /home/docs/checkouts/readthedocs.org/user_builds/restrictedpython/checkouts/latest/docs/contributing/ast/python3_9.ast
@@ -1,23 +1,20 @@
--- Python 3.8 AST
--- ASDL's 5 builtin types are:
--- identifier, int, string, object, constant
+-- Python 3.9 AST
+-- ASDL's 4 builtin types are:
+-- identifier, int, string, constant
 
-module Python version "3.8"
+module Python version "3.9"
 {
-    mod = Module(stmt* body, type_ignore *type_ignores)
+    mod = Module(stmt* body, type_ignore* type_ignores)
         | Interactive(stmt* body)
         | Expression(expr body)
         | FunctionType(expr* argtypes, expr returns)
 
-        -- not really an actual node but useful in Jython's typesystem.
-        | Suite(stmt* body)
-
     stmt = FunctionDef(identifier name,
-                       arguments args,
-                       stmt* body,
-                       expr* decorator_list,
-                       expr? returns,
-                       string? type_comment)
+                     arguments args,
+                     stmt* body,
+                     expr* decorator_list,
+                     expr? returns,
+                     string? type_comment)
          | AsyncFunctionDef(identifier name,
                             arguments args,
                             stmt* body,
@@ -60,7 +57,6 @@
          | Break
          | Continue
 
-         -- XXX Jython will be different
          -- col_offset is the byte offset in the utf8 string the parser uses
          attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
@@ -84,34 +80,28 @@
          -- need sequences for compare to distinguish between
          -- x < 4 < 3 and (x < 4) < 3
          | Compare(expr left, cmpop* ops, expr* comparators)
-         | Call(expr func,
-                expr* args,
-                keyword* keywords)
+         | Call(expr func, expr* args, keyword* keywords)
          | FormattedValue(expr value, int? conversion, expr? format_spec)
          | JoinedStr(expr* values)
          | Constant(constant value, string? kind)
 
          -- the following expression can appear in assignment context
          | Attribute(expr value, identifier attr, expr_context ctx)
-         | Subscript(expr value, slice slice, expr_context ctx)
+         | Subscript(expr value, expr slice, expr_context ctx)
          | Starred(expr value, expr_context ctx)
          | Name(identifier id, expr_context ctx)
          | List(expr* elts, expr_context ctx)
          | Tuple(expr* elts, expr_context ctx)
 
-         -- col_offset is the byte offset in the utf8 string the parser uses
-         attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
+         -- can appear only in Subscript
+         | Slice(expr? lower, expr? upper, expr? step)
+
+          -- col_offset is the byte offset in the utf8 string the parser uses
+          attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
     expr_context = Load
                  | Store
                  | Del
-                 | AugLoad
-                 | AugStore
-                 | Param
-
-    slice = Slice(expr? lower, expr? upper, expr? step)
-          | ExtSlice(slice* dims)
-          | Index(expr value)
 
     boolop = And
            | Or
@@ -164,6 +154,7 @@
 
     -- keyword arguments supplied to call (NULL identifier for **kwargs)
     keyword = (identifier? arg, expr value)
+              attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
     -- import name with optional 'as' alias.
     alias = (identifier name, identifier? asname)