summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--class.c18
-rw-r--r--eval.c5
-rw-r--r--ext/Setup2
-rw-r--r--ext/gtk/gtk.c1
5 files changed, 22 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 2bb33c88be..e06efbe692 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/class.c b/class.c
index 13c9298c1c..6f6a9bc5b8 100644
--- a/class.c
+++ b/class.c
@@ -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
diff --git a/eval.c b/eval.c
index e6901c69ae..c33078ee95 100644
--- a/eval.c
+++ b/eval.c
@@ -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));
}
diff --git a/ext/Setup b/ext/Setup
index 867d88cfda..9e3a2474c3 100644
--- a/ext/Setup
+++ b/ext/Setup
@@ -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);