From 2686299295bc0ff57dc4f2bc8630561b15202b5c Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 5 Dec 2003 05:54:00 +0000 Subject: * 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. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@5118 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 046e1e1b0..cb0ee69a9 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; } -- cgit