a few bug fixes

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@810 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Masaki Fukushima 2000-09-03 17:11:15 +00:00
commit 4db681110d
2 changed files with 13 additions and 10 deletions

View file

@ -11,12 +11,15 @@ static VALUE _cSWIG_Pointer = Qnil;
SWIGRUNTIME(void) SWIGRUNTIME(void)
SWIG_define_class(swig_type_info *type) SWIG_define_class(swig_type_info *type)
{ {
VALUE klass;
char *klass_name = ALLOCA_N(char, 4 + strlen(type->name) + 1); char *klass_name = ALLOCA_N(char, 4 + strlen(type->name) + 1);
sprintf(klass_name, "TYPE%s", type->name); sprintf(klass_name, "TYPE%s", type->name);
if (NIL_P(_cSWIG_Pointer)) { if (NIL_P(_cSWIG_Pointer)) {
_cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject); _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 */ /* Create a new pointer object */
@ -61,11 +64,11 @@ SWIG_ConvertPtr(VALUE obj, swig_type_info *ty)
swig_type_info *tc; swig_type_info *tc;
if ((c = SWIG_MangleStr(obj)) == NULL) 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); Data_Get_Struct(obj, void, ptr);
if (ty) { if (ty) {
tc = SWIG_TypeCheck(c, 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); ptr = SWIG_TypeCast(tc, ptr);
} }
return ptr; return ptr;

View file

@ -320,6 +320,13 @@ void RUBY::initialize() {
Printv(f_init, tab4, modvar, " = rb_define_module(\"", module, "\");\n", Printv(f_init, tab4, modvar, " = rb_define_module(\"", module, "\");\n",
"_mSWIG = rb_define_module_under(", modvar, ", \"SWIG\");\n", "_mSWIG = rb_define_module_under(", modvar, ", \"SWIG\");\n",
0); 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"); Printf(f_init,"\n");
klass = new RClass(); klass = new RClass();
} }
@ -333,13 +340,6 @@ void RUBY::initialize() {
void RUBY::close(void) { void RUBY::close(void) {
/* Finish off our init function */ /* 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"); Printf(f_init,"}\n");
SwigType_emit_type_table(f_header,f_wrappers); SwigType_emit_type_table(f_header,f_wrappers);
} }