diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | class.c | 18 | ||||
-rw-r--r-- | eval.c | 5 | ||||
-rw-r--r-- | ext/Setup | 2 | ||||
-rw-r--r-- | ext/gtk/gtk.c | 1 |
5 files changed, 22 insertions, 14 deletions
@@ -1,3 +1,10 @@ +Thu Jan 22 00:37:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp> + + * class.c (rb_define_method): `initialize' should always be + private, even if it defined by C extensions. + + * eval.c (rb_eval): `initialize' should always be private. + Thu Jan 22 16:21:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * eval.c (rb_eval): some singleton class def cause SEGV. @@ -10,7 +17,8 @@ Wed Jan 21 01:43:42 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * eval.c (PUSH_FRAME): do not use ALLOCA_N(). crash on some platforms that use missing/alloca.c. - * regex.c (re_compile_pattern): too many pops for non register subexpr. + * regex.c (re_compile_pattern): too many pops for non register + subexpr. * parse.y (yylex): open parentheses after identifiers are argument list, even if whitespaces have seen. @@ -419,25 +419,29 @@ rb_define_method(klass, name, func, argc) VALUE (*func)(); int argc; { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PUBLIC); + ID id = rb_intern(name); + + rb_add_method(klass, id, NEW_CFUNC(func, argc), + (name[0] == 'i' && id == rb_intern("initialize"))? + NOEX_PRIVATE:NOEX_PUBLIC); } void -rb_undef_method(klass, name) +rb_define_private_method(klass, name, func, argc) VALUE klass; char *name; + VALUE (*func)(); + int argc; { - rb_add_method(klass, rb_intern(name), 0, NOEX_PUBLIC); + rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); } void -rb_define_private_method(klass, name, func, argc) +rb_undef_method(klass, name) VALUE klass; char *name; - VALUE (*func)(); - int argc; { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); + rb_add_method(klass, rb_intern(name), 0, NOEX_PUBLIC); } VALUE @@ -2117,7 +2117,7 @@ rb_eval(self, node) rb_clear_cache_by_id(node->nd_mid); } - if (FL_TEST(the_scope,SCOPE_PRIVATE)) { + if (FL_TEST(the_scope,SCOPE_PRIVATE) || node->nd_mid == init) { noex = NOEX_PRIVATE; } else { @@ -2127,9 +2127,6 @@ rb_eval(self, node) if (FL_TEST(the_scope,SCOPE_MODFUNC)) { rb_add_method(rb_singleton_class(the_class), node->nd_mid, node->nd_defn, NOEX_PUBLIC); - } - - if (FL_TEST(the_scope, SCOPE_MODFUNC)) { rb_funcall(the_class, rb_intern("singleton_method_added"), 1, INT2FIX(node->nd_mid)); } @@ -10,4 +10,4 @@ #socket #tkutil #tcltklib -gtk +#gtk diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c index a0f922796c..137590da5a 100644 --- a/ext/gtk/gtk.c +++ b/ext/gtk/gtk.c @@ -5246,7 +5246,6 @@ Init_gtk() /* GtkObject */ rb_define_method(gObject, "initialize", gobj_initialize, -1); - rb_define_method(gObject, "initialize", gobj_initialize, -1); rb_define_method(gObject, "set_flags", gobj_set_flags, 1); rb_define_method(gObject, "unset_flags", gobj_unset_flags, 1); rb_define_method(gObject, "destroy", gobj_destroy, 0); |