ruby-changes:10302
From: yugui <ko1@a...>
Date: Wed, 28 Jan 2009 20:09:35 +0900 (JST)
Subject: [ruby-changes:10302] Ruby:r21846 (ruby_1_9_1): merges r21651 from trunk into ruby_1_9_1.
yugui 2009-01-28 20:09:14 +0900 (Wed, 28 Jan 2009) New Revision: 21846 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21846 Log: merges r21651 from trunk into ruby_1_9_1. * eval.c, vm_eval.c (rb_f_local_variables): move definition from eval.c to vm_eval.c because vm_collect_local_variables_in_heap() should be static function. * vm.c (vm_collect_local_variables_in_heap): make it static. Modified files: branches/ruby_1_9_1/ChangeLog branches/ruby_1_9_1/eval.c branches/ruby_1_9_1/vm.c branches/ruby_1_9_1/vm_eval.c Index: ruby_1_9_1/ChangeLog =================================================================== --- ruby_1_9_1/ChangeLog (revision 21845) +++ ruby_1_9_1/ChangeLog (revision 21846) @@ -1,3 +1,11 @@ +Mon Jan 19 08:56:53 2009 Koichi Sasada <ko1@a...> + + * eval.c, vm_eval.c (rb_f_local_variables): move definition from eval.c + to vm_eval.c because vm_collect_local_variables_in_heap() should + be static function. + + * vm.c (vm_collect_local_variables_in_heap): make it static. + Tue Jan 27 14:41:33 2009 Nobuyoshi Nakada <nobu@r...> * cygwin/GNUmakefile.in (RUBYDEF): needs DATA marks to export Index: ruby_1_9_1/vm_eval.c =================================================================== --- ruby_1_9_1/vm_eval.c (revision 21845) +++ ruby_1_9_1/vm_eval.c (revision 21846) @@ -19,6 +19,7 @@ static NODE *vm_cref_push(rb_thread_t *th, VALUE klass, int noex); static VALUE vm_exec(rb_thread_t *th); static void vm_set_eval_stack(rb_thread_t * th, VALUE iseqval, const NODE *cref); +static int vm_collect_local_variables_in_heap(rb_thread_t *th, VALUE *dfp, VALUE ary); static inline VALUE vm_call0(rb_thread_t * th, VALUE klass, VALUE recv, VALUE id, ID oid, @@ -1321,10 +1322,67 @@ return vm_backtrace(GET_THREAD(), -1); } +/* + * call-seq: + * local_variables => array + * + * Returns the names of the current local variables. + * + * fred = 1 + * for i in 1..10 + * # ... + * end + * local_variables #=> ["fred", "i"] + */ + +static VALUE +rb_f_local_variables(void) +{ + VALUE ary = rb_ary_new(); + rb_thread_t *th = GET_THREAD(); + rb_control_frame_t *cfp = + vm_get_ruby_level_caller_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp)); + int i; + + while (cfp) { + if (cfp->iseq) { + for (i = 0; i < cfp->iseq->local_table_size; i++) { + ID lid = cfp->iseq->local_table[i]; + if (lid) { + const char *vname = rb_id2name(lid); + /* should skip temporary variable */ + if (vname) { + rb_ary_push(ary, ID2SYM(lid)); + } + } + } + } + if (cfp->lfp != cfp->dfp) { + /* block */ + VALUE *dfp = GC_GUARDED_PTR_REF(cfp->dfp[0]); + + if (vm_collect_local_variables_in_heap(th, dfp, ary)) { + break; + } + else { + while (cfp->dfp != dfp) { + cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); + } + } + } + else { + break; + } + } + return ary; +} + void Init_vm_eval(void) { rb_define_global_function("eval", rb_f_eval, -1); + rb_define_global_function("local_variables", rb_f_local_variables, 0); + rb_define_global_function("catch", rb_f_catch, -1); rb_define_global_function("throw", rb_f_throw, -1); Index: ruby_1_9_1/eval.c =================================================================== --- ruby_1_9_1/eval.c (revision 21845) +++ ruby_1_9_1/eval.c (revision 21846) @@ -1041,66 +1041,8 @@ set_backtrace(err, val); } -int vm_collect_local_variables_in_heap(rb_thread_t *th, VALUE *dfp, VALUE ary); - /* * call-seq: - * local_variables => array - * - * Returns the names of the current local variables. - * - * fred = 1 - * for i in 1..10 - * # ... - * end - * local_variables #=> ["fred", "i"] - */ - -static VALUE -rb_f_local_variables(void) -{ - VALUE ary = rb_ary_new(); - rb_thread_t *th = GET_THREAD(); - rb_control_frame_t *cfp = - vm_get_ruby_level_caller_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp)); - int i; - - while (cfp) { - if (cfp->iseq) { - for (i = 0; i < cfp->iseq->local_table_size; i++) { - ID lid = cfp->iseq->local_table[i]; - if (lid) { - const char *vname = rb_id2name(lid); - /* should skip temporary variable */ - if (vname) { - rb_ary_push(ary, ID2SYM(lid)); - } - } - } - } - if (cfp->lfp != cfp->dfp) { - /* block */ - VALUE *dfp = GC_GUARDED_PTR_REF(cfp->dfp[0]); - - if (vm_collect_local_variables_in_heap(th, dfp, ary)) { - break; - } - else { - while (cfp->dfp != dfp) { - cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); - } - } - } - else { - break; - } - } - return ary; -} - - -/* - * call-seq: * __method__ => symbol * __callee__ => symbol * @@ -1135,7 +1077,6 @@ rb_define_global_function("fail", rb_f_raise, -1); rb_define_global_function("global_variables", rb_f_global_variables, 0); /* in variable.c */ - rb_define_global_function("local_variables", rb_f_local_variables, 0); rb_define_global_function("__method__", rb_f_method_name, 0); rb_define_global_function("__callee__", rb_f_method_name, 0); Index: ruby_1_9_1/vm.c =================================================================== --- ruby_1_9_1/vm.c (revision 21845) +++ ruby_1_9_1/vm.c (revision 21846) @@ -373,9 +373,8 @@ return 0; } -int -vm_collect_local_variables_in_heap(rb_thread_t * const th, - VALUE * const dfp, const VALUE ary) +static int +vm_collect_local_variables_in_heap(rb_thread_t *th, VALUE *dfp, VALUE ary) { if (ENV_IN_HEAP_P(th, dfp)) { rb_env_t *env; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/