From fc9343fa0fd0c6281ab0c9c4ce79c2f803edbf91 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Sun, 23 Dec 2007 14:13:42 +0000 Subject: [PATCH] better error handling of overloaded wrappers --- pybindgen/overloading.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/pybindgen/overloading.py b/pybindgen/overloading.py index d37a6f4..ce11701 100644 --- a/pybindgen/overloading.py +++ b/pybindgen/overloading.py @@ -2,6 +2,7 @@ C wrapper wrapper """ from typehandlers.base import ForwardWrapperBase +import utils def isiterable(obj): """Returns True if an object appears to be iterable""" @@ -110,7 +111,11 @@ class OverloadedWrapper(object): if len(self.all_wrappers) == 1: ## special case when there's only one wrapper; keep ## simple things simple - self.all_wrappers[0].generate(code_sink) + + #self.all_wrappers[0].generate(code_sink) + utils.call_with_error_handling(self.all_wrappers[0].generate, + (code_sink,), {}, self.all_wrappers[0]) + self.wrapper_function_name = self.all_wrappers[0].wrapper_actual_name assert self.wrapper_function_name is not None else: @@ -134,9 +139,23 @@ class OverloadedWrapper(object): wrapper_name = "%s__%i" % (self.wrapper_function_name, number) wrapper.set_parse_error_return(error_return) code_sink.writeln() - wrapper.generate(code_sink, wrapper_name, - extra_wrapper_params=["PyObject **return_exception"]) + + # wrapper.generate(code_sink, wrapper_name, + # extra_wrapper_params=["PyObject **return_exception"]) + try: + utils.call_with_error_handling( + wrapper.generate, args=(code_sink, wrapper_name), + kwargs=dict(extra_wrapper_params=["PyObject **return_exception"]), + wrapper=wrapper) + except utils.SkipWrapper: + continue + delegate_wrappers.append(wrapper_name) + + ## if all wrappers did not generate, then the overload + ## aggregator wrapper should not be generated either.. + if not delegate_wrappers: + raise utils.SkipWrapper ## Generate the 'main wrapper' that calls the other ones code_sink.writeln()