[PyObjC-svn] r2408 - in trunk/pyobjc/pyobjc-core: . Lib/objc Modules/objc
[email protected] Tue, 09 Feb 2010 13:38:38 -0600
| Newsgroups | gmane.comp.python.pyobjc.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: ronaldoussoren
Date: Tue Feb 9 13:38:38 2010
New Revision: 2408
Log:
Futher py3k support:
* Test for Py3k Using PY_MAJOR_VERSION instead of PY_VERSION_HEX
* Add improved slice support structs (the older variation
doesn't work in py3k)
* Initial version of py3k style dict views.
Modified:
trunk/pyobjc/pyobjc-core/Lib/objc/_convenience.py
trunk/pyobjc/pyobjc-core/Lib/objc/_dyld.py
trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonNumber.m
trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonObject.m
trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonString.m
trunk/pyobjc/pyobjc-core/Modules/objc/block_support.m
trunk/pyobjc/pyobjc-core/Modules/objc/bundle-variables.m
trunk/pyobjc/pyobjc-core/Modules/objc/class-builder.m
trunk/pyobjc/pyobjc-core/Modules/objc/formal-protocol.m
trunk/pyobjc/pyobjc-core/Modules/objc/fsref.m
trunk/pyobjc/pyobjc-core/Modules/objc/function.m
trunk/pyobjc/pyobjc-core/Modules/objc/informal-protocol.m
trunk/pyobjc/pyobjc-core/Modules/objc/instance-var.m
trunk/pyobjc/pyobjc-core/Modules/objc/libffi_support.m
trunk/pyobjc/pyobjc-core/Modules/objc/method-accessor.m
trunk/pyobjc/pyobjc-core/Modules/objc/method-signature.m
trunk/pyobjc/pyobjc-core/Modules/objc/module.m
trunk/pyobjc/pyobjc-core/Modules/objc/objc-class.m
trunk/pyobjc/pyobjc-core/Modules/objc/objc-object.m
trunk/pyobjc/pyobjc-core/Modules/objc/objc_super.m
trunk/pyobjc/pyobjc-core/Modules/objc/objc_support.m
trunk/pyobjc/pyobjc-core/Modules/objc/objc_util.m
trunk/pyobjc/pyobjc-core/Modules/objc/parsexml.m
trunk/pyobjc/pyobjc-core/Modules/objc/pointer-support.m
trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.h
trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.m
trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.h
trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.m
trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc.h
trunk/pyobjc/pyobjc-core/Modules/objc/registry.m
trunk/pyobjc/pyobjc-core/Modules/objc/selector.m
trunk/pyobjc/pyobjc-core/Modules/objc/struct-wrapper.m
trunk/pyobjc/pyobjc-core/Modules/objc/super-call.m
trunk/pyobjc/pyobjc-core/Modules/objc/toll-free-bridging.m
trunk/pyobjc/pyobjc-core/Modules/objc/unicode-object.m
trunk/pyobjc/pyobjc-core/setup.py
Modified: trunk/pyobjc/pyobjc-core/Lib/objc/_convenience.py
==============================================================================
--- trunk/pyobjc/pyobjc-core/Lib/objc/_convenience.py (original)
+++ trunk/pyobjc/pyobjc-core/Lib/objc/_convenience.py Tue Feb 9 13:38:38 2010
@@ -641,3 +641,86 @@
CLASS_METHODS['NSBlock'] = (
('__call__', __call__),
)
+
+
+if sys.version_info[0] == 3 or (sys.version_info[0] == 2 and sys.version_info[1] >= 7):
+ class nsdict_view (object):
+ __slots__ = ()
+
+ def __and__(self, other):
+ result = set(self)
+ result.intersection_update(other)
+ return result
+
+ def __or__(self, other):
+ result = set(self)
+ result.update(other)
+ return result
+
+ def __sub__(self, other):
+ result = set(self)
+ result.difference_update(other)
+ return result
+
+ def __xor__(Self, other):
+ result = set(self)
+ result.symmetric_difference_update(other)
+ return result
+
+ def __len__(self):
+ return len(self.__value)
+
+ class nsdict_keys(nsdict_view):
+ __slots__=('__value')
+ def __init__(self, value):
+ self.__value = value
+
+ def __iter__(self):
+ return iter(self.__value)
+
+ def __contains__(self, value):
+ return value in self.__value
+
+ class nsdict_values(nsdict_view):
+ __slots__=('__value')
+ def __init__(self, value):
+ self.__value = value
+
+ def __iter__(self):
+ return iter(self.objectEnumerator())
+
+ def __contains__(self, value):
+ for v in iter(self):
+ if value == v:
+ return True
+ return False
+
+ class nsdict_items(nsdict_view):
+ __slots__=('__value')
+ def __init__(self, value):
+ self.__value = value
+
+ def __iter__(self):
+ for k in self.__value:
+ yield (k, self.__value[k])
+
+ def __contains__(self, value):
+ for v in iter(self):
+ if value == v:
+ return True
+ return False
+
+ if sys.version_info[0] == 3:
+ CLASS_METHODS['NSDictionary'] = (
+ ('keys', lambda self: nsdict_keys(self)),
+ ('values', lambda self: nsdict_values(self)),
+ ('items', lambda self: nsdict_items(self)),
+ )
+
+ else:
+ CLASS_METHODS['NSDictionary'] = (
+ ('viewkeys', lambda self: nsdict_keys(self)),
+ ('viewvalues', lambda self: nsdict_values(self)),
+ ('viewitems', lambda self: nsdict_items(self)),
+ )
+
Modified: trunk/pyobjc/pyobjc-core/Lib/objc/_dyld.py
==============================================================================
--- trunk/pyobjc/pyobjc-core/Lib/objc/_dyld.py (original)
+++ trunk/pyobjc/pyobjc-core/Lib/objc/_dyld.py Tue Feb 9 13:38:38 2010
@@ -29,7 +29,7 @@
def ensure_unicode(s):
"""Not all of PyObjC understands unicode paths very well yet"""
- if isinstance(s, str):
+ if isinstance(s, bytes):
return unicode(s, 'utf8')
return s
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonNumber.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonNumber.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonNumber.m Tue Feb 9 13:38:38 2010
@@ -61,7 +61,7 @@
PyObjC_GIL_RETURN(@encode(BOOL));
} else if (PyFloat_Check(value)) {
PyObjC_GIL_RETURN(@encode(double));
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check(value)) {
PyObjC_GIL_RETURN(@encode(long));
#endif
@@ -114,7 +114,7 @@
BOOL negative = NO;
PyObjC_BEGIN_WITH_GIL
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyInt_Check(value)) {
long lng = PyInt_AsLong(value);
if (lng < 0) {
@@ -257,7 +257,7 @@
long long result;
PyObjC_BEGIN_WITH_GIL
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyInt_Check(value)) {
result = PyInt_AsLong(value);
PyObjC_GIL_RETURN(result);
@@ -285,7 +285,7 @@
if (PyLong_Check(value)) {
result = PyLong_AsUnsignedLongLongMask(value);
PyObjC_GIL_RETURN(result);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check(value)) {
result = (unsigned long long)PyInt_AsLong(value);
PyObjC_GIL_RETURN(result);
@@ -326,7 +326,7 @@
PyObjC_GIL_FORWARD_EXC();
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* uniVal = PyUnicode_FromEncodedObject(repr, "ascii", "strict");
Py_DECREF(repr);
if (PyErr_Occurred()) {
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonObject.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonObject.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonObject.m Tue Feb 9 13:38:38 2010
@@ -123,7 +123,7 @@
PyObjC_RegisterObjCProxy(argument, rval);
r = 0;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check (argument)) {
rval = [OC_PythonNumber numberWithPythonObject:argument];
PyObjC_RegisterObjCProxy(argument, rval);
@@ -150,7 +150,7 @@
dictionaryWithPythonObject:argument];
PyObjC_RegisterObjCProxy(argument, rval);
r = 0;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(argument)) {
r = 0;
if (PyObjC_StrBridgeEnabled == 0) {
@@ -449,7 +449,7 @@
repr = PyObject_Repr (pyObject);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (repr) {
int err;
NSString* result;
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonString.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonString.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/OC_PythonString.m Tue Feb 9 13:38:38 2010
@@ -1,6 +1,6 @@
#include "pyobjc.h"
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
#import "OC_PythonString.h"
@implementation OC_PythonString
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/block_support.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/block_support.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/block_support.m Tue Feb 9 13:38:38 2010
@@ -297,7 +297,7 @@
return NULL;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static void PyObjCBlock_CleanupCapsule(void* ptr)
{
PyObjCFFI_FreeBlockFunction(ptr);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/bundle-variables.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/bundle-variables.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/bundle-variables.m Tue Feb 9 13:38:38 2010
@@ -155,7 +155,7 @@
if (!PyArg_ParseTuple(item,
"O!"Py_ARG_BYTES":variableInfo",
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
&PyBaseString_Type,
#else
&PyUnicode_Type,
@@ -264,7 +264,7 @@
doc = NULL;
if (!PyArg_ParseTuple(item,
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
"O&s|SO;functionInfo",
#else
"O&y|UO;functionInfo",
@@ -391,7 +391,7 @@
doc = NULL;
if (!PyArg_ParseTuple(item,
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
"O!s|SO:functionInfo tuple", &PyBaseString_Type,
#else
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/class-builder.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/class-builder.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/class-builder.m Tue Feb 9 13:38:38 2010
@@ -246,7 +246,7 @@
PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(slot_value)) {
var = (PyObjCInstanceVariable*)PyObjCInstanceVariable_New(
PyString_AS_STRING(slot_value));
@@ -1052,7 +1052,7 @@
PyErr_SetString(PyExc_ValueError, "empty name");
goto error_cleanup;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(pyname)) {
ocname = PyString_AS_STRING(pyname);
#endif
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/formal-protocol.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/formal-protocol.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/formal-protocol.m Tue Feb 9 13:38:38 2010
@@ -361,7 +361,7 @@
aSelector = sel_getUid(s);
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(sel)) {
char* s = PyString_AsString(sel);
if (*s == '\0') {
@@ -418,7 +418,7 @@
aSelector = sel_getUid(s);
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(sel)) {
char* s = PyString_AsString(sel);
if (*s == '\0') {
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/fsref.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/fsref.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/fsref.m Tue Feb 9 13:38:38 2010
@@ -69,7 +69,7 @@
rc = FSRefMakePath( &((PyObjC_FSRefObject*)ref)->ref,
buffer, sizeof(buffer));
if (rc != 0) {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyMac_Error(rc);
#else
PyErr_Format(PyExc_OSError, "MAC Error %d", rc);
@@ -90,7 +90,7 @@
if (PyUnicode_Check(path)) {
value = PyUnicode_AsEncodedString(path, NULL, NULL);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if(PyString_Check(path)) {
value = path; Py_INCREF(path);
#endif
@@ -104,7 +104,7 @@
rc = FSPathMakeRef((UInt8*)PyBytes_AsString(value), &result, &isDirectory);
Py_DECREF(value);
if (rc != 0) {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyMac_Error(rc);
#else
PyErr_Format(PyExc_OSError, "MAC Error %d", rc);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/function.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/function.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/function.m Tue Feb 9 13:38:38 2010
@@ -80,7 +80,7 @@
if (self->name == NULL) {
return PyText_FromFormat("<objc.function object at %p>", self);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(self->name)) {
return PyString_FromFormat("<objc.function '%s' at %p>", PyString_AsString(self->name), self);
#else
@@ -88,7 +88,7 @@
return PyUnicode_FromFormat("<objc.function %R at %p>", self->name, self);
#endif
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* result;
PyObject* name_repr = PyObject_Repr(self->name);
if (name_repr == NULL) {
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/informal-protocol.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/informal-protocol.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/informal-protocol.m Tue Feb 9 13:38:38 2010
@@ -59,7 +59,7 @@
if (PyUnicode_Check(self->name)) {
b = PyUnicode_AsEncodedString(self->name, NULL, NULL);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(self->name)) {
b = self->name; Py_INCREF(b);
#endif
@@ -92,7 +92,7 @@
if (PyUnicode_Check(name)) {
/* pass */
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
/* pass */
#endif
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/instance-var.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/instance-var.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/instance-var.m Tue Feb 9 13:38:38 2010
@@ -404,7 +404,7 @@
return -1;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
self->name = PyObjCUtil_Strdup(PyString_AS_STRING(name));
#endif
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/libffi_support.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/libffi_support.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/libffi_support.m Tue Feb 9 13:38:38 2010
@@ -154,7 +154,7 @@
static ffi_type* signature_to_ffi_type(const char* argtype);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static void cleanup_ffitype_capsule(void* ptr, void* context __attribute__((__unused__)))
{
@@ -698,7 +698,7 @@
byref[curarg] = PyMem_Malloc(sizeof(int));
arglist[curarg] = signature_to_ffi_type(@encode(int));
v = PyTuple_GET_ITEM(argtuple, argoffset);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyString_Check(v)) {
if (PyString_Size(v) != 1) {
PyErr_SetString(PyExc_ValueError, "Expecting string of length 1");
@@ -2269,7 +2269,7 @@
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static void imp_capsule_cleanup(void* ptr, void* context __attribute__((__unused__)))
{
PyObjCFFI_FreeIMP(ptr);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/method-accessor.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/method-accessor.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/method-accessor.m Tue Feb 9 13:38:38 2010
@@ -248,7 +248,7 @@
if (name_bytes == NULL) {
return NULL;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
name_bytes = name; Py_INCREF(name_bytes);
#endif
@@ -370,7 +370,7 @@
{
ObjCMethodAccessor* self = (ObjCMethodAccessor*)_self;
PyObject* rval;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* repr;
repr = PyObject_Repr(self->base);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/method-signature.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/method-signature.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/method-signature.m Tue Feb 9 13:38:38 2010
@@ -296,7 +296,7 @@
return -1;
}
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
else if (PyString_Check(d)) {
descr->sel_type = PyObjCUtil_Strdup(PyString_AsString(d));
if (descr->sel_type == NULL) {
@@ -369,7 +369,7 @@
return -1;
}
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
else if (PyInt_Check(d)) {
descr->ptrType = PyObjC_kFixedLengthArray;
descr->arrayArg = PyInt_AsLong(d);
@@ -399,7 +399,7 @@
}
descr->arrayArgOut = descr->arrayArg;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check(d)) {
descr->ptrType = PyObjC_kArrayCountInArg;
descr->arrayArg = PyInt_AsLong(d);
@@ -411,7 +411,7 @@
if (PyLong_Check(PyTuple_GET_ITEM(d, 0))) {
descr->arrayArg = PyLong_AsLong(PyTuple_GET_ITEM(d, 0));
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
descr->arrayArg = PyInt_AsLong(PyTuple_GET_ITEM(d, 0));
#else
PyErr_SetString(PyExc_TypeError, "array_out argument not integer");
@@ -426,7 +426,7 @@
if (PyLong_Check(PyTuple_GET_ITEM(d, 0))) {
descr->arrayArg = PyLong_AsLong(PyTuple_GET_ITEM(d, 0));
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
descr->arrayArg = PyInt_AsLong(PyTuple_GET_ITEM(d, 0));
#else
PyErr_SetString(PyExc_TypeError, "array_out argument not integer");
@@ -440,7 +440,7 @@
if (PyLong_Check(PyTuple_GET_ITEM(d, 1))) {
descr->arrayArgOut = PyLong_AsLong(PyTuple_GET_ITEM(d, 1));
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
descr->arrayArgOut = PyInt_AsLong(PyTuple_GET_ITEM(d, 1));
#else
PyErr_SetString(PyExc_TypeError, "array_out argument not integer");
@@ -464,7 +464,7 @@
}
typeModifier = *PyBytes_AsString(bytes);
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(d)) {
typeModifier = *PyString_AsString(d);
#else
@@ -483,7 +483,7 @@
if (d
&& (
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyString_Check(d) ||
#else
PyBytes_Check(d) ||
@@ -497,7 +497,7 @@
if (bytes == NULL) {
return -1;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(d)) {
bytes = d; Py_INCREF(bytes);
#else
@@ -705,7 +705,7 @@
return NULL;
}
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
else if (PyInt_Check(v)) {
methinfo->arrayArg = PyInt_AsLong(v);
}
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/module.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/module.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/module.m Tue Feb 9 13:38:38 2010
@@ -29,7 +29,7 @@
PyObject* PyObjCClass_DefaultModule = NULL;
PyObject* PyObjC_NSNumberWrapper = NULL;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* PyObjCStrBridgeWarning = NULL;
int PyObjC_StrBridgeEnabled = 1;
#endif
@@ -136,7 +136,7 @@
return rval;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyDoc_STRVAR(setStrBridgeEnabled_doc,
"setStrBridgeEnabled(bool)\n"
"\n"
@@ -331,7 +331,7 @@
name = PyObject_GetAttrString(aMethod, "__name__");
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyBytes_Check(name)) {
PyObject* t = PyUnicode_Decode(
PyBytes_AsString(name),
@@ -696,7 +696,7 @@
return NULL;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
return PyBuffer_New(length);
#else
return PyByteArray_FromStringAndSize(NULL, length);
@@ -754,7 +754,7 @@
PyObject* scanClasses = NULL;
if (!PyArg_ParseTupleAndKeywords(args, kwds,
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
"SO|O&O&O",
#else
"UO|O&O&O",
@@ -1259,7 +1259,7 @@
}
fieldnames[i] = PyObjCUtil_Strdup(PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(v)) {
fieldnames[i] = PyObjCUtil_Strdup(PyString_AS_STRING(v));
#endif
@@ -1507,7 +1507,7 @@
"Returns a closure object that can be used to call the function from\n"
"C. This object has no useable interface from Python.\n"
);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static void _callback_cleanup(void* closure)
{
PyObjCFFI_FreeIMP((IMP)closure);
@@ -1696,7 +1696,7 @@
{ "getVerbose", (PyCFunction)getVerbose, METH_VARARGS|METH_KEYWORDS, getVerbose_doc },
{ "pyobjc_id", (PyCFunction)pyobjc_id, METH_VARARGS|METH_KEYWORDS, pyobjc_id_doc },
{ "repythonify", (PyCFunction)repythonify, METH_VARARGS|METH_KEYWORDS, repythonify_doc },
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
{ "setStrBridgeEnabled", (PyCFunction)setStrBridgeEnabled, METH_VARARGS|METH_KEYWORDS, setStrBridgeEnabled_doc },
{ "getStrBridgeEnabled", (PyCFunction)getStrBridgeEnabled, METH_VARARGS|METH_KEYWORDS, getStrBridgeEnabled_doc },
#endif
@@ -1810,7 +1810,7 @@
};
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 3
static int mod_traverse(PyObject *m __attribute__((__unused__)), visitproc visit __attribute__((__unused__)), void *arg __attribute__((__unused__)))
{
/* FIXME: should traverse all globals */
@@ -1942,7 +1942,7 @@
INITERROR();
}
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 3
m = PyModule_Create(&mod_module);
#else
m = Py_InitModule4("_objc", mod_methods, NULL,
@@ -2020,7 +2020,7 @@
INITERROR();
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObjCStrBridgeWarning = PyErr_NewException("objc.PyObjCStrBridgeWarning", PyExc_DeprecationWarning, NULL);
PyModule_AddObject(m, "PyObjCStrBridgeWarning", PyObjCStrBridgeWarning);
#endif
@@ -2142,7 +2142,7 @@
global_release_pool = [[NSAutoreleasePool alloc] init];
[OC_NSAutoreleasePoolCollector newAutoreleasePool];
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 3
return m;
#endif
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/objc-class.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/objc-class.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/objc-class.m Tue Feb 9 13:38:38 2010
@@ -47,7 +47,7 @@
*
*/
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static
Py_ssize_t nsdata_getreadbuffer(PyObject *pyself, Py_ssize_t segment __attribute__((unused)), void **ptrptr) {
NSData *self = (NSData *)PyObjCObject_GetObject(pyself);
@@ -103,7 +103,7 @@
static PyBufferProcs nsdata_as_buffer = {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
nsdata_getreadbuffer,
NULL,
nsdata_getsegcount,
@@ -121,7 +121,7 @@
};
static PyBufferProcs nsmutabledata_as_buffer = {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
nsdata_getreadbuffer,
nsmutabledata_getwritebuffer,
nsdata_getsegcount,
@@ -949,7 +949,7 @@
PyErr_Clear();
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
else if (PyString_Check(name)
&& strncmp(PyString_AS_STRING(name), "__", 2) == 0
&& strcmp(PyString_AS_STRING(name), "__dict__") != 0) {
@@ -977,7 +977,7 @@
}
result = PyObjCSelector_FindNative(self, PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
result = PyObjCSelector_FindNative(self, PyString_AsString(name));
#endif
@@ -1193,7 +1193,7 @@
return result;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static int
class_compare(PyObject* self, PyObject* other)
{
@@ -2204,7 +2204,7 @@
continue;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(k)) {
char* n = PyString_AS_STRING(k);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/objc-object.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/objc-object.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/objc-object.m Tue Feb 9 13:38:38 2010
@@ -117,7 +117,8 @@
* Don't call 'description' for uninitialized objects, that
* is undefined behaviour and will crash the interpreter sometimes.
*/
- res = PyObject_CallMethod((PyObject*)self, "description", NULL);
+ //res = PyObject_CallMethod((PyObject*)self, "description", NULL);
+ res = NULL;
if (res == NULL) {
PyErr_Clear();
} else {
@@ -246,7 +247,7 @@
dict = ((PyTypeObject *)base)->tp_dict;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyClass_Check(base)) {
dict = ((PyClassObject*)base)->cl_dict;
protDict = NULL;
@@ -304,7 +305,7 @@
if (PyUnicode_Check(name)) {
bytes = PyUnicode_AsEncodedString(name, NULL, NULL);
if (bytes == NULL) return NULL;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
bytes = name; Py_INCREF(bytes);
#endif
@@ -326,7 +327,7 @@
obj_inst = PyObjCObject_GetObject(obj);
if (!obj_inst) {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyErr_Format(PyExc_AttributeError,
"cannot access attribute '%.400s' of NIL '%.50s' object",
PyString_AS_STRING(name),
@@ -389,7 +390,7 @@
f = NULL;
if (descr != NULL
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
&& PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)
#endif
) {
@@ -465,7 +466,7 @@
if (PyObjCSelector_Check(res)
&& PyObjCSelector_IsClassMethod(res)) {
Py_DECREF(res);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyErr_Format(PyExc_AttributeError,
"'%.50s' object has no attribute '%.400s'",
tp->tp_name, PyString_AS_STRING(name));
@@ -497,7 +498,7 @@
if (PyUnicode_Check(name)) {
bytes = PyUnicode_AsEncodedString(name, NULL, NULL);
if (bytes == NULL) return -1;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
bytes = name; Py_INCREF(bytes);
#endif
@@ -528,7 +529,7 @@
descr = _type_lookup(tp, name);
f = NULL;
if (descr != NULL
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
&& PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)
#endif
) {
@@ -791,7 +792,7 @@
#endif
},
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#if PY_VERSION_HEX >= 0x02050000
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/objc_super.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/objc_super.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/objc_super.m Tue Feb 9 13:38:38 2010
@@ -40,7 +40,7 @@
(i.e. super, or a subclass), not the class of su->obj. */
if (PyUnicode_Check(name)) {
skip = (PyUnicode_GET_SIZE(name) && PyObjC_is_ascii_string(name, "__class__"));
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
skip = (
PyString_GET_SIZE(name) == 9 &&
@@ -89,7 +89,7 @@
} else if (PyType_Check(tmp))
dict = ((PyTypeObject *)tmp)->tp_dict;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
else if (PyClass_Check(tmp))
dict = ((PyClassObject *)tmp)->cl_dict;
#endif
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/objc_support.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/objc_support.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/objc_support.m Tue Feb 9 13:38:38 2010
@@ -1673,7 +1673,7 @@
#endif
case _C_ULNG:
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (*(unsigned long*)datum > LONG_MAX) {
retobject = (PyObject*)PyLong_FromUnsignedLongLong(
*(unsigned long*)datum);
@@ -1830,7 +1830,7 @@
PyObjC_Assert(descr != NULL, -1);
PyObjC_Assert(out != NULL, -1);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyInt_Check (argument)) {
long temp = PyInt_AsLong(argument);
if (PyErr_Occurred()) {
@@ -1899,7 +1899,7 @@
PyObject* tmp;
if (
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyString_Check(argument) ||
#else
PyBytes_Check(argument) ||
@@ -1965,7 +1965,7 @@
PyObjC_Assert(descr != NULL, -1);
PyObjC_Assert(out != NULL, -1);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
if (PyInt_Check (argument)) {
*out = (long long)PyInt_AsLong(argument);
if (PyErr_Occurred()) {
@@ -2005,7 +2005,7 @@
PyObject* tmp;
if (
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyString_Check(argument) ||
#else
PyBytes_Check(argument) ||
@@ -2119,7 +2119,7 @@
*(int*)datum = (int)(*PyUnicode_AsUnicode(argument));
return 0;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(argument)) {
PyObject* u = PyUnicode_FromObject(argument);
if (u == NULL) {
@@ -2365,7 +2365,7 @@
if (PyUnicode_Check(argument) && PyUnicode_GetSize(argument) == 1) {
*(UniChar*)datum = (UniChar)(*PyUnicode_AsUnicode(argument));
return 0;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(argument)) {
PyObject* u = PyUnicode_FromObject(argument);
if (u == NULL) {
@@ -2582,7 +2582,7 @@
case _C_FLT:
if (PyFloat_Check (argument)) {
*(float *) datum = (float)PyFloat_AsDouble (argument);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check (argument)) {
*(float *) datum = (float) PyInt_AsLong (argument);
#endif
@@ -2592,7 +2592,7 @@
return -1;
}
} else if (
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyString_Check(argument) ||
#else
PyBytes_Check(argument) ||
@@ -2624,7 +2624,7 @@
case _C_DBL:
if (PyFloat_Check (argument)) {
*(double *) datum = PyFloat_AsDouble (argument);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyInt_Check (argument)) {
*(double *) datum = (double) PyInt_AsLong (argument);
#endif
@@ -2634,7 +2634,7 @@
return -1;
}
} else if (
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyString_Check(argument) ||
#else
PyBytes_Check(argument) ||
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/objc_util.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/objc_util.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/objc_util.m Tue Feb 9 13:38:38 2010
@@ -442,7 +442,7 @@
if (bytes == NULL) {
return '\0';
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(typecode)) {
bytes = typecode; Py_INCREF(bytes);
#endif
@@ -772,7 +772,7 @@
Py_INCREF(pythonList);
return SHOULD_IGNORE;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (*elementType == _C_UNICHAR && PyString_Check(pythonList)) {
PyObject* u = PyUnicode_Decode(
PyString_AsString(pythonList),
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/parsexml.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/parsexml.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/parsexml.m Tue Feb 9 13:38:38 2010
@@ -715,10 +715,11 @@
v = NULL;
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
v = PyFloat_FromString(s, &end);
#else
v = PyFloat_FromString(s);
+ end = NULL;
#endif
Py_DECREF(s);
}
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pointer-support.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pointer-support.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pointer-support.m Tue Feb 9 13:38:38 2010
@@ -273,7 +273,7 @@
return 0;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static int dontClose(FILE* fp __attribute__((__unused__)))
{
@@ -365,7 +365,7 @@
PyObjectPtr_New, PyObjectPtr_Convert);
if (r == -1) return -1;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
r = PyObjCPointerWrapper_Register(@encode(FILE*),
FILE_New, FILE_Convert);
if (r == -1) return -1;
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.h
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.h (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.h Tue Feb 9 13:38:38 2010
@@ -412,7 +412,7 @@
static inline PyObject*
PyObjC_CreateInlineTab(PyObjC_function_map* map)
{
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
return PyCObject_FromVoidPtr(map, NULL);
#else
return PyCapsule_New(map, "objc.__functionlist__", NULL);
@@ -425,7 +425,7 @@
PyObject* m;
PyObject* d;
PyObject* api_obj;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* name = PyString_FromString("objc");
#else
PyObject* name = PyUnicode_FromString("objc");
@@ -450,7 +450,7 @@
"No C_API in objc module");
return -1;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObjC_API = PyCObject_AsVoidPtr(api_obj);
#else
PyObjC_API = PyCapsule_GetPointer(api_obj, "objc." PYOBJC_API_NAME);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-api.m Tue Feb 9 13:38:38 2010
@@ -152,7 +152,7 @@
int PyObjCAPI_Register(PyObject* module)
{
-#if PY_VERSION_HEX <= 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* API = PyCObject_FromVoidPtr(&objc_api, NULL);
#else
PyObject* API = PyCapsule_New(&objc_api, "objc." PYOBJC_API_NAME, NULL);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.h
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.h (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.h Tue Feb 9 13:38:38 2010
@@ -122,7 +122,15 @@
#endif
-#if PY_VERSION_HEX < 0x03000000
+#if __LP64__
+#define Py_ARG_NSInteger "l"
+#define Py_ARG_NSUInteger "L"
+#else
+#define Py_ARG_NSInteger "i"
+#define Py_ARG_NSUInteger "L"
+#endif
+
+#if PY_MAJOR_VERSION == 2
#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
@@ -135,7 +143,7 @@
#define PyCapsule_CheckExact(object) PyCObject_Check(object)
#endif
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
#define PyErr_Format PyObjCErr_Format
@@ -176,7 +184,7 @@
#endif
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 3
#define PyInt_FromLong PyLong_FromLong
#define PyInt_FromString PyLong_FromString
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc-compat.m Tue Feb 9 13:38:38 2010
@@ -1,6 +1,6 @@
#include "pyobjc.h"
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject*
PyObjCString_InternFromStringAndSize(const char* v, Py_ssize_t l)
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc.h
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc.h (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/pyobjc.h Tue Feb 9 13:38:38 2010
@@ -35,7 +35,7 @@
#include "OC_PythonDictionary.h"
#include "OC_PythonUnicode.h"
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
#include "OC_PythonString.h"
#endif
@@ -91,7 +91,7 @@
extern BOOL PyObjC_nativeProperties;
extern int PyObjC_VerboseLevel;
extern int PyObjC_HideProtected;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
extern int PyObjC_StrBridgeEnabled;
#endif
extern PyObject *PyObjCStrBridgeWarning;
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/registry.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/registry.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/registry.m Tue Feb 9 13:38:38 2010
@@ -86,7 +86,7 @@
}
cur_class = objc_lookUpClass(PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(nm)) {
cur_class = objc_lookUpClass(PyString_AsString(nm));
#else
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/selector.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/selector.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/selector.m Tue Feb 9 13:38:38 2010
@@ -511,7 +511,7 @@
if (sel->sel_self == NULL) {
rval = PyText_FromFormat("<unbound native-selector %s in %s>", sel_getName(sel->sel_selector), class_getName(sel->sel_class));
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* selfrepr = PyObject_Repr(sel->sel_self);
if (selfrepr == NULL) {
return NULL;
@@ -605,7 +605,7 @@
myClass = PyObjCClass_New(self->sel_class);
if (!(PyObject_IsInstance(pyself, myClass)
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
|| (PyString_Check(pyself) && class_isSubclassOf(self->sel_class, [NSString class]))
#endif
|| (PyUnicode_Check(pyself) && class_isSubclassOf(self->sel_class, [NSString class]))
@@ -967,7 +967,7 @@
} else {
/* Should not happen... */
result->argcount = 0;
- char* s = sel_getName(selector);
+ const char* s = sel_getName(selector);
while ((s = strchr(s, ':')) != NULL) {
result->argcount++;
s++;
@@ -1008,7 +1008,7 @@
rval = PyText_FromFormat("<unbound selector %s at %p>", sel_getName(sel->sel_selector), sel);
}
} else {
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* selfrepr = PyObject_Repr(sel->sel_self);
if (selfrepr == NULL) {
return NULL;
@@ -1332,7 +1332,7 @@
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(name)) {
strncpy(buf, PyString_AS_STRING(name), sizeof(buf)-1);
#endif
@@ -1556,7 +1556,7 @@
return NULL;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
callable = PyObject_GetAttrString(tmp, "im_func");
#else
callable = PyObject_GetAttrString(tmp, "__funct__");
@@ -1935,7 +1935,7 @@
return callable;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
callable = PyObject_GetAttrString(tmp, "im_func");
#else
callable = PyObject_GetAttrString(tmp, "__func__");
@@ -1961,7 +1961,7 @@
PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(pyname)) {
selector = PyObjCSelector_DefaultSelector(
PyString_AsString(pyname));
@@ -1979,7 +1979,7 @@
PyBytes_AsString(bytes));
Py_DECREF(bytes);
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(pyname)) {
selector = PyObjCSelector_DefaultSelector(
PyString_AS_STRING(pyname));
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/struct-wrapper.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/struct-wrapper.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/struct-wrapper.m Tue Feb 9 13:38:38 2010
@@ -261,6 +261,120 @@
return result;
}
+static PyObject*
+struct_mp_subscript(PyObject* self, PyObject* item)
+{
+ if (PyIndex_Check(item)) {
+ Py_ssize_t i;
+ i = PyNumber_AsSsize_t(item, PyExc_IndexError);
+ if (i == -1 && PyErr_Occurred()) {
+ return NULL;
+ }
+ if (i < 0) {
+ i += struct_sq_length(self);
+ }
+ return struct_sq_item(self, i);
+ } else if (PySlice_Check(item)) {
+ Py_ssize_t start, stop, step, slicelength, cur, i;
+ PyObject* result;
+ PyObject* it;
+
+ if (PySlice_GetIndicesEx((PySliceObject*)item,
+ struct_sq_length(self),
+ &start, &stop, &step, &slicelength) < 0) {
+ return NULL;
+ }
+
+ if (slicelength <= 0) {
+ return PyTuple_New(0);
+ } else if (step == 1) {
+ return struct_sq_slice(self, start, stop);
+ } else {
+ result = PyTuple_New(slicelength);
+ if (result == NULL) {
+ return NULL;
+ }
+
+ for (cur = start, i = 0; i < slicelength;
+ cur += step, i++) {
+ it = struct_sq_item(self, cur);
+ PyTuple_SET_ITEM(result, i, it);
+ }
+ return result;
+ }
+
+ } else {
+ PyErr_Format(PyExc_TypeError,
+ "struct indices must be integers, not %.200s",
+ Py_TYPE(item)->tp_name);
+ return NULL;
+ }
+}
+
+static int
+struct_mp_ass_subscript(PyObject* self, PyObject* item, PyObject* value)
+{
+ if (PyIndex_Check(item)) {
+ Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
+ if (i == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+ if (i < 0) {
+ i += struct_sq_length(self);
+ }
+ return struct_sq_ass_item(self, i, value);
+ } else if (PySlice_Check(item)) {
+ Py_ssize_t start, stop, step, slicelength;
+
+ if (PySlice_GetIndicesEx((PySliceObject*)item,
+ struct_sq_length(self), &start, &stop,
+ &step, &slicelength) < 0) {
+ return -1;
+ }
+ if (step == 1) {
+ return struct_sq_ass_slice(self, start, stop, value);
+ }
+
+ if (value == NULL) {
+ PyErr_Format(PyExc_TypeError,
+ "Cannot delete items in an %s instance",
+ Py_TYPE(self)->tp_name);
+ return -1;
+ }
+
+ PyObject* seq = PySequence_Fast(value,
+ "must assign sequence to slice");
+ if (seq == NULL) return -1;
+
+ if (PySequence_Fast_GET_SIZE(seq) != slicelength) {
+ Py_DECREF(seq);
+ PyErr_Format(PyExc_TypeError,
+ "slice assignment would change size of %s "
+ "instance", Py_TYPE(self)->tp_name);
+ return -1;
+ }
+
+ Py_ssize_t cur, i;
+ for (cur = start, i = 0; i < slicelength; cur += step, i++) {
+ int r = struct_sq_ass_item(self, cur,
+ PySequence_Fast_GET_ITEM(seq, i));
+ if (r == -1) {
+ Py_DECREF(seq);
+ return -1;
+ }
+ }
+
+ Py_DECREF(seq);
+ return 0;
+ } else {
+ PyErr_Format(PyExc_TypeError,
+ "struct indices must be integers, not %.200s",
+ Py_TYPE(item)->tp_name);
+ return -1;
+ }
+}
+
+
static PySequenceMethods struct_as_sequence = {
struct_sq_length, /* sq_length */
NULL, /* sq_concat */
@@ -274,6 +388,12 @@
NULL /* sq_inplace_repeat */
};
+static PyMappingMethods struct_as_mapping = {
+ struct_sq_length,
+ struct_mp_subscript,
+ struct_mp_ass_subscript,
+};
+
static PyMethodDef struct_methods[] = {
{
"__reduce__",
@@ -488,7 +608,6 @@
return;
}
-
if (args != NULL && !PyTuple_Check(args)) {
PyErr_Format(PyExc_TypeError,
"%s() argument tuple is not a tuple",
@@ -537,7 +656,8 @@
keys = PyDict_Keys(kwds);
if (keys == NULL) {
- Py_DECREF(keys);
+ *(int*)retval = -1;
+ return;
}
if (!PyList_Check(keys)) {
@@ -561,9 +681,9 @@
k_bytes = PyUnicode_AsEncodedString(k, NULL, NULL);
if (k_bytes == NULL) {
*(int*)retval = -1;
+ return;
}
- return;
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
} else if (PyString_Check(k)) {
k_bytes = k; Py_INCREF(k_bytes);
#endif
@@ -849,7 +969,7 @@
struct_repr, /* tp_repr */
0, /* tp_as_number */
&struct_as_sequence, /* tp_as_sequence */
- 0, /* tp_as_mapping */
+ &struct_as_mapping, /* tp_as_mapping */
struct_hash, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
@@ -857,7 +977,7 @@
struct_setattro, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
| Py_TPFLAGS_HAVE_RICHCOMPARE
#endif
| Py_TPFLAGS_HAVE_GC, /* tp_flags */
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/super-call.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/super-call.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/super-call.m Tue Feb 9 13:38:38 2010
@@ -46,7 +46,7 @@
return 0;
}
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
static void memblock_capsule_cleanup(void* ptr, void* closure __attribute__((__unused__)))
{
@@ -212,7 +212,7 @@
if (
(PyUnicode_Check(pysel) && PyObjC_is_ascii_string(pysel, sel_getName(sel)))
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
|| (PyString_Check(pysel) && strcmp(PyString_AsString(pysel), sel_getName(sel)) == 0)
#else
|| (PyBytes_Check(pysel) && strcmp(PyBytes_AsString(pysel), sel_getName(sel)) == 0)
@@ -394,7 +394,7 @@
PyObject* self,
PyObject* args __attribute__((__unused__)))
{
-#if PY_VERSION_HEX < 0x03000000
+#if PY_MAJOR_VERSION == 2
PyObject* repr;
repr = PyObject_Repr(self);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/toll-free-bridging.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/toll-free-bridging.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/toll-free-bridging.m Tue Feb 9 13:38:38 2010
@@ -29,7 +29,7 @@
#if 0
//#if !defined(__OBJC2__) && (PY_VERSION_HEX < 0x03000000)
#endif
-#if (PY_VERSION_HEX < 0x03000000)
+#if PY_MAJOR_VERSION == 2
int r;
/* Fall back to MacPython CFType support: */
@@ -51,7 +51,7 @@
PyObjC_IDToCFType(id argument __attribute__((__unused__)))
{
-#if !defined(__OBJC2__) && (PY_VERSION_HEX < 0x03000000)
+#if !defined(__OBJC2__) && (PY_MAJOR_VERSION == 2)
CFTypeRef typeRef = (CFTypeRef)argument;
CFTypeID typeID = CFGetTypeID(argument);
Modified: trunk/pyobjc/pyobjc-core/Modules/objc/unicode-object.m
==============================================================================
--- trunk/pyobjc/pyobjc-core/Modules/objc/unicode-object.m (original)
+++ trunk/pyobjc/pyobjc-core/Modules/objc/unicode-object.m Tue Feb 9 13:38:38 2010
@@ -292,7 +292,7 @@
result->base.hash = -1;
-#if PY_VERSION_HEX >= 0x03000000
+#if PY_MAJOR_VERSION == 3
result->base.state = 0;
#endif
result->base.defenc = NULL;
Modified: trunk/pyobjc/pyobjc-core/setup.py
==============================================================================
--- trunk/pyobjc/pyobjc-core/setup.py (original)
+++ trunk/pyobjc/pyobjc-core/setup.py Tue Feb 9 13:38:38 2010
@@ -42,7 +42,6 @@
from PyObjCTest.loader import makeTestSuite
import unittest
- print (sys.path)
unittest.main(None, None, [unittest.__file__]+self.test_args)
from setuptools.command import egg_info as orig_egg_info
@@ -346,6 +345,7 @@
list(glob.glob(os.path.join('Modules', 'objc', '*.m'))),
extra_compile_args=CFLAGS + ["-I/usr/include/ffi"],
extra_link_args=OBJC_LDFLAGS + ["-lffi"],
+ depends=list(glob.glob(os.path.join('Modules', 'objc', '*.h'))),
),
]
@@ -355,6 +355,7 @@
FFI_SOURCE + list(glob.glob(os.path.join('Modules', 'objc', '*.m'))),
extra_compile_args=CFLAGS + FFI_CFLAGS,
extra_link_args=OBJC_LDFLAGS,
+ depends=list(glob.glob(os.path.join('Modules', 'objc', '*.h'))),
),
]
------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev