From e0b9b9903ff51787fb04cbe7f720a505431711f9 Mon Sep 17 00:00:00 2001 From: Charlie Savage Date: Tue, 10 Jan 2006 03:38:08 +0000 Subject: [PATCH] Wrapped customer error classes in function so they work in C and C++ git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8343 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Lib/ruby/rubyerrors.swg | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/SWIG/Lib/ruby/rubyerrors.swg b/SWIG/Lib/ruby/rubyerrors.swg index 583b3d5a3..30c2cd9f1 100644 --- a/SWIG/Lib/ruby/rubyerrors.swg +++ b/SWIG/Lib/ruby/rubyerrors.swg @@ -14,10 +14,27 @@ /* Define custom exceptions for errors that do not map to existing Ruby exceptions. Note this only works for C++ since a global cannot be initialized by a funtion in C. For C, fallback to rb_eRuntimeError.*/ -#ifdef __cplusplus -static VALUE rb_eNullReferenceError = rb_define_class("NullReferenceError", rb_eRuntimeError); -static VALUE rb_eObjectPreviouslyDeleted = rb_define_class("ObjectPreviouslyDeleted", rb_eRuntimeError); -#endif + +VALUE getNullReferenceError() { + static int init = 0; + static VALUE rb_eNullReferenceError ; + if (!init) { + init = 1; + rb_eNullReferenceError = rb_define_class("NullReferenceError", rb_eRuntimeError); + } + return rb_eNullReferenceError; +} + +VALUE getObjectPreviouslyDeletedError() { + static int init = 0; + static VALUE rb_eObjectPreviouslyDeleted ; + if (!init) { + init = 1; + rb_eObjectPreviouslyDeleted = rb_define_class("ObjectPreviouslyDeleted", rb_eRuntimeError); + } + return rb_eObjectPreviouslyDeleted; +} + SWIGINTERN VALUE SWIG_Ruby_ErrorType(int SWIG_code) { @@ -56,14 +73,12 @@ SWIG_Ruby_ErrorType(int SWIG_code) { case SWIG_AttributeError: type = rb_eRuntimeError; break; -#ifdef __cplusplus case SWIG_NullReferenceError: - type = rb_eNullReferenceError; + type = getNullReferenceError(); break; case SWIG_ObjectPreviouslyDeletedError: - type = rb_eObjectPreviouslyDeleted; + type = getObjectPreviouslyDeletedError(); break; -#endif case SWIG_UnknownError: type = rb_eRuntimeError; break;