diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 46a1817..421a2d1 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -440,7 +440,7 @@
     return PyBool_FromLong(b);
 }
 
-static PyObject* ast2obj_int(bool b)
+static PyObject* ast2obj_int(long b)
 {
     return PyInt_FromLong(b);
 }
@@ -740,10 +740,8 @@
 {
         mod_ty p;
         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Module_kind;
         p->v.Module.body = body;
         return p;
@@ -754,10 +752,8 @@
 {
         mod_ty p;
         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Interactive_kind;
         p->v.Interactive.body = body;
         return p;
@@ -773,10 +769,8 @@
                 return NULL;
         }
         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Expression_kind;
         p->v.Expression.body = body;
         return p;
@@ -787,10 +781,8 @@
 {
         mod_ty p;
         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Suite_kind;
         p->v.Suite.body = body;
         return p;
@@ -812,10 +804,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = FunctionDef_kind;
         p->v.FunctionDef.name = name;
         p->v.FunctionDef.args = args;
@@ -837,10 +827,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = ClassDef_kind;
         p->v.ClassDef.name = name;
         p->v.ClassDef.bases = bases;
@@ -855,10 +843,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Return_kind;
         p->v.Return.value = value;
         p->lineno = lineno;
@@ -871,10 +857,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Delete_kind;
         p->v.Delete.targets = targets;
         p->lineno = lineno;
@@ -893,10 +877,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Assign_kind;
         p->v.Assign.targets = targets;
         p->v.Assign.value = value;
@@ -926,10 +908,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = AugAssign_kind;
         p->v.AugAssign.target = target;
         p->v.AugAssign.op = op;
@@ -945,10 +925,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Print_kind;
         p->v.Print.dest = dest;
         p->v.Print.values = values;
@@ -974,10 +952,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = For_kind;
         p->v.For.target = target;
         p->v.For.iter = iter;
@@ -999,10 +975,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = While_kind;
         p->v.While.test = test;
         p->v.While.body = body;
@@ -1023,10 +997,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = If_kind;
         p->v.If.test = test;
         p->v.If.body = body;
@@ -1047,10 +1019,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = With_kind;
         p->v.With.context_expr = context_expr;
         p->v.With.optional_vars = optional_vars;
@@ -1066,10 +1036,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Raise_kind;
         p->v.Raise.type = type;
         p->v.Raise.inst = inst;
@@ -1085,10 +1053,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = TryExcept_kind;
         p->v.TryExcept.body = body;
         p->v.TryExcept.handlers = handlers;
@@ -1104,10 +1070,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = TryFinally_kind;
         p->v.TryFinally.body = body;
         p->v.TryFinally.finalbody = finalbody;
@@ -1126,10 +1090,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Assert_kind;
         p->v.Assert.test = test;
         p->v.Assert.msg = msg;
@@ -1143,10 +1105,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Import_kind;
         p->v.Import.names = names;
         p->lineno = lineno;
@@ -1165,10 +1125,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = ImportFrom_kind;
         p->v.ImportFrom.module = module;
         p->v.ImportFrom.names = names;
@@ -1189,10 +1147,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Exec_kind;
         p->v.Exec.body = body;
         p->v.Exec.globals = globals;
@@ -1207,10 +1163,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Global_kind;
         p->v.Global.names = names;
         p->lineno = lineno;
@@ -1228,10 +1182,8 @@
                 return NULL;
         }
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Expr_kind;
         p->v.Expr.value = value;
         p->lineno = lineno;
@@ -1244,10 +1196,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Pass_kind;
         p->lineno = lineno;
         p->col_offset = col_offset;
@@ -1259,10 +1209,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Break_kind;
         p->lineno = lineno;
         p->col_offset = col_offset;
@@ -1274,10 +1222,8 @@
 {
         stmt_ty p;
         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Continue_kind;
         p->lineno = lineno;
         p->col_offset = col_offset;
@@ -1295,10 +1241,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = BoolOp_kind;
         p->v.BoolOp.op = op;
         p->v.BoolOp.values = values;
@@ -1328,10 +1272,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = BinOp_kind;
         p->v.BinOp.left = left;
         p->v.BinOp.op = op;
@@ -1357,10 +1299,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = UnaryOp_kind;
         p->v.UnaryOp.op = op;
         p->v.UnaryOp.operand = operand;
@@ -1385,10 +1325,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Lambda_kind;
         p->v.Lambda.args = args;
         p->v.Lambda.body = body;
@@ -1418,10 +1356,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = IfExp_kind;
         p->v.IfExp.test = test;
         p->v.IfExp.body = body;
@@ -1437,10 +1373,8 @@
 {
         expr_ty p;
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Dict_kind;
         p->v.Dict.keys = keys;
         p->v.Dict.values = values;
@@ -1460,10 +1394,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = ListComp_kind;
         p->v.ListComp.elt = elt;
         p->v.ListComp.generators = generators;
@@ -1483,10 +1415,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = GeneratorExp_kind;
         p->v.GeneratorExp.elt = elt;
         p->v.GeneratorExp.generators = generators;
@@ -1500,10 +1430,8 @@
 {
         expr_ty p;
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Yield_kind;
         p->v.Yield.value = value;
         p->lineno = lineno;
@@ -1522,10 +1450,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Compare_kind;
         p->v.Compare.left = left;
         p->v.Compare.ops = ops;
@@ -1546,10 +1472,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Call_kind;
         p->v.Call.func = func;
         p->v.Call.args = args;
@@ -1571,10 +1495,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Repr_kind;
         p->v.Repr.value = value;
         p->lineno = lineno;
@@ -1592,10 +1514,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Num_kind;
         p->v.Num.n = n;
         p->lineno = lineno;
@@ -1613,10 +1533,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Str_kind;
         p->v.Str.s = s;
         p->lineno = lineno;
@@ -1645,10 +1563,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Attribute_kind;
         p->v.Attribute.value = value;
         p->v.Attribute.attr = attr;
@@ -1679,10 +1595,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Subscript_kind;
         p->v.Subscript.value = value;
         p->v.Subscript.slice = slice;
@@ -1708,10 +1622,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Name_kind;
         p->v.Name.id = id;
         p->v.Name.ctx = ctx;
@@ -1731,10 +1643,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = List_kind;
         p->v.List.elts = elts;
         p->v.List.ctx = ctx;
@@ -1754,10 +1664,8 @@
                 return NULL;
         }
         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Tuple_kind;
         p->v.Tuple.elts = elts;
         p->v.Tuple.ctx = ctx;
@@ -1771,10 +1679,8 @@
 {
         slice_ty p;
         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Ellipsis_kind;
         return p;
 }
@@ -1784,10 +1690,8 @@
 {
         slice_ty p;
         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Slice_kind;
         p->v.Slice.lower = lower;
         p->v.Slice.upper = upper;
@@ -1800,10 +1704,8 @@
 {
         slice_ty p;
         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = ExtSlice_kind;
         p->v.ExtSlice.dims = dims;
         return p;
@@ -1819,10 +1721,8 @@
                 return NULL;
         }
         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->kind = Index_kind;
         p->v.Index.value = value;
         return p;
@@ -1843,10 +1743,8 @@
                 return NULL;
         }
         p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->target = target;
         p->iter = iter;
         p->ifs = ifs;
@@ -1859,10 +1757,8 @@
 {
         excepthandler_ty p;
         p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->type = type;
         p->name = name;
         p->body = body;
@@ -1877,10 +1773,8 @@
 {
         arguments_ty p;
         p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->args = args;
         p->vararg = vararg;
         p->kwarg = kwarg;
@@ -1903,10 +1797,8 @@
                 return NULL;
         }
         p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->arg = arg;
         p->value = value;
         return p;
@@ -1922,10 +1814,8 @@
                 return NULL;
         }
         p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
+        if (!p)
                 return NULL;
-        }
         p->name = name;
         p->asname = asname;
         return p;
