diff --git a/ChangeLog b/ChangeLog index a394967b81..e075e4c710 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Fri Dec 5 13:36:59 2003 Yukihiro Matsumoto + + * eval.c (rb_exec_end_proc): should not clear end_procs and + ephemeral_end_procs before execution. [ruby-dev:22144] + + * eval.c (rb_obj_extend): call Module#extended hook after + extended_object. [ruby-list:38866] + + * object.c (Init_Object): Module#extended defined. + Fri Dec 5 13:17:30 2003 Tanaka Akira * test/ruby/test_pipe.rb: use IO.pipe instead of IO.popen. diff --git a/eval.c b/eval.c index 046e1e1b0f..cb0ee69a93 100644 --- a/eval.c +++ b/eval.c @@ -6381,12 +6381,12 @@ rb_mod_include(argc, argv, module) VALUE *argv; VALUE module; { - while (argc--) { - VALUE m = argv[argc]; + int i; - Check_Type(m, T_MODULE); - rb_funcall(m, rb_intern("append_features"), 1, module); - rb_funcall(m, rb_intern("included"), 1, module); + for (i=0; idata); link = link->next; } + link = tmp_end_procs; + while (link) { + rb_gc_mark(link->data); + link = link->next; + } } static void call_end_proc _((VALUE data)); @@ -6607,7 +6613,7 @@ rb_exec_end_proc() volatile int safe = ruby_safe_level; while (ephemeral_end_procs) { - link = ephemeral_end_procs; + tmp_end_procs = link = ephemeral_end_procs; ephemeral_end_procs = 0; while (link) { PUSH_TAG(PROT_NONE); @@ -6625,7 +6631,7 @@ rb_exec_end_proc() } } while (end_procs) { - link = end_procs; + tmp_end_procs = link = end_procs; end_procs = 0; while (link) { PUSH_TAG(PROT_NONE); @@ -6642,6 +6648,7 @@ rb_exec_end_proc() free(tmp); } } + tmp_end_procs = 0; ruby_safe_level = safe; } diff --git a/object.c b/object.c index f95c79be7a..12f673ec65 100644 --- a/object.c +++ b/object.c @@ -1382,6 +1382,7 @@ Init_Object() rb_define_private_method(rb_cObject, "initialize", rb_obj_dummy, 0); rb_define_private_method(rb_cClass, "inherited", rb_obj_dummy, 1); rb_define_private_method(rb_cModule, "included", rb_obj_dummy, 1); + rb_define_private_method(rb_cModule, "extended", rb_obj_dummy, 1); rb_define_private_method(rb_cModule, "method_added", rb_obj_dummy, 1); rb_define_private_method(rb_cModule, "method_removed", rb_obj_dummy, 1); rb_define_private_method(rb_cModule, "method_undefined", rb_obj_dummy, 1);