# HG changeset patch
# User ZyX <[email protected]>
# Date 1370677291 -14400
#      Sat Jun 08 11:41:31 2013 +0400
# Branch python-path
# Node ID 5af09dbe636d979f376b6bebc3c043d7cc89aed4
# Parent  99c9dd23883f4503603cd45db133d9e3306eb8f3
Use macro PyList_SET_ITEM in place of PyList_SetItem:

1. It is faster.
2. It is what it was designed for: populating a newly allocated empty list.

diff -r 99c9dd23883f -r 5af09dbe636d src/if_py_both.h
--- a/src/if_py_both.h  Sat Jun 08 23:30:04 2013 +0200
+++ b/src/if_py_both.h  Sat Jun 08 11:41:31 2013 +0400
@@ -375,8 +375,10 @@
     static int
 PythonIO_Init_io(void)
 {
-    PySys_SetObject("stdout", (PyObject *)(void *)&Output);
-    PySys_SetObject("stderr", (PyObject *)(void *)&Error);
+    if (PySys_SetObject("stdout", (PyObject *)(void *)&Output))
+       return -1;
+    if (PySys_SetObject("stderr", (PyObject *)(void *)&Error))
+       return -1;
 
     if (PyErr_Occurred())
     {
@@ -1319,12 +1321,7 @@
                Py_DECREF(r);
                return NULL;
            }
-           if (PyList_SetItem(r, i, newObj))
-           {
-               Py_DECREF(r);
-               Py_DECREF(newObj);
-               return NULL;
-           }
+           PyList_SET_ITEM(r, i, newObj);
            --todo;
            ++i;
        }
@@ -1808,12 +1805,7 @@
            return NULL;
        }
 
-       if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
-       {
-           Py_DECREF(item);
-           Py_DECREF(list);
-           return NULL;
-       }
+       PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
     }
 
     return list;
@@ -3164,13 +3156,7 @@
            return NULL;
        }
 
