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 --
