]> granicus.if.org Git - python/commitdiff
Merged revisions 76534,76538,76628,76701,76774 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Sun, 13 Dec 2009 01:23:39 +0000 (01:23 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 13 Dec 2009 01:23:39 +0000 (01:23 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76534 | martin.v.loewis | 2009-11-26 02:42:05 -0600 (Thu, 26 Nov 2009) | 2 lines

  Fix typo.
........
  r76538 | georg.brandl | 2009-11-26 14:48:25 -0600 (Thu, 26 Nov 2009) | 1 line

  #7400: typo.
........
  r76628 | andrew.kuchling | 2009-12-02 08:27:11 -0600 (Wed, 02 Dec 2009) | 1 line

  Markup fixes
........
  r76701 | andrew.kuchling | 2009-12-07 20:37:05 -0600 (Mon, 07 Dec 2009) | 1 line

  Typo fix; grammar fix
........
  r76774 | benjamin.peterson | 2009-12-12 18:54:15 -0600 (Sat, 12 Dec 2009) | 1 line

  account for PyObject_IsInstance's new ability to fail
........

Doc/library/functions.rst
Doc/whatsnew/2.7.rst
Parser/asdl_c.py
Python/bltinmodule.c

index 6e380ddc92038879a399827e771fd2bf4447f750..6b14dffca2605f8f73edfdcd4322cf2c8eac0884 100644 (file)
@@ -973,7 +973,7 @@ are always available.  They are listed here in alphabetical order.
 .. function:: set([iterable])
    :noindex:
 
-   Return a new set, optionally with elements are taken from *iterable*.
+   Return a new set, optionally with elements taken from *iterable*.
    The set type is described in :ref:`types-set`.
 
 
index 82012fbdb3857ed7580f1b642af07adee67e3f32..768ea3308ca0fccc2a424c860165e38d5cf6edbe 100644 (file)
@@ -70,7 +70,7 @@ A partial list of 3.1 features that were backported to 2.7:
 
 * A version of the :mod:`io` library, rewritten in C for performance.
 * The ordered-dictionary type described in :ref:`pep-0372`.
-* The new format specified described in :ref:`pep-0378`.
+* The new format specifier described in :ref:`pep-0378`.
 * The :class:`memoryview` object.
 * A small subset of the :mod:`importlib` module `described below <#importlib-section>`__.
 
@@ -515,7 +515,7 @@ changes, or look through the Subversion logs for all the details.
   more sensible for numeric types.  (Changed by Mark Dickinson; :issue:`6857`.)
 
 * Distutils is being more actively developed, thanks to Tarek Ziade
-  has taken over maintenance of the package.  A new
+  who has taken over maintenance of the package.  A new
   :file:`setup.py` subcommand, ``check``, will
   check that the arguments being passed to the :func:`setup` function
   are complete and correct (:issue:`5732`).
@@ -587,14 +587,14 @@ changes, or look through the Subversion logs for all the details.
   an invalid file descriptor.  (Implemented by Benjamin Peterson;
   :issue:`4991`.)
 
-* New function: ``itertools.compress(*data*, *selectors*)`` takes two
+* New function: ``itertools.compress(data, selectors)`` takes two
   iterators.  Elements of *data* are returned if the corresponding
   value in *selectors* is true::
 
     itertools.compress('ABCDEF', [1,0,1,0,1,1]) =>
       A, C, E, F
 
-  New function: ``itertools.combinations_with_replacement(*iter*, *r*)``
+  New function: ``itertools.combinations_with_replacement(iter, r)``
   returns all the possible *r*-length combinations of elements from the
   iterable *iter*.  Unlike :func:`combinations`, individual elements
   can be repeated in the generated combinations::
@@ -1080,5 +1080,5 @@ Acknowledgements
 
 The author would like to thank the following people for offering
 suggestions, corrections and assistance with various drafts of this
-article: no one yet.
+article: Ryan Lovett, Hugh Secker-Walker.
 
index 8ccb3ea0458a2373b4bc8a8601d960dd4badb928..c1e07d2200d65a049474ceb18f29f37e1937a2d1 100755 (executable)
@@ -366,6 +366,7 @@ class Obj2ModVisitor(PickleVisitor):
         self.emit("obj2ast_%s(PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
         self.emit("{", 0)
         self.emit("PyObject* tmp = NULL;", 1)
+        self.emit("int isinstance;", 1)
         self.emit("", 0)
 
     def sumTrailer(self, name):
@@ -385,7 +386,13 @@ class Obj2ModVisitor(PickleVisitor):
     def simpleSum(self, sum, name):
         self.funcHeader(name)
         for t in sum.types:
-            self.emit("if (PyObject_IsInstance(obj, (PyObject*)%s_type)) {" % t.name, 1)
+            line = ("isinstance = PyObject_IsInstance(obj, "
+                    "(PyObject *)%s_type);")
+            self.emit(line % (t.name,), 1)
+            self.emit("if (isinstance == -1) {", 1)
+            self.emit("return 1;", 2)
+            self.emit("}", 1)
+            self.emit("if (isinstance) {", 1)
             self.emit("*out = %s;" % t.name, 2)
             self.emit("return 0;", 2)
             self.emit("}", 1)
@@ -407,7 +414,12 @@ class Obj2ModVisitor(PickleVisitor):
         for a in sum.attributes:
             self.visitField(a, name, sum=sum, depth=1)
         for t in sum.types:
-            self.emit("if (PyObject_IsInstance(obj, (PyObject*)%s_type)) {" % t.name, 1)
+            line = "isinstance = PyObject_IsInstance(obj, (PyObject*)%s_type);"
+            self.emit(line % (t.name,), 1)
+            self.emit("if (isinstance == -1) {", 1)
+            self.emit("return 1;", 2)
+            self.emit("}", 1)
+            self.emit("if (isinstance) {", 1)
             for f in t.fields:
                 self.visitFieldDeclaration(f, t.name, sum=sum, depth=2)
             self.emit("", 0)
@@ -1077,11 +1089,15 @@ mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
     PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type,
                             (PyObject*)Interactive_type};
     char *req_name[] = {"Module", "Expression", "Interactive"};
+    int isinstance;
     assert(0 <= mode && mode <= 2);
 
     init_types();
 
-    if (!PyObject_IsInstance(ast, req_type[mode])) {
+    isinstance = PyObject_IsInstance(ast, req_type[mode]);
+    if (isinstance == -1)
+        return NULL;
+    if (!isinstance) {
         PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
                      req_name[mode], Py_TYPE(ast)->tp_name);
         return NULL;
index 297c795ca372636cba448fe0b48552df9c3da01f..5710c0724c0d14519efbeab3e3341297eddda615 100644 (file)
@@ -529,6 +529,7 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
        int mode = -1;
        int dont_inherit = 0;
        int supplied_flags = 0;
+       int is_ast;
        PyCompilerFlags cf;
        PyObject *cmd;
        static char *kwlist[] = {"source", "filename", "mode", "flags",
@@ -567,7 +568,10 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
                return NULL;
        }
 
-       if (PyAST_Check(cmd)) {
+       is_ast = PyAST_Check(cmd);
+       if (is_ast == -1)
+               return NULL;
+       if (is_ast) {
                PyObject *result;
                if (supplied_flags & PyCF_ONLY_AST) {
                        Py_INCREF(cmd);