[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