Bug #11304 ยป global_variables_captures.patch
| test/ruby/test_variable.rb | ||
|---|---|---|
| 
         assert_in_out_err(["-e", "$0='t'*1000;print $0"], "", /\At+\z/, []) 
   | 
||
| 
       end 
   | 
||
| 
       def test_global_variables_captures 
   | 
||
| 
         '' =~ // 
   | 
||
| 
         refute global_variables.include?(:$1) 
   | 
||
| 
         'a' =~ /(.)/ 
   | 
||
| 
         assert global_variables.include?(:$1) 
   | 
||
| 
         'ab' =~ /(.)(.)/ 
   | 
||
| 
         assert global_variables.include?(:$2) 
   | 
||
| 
       end 
   | 
||
| 
       def test_global_variable_poped 
   | 
||
| 
         assert_nothing_raised { 
   | 
||
| 
           EnvUtil.suppress_warning { 
   | 
||
| variable.c | ||
|---|---|---|
| 
     **********************************************************************/ 
   | 
||
| 
     #include "internal.h" 
   | 
||
| 
     #include "ruby/re.h" 
   | 
||
| 
     #include "ruby/st.h" 
   | 
||
| 
     #include "ruby/util.h" 
   | 
||
| 
     #include "constant.h" 
   | 
||
| ... | ... | |
| 
     rb_f_global_variables(void) 
   | 
||
| 
     { 
   | 
||
| 
         VALUE ary = rb_ary_new(); 
   | 
||
| 
         char buf[2]; 
   | 
||
| 
         int i; 
   | 
||
| 
         VALUE backref = rb_backref_get(); 
   | 
||
| 
         char buf[7]; 
   | 
||
| 
         int i, len; 
   | 
||
| 
         st_foreach_safe(rb_global_tbl, gvar_i, ary); 
   | 
||
| 
         if (RTEST(backref)) { 
   | 
||
| 
         buf[0] = '$'; 
   | 
||
| 
         for (i = 1; i <= 9; ++i) { 
   | 
||
| 
     	buf[1] = (char)(i + '0'); 
   | 
||
| 
     	rb_ary_push(ary, ID2SYM(rb_intern2(buf, 2))); 
   | 
||
| 
         for (i = 1; i < RMATCH_REGS(backref)->num_regs; ++i) { 
   | 
||
| 
     	len = snprintf(buf + 1, 6, "%d", i); 
   | 
||
| 
     	rb_ary_push(ary, ID2SYM(rb_intern2(buf, len + 1))); 
   | 
||
| 
         } 
   | 
||
| 
         } 
   | 
||
| 
         return ary; 
   | 
||
| 
     } 
   | 
||