# HG changeset patch # User Emmanuel Gil Peyrot # Date 1427581275 -3600 # Node ID 4ce3ef053a25565f5cd23dcbd9c62d96f7d5cfa7 # Parent d1f0bb0b7a176194e02731ae4997aa782e104f61 Remove every case where an exception could be silently eaten by a cdef function. diff --git a/pytouhou/lib/sdl.pxd b/pytouhou/lib/sdl.pxd --- a/pytouhou/lib/sdl.pxd +++ b/pytouhou/lib/sdl.pxd @@ -60,17 +60,17 @@ cdef class Window: cdef SDL_GLContext context cdef SDL_Renderer *renderer - cdef void gl_create_context(self) except * + cdef bint gl_create_context(self) except True cdef void present(self) nogil cdef void set_window_size(self, int width, int height) nogil # The following functions are there for the pure SDL backend. - cdef void create_renderer(self, Uint32 flags) - cdef void render_clear(self) - cdef void render_copy(self, Texture texture, Rect srcrect, Rect dstrect) - cdef void render_copy_ex(self, Texture texture, Rect srcrect, Rect dstrect, double angle, bint flip) - cdef void render_set_clip_rect(self, Rect rect) - cdef void render_set_viewport(self, Rect rect) + cdef bint create_renderer(self, Uint32 flags) except True + cdef bint render_clear(self) except True + cdef bint render_copy(self, Texture texture, Rect srcrect, Rect dstrect) except True + cdef bint render_copy_ex(self, Texture texture, Rect srcrect, Rect dstrect, double angle, bint flip) except True + cdef bint render_set_clip_rect(self, Rect rect) except True + cdef bint render_set_viewport(self, Rect rect) except True cdef Texture create_texture_from_surface(self, Surface surface) @@ -134,4 +134,4 @@ cdef Music load_music(str filename) cdef Chunk load_chunk(file_) cdef Uint32 get_ticks() nogil cdef void delay(Uint32 ms) nogil -cpdef int show_simple_message_box(unicode message) +cpdef bint show_simple_message_box(unicode message) except True diff --git a/pytouhou/lib/sdl.pyx b/pytouhou/lib/sdl.pyx --- a/pytouhou/lib/sdl.pyx +++ b/pytouhou/lib/sdl.pyx @@ -109,7 +109,7 @@ cdef class Window: if self.window != NULL: SDL_DestroyWindow(self.window) - cdef void gl_create_context(self) except *: + cdef bint gl_create_context(self) except True: self.context = SDL_GL_CreateContext(self.window) if self.context == NULL: raise SDLError() @@ -124,32 +124,32 @@ cdef class Window: SDL_SetWindowSize(self.window, width, height) # The following functions are there for the pure SDL backend. - cdef void create_renderer(self, Uint32 flags): + cdef bint create_renderer(self, Uint32 flags) except True: self.renderer = SDL_CreateRenderer(self.window, -1, flags) if self.renderer == NULL: raise SDLError() - cdef void render_clear(self): + cdef bint render_clear(self) except True: ret = SDL_RenderClear(self.renderer) if ret == -1: raise SDLError() - cdef void render_copy(self, Texture texture, Rect srcrect, Rect dstrect): + cdef bint render_copy(self, Texture texture, Rect srcrect, Rect dstrect) except True: ret = SDL_RenderCopy(self.renderer, texture.texture, &srcrect.rect, &dstrect.rect) if ret == -1: raise SDLError() - cdef void render_copy_ex(self, Texture texture, Rect srcrect, Rect dstrect, double angle, bint flip): + cdef bint render_copy_ex(self, Texture texture, Rect srcrect, Rect dstrect, double angle, bint flip) except True: ret = SDL_RenderCopyEx(self.renderer, texture.texture, &srcrect.rect, &dstrect.rect, angle, NULL, flip) if ret == -1: raise SDLError() - cdef void render_set_clip_rect(self, Rect rect): + cdef bint render_set_clip_rect(self, Rect rect) except True: ret = SDL_RenderSetClipRect(self.renderer, &rect.rect) if ret == -1: raise SDLError() - cdef void render_set_viewport(self, Rect rect): + cdef bint render_set_viewport(self, Rect rect) except True: ret = SDL_RenderSetViewport(self.renderer, &rect.rect) if ret == -1: raise SDLError() @@ -372,6 +372,8 @@ cdef void delay(Uint32 ms) nogil: SDL_Delay(ms) -cpdef int show_simple_message_box(unicode message): +cpdef bint show_simple_message_box(unicode message) except True: text = message.encode('UTF-8') - return SDL_ShowSimpleMessageBox(1, 'PyTouhou', text, NULL) + ret = SDL_ShowSimpleMessageBox(1, 'PyTouhou', text, NULL) + if ret == -1: + raise SDLError() diff --git a/pytouhou/ui/music.pyx b/pytouhou/ui/music.pyx --- a/pytouhou/ui/music.pyx +++ b/pytouhou/ui/music.pyx @@ -76,7 +76,7 @@ cdef class SFXPlayer(MusicPlayer): self.volume = volume self.next_channel = 0 - cdef int get_channel(self, name): + cdef int get_channel(self, name) except -1: if name not in self.channels: self.channels[name] = self.next_channel self.next_channel += 1 diff --git a/pytouhou/ui/sdl/sprite.pyx b/pytouhou/ui/sdl/sprite.pyx --- a/pytouhou/ui/sdl/sprite.pyx +++ b/pytouhou/ui/sdl/sprite.pyx @@ -12,7 +12,7 @@ ## GNU General Public License for more details. ## - +cimport cython from libc.stdlib cimport malloc from libc.math cimport M_PI as pi @@ -23,6 +23,7 @@ cdef RenderingData* get_sprite_rendering return sprite._rendering_data +@cython.cdivision(True) cdef void render_sprite(Sprite sprite) nogil: if sprite._rendering_data == NULL: sprite._rendering_data = malloc(sizeof(RenderingData)) diff --git a/pytouhou/utils/random.pyx b/pytouhou/utils/random.pyx --- a/pytouhou/utils/random.pyx +++ b/pytouhou/utils/random.pyx @@ -25,9 +25,11 @@ It has been reverse engineered from 102h #TODO: maybe some post-processing is missing - +cimport cython from time import time + +@cython.final cdef class Random: def __init__(self, long seed=-1): if seed < 0: