From c3fa406d609743d47ce4ec71b31a3aa3f3b325f1 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Tue, 24 Apr 2012 22:28:23 +0200 Subject: [PATCH] C++ plugin exceptions correctly handled now --- pcbnew/scripting/pcbnew.i | 19 ++++++++++++ pcbnew/scripting/pcbnew_scripting_helpers.cpp | 30 ++++--------------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/pcbnew/scripting/pcbnew.i b/pcbnew/scripting/pcbnew.i index 4b0fb5d325..8f89a31e31 100644 --- a/pcbnew/scripting/pcbnew.i +++ b/pcbnew/scripting/pcbnew.i @@ -44,6 +44,25 @@ %rename(AddNative) *::Add; +%exception { + try{ + $action + } + catch( IO_ERROR e ) + { + char ExceptionError[256]; + sprintf(ExceptionError, "%s\n", TO_UTF8(e.errorText) ); + PyErr_SetString(PyExc_IOError,ExceptionError); + return NULL; + } + catch( ... ) + { + SWIG_fail; + } +} +%include exception.i + + // this is what it must be included in the wrapper .cxx code to compile %{ diff --git a/pcbnew/scripting/pcbnew_scripting_helpers.cpp b/pcbnew/scripting/pcbnew_scripting_helpers.cpp index 1918a9d57b..7e483514f6 100644 --- a/pcbnew/scripting/pcbnew_scripting_helpers.cpp +++ b/pcbnew/scripting/pcbnew_scripting_helpers.cpp @@ -67,16 +67,8 @@ BOARD* LoadBoard(wxString& aFileName) BOARD* LoadBoard(wxString& aFileName,IO_MGR::PCB_FILE_T aFormat) { - static char ExceptionError[256]; - try{ - return IO_MGR::Load(aFormat,aFileName); - } catch (IO_ERROR e) - { - sprintf(ExceptionError, "%s\n", TO_UTF8(e.errorText) ); - PyErr_SetString(PyExc_IOError,ExceptionError); - return NULL; - } - + return IO_MGR::Load(aFormat,aFileName); + } bool SaveBoard(wxString& aFilename, BOARD* aBoard) @@ -87,7 +79,6 @@ bool SaveBoard(wxString& aFilename, BOARD* aBoard) bool SaveBoard(wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat) { - static char ExceptionError[256]; aBoard->m_Status_Pcb &= ~CONNEXION_OK; aBoard->SynchronizeNetsAndNetClasses(); aBoard->SetCurrentNetClass( aBoard->m_NetClasses.GetDefault()->GetName() ); @@ -105,19 +96,10 @@ bool SaveBoard(wxString& aFileName, BOARD* aBoard, } - try - { - IO_MGR::Save( aFormat, aFileName, aBoard, &props ); - return true; - } - catch (IO_ERROR e) - { - sprintf(ExceptionError, "%s\n", TO_UTF8(e.errorText) ); - PyErr_SetString(PyExc_IOError,ExceptionError); - - return false; - } - + + IO_MGR::Save( aFormat, aFileName, aBoard, &props ); + return true; + }