changeset 84679:cf8f42eadbd0

Issue #18408: Fix Python-ast.c: handle init_types() failure (ex: MemoryError)
author Victor Stinner <victor.stinner@gmail.com>
date Wed, 17 Jul 2013 00:17:15 +0200
parents c8696ee49291
children a685f4c6e0b6
files Parser/asdl_c.py Python/Python-ast.c
diffstat 2 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Parser/asdl_c.py	Wed Jul 17 00:13:52 2013 +0200
+++ b/Parser/asdl_c.py	Wed Jul 17 00:17:15 2013 +0200
@@ -1191,7 +1191,8 @@
     CODE = """
 PyObject* PyAST_mod2obj(mod_ty t)
 {
-    init_types();
+    if (!init_types())
+        return NULL;
     return ast2obj_mod(t);
 }
 
@@ -1205,7 +1206,8 @@
     int isinstance;
     assert(0 <= mode && mode <= 2);
 
-    init_types();
+    if (!init_types())
+        return NULL;
 
     isinstance = PyObject_IsInstance(ast, req_type[mode]);
     if (isinstance == -1)
@@ -1223,7 +1225,8 @@
 
 int PyAST_Check(PyObject* obj)
 {
-    init_types();
+    if (!init_types())
+        return -1;
     return PyObject_IsInstance(obj, (PyObject*)&AST_type);
 }
 """
--- a/Python/Python-ast.c	Wed Jul 17 00:13:52 2013 +0200
+++ b/Python/Python-ast.c	Wed Jul 17 00:17:15 2013 +0200
@@ -7188,7 +7188,8 @@
 
 PyObject* PyAST_mod2obj(mod_ty t)
 {
-    init_types();
+    if (!init_types())
+        return NULL;
     return ast2obj_mod(t);
 }
 
@@ -7202,7 +7203,8 @@
     int isinstance;
     assert(0 <= mode && mode <= 2);
 
-    init_types();
+    if (!init_types())
+        return NULL;
 
     isinstance = PyObject_IsInstance(ast, req_type[mode]);
     if (isinstance == -1)
@@ -7220,7 +7222,8 @@
 
 int PyAST_Check(PyObject* obj)
 {
-    init_types();
+    if (!init_types())
+        return -1;
     return PyObject_IsInstance(obj, (PyObject*)&AST_type);
 }