kuuko pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=225f061b05cc4bd00248fcdb5a674e30dc79b8a3

commit 225f061b05cc4bd00248fcdb5a674e30dc79b8a3
Author: Kai Huuhko <[email protected]>
Date:   Sun Nov 10 08:47:21 2013 +0200

    Optimize exception propagation in several hot/time critical cases.
    
    With "except *" a call is made to PyErr_Occurred on each call of a
    function.
    
    Adding a return value where possible and using an appropriate exception
    value calls PyErr_Occurred only when that value is returned, ie.
    an exception has been raised.
    
    cdef void example_func() except *: <- PyErr_Occurred called on each call
    cdef int example_func() except 0: <- PyErr_Occurred called only when
        an exception has been raised (the function thus returns 0)
---
 efl/elementary/object.pyx           | 11 +++--
 efl/eo/efl.eo.pyx                   |  7 ++-
 efl/evas/efl.evas_object.pxi        |  4 +-
 efl/evas/efl.evas_object_events.pxi | 91 ++++++++++++++++++-------------------
 include/efl.eo.pxd                  |  4 +-
 include/efl.evas.pxd                | 30 ++++++------
 6 files changed, 77 insertions(+), 70 deletions(-)

diff --git a/efl/elementary/object.pyx b/efl/elementary/object.pyx
index 1b6b119..88b078b 100644
--- a/efl/elementary/object.pyx
+++ b/efl/elementary/object.pyx
@@ -602,6 +602,10 @@ cdef class Object(evasObject):
         def __get__(self):
             return object_from_instance(elm_object_top_widget_get(self.obj))
 
+    def top_widget_get(self):
+        return object_from_instance(elm_object_top_widget_get(self.obj))
+
+    # FIXME: Now that we have Eo, is this useful anymore?
     property widget_type:
         """The string that represents this Elementary widget.
         This is a readonly property.
@@ -616,13 +620,9 @@ cdef class Object(evasObject):
         :type: string
 
         """
-        # FIXME: Now that we have Eo, is this useful anymore?
         def __get__(self):
             return elm_object_widget_type_get(self.obj)
 
-    def top_widget_get(self):
-        return object_from_instance(elm_object_top_widget_get(self.obj))
-
     def signal_emit(self, emission, source):
         """signal_emit(unicode emission, unicode source)
 
@@ -720,6 +720,9 @@ cdef class Object(evasObject):
             <const_char *>source if source is not None else NULL,
             signal_callback)
 
+    #
+    # FIXME: This isn't done as it's supposed to.
+    #
     # NOTE: name clash with evas event_callback_*
     def elm_event_callback_add(self, func, *args, **kargs):
         """elm_event_callback_add(func, *args, **kargs)
diff --git a/efl/eo/efl.eo.pyx b/efl/eo/efl.eo.pyx
index 6294388..fdbeecd 100644
--- a/efl/eo/efl.eo.pyx
+++ b/efl/eo/efl.eo.pyx
@@ -225,7 +225,7 @@ cdef class Eo(object):
     def __nonzero__(self):
         return 1 if self.obj != NULL else 0
 
-    cdef void _set_obj(self, cEo *obj) except *:
+    cdef int _set_obj(self, cEo *obj) except 0:
         assert self.obj == NULL, "Object must be clean"
         assert obj != NULL, "Cannot set a NULL object"
 
@@ -235,11 +235,14 @@ cdef class Eo(object):
             eo_event_callback_add(EO_EV_DEL, _eo_event_del_cb, <const_void 
*>self))
         Py_INCREF(self)
 
-    cdef void _set_properties_from_keyword_args(self, dict kwargs) except *:
+        return 1
+
+    cdef int _set_properties_from_keyword_args(self, dict kwargs) except 0:
         cdef list cls_list = dir(self)
         for k, v in kwargs.items():
             assert k in cls_list, "%s has no attribute with the name %s." % 
(self, k)
             setattr(self, k, v)
+        return 1
 
     def delete(self):
         eo_del(self.obj)
diff --git a/efl/evas/efl.evas_object.pxi b/efl/evas/efl.evas_object.pxi
index 3849026..68fb02a 100644
--- a/efl/evas/efl.evas_object.pxi
+++ b/efl/evas/efl.evas_object.pxi
@@ -192,12 +192,14 @@ cdef class Object(Eo):
             r, g, b, a,
             layer, clipped, visible)
 
-    cdef void _set_obj(self, Evas_Object *obj) except *:
+    cdef int _set_obj(self, Evas_Object *obj) except 0:
         Eo._set_obj(self, obj)
         evas_object_event_callback_add(obj, enums.EVAS_CALLBACK_FREE,
                                        obj_free_cb, <void *>self)
         Py_INCREF(self)
 
+        return 1
+
     def _set_common_params(self, size=None, pos=None, geometry=None,
                            color=None, name=None):
         if size is not None:
diff --git a/efl/evas/efl.evas_object_events.pxi 
b/efl/evas/efl.evas_object_events.pxi
index e8d6a2d..da6e1fe 100644
--- a/efl/evas/efl.evas_object_events.pxi
+++ b/efl/evas/efl.evas_object_events.pxi
@@ -25,11 +25,11 @@ cdef class EventPoint:
 
     def __str__(self):
         self._check_validity()
-        return "%s(%d, %d)" % (self.__class__.__name__, self.obj.x, self.obj.y)
+        return "%s(%d, %d)" % (type(self).__name__, self.obj.x, self.obj.y)
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventPoint object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventPoint object is invalid."
+        return 1
 
     property x:
         def __get__(self):
@@ -71,9 +71,9 @@ cdef class EventCoordPoint:
         self._check_validity()
         return "%s(%d, %d)" % (self.__class__.__name__, self.obj.x, self.obj.y)
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventPoint object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventCoordPoint object is invalid."
+        return 1
 
     property x:
         def __get__(self):
@@ -117,9 +117,9 @@ cdef class EventPrecisionPoint:
                (self.__class__.__name__, self.obj.x, self.obj.y,
                 self.obj.xsub, self.obj.ysub)
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventPoint object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventPoint object is invalid."
+        return 1
 
     property x:
         def __get__(self):
@@ -214,9 +214,9 @@ cdef class EventMouseIn:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseIn object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseIn object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -260,9 +260,9 @@ cdef class EventMouseOut:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseOut object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseOut object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -306,9 +306,9 @@ cdef class EventMouseDown:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseDown object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseDown object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -361,9 +361,9 @@ cdef class EventMouseUp:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseUp object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseUp object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -420,9 +420,9 @@ cdef class EventMouseMove:
         self.position._unset_objs()
         self.prev_position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseMove object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseMove object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -469,9 +469,8 @@ cdef class EventMultiDown:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMultiDown object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMultiDown object is invalid."
 
     def __str__(self):
         self._check_validity()
@@ -553,9 +552,9 @@ cdef class EventMultiUp:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMultiUp object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMultiUp object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -637,9 +636,9 @@ cdef class EventMultiMove:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMultiMove object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMultiMove object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -707,9 +706,9 @@ cdef class EventMouseWheel:
         self.obj = NULL
         self.position._unset_objs()
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventMouseWheel object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventMouseWheel object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -755,9 +754,9 @@ cdef class EventKeyDown:
     cdef void _unset_obj(self):
         self.obj = NULL
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventKeyDown object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventKeyDown object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -813,9 +812,9 @@ cdef class EventKeyUp:
     cdef void _unset_obj(self):
         self.obj = NULL
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventKeyUp object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventKeyUp object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
@@ -870,9 +869,9 @@ cdef class EventHold:
     cdef void _unset_obj(self):
         self.obj = NULL
 
-    cdef void _check_validity(self) except *:
-        if self.obj == NULL:
-            raise ValueError("EventHold object is invalid.")
+    cdef int _check_validity(self) except 0:
+        assert self.obj != NULL, "EventHold object is invalid."
+        return 1
 
     def __str__(self):
         self._check_validity()
diff --git a/include/efl.eo.pxd b/include/efl.eo.pxd
index 4e3274c..7bebc7d 100644
--- a/include/efl.eo.pxd
+++ b/include/efl.eo.pxd
@@ -27,8 +27,8 @@ cdef:
             cEo *obj
             readonly dict data
 
-            void _set_obj(self, cEo *obj) except *
-            void _set_properties_from_keyword_args(self, dict kwargs) except *
+            int _set_obj(self, cEo *obj) except 0
+            int _set_properties_from_keyword_args(self, dict kwargs) except 0
             #_add_obj(self, Eo_Class *klass, cEo *parent)
 
 
diff --git a/include/efl.evas.pxd b/include/efl.evas.pxd
index 8161915..9e35991 100644
--- a/include/efl.evas.pxd
+++ b/include/efl.evas.pxd
@@ -934,7 +934,7 @@ cdef class EventPoint:
 
     cdef void _set_obj(self, Evas_Point *obj)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventCoordPoint:
@@ -942,7 +942,7 @@ cdef class EventCoordPoint:
 
     cdef void _set_obj(self, Evas_Coord_Point *obj)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventPrecisionPoint:
@@ -950,7 +950,7 @@ cdef class EventPrecisionPoint:
 
     cdef void _set_obj(self, Evas_Coord_Precision_Point *obj)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventPosition:
@@ -975,7 +975,7 @@ cdef class EventMouseIn:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMouseOut:
@@ -984,7 +984,7 @@ cdef class EventMouseOut:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMouseDown:
@@ -993,7 +993,7 @@ cdef class EventMouseDown:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMouseUp:
@@ -1002,7 +1002,7 @@ cdef class EventMouseUp:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMouseMove:
@@ -1012,7 +1012,7 @@ cdef class EventMouseMove:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMultiDown:
@@ -1021,7 +1021,7 @@ cdef class EventMultiDown:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMultiUp:
@@ -1030,7 +1030,7 @@ cdef class EventMultiUp:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMultiMove:
@@ -1039,7 +1039,7 @@ cdef class EventMultiMove:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventMouseWheel:
@@ -1048,7 +1048,7 @@ cdef class EventMouseWheel:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventKeyDown:
@@ -1056,7 +1056,7 @@ cdef class EventKeyDown:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventKeyUp:
@@ -1064,7 +1064,7 @@ cdef class EventKeyUp:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0
 
 
 cdef class EventHold:
@@ -1072,4 +1072,4 @@ cdef class EventHold:
 
     cdef void _set_obj(self, void *ptr)
     cdef void _unset_obj(self)
-    cdef void _check_validity(self) except *
+    cdef int _check_validity(self) except 0

-- 


Reply via email to