diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index e82b61c..a425272 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -1,4 +1,4 @@
-/* File automatically generated by ../Parser/asdl_c.py */
+/* File automatically generated by ./Parser/asdl_c.py */
 
 #include "Python.h"
 #include "Python-ast.h"
@@ -9,7 +9,7 @@
         mod_ty p;
         p = (mod_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Module_kind;
@@ -23,7 +23,7 @@
         mod_ty p;
         p = (mod_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Interactive_kind;
@@ -42,7 +42,7 @@
         }
         p = (mod_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Expression_kind;
@@ -56,7 +56,7 @@
         mod_ty p;
         p = (mod_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Suite_kind;
@@ -81,7 +81,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = FunctionDef_kind;
@@ -104,7 +104,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = ClassDef_kind;
@@ -121,7 +121,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Return_kind;
@@ -136,7 +136,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Delete_kind;
@@ -156,7 +156,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Assign_kind;
@@ -187,7 +187,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = AugAssign_kind;
@@ -204,7 +204,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Print_kind;
@@ -232,7 +232,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = For_kind;
@@ -255,7 +255,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = While_kind;
@@ -277,7 +277,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = If_kind;
@@ -294,7 +294,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Raise_kind;
@@ -311,7 +311,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = TryExcept_kind;
@@ -328,7 +328,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = TryFinally_kind;
@@ -349,7 +349,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Assert_kind;
@@ -365,7 +365,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Import_kind;
@@ -385,7 +385,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = ImportFrom_kind;
@@ -406,7 +406,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Exec_kind;
@@ -423,7 +423,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Global_kind;
@@ -443,7 +443,7 @@
         }
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Expr_kind;
@@ -458,7 +458,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Pass_kind;
@@ -472,7 +472,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Break_kind;
@@ -486,7 +486,7 @@
         stmt_ty p;
         p = (stmt_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Continue_kind;
@@ -505,7 +505,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = BoolOp_kind;
@@ -536,7 +536,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = BinOp_kind;
@@ -563,7 +563,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = UnaryOp_kind;
@@ -589,7 +589,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Lambda_kind;
@@ -605,7 +605,7 @@
         expr_ty p;
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Dict_kind;
@@ -626,7 +626,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = ListComp_kind;
@@ -647,7 +647,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = GeneratorExp_kind;
@@ -663,7 +663,7 @@
         expr_ty p;
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Yield_kind;
@@ -683,7 +683,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Compare_kind;
@@ -706,7 +706,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Call_kind;
@@ -730,7 +730,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Repr_kind;
@@ -750,7 +750,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Num_kind;
@@ -770,7 +770,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Str_kind;
@@ -800,7 +800,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Attribute_kind;
@@ -832,7 +832,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Subscript_kind;
@@ -859,7 +859,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Name_kind;
@@ -880,7 +880,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = List_kind;
@@ -901,7 +901,7 @@
         }
         p = (expr_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Tuple_kind;
@@ -917,7 +917,7 @@
         slice_ty p;
         p = (slice_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Ellipsis_kind;
@@ -930,7 +930,7 @@
         slice_ty p;
         p = (slice_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Slice_kind;
@@ -946,7 +946,7 @@
         slice_ty p;
         p = (slice_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = ExtSlice_kind;
@@ -965,7 +965,7 @@
         }
         p = (slice_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->kind = Index_kind;
@@ -989,7 +989,7 @@
         }
         p = (comprehension_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->target = target;
@@ -1004,7 +1004,7 @@
         excepthandler_ty p;
         p = (excepthandler_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->type = type;
@@ -1020,7 +1020,7 @@
         arguments_ty p;
         p = (arguments_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->args = args;
@@ -1046,7 +1046,7 @@
         }
         p = (keyword_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->arg = arg;
@@ -1065,7 +1065,7 @@
         }
         p = (alias_ty)malloc(sizeof(*p));
         if (!p) {
-                PyErr_SetString(PyExc_MemoryError, "no memory");
+                PyErr_NoMemory();
                 return NULL;
         }
         p->name = name;
@@ -1992,7 +1992,6 @@
 int
 marshal_write_expr_context(PyObject **buf, int *off, expr_context_ty o)
 {
-        int i;
         switch (o) {
         case Load:
                 marshal_write_int(buf, off, 1);
@@ -2067,7 +2066,6 @@
 int
 marshal_write_boolop(PyObject **buf, int *off, boolop_ty o)
 {
-        int i;
         switch (o) {
         case And:
                 marshal_write_int(buf, off, 1);
@@ -2082,7 +2080,6 @@
 int
 marshal_write_operator(PyObject **buf, int *off, operator_ty o)
 {
-        int i;
         switch (o) {
         case Add:
                 marshal_write_int(buf, off, 1);
@@ -2127,7 +2124,6 @@
 int
 marshal_write_unaryop(PyObject **buf, int *off, unaryop_ty o)
 {
-        int i;
         switch (o) {
         case Invert:
                 marshal_write_int(buf, off, 1);
@@ -2148,7 +2144,6 @@
 int
 marshal_write_cmpop(PyObject **buf, int *off, cmpop_ty o)
 {
-        int i;
         switch (o) {
         case Eq:
                 marshal_write_int(buf, off, 1);
@@ -2258,7 +2253,6 @@
 int
 marshal_write_keyword(PyObject **buf, int *off, keyword_ty o)
 {
-        int i;
         marshal_write_identifier(buf, off, o->arg);
         marshal_write_expr(buf, off, o->value);
         return 1;
@@ -2267,7 +2261,6 @@
 int
 marshal_write_alias(PyObject **buf, int *off, alias_ty o)
 {
-        int i;
         marshal_write_identifier(buf, off, o->name);
         if (o->asname) {
                 marshal_write_int(buf, off, 1);