-       /* Set the list item */
-       if (PyList_SetItem(list, i, str))
-       {
-           Py_DECREF(str);
-           Py_DECREF(list);
-           return NULL;
-       }
+       PyList_SET_ITEM(list, i, str);
     }
 
     /* The ownership of the Python list is passed to the caller (ie,
@@ -5366,8 +5352,12 @@
     static int
 populate_module(PyObject *m, object_adder add_object, attr_getter get_attr)
 {
-    int i;
-    PyObject   *os;
+    int                i;
+    PyObject   *other_module;
+    PyObject   *path_hooks;
+    PyObject   *path;
+    PyObject   *pathObject;
+    PyObject   *path_hook;
 
     for (i = 0; i < (int)(sizeof(numeric_constants)
                                           / sizeof(struct numeric_constant));
@@ -5395,24 +5385,24 @@
     ADD_CHECKED_OBJECT(m, "options",
            OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
 
-    if (!(os = PyImport_ImportModule("os")))
+    if (!(other_module = PyImport_ImportModule("os")))
        return -1;
-    ADD_OBJECT(m, "os", os);
-
-    if (!(py_getcwd = PyObject_GetAttrString(os, "getcwd")))
+    ADD_OBJECT(m, "os", other_module);
+
+    if (!(py_getcwd = PyObject_GetAttrString(other_module, "getcwd")))
        return -1;
     ADD_OBJECT(m, "_getcwd", py_getcwd)
 
-    if (!(py_chdir = PyObject_GetAttrString(os, "chdir")))
+    if (!(py_chdir = PyObject_GetAttrString(other_module, "chdir")))
        return -1;
     ADD_OBJECT(m, "_chdir", py_chdir);
-    if (PyObject_SetAttrString(os, "chdir", get_attr(m, "chdir")))
+    if (PyObject_SetAttrString(other_module, "chdir", get_attr(m, "chdir")))
        return -1;
 
-    if ((py_fchdir = PyObject_GetAttrString(os, "fchdir")))
+    if ((py_fchdir = PyObject_GetAttrString(other_module, "fchdir")))
     {
        ADD_OBJECT(m, "_fchdir", py_fchdir);
-       if (PyObject_SetAttrString(os, "fchdir", get_attr(m, "fchdir")))
+       if (PyObject_SetAttrString(other_module,"fchdir",get_attr(m,"fchdir")))
            return -1;
     }
     else

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


*** /tmp/extdiff.ptPHbt/vim.99c9dd23883f/src/if_py_both.h	2013-06-09 13:17:50.916754228 +0400
--- vim.5af09dbe636d/src/if_py_both.h	2013-06-09 13:17:50.924754150 +0400
***************
*** 375,382 ****
      static int
  PythonIO_Init_io(void)
  {
!     PySys_SetObject("stdout", (PyObject *)(void *)&Output);
!     PySys_SetObject("stderr", (PyObject *)(void *)&Error);
  
      if (PyErr_Occurred())
      {
--- 375,384 ----
      static int
  PythonIO_Init_io(void)
  {
!     if (PySys_SetObject("stdout", (PyObject *)(void *)&Output))
! 	return -1;
!     if (PySys_SetObject("stderr", (PyObject *)(void *)&Error))
! 	return -1;
  
      if (PyErr_Occurred())
      {
***************
*** 1319,1330 ****
  		Py_DECREF(r);
  		return NULL;
  	    }
! 	    if (PyList_SetItem(r, i, newObj))
! 	    {
! 		Py_DECREF(r);
! 		Py_DECREF(newObj);
! 		return NULL;
! 	    }
  	    --todo;
  	    ++i;
  	}
--- 1321,1327 ----
  		Py_DECREF(r);
  		return NULL;
  	    }
! 	    PyList_SET_ITEM(r, i, newObj);
  	    --todo;
  	    ++i;
  	}
***************
*** 1808,1819 ****
  	    return NULL;
  	}
  
! 	if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
! 	{
! 	    Py_DECREF(item);
! 	    Py_DECREF(list);
! 	    return NULL;
! 	}
      }
  
      return list;
--- 1805,1811 ----
  	    return NULL;
  	}
  
! 	PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
      }
  
      return list;
***************
*** 3164,3176 ****
  	    return NULL;
  	}
  
! 	/* Set the list item */
! 	if (PyList_SetItem(list, i, str))
! 	{
! 	    Py_DECREF(str);
! 	    Py_DECREF(list);
! 	    return NULL;
! 	}
      }
  
      /* The ownership of the Python list is passed to the caller (ie,
--- 3156,3162 ----
  	    return NULL;
  	}
  
! 	PyList_SET_ITEM(list, i, str);
      }
  
      /* The ownership of the Python list is passed to the caller (ie,
***************
*** 5366,5373 ****
      static int
  populate_module(PyObject *m, object_adder add_object, attr_getter get_attr)
  {
!     int i;
!     PyObject	*os;
  
      for (i = 0; i < (int)(sizeof(numeric_constants)
  					   / sizeof(struct numeric_constant));
--- 5352,5363 ----
      static int
  populate_module(PyObject *m, object_adder add_object, attr_getter get_attr)
  {
!     int		i;
!     PyObject	*other_module;
!     PyObject	*path_hooks;
!     PyObject	*path;
!     PyObject	*pathObject;
!     PyObject	*path_hook;
  
      for (i = 0; i < (int)(sizeof(numeric_constants)
  					   / sizeof(struct numeric_constant));
***************
*** 5395,5418 ****
      ADD_CHECKED_OBJECT(m, "options",
  	    OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
  
!     if (!(os = PyImport_ImportModule("os")))
  	return -1;
!     ADD_OBJECT(m, "os", os);
  
!     if (!(py_getcwd = PyObject_GetAttrString(os, "getcwd")))
  	return -1;
      ADD_OBJECT(m, "_getcwd", py_getcwd)
  
!     if (!(py_chdir = PyObject_GetAttrString(os, "chdir")))
  	return -1;
      ADD_OBJECT(m, "_chdir", py_chdir);
!     if (PyObject_SetAttrString(os, "chdir", get_attr(m, "chdir")))
  	return -1;
  
!     if ((py_fchdir = PyObject_GetAttrString(os, "fchdir")))
      {
  	ADD_OBJECT(m, "_fchdir", py_fchdir);
! 	if (PyObject_SetAttrString(os, "fchdir", get_attr(m, "fchdir")))
  	    return -1;
      }
      else
--- 5385,5408 ----
      ADD_CHECKED_OBJECT(m, "options",
  	    OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
  
!     if (!(other_module = PyImport_ImportModule("os")))
  	return -1;
!     ADD_OBJECT(m, "os", other_module);
  
!     if (!(py_getcwd = PyObject_GetAttrString(other_module, "getcwd")))
  	return -1;
      ADD_OBJECT(m, "_getcwd", py_getcwd)
  
!     if (!(py_chdir = PyObject_GetAttrString(other_module, "chdir")))
  	return -1;
      ADD_OBJECT(m, "_chdir", py_chdir);
!     if (PyObject_SetAttrString(other_module, "chdir", get_attr(m, "chdir")))
  	return -1;
  
!     if ((py_fchdir = PyObject_GetAttrString(other_module, "fchdir")))
      {
  	ADD_OBJECT(m, "_fchdir", py_fchdir);
! 	if (PyObject_SetAttrString(other_module,"fchdir",get_attr(m,"fchdir")))
  	    return -1;
      }
      else

Raspunde prin e-mail lui