diff --git a/Lib/ruby/rubydef.swg b/Lib/ruby/rubydef.swg index 4c0ada814..ec0d0f0c3 100644 --- a/Lib/ruby/rubydef.swg +++ b/Lib/ruby/rubydef.swg @@ -11,12 +11,15 @@ static VALUE _cSWIG_Pointer = Qnil; SWIGRUNTIME(void) SWIG_define_class(swig_type_info *type) { + VALUE klass; char *klass_name = ALLOCA_N(char, 4 + strlen(type->name) + 1); + sprintf(klass_name, "TYPE%s", type->name); if (NIL_P(_cSWIG_Pointer)) { _cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject); + rb_undef_method(CLASS_OF(_cSWIG_Pointer), "new"); } - rb_define_class_under(_mSWIG, klass_name, _cSWIG_Pointer); + klass = rb_define_class_under(_mSWIG, klass_name, _cSWIG_Pointer); } /* Create a new pointer object */ @@ -61,11 +64,11 @@ SWIG_ConvertPtr(VALUE obj, swig_type_info *ty) swig_type_info *tc; if ((c = SWIG_MangleStr(obj)) == NULL) - rb_raise(rb_eTypeError, "Expected %s", ty->name); + rb_raise(rb_eTypeError, "Expected %s", ty->str); Data_Get_Struct(obj, void, ptr); if (ty) { tc = SWIG_TypeCheck(c, ty); - if (!tc) rb_raise(rb_eTypeError, "Expected %s", ty->name); + if (!tc) rb_raise(rb_eTypeError, "Expected %s", ty->str); ptr = SWIG_TypeCast(tc, ptr); } return ptr; diff --git a/Source/Modules1.1/ruby.cxx b/Source/Modules1.1/ruby.cxx index a57f67eaf..b79fde01f 100644 --- a/Source/Modules1.1/ruby.cxx +++ b/Source/Modules1.1/ruby.cxx @@ -320,6 +320,13 @@ void RUBY::initialize() { Printv(f_init, tab4, modvar, " = rb_define_module(\"", module, "\");\n", "_mSWIG = rb_define_module_under(", modvar, ", \"SWIG\");\n", 0); + Printv(f_init, + "\n", + "for (i = 0; swig_types_initial[i]; i++) {\n", + "swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]);\n", + "SWIG_define_class(swig_types[i]);\n", + "}\n", + 0); Printf(f_init,"\n"); klass = new RClass(); } @@ -333,13 +340,6 @@ void RUBY::initialize() { void RUBY::close(void) { /* Finish off our init function */ - Printv(f_init, - "\n", - "for (i = 0; swig_types_initial[i]; i++) {\n", - "swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]);\n", - "SWIG_define_class(swig_types[i]);\n", - "}\n", - 0); Printf(f_init,"}\n"); SwigType_emit_type_table(f_header,f_wrappers); }