Rev 2: for some reason, using PyTuple_GETITEM causes bad failures (I thought it was a reference counting bug), in http://bzr.arbash-meinel.com/plugins/alt_readdir
John Arbash Meinel
john at arbash-meinel.com
Wed Sep 5 22:04:59 BST 2007
At http://bzr.arbash-meinel.com/plugins/alt_readdir
------------------------------------------------------------
revno: 2
revision-id: john at arbash-meinel.com-20070905210415-6usr4qkz5jnt11h1
parent: john at arbash-meinel.com-20070905204017-uz7oxwz1ks2ps3gg
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: alt_readdir
timestamp: Wed 2007-09-05 16:04:15 -0500
message:
for some reason, using PyTuple_GETITEM causes bad failures (I thought it was a reference counting bug),
but it also didn't seem to improve performance at all.
So I'm ignoring it for now.
modified:
_alt_walkdirs.pyx _alt_walkdirs.pyx-20070905203935-juyid0ic3vgs0l9j-3
-------------- next part --------------
=== modified file '_alt_walkdirs.pyx'
--- a/_alt_walkdirs.pyx 2007-09-05 20:40:17 +0000
+++ b/_alt_walkdirs.pyx 2007-09-05 21:04:15 +0000
@@ -22,17 +22,22 @@
cdef extern from "Python.h":
int PyList_Append(object lst, object item) except -1
int PyList_Append_object_void "PyList_Append" (object lst, void *item) except -1
- # This is the #defined version
+ int PyList_CheckExact(object)
int PyList_GET_SIZE(object)
void *PyList_GET_ITEM_object_void "PyList_GET_ITEM" (object, int)
void *PyList_GET_ITEM_void_void "PyList_GET_ITEM" (void *, int)
+ int PyTuple_CheckExact(object)
object PyTuple_GET_ITEM "PyTuple_GET_ITEM" (object, int)
void *PyTuple_GET_ITEM_void_void "PyTuple_GET_ITEM" (void *, int)
+ int PyString_CheckExact(object)
char *PyString_AS_STRING_void "PyString_AS_STRING" (void *p)
int PyString_GET_SIZE_void "PyString_GET_SIZE" (void *p)
+ int Py_INCREF(object)
+ int Py_DECREF(object)
+
cdef extern from "string.h":
int strncmp(char *s1, char *s2, int len)
void *memchr(void *s, int c, size_t len)
@@ -100,7 +105,11 @@
# relroot = PyTuple_GET_ITEM(obj, 0)
# top = PyTuple_GET_ITEM(obj, 4)
- relroot, _, _, _, top = self._pending.pop()
+ obj = self._pending.pop()
+ if not PyTuple_CheckExact(obj):
+ raise TypeError('we expected a tuple, not %s: %r'
+ % (type(obj), obj))
+ relroot, _, _, _, top = obj
if relroot:
relprefix = relroot + '/'
@@ -128,9 +137,8 @@
kind = 'socket'
else:
kind = 'unknown'
- #PyList_Append(dirblock,
- # (relprefix + name, name, kind, statvalue, abspath))
- append((relprefix + name, name, kind, statvalue, abspath))
+ PyList_Append(dirblock,
+ (relprefix + name, name, kind, statvalue, abspath))
# push the user specified dirs from dirblock
self._last_dirblock = dirblock
More information about the bazaar-commits
mailing list