[pypy-svn] r73016 - in pypy/branch/cpython-extension/pypy/module/cpyext: . include test
fijal at codespeak.net
fijal at codespeak.net
Sun Mar 28 04:57:08 CEST 2010
Author: fijal
Date: Sun Mar 28 04:57:03 2010
New Revision: 73016
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/api.py
pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h
pypy/branch/cpython-extension/pypy/module/cpyext/macros.py
pypy/branch/cpython-extension/pypy/module/cpyext/object.py
pypy/branch/cpython-extension/pypy/module/cpyext/state.py
pypy/branch/cpython-extension/pypy/module/cpyext/stringobject.py
pypy/branch/cpython-extension/pypy/module/cpyext/test/test_cpyext.py
pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
Log:
Rename obj_* to ob_* to preserve CPython naming. I think this is needed
for some extensions, not sure how to avoid that.
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/api.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/api.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/api.py Sun Mar 28 04:57:03 2010
@@ -201,8 +201,8 @@
# So we need a forward and backward mapping in our State instance
PyObjectStruct = lltype.ForwardReference()
PyObject = lltype.Ptr(PyObjectStruct)
-PyObjectFields = (("obj_refcnt", lltype.Signed), ("obj_type", PyObject))
-PyVarObjectFields = PyObjectFields + (("obj_size", Py_ssize_t), )
+PyObjectFields = (("ob_refcnt", lltype.Signed), ("ob_type", PyObject))
+PyVarObjectFields = PyObjectFields + (("ob_size", Py_ssize_t), )
cpython_struct('struct _object', PyObjectFields, PyObjectStruct)
PyStringObjectStruct = lltype.ForwardReference()
@@ -260,7 +260,7 @@
w_type = space.type(w_obj)
if space.is_w(w_type, space.w_type):
py_obj = allocate_type_obj(space, w_obj)
- # c_obj_type and c_obj_refcnt are set by allocate_type_obj
+ # c_ob_type and c_ob_refcnt are set by allocate_type_obj
elif isinstance(w_obj, W_PyCObject):
w_type = space.type(w_obj)
assert isinstance(w_type, W_PyCTypeObject)
@@ -270,21 +270,21 @@
basicsize = pto._obj.c_tp_basicsize
T = get_padded_type(PyObject.TO, basicsize)
py_obj = lltype.malloc(T, None, flavor="raw", zero=True)
- py_obj.c_obj_refcnt = 1
- py_obj.c_obj_type = rffi.cast(PyObject, pto)
+ py_obj.c_ob_refcnt = 1
+ py_obj.c_ob_type = rffi.cast(PyObject, pto)
elif isinstance(w_obj, W_StringObject):
py_obj = lltype.malloc(PyStringObject.TO, None, flavor='raw', zero=True)
py_obj.c_size = len(space.str_w(w_obj))
py_obj.c_buffer = lltype.nullptr(rffi.CCHARP.TO)
pto = make_ref(space, space.w_str)
py_obj = rffi.cast(PyObject, py_obj)
- py_obj.c_obj_refcnt = 1
- py_obj.c_obj_type = rffi.cast(PyObject, pto)
+ py_obj.c_ob_refcnt = 1
+ py_obj.c_ob_type = rffi.cast(PyObject, pto)
else:
py_obj = lltype.malloc(PyObject.TO, None, flavor="raw", zero=True)
- py_obj.c_obj_refcnt = 1
+ py_obj.c_ob_refcnt = 1
pto = make_ref(space, space.type(w_obj))
- py_obj.c_obj_type = rffi.cast(PyObject, pto)
+ py_obj.c_ob_type = rffi.cast(PyObject, pto)
ptr = rffi.cast(ADDR, py_obj)
py_obj = rffi.cast(PyObject, py_obj)
debug_refcount("MAKREF", py_obj, w_obj)
@@ -322,7 +322,7 @@
try:
obj = state.py_objects_r2w[ptr]
except KeyError:
- ref_type = ref.c_obj_type
+ ref_type = ref.c_ob_type
if ref != ref_type and space.is_w(from_ref(space, ref_type), space.w_str):
return force_string(space, ref)
else:
@@ -428,8 +428,8 @@
object_pto = make_ref(space, space.w_object)
object_pto = rffi.cast(PyTypeObjectPtr, object_pto)
type_pto.c_tp_base = object_pto
- type_pto.c_obj_type = make_ref(space, space.w_type)
- object_pto.c_obj_type = make_ref(space, space.w_type)
+ type_pto.c_ob_type = make_ref(space, space.w_type)
+ object_pto.c_ob_type = make_ref(space, space.w_type)
PyPyType_Ready(space, object_pto, space.w_object)
PyPyType_Ready(space, type_pto, space.w_type)
type_pto.c_tp_bases = make_ref(space, space.newtuple([space.w_object]))
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h Sun Mar 28 04:57:03 2010
@@ -16,12 +16,12 @@
#define PyObject_HEAD \
- long obj_refcnt; \
- struct _object *obj_type;
+ long ob_refcnt; \
+ struct _object *ob_type;
#define PyObject_VAR_HEAD \
PyObject_HEAD \
- Py_ssize_t obj_size; /* Number of items in variable part */
+ Py_ssize_t ob_size; /* Number of items in variable part */
#define PyObject_HEAD_INIT(type) \
1, type,
@@ -37,9 +37,9 @@
PyObject_VAR_HEAD
} PyVarObject;
-#define Py_REFCNT(ob) (((PyObject*)(ob))->obj_refcnt)
-#define Py_TYPE(ob) (((PyObject*)(ob))->obj_type)
-#define Py_SIZE(ob) (((PyVarObject*)(ob))->obj_size)
+#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
+#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
struct _typeobject;
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/macros.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/macros.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/macros.py Sun Mar 28 04:57:03 2010
@@ -10,13 +10,13 @@
@cpython_api([PyObject], lltype.Void)
def Py_DECREF(space, obj):
from pypy.module.cpyext.typeobject import string_dealloc
- obj.c_obj_refcnt -= 1
- debug_refcount("DECREF", obj, obj.c_obj_refcnt, frame_stackdepth=3)
- if obj.c_obj_refcnt == 0:
+ obj.c_ob_refcnt -= 1
+ debug_refcount("DECREF", obj, obj.c_ob_refcnt, frame_stackdepth=3)
+ if obj.c_ob_refcnt == 0:
state = space.fromcache(State)
ptr = rffi.cast(ADDR, obj)
if ptr not in state.py_objects_r2w and \
- space.is_w(from_ref(space, obj.c_obj_type), space.w_str):
+ space.is_w(from_ref(space, obj.c_ob_type), space.w_str):
# this is a half-allocated string, lets call the deallocator
# without modifying the r2w/w2r dicts
_Py_Dealloc(space, obj)
@@ -41,13 +41,13 @@
hex(containee)
del state.borrow_mapping[ptr]
else:
- assert obj.c_obj_refcnt > 0
+ assert obj.c_ob_refcnt > 0
@cpython_api([PyObject], lltype.Void)
def Py_INCREF(space, obj):
- obj.c_obj_refcnt += 1
- assert obj.c_obj_refcnt > 0
- debug_refcount("INCREF", obj, obj.c_obj_refcnt, frame_stackdepth=3)
+ obj.c_ob_refcnt += 1
+ assert obj.c_ob_refcnt > 0
+ debug_refcount("INCREF", obj, obj.c_ob_refcnt, frame_stackdepth=3)
@cpython_api([PyObject], lltype.Void)
def Py_XINCREF(space, obj):
@@ -62,7 +62,7 @@
def _Py_Dealloc(space, obj):
from pypy.module.cpyext.typeobject import PyTypeObjectPtr
from pypy.module.cpyext.methodobject import generic_cpy_call
- pto = obj.c_obj_type
+ pto = obj.c_ob_type
pto = rffi.cast(PyTypeObjectPtr, pto)
#print >>sys.stderr, "Calling dealloc slot of", obj, \
# "'s type which is", rffi.charp2str(pto.c_tp_name)
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/object.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/object.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/object.py Sun Mar 28 04:57:03 2010
@@ -21,7 +21,7 @@
@cpython_api([PyObject], lltype.Void)
def PyObject_dealloc(space, obj):
- pto = rffi.cast(PyTypeObjectPtr, obj.c_obj_type)
+ pto = rffi.cast(PyTypeObjectPtr, obj.c_ob_type)
obj_voidp = rffi.cast(rffi.VOIDP_real, obj)
generic_cpy_call(space, pto.c_tp_free, obj_voidp)
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/state.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/state.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/state.py Sun Mar 28 04:57:03 2010
@@ -49,4 +49,4 @@
def print_refcounts(self):
print "REFCOUNTS"
for w_obj, obj in self.py_objects_w2r.items():
- print "%r: %i" % (w_obj, obj.c_obj_refcnt)
+ print "%r: %i" % (w_obj, obj.c_ob_refcnt)
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/stringobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/stringobject.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/stringobject.py Sun Mar 28 04:57:03 2010
@@ -21,13 +21,13 @@
return rffi.cast(PyStringObject, ptr)
else:
py_str = lltype.malloc(PyStringObject.TO, None, flavor='raw')
- py_str.c_obj_refcnt = 1
+ py_str.c_ob_refcnt = 1
buflen = length + 1
py_str.c_buffer = lltype.malloc(rffi.CCHARP.TO, buflen, flavor='raw')
py_str.c_buffer[buflen-1] = '\0'
py_str.c_size = length
- py_str.c_obj_type = make_ref(space, space.w_str)
+ py_str.c_ob_type = make_ref(space, space.w_str)
return py_str
@@ -48,7 +48,7 @@
@cpython_api([PyObject], Py_ssize_t, error=-1)
def PyString_Size(space, ref):
- if from_ref(space, ref.c_obj_type) is space.w_str:
+ if from_ref(space, ref.c_ob_type) is space.w_str:
ref = rffi.cast(PyStringObject, ref)
return ref.c_size
else:
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_cpyext.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_cpyext.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_cpyext.py Sun Mar 28 04:57:03 2010
@@ -140,7 +140,7 @@
state = self.space.fromcache(State)
self.frozen_refcounts = {}
for w_obj, obj in state.py_objects_w2r.iteritems():
- self.frozen_refcounts[w_obj] = obj.c_obj_refcnt
+ self.frozen_refcounts[w_obj] = obj.c_ob_refcnt
state.print_refcounts()
def check_and_print_leaks(self):
@@ -151,7 +151,7 @@
lost_objects_w.update((key, None) for key in self.frozen_refcounts.keys())
for w_obj, obj in state.py_objects_w2r.iteritems():
base_refcnt = self.frozen_refcounts.get(w_obj)
- delta = obj.c_obj_refcnt
+ delta = obj.c_ob_refcnt
if base_refcnt is not None:
delta -= base_refcnt
lost_objects_w.pop(w_obj)
@@ -437,4 +437,15 @@
# No exception set, but NULL returned
raises(SystemError, module.clear)
-
+ def test_new_exception(self):
+ skip("not working yet")
+ mod = self.import_extension('foo', [
+ ('newexc', 'METHOD_VARARGS',
+ '''
+ char *name = PyString_AsString(PyTuple_GetItem(args, 0));
+ return PyExc_NewException(name, PyTuple_GetItem(args, 1),
+ PyTuple_GetItem(args, 2));
+ '''
+ ),
+ ])
+ raises(SystemError, mod.newexc, "name", Exception, {})
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py Sun Mar 28 04:57:03 2010
@@ -110,7 +110,7 @@
@cpython_api([PyObject], lltype.Void, external=False)
def subtype_dealloc(space, obj):
- pto = rffi.cast(PyTypeObjectPtr, obj.c_obj_type)
+ pto = rffi.cast(PyTypeObjectPtr, obj.c_ob_type)
assert pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE
base = pto
this_func_ptr = subtype_dealloc.api_func.get_llhelper(space)
@@ -129,7 +129,7 @@
@cpython_api([PyObject], lltype.Void, external=False)
def string_dealloc(space, obj):
obj = rffi.cast(PyStringObject, obj)
- pto = rffi.cast(PyTypeObjectPtr, obj.c_obj_type)
+ pto = rffi.cast(PyTypeObjectPtr, obj.c_ob_type)
if obj.c_buffer:
lltype.free(obj.c_buffer, flavor="raw")
obj_voidp = rffi.cast(rffi.VOIDP_real, obj)
@@ -141,7 +141,7 @@
def type_dealloc(space, obj):
state = space.fromcache(State)
obj_pto = rffi.cast(PyTypeObjectPtr, obj)
- type_pto = rffi.cast(PyTypeObjectPtr, obj.c_obj_type)
+ type_pto = rffi.cast(PyTypeObjectPtr, obj.c_ob_type)
base_pyo = rffi.cast(PyObject, obj_pto.c_tp_base)
Py_XDECREF(space, base_pyo)
Py_XDECREF(space, obj_pto.c_tp_bases)
@@ -162,7 +162,7 @@
assert isinstance(w_type, W_TypeObject)
pto = lltype.malloc(PyTypeObject, None, flavor="raw", zero=True)
- pto.c_obj_refcnt = 1
+ pto.c_ob_refcnt = 1
# put the type object early into the dict
# to support dependency cycles like object/type
state = space.fromcache(State)
@@ -194,10 +194,10 @@
if bases_w:
ref = make_ref(space, bases_w[0])
pto.c_tp_base = rffi.cast(PyTypeObjectPtr, ref)
- pto.c_obj_type = make_ref(space, space.type(space.w_type))
+ pto.c_ob_type = make_ref(space, space.type(space.w_type))
PyPyType_Ready(space, pto, w_type)
else:
- pto.c_obj_type = lltype.nullptr(PyObject.TO)
+ pto.c_ob_type = lltype.nullptr(PyObject.TO)
# XXX fill slots in pto
# would look like fixup_slot_dispatchers()
@@ -221,8 +221,8 @@
base = pto.c_tp_base = rffi.cast(PyTypeObjectPtr, base_pyo)
if base and not base.c_tp_flags & Py_TPFLAGS_READY:
PyPyType_Ready(space, base, None)
- if base and not pto.c_obj_type: # will be filled later
- pto.c_obj_type = base.c_obj_type
+ if base and not pto.c_ob_type: # will be filled later
+ pto.c_ob_type = base.c_ob_type
if not pto.c_tp_bases and not (space.is_w(w_obj, space.w_object)
or space.is_w(w_obj, space.w_type)):
if not base:
More information about the Pypy-commit
mailing list