summaryrefslogtreecommitdiff
path: root/spec/ruby/core/array/shared/eql.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/array/shared/eql.rb')
-rw-r--r--spec/ruby/core/array/shared/eql.rb66
1 files changed, 33 insertions, 33 deletions
diff --git a/spec/ruby/core/array/shared/eql.rb b/spec/ruby/core/array/shared/eql.rb
index b5d9128434..5e770bf167 100644
--- a/spec/ruby/core/array/shared/eql.rb
+++ b/spec/ruby/core/array/shared/eql.rb
@@ -1,59 +1,59 @@
describe :array_eql, shared: true do
it "returns true if other is the same array" do
a = [1]
- a.send(@method, a).should be_true
+ a.send(@method, a).should == true
end
it "returns true if corresponding elements are #eql?" do
- [].send(@method, []).should be_true
- [1, 2, 3, 4].send(@method, [1, 2, 3, 4]).should be_true
+ [].send(@method, []).should == true
+ [1, 2, 3, 4].send(@method, [1, 2, 3, 4]).should == true
end
it "returns false if other is shorter than self" do
- [1, 2, 3, 4].send(@method, [1, 2, 3]).should be_false
+ [1, 2, 3, 4].send(@method, [1, 2, 3]).should == false
end
it "returns false if other is longer than self" do
- [1, 2, 3, 4].send(@method, [1, 2, 3, 4, 5]).should be_false
+ [1, 2, 3, 4].send(@method, [1, 2, 3, 4, 5]).should == false
end
it "returns false immediately when sizes of the arrays differ" do
obj = mock('1')
obj.should_not_receive(@method)
- [] .send(@method, [obj] ).should be_false
- [obj] .send(@method, [] ).should be_false
+ [] .send(@method, [obj] ).should == false
+ [obj] .send(@method, [] ).should == false
end
it "handles well recursive arrays" do
a = ArraySpecs.empty_recursive_array
- a .send(@method, [a] ).should be_true
- a .send(@method, [[a]] ).should be_true
- [a] .send(@method, a ).should be_true
- [[a]] .send(@method, a ).should be_true
+ a .send(@method, [a] ).should == true
+ a .send(@method, [[a]] ).should == true
+ [a] .send(@method, a ).should == true
+ [[a]] .send(@method, a ).should == true
# These may be surprising, but no difference can be
# found between these arrays, so they are ==.
# There is no "path" that will lead to a difference
# (contrary to other examples below)
a2 = ArraySpecs.empty_recursive_array
- a .send(@method, a2 ).should be_true
- a .send(@method, [a2] ).should be_true
- a .send(@method, [[a2]] ).should be_true
- [a] .send(@method, a2 ).should be_true
- [[a]] .send(@method, a2 ).should be_true
+ a .send(@method, a2 ).should == true
+ a .send(@method, [a2] ).should == true
+ a .send(@method, [[a2]] ).should == true
+ [a] .send(@method, a2 ).should == true
+ [[a]] .send(@method, a2 ).should == true
back = []
forth = [back]; back << forth;
- back .send(@method, a ).should be_true
+ back .send(@method, a ).should == true
x = []; x << x << x
- x .send(@method, a ).should be_false # since x.size != a.size
- x .send(@method, [a, a] ).should be_false # since x[0].size != [a, a][0].size
- x .send(@method, [x, a] ).should be_false # since x[1].size != [x, a][1].size
- [x, a] .send(@method, [a, x] ).should be_false # etc...
- x .send(@method, [x, x] ).should be_true
- x .send(@method, [[x, x], [x, x]] ).should be_true
+ x .send(@method, a ).should == false # since x.size != a.size
+ x .send(@method, [a, a] ).should == false # since x[0].size != [a, a][0].size
+ x .send(@method, [x, a] ).should == false # since x[1].size != [x, a][1].size
+ [x, a] .send(@method, [a, x] ).should == false # etc...
+ x .send(@method, [x, x] ).should == true
+ x .send(@method, [[x, x], [x, x]] ).should == true
tree = [];
branch = []; branch << tree << tree; tree << branch
@@ -62,31 +62,31 @@ describe :array_eql, shared: true do
forest = [tree, branch, :bird, a]; forest << forest
forest2 = [tree2, branch2, :bird, a2]; forest2 << forest2
- forest .send(@method, forest2 ).should be_true
- forest .send(@method, [tree2, branch, :bird, a, forest2]).should be_true
+ forest .send(@method, forest2 ).should == true
+ forest .send(@method, [tree2, branch, :bird, a, forest2]).should == true
diffforest = [branch2, tree2, :bird, a2]; diffforest << forest2
- forest .send(@method, diffforest ).should be_false # since forest[0].size == 1 != 3 == diffforest[0]
- forest .send(@method, [nil] ).should be_false
- forest .send(@method, [forest] ).should be_false
+ forest .send(@method, diffforest ).should == false # since forest[0].size == 1 != 3 == diffforest[0]
+ forest .send(@method, [nil] ).should == false
+ forest .send(@method, [forest] ).should == false
end
it "does not call #to_ary on its argument" do
obj = mock('to_ary')
obj.should_not_receive(:to_ary)
- [1, 2, 3].send(@method, obj).should be_false
+ [1, 2, 3].send(@method, obj).should == false
end
it "does not call #to_ary on Array subclasses" do
ary = ArraySpecs::ToAryArray[5, 6, 7]
ary.should_not_receive(:to_ary)
- [5, 6, 7].send(@method, ary).should be_true
+ [5, 6, 7].send(@method, ary).should == true
end
it "ignores array class differences" do
- ArraySpecs::MyArray[1, 2, 3].send(@method, [1, 2, 3]).should be_true
- ArraySpecs::MyArray[1, 2, 3].send(@method, ArraySpecs::MyArray[1, 2, 3]).should be_true
- [1, 2, 3].send(@method, ArraySpecs::MyArray[1, 2, 3]).should be_true
+ ArraySpecs::MyArray[1, 2, 3].send(@method, [1, 2, 3]).should == true
+ ArraySpecs::MyArray[1, 2, 3].send(@method, ArraySpecs::MyArray[1, 2, 3]).should == true
+ [1, 2, 3].send(@method, ArraySpecs::MyArray[1, 2, 3]).should == true
end
end
'width: 100.0%;'/> -rw-r--r--addr2line.c1208
-rw-r--r--addr2line.h21
-rw-r--r--array.c5898
-rw-r--r--bcc32/Makefile.sub499
-rw-r--r--bcc32/README.bcc32137
-rwxr-xr-xbcc32/configure.bat92
-rwxr-xr-xbcc32/mkexports.rb27
-rw-r--r--bcc32/setup.mak133
-rw-r--r--benchmark/bm_app_answer.rb15
-rw-r--r--benchmark/bm_app_aobench.rb291
-rw-r--r--benchmark/bm_app_erb.rb26
-rw-r--r--benchmark/bm_app_factorial.rb11
-rw-r--r--benchmark/bm_app_fib.rb10
-rw-r--r--benchmark/bm_app_lc_fizzbuzz.rb52
-rw-r--r--benchmark/bm_app_mandelbrot.rb23
-rw-r--r--benchmark/bm_app_pentomino.rb259
-rw-r--r--benchmark/bm_app_raise.rb8
-rw-r--r--benchmark/bm_app_strconcat.rb5
-rw-r--r--benchmark/bm_app_tak.rb13
-rw-r--r--benchmark/bm_app_tarai.rb10
-rw-r--r--benchmark/bm_app_uri.rb8
-rw-r--r--benchmark/bm_array_shift.rb14
-rw-r--r--benchmark/bm_hash_aref_dsym.rb4
-rw-r--r--benchmark/bm_hash_aref_dsym_long.rb21
-rw-r--r--benchmark/bm_hash_aref_fix.rb4
-rw-r--r--benchmark/bm_hash_aref_flo.rb4
-rw-r--r--benchmark/bm_hash_aref_miss.rb5
-rw-r--r--benchmark/bm_hash_aref_str.rb4
-rw-r--r--benchmark/bm_hash_aref_sym.rb9
-rw-r--r--benchmark/bm_hash_aref_sym_long.rb13
-rw-r--r--benchmark/bm_hash_flatten.rb9
-rw-r--r--benchmark/bm_hash_ident_flo.rb4
-rw-r--r--benchmark/bm_hash_ident_num.rb4
-rw-r--r--benchmark/bm_hash_ident_obj.rb4
-rw-r--r--benchmark/bm_hash_ident_str.rb4
-rw-r--r--benchmark/bm_hash_ident_sym.rb4
-rw-r--r--benchmark/bm_hash_keys.rb9
-rw-r--r--benchmark/bm_hash_shift.rb10
-rw-r--r--benchmark/bm_hash_shift_u16.rb10
-rw-r--r--benchmark/bm_hash_shift_u24.rb10
-rw-r--r--benchmark/bm_hash_shift_u32.rb10
-rw-r--r--benchmark/bm_hash_to_proc.rb9
-rw-r--r--benchmark/bm_hash_values.rb9
-rw-r--r--benchmark/bm_io_file_create.rb13
-rw-r--r--benchmark/bm_io_file_read.rb15
-rw-r--r--benchmark/bm_io_file_write.rb14
-rw-r--r--benchmark/bm_io_nonblock_noex.rb22
-rw-r--r--benchmark/bm_io_nonblock_noex2.rb21
-rw-r--r--benchmark/bm_io_select.rb9
-rw-r--r--benchmark/bm_io_select2.rb22
-rw-r--r--benchmark/bm_io_select3.rb21
-rw-r--r--benchmark/bm_loop_for.rb3
-rw-r--r--benchmark/bm_loop_generator.rb14
-rw-r--r--benchmark/bm_loop_times.rb1
-rw-r--r--benchmark/bm_loop_whileloop.rb4
-rw-r--r--benchmark/bm_loop_whileloop2.rb4
-rw-r--r--benchmark/bm_marshal_dump_flo.rb2
-rw-r--r--benchmark/bm_marshal_dump_load_geniv.rb10
-rw-r--r--benchmark/bm_marshal_dump_load_time.rb1
-rw-r--r--benchmark/bm_require.rb7
-rw-r--r--benchmark/bm_require_thread.rb15
-rw-r--r--benchmark/bm_securerandom.rb5
-rw-r--r--benchmark/bm_so_ackermann.rb19
-rw-r--r--benchmark/bm_so_array.rb23
-rw-r--r--benchmark/bm_so_binary_trees.rb62
-rw-r--r--benchmark/bm_so_concatenate.rb18
-rw-r--r--benchmark/bm_so_count_words.rb19
-rw-r--r--benchmark/bm_so_exception.rb61
-rw-r--r--benchmark/bm_so_fannkuch.rb45
-rw-r--r--benchmark/bm_so_fasta.rb81
-rw-r--r--benchmark/bm_so_k_nucleotide.rb48
-rw-r--r--benchmark/bm_so_lists.rb47
-rw-r--r--benchmark/bm_so_mandelbrot.rb57
-rw-r--r--benchmark/bm_so_matrix.rb48
-rw-r--r--benchmark/bm_so_meteor_contest.rb564
-rw-r--r--benchmark/bm_so_nbody.rb148
-rw-r--r--benchmark/bm_so_nested_loop.rb24
-rw-r--r--benchmark/bm_so_nsieve.rb35
-rw-r--r--benchmark/bm_so_nsieve_bits.rb43
-rw-r--r--benchmark/bm_so_object.rb56
-rw-r--r--benchmark/bm_so_partial_sums.rb31
-rw-r--r--benchmark/bm_so_pidigits.rb92
-rw-r--r--benchmark/bm_so_random.rb20
-rw-r--r--benchmark/bm_so_reverse_complement.rb30
-rw-r--r--benchmark/bm_so_sieve.rb24
-rw-r--r--benchmark/bm_so_spectralnorm.rb50
-rw-r--r--benchmark/bm_vm1_attr_ivar.rb14
-rw-r--r--benchmark/bm_vm1_attr_ivar_set.rb14
-rw-r--r--benchmark/bm_vm1_block.rb10
-rw-r--r--benchmark/bm_vm1_const.rb8
-rw-r--r--benchmark/bm_vm1_ensure.rb11
-rw-r--r--benchmark/bm_vm1_float_simple.rb7
-rw-r--r--benchmark/bm_vm1_gc_short_lived.rb10
-rw-r--r--benchmark/bm_vm1_gc_short_with_complex_long.rb27
-rw-r--r--benchmark/bm_vm1_gc_short_with_long.rb13
-rw-r--r--benchmark/bm_vm1_gc_short_with_symbol.rb15
-rw-r--r--benchmark/bm_vm1_gc_wb_ary.rb12
-rw-r--r--benchmark/bm_vm1_gc_wb_ary_promoted.rb14
-rw-r--r--benchmark/bm_vm1_gc_wb_obj.rb15
-rw-r--r--benchmark/bm_vm1_gc_wb_obj_promoted.rb17
-rw-r--r--benchmark/bm_vm1_ivar.rb8
-rw-r--r--benchmark/bm_vm1_ivar_set.rb6
-rw-r--r--benchmark/bm_vm1_length.rb9
-rw-r--r--benchmark/bm_vm1_lvar_init.rb18
-rw-r--r--benchmark/bm_vm1_lvar_set.rb5
-rw-r--r--benchmark/bm_vm1_neq.rb8
-rw-r--r--benchmark/bm_vm1_not.rb7
-rw-r--r--benchmark/bm_vm1_rescue.rb7
-rw-r--r--benchmark/bm_vm1_simplereturn.rb9
-rw-r--r--benchmark/bm_vm1_swap.rb8
-rw-r--r--benchmark/bm_vm1_yield.rb10
-rw-r--r--benchmark/bm_vm2_array.rb5
-rw-r--r--benchmark/bm_vm2_bigarray.rb106
-rw-r--r--benchmark/bm_vm2_bighash.rb5
-rw-r--r--benchmark/bm_vm2_case.rb14
-rw-r--r--benchmark/bm_vm2_case_lit.rb19
-rw-r--r--benchmark/bm_vm2_defined_method.rb9
-rw-r--r--benchmark/bm_vm2_dstr.rb6
-rw-r--r--benchmark/bm_vm2_eval.rb6
-rw-r--r--benchmark/bm_vm2_method.rb9
-rw-r--r--benchmark/bm_vm2_method_missing.rb12
-rw-r--r--benchmark/bm_vm2_method_with_block.rb9
-rw-r--r--benchmark/bm_vm2_mutex.rb9
-rw-r--r--benchmark/bm_vm2_newlambda.rb5
-rw-r--r--benchmark/bm_vm2_poly_method.rb20
-rw-r--r--benchmark/bm_vm2_poly_method_ov.rb20
-rw-r--r--benchmark/bm_vm2_proc.rb14
-rw-r--r--benchmark/bm_vm2_raise1.rb18
-rw-r--r--benchmark/bm_vm2_raise2.rb18
-rw-r--r--benchmark/bm_vm2_regexp.rb6
-rw-r--r--benchmark/bm_vm2_send.rb12
-rw-r--r--benchmark/bm_vm2_string_literal.rb5
-rw-r--r--benchmark/bm_vm2_struct_big_aref_hi.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_aref_lo.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_aset.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_href_hi.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_href_lo.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_hset.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_aref.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_aset.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_href.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_hset.rb7
-rw-r--r--benchmark/bm_vm2_super.rb20
-rw-r--r--benchmark/bm_vm2_unif1.rb8
-rw-r--r--benchmark/bm_vm2_zsuper.rb20
-rw-r--r--benchmark/bm_vm3_backtrace.rb22
-rw-r--r--benchmark/bm_vm3_clearmethodcache.rb8
-rw-r--r--benchmark/bm_vm3_gc.rb6
-rw-r--r--benchmark/bm_vm_symbol_block_pass.rb13
-rw-r--r--benchmark/bm_vm_thread_alive_check1.rb6
-rw-r--r--benchmark/bm_vm_thread_close.rb6
-rw-r--r--benchmark/bm_vm_thread_create_join.rb6
-rw-r--r--benchmark/bm_vm_thread_mutex1.rb21
-rw-r--r--benchmark/bm_vm_thread_mutex2.rb21
-rw-r--r--benchmark/bm_vm_thread_mutex3.rb20
-rw-r--r--benchmark/bm_vm_thread_pass.rb15
-rw-r--r--benchmark/bm_vm_thread_pass_flood.rb8
-rw-r--r--benchmark/bm_vm_thread_pipe.rb17
-rw-r--r--benchmark/bm_vm_thread_queue.rb18
-rw-r--r--benchmark/driver.rb400
-rw-r--r--benchmark/gc/aobench.rb1
-rw-r--r--benchmark/gc/binary_trees.rb1
-rw-r--r--benchmark/gc/gcbench.rb56
-rw-r--r--benchmark/gc/hash1.rb11
-rw-r--r--benchmark/gc/hash2.rb7
-rw-r--r--benchmark/gc/null.rb1
-rw-r--r--benchmark/gc/pentomino.rb1
-rw-r--r--benchmark/gc/rdoc.rb13
-rw-r--r--benchmark/gc/redblack.rb366
-rw-r--r--benchmark/gc/ring.rb29
-rw-r--r--benchmark/make_fasta_output.rb19
-rw-r--r--benchmark/other-lang/ack.pl11
-rw-r--r--benchmark/other-lang/ack.py16
-rw-r--r--benchmark/other-lang/ack.rb12
-rw-r--r--benchmark/other-lang/ack.scm7
-rw-r--r--benchmark/other-lang/eval.rb66
-rw-r--r--benchmark/other-lang/fact.pl13
-rw-r--r--benchmark/other-lang/fact.py18
-rw-r--r--benchmark/other-lang/fact.rb13
-rw-r--r--benchmark/other-lang/fact.scm8
-rw-r--r--benchmark/other-lang/fib.pl11
-rw-r--r--benchmark/other-lang/fib.py7
-rw-r--r--benchmark/other-lang/fib.rb9
-rw-r--r--benchmark/other-lang/fib.scm7
-rw-r--r--benchmark/other-lang/loop.pl3
-rw-r--r--benchmark/other-lang/loop.py2
-rw-r--r--benchmark/other-lang/loop.rb4
-rw-r--r--benchmark/other-lang/loop.scm1
-rw-r--r--benchmark/other-lang/loop2.rb1
-rw-r--r--benchmark/other-lang/tak.pl11
-rw-r--r--benchmark/other-lang/tak.py8
-rw-r--r--benchmark/other-lang/tak.rb13
-rw-r--r--benchmark/other-lang/tak.scm10
-rw-r--r--benchmark/prepare_require.rb25
-rw-r--r--benchmark/prepare_require_thread.rb2
-rw-r--r--benchmark/prepare_so_count_words.rb15
-rw-r--r--benchmark/prepare_so_k_nucleotide.rb2
-rw-r--r--benchmark/prepare_so_reverse_complement.rb2
-rw-r--r--benchmark/report.rb79
-rw-r--r--benchmark/run.rb127
-rw-r--r--benchmark/runc.rb27
-rw-r--r--benchmark/wc.input.base25
-rw-r--r--bignum.c7369
-rwxr-xr-xbin/erb100
-rwxr-xr-xbin/gem25
-rw-r--r--[-rwxr-xr-x]bin/irb16
-rw-r--r--[-rwxr-xr-x]bin/rdoc81
-rwxr-xr-xbin/ri53
-rwxr-xr-xbin/testrb5
-rw-r--r--bootstraptest/pending.rb39
-rwxr-xr-xbootstraptest/runner.rb511
-rw-r--r--bootstraptest/test_attr.rb36
-rw-r--r--bootstraptest/test_autoload.rb70
-rw-r--r--bootstraptest/test_block.rb613
-rw-r--r--bootstraptest/test_class.rb169
-rw-r--r--bootstraptest/test_eval.rb324
-rw-r--r--bootstraptest/test_exception.rb432
-rw-r--r--bootstraptest/test_finalizer.rb8
-rw-r--r--bootstraptest/test_flip.rb1
-rw-r--r--bootstraptest/test_flow.rb591
-rw-r--r--bootstraptest/test_fork.rb75
-rw-r--r--bootstraptest/test_gc.rb34
-rw-r--r--bootstraptest/test_io.rb112
-rw-r--r--bootstraptest/test_jump.rb308
-rw-r--r--bootstraptest/test_literal.rb231
-rw-r--r--bootstraptest/test_literal_suffix.rb54
-rw-r--r--bootstraptest/test_load.rb27
-rw-r--r--bootstraptest/test_marshal.rb5
-rw-r--r--bootstraptest/test_massign.rb183
-rw-r--r--bootstraptest/test_method.rb1192
-rw-r--r--bootstraptest/test_objectspace.rb46
-rw-r--r--bootstraptest/test_proc.rb483
-rw-r--r--bootstraptest/test_string.rb3
-rw-r--r--bootstraptest/test_struct.rb5
-rw-r--r--bootstraptest/test_syntax.rb904
-rw-r--r--bootstraptest/test_thread.rb476
-rw-r--r--ccan/build_assert/build_assert.h40
-rw-r--r--ccan/check_type/check_type.h63
-rw-r--r--ccan/container_of/container_of.h142
-rw-r--r--ccan/licenses/BSD-MIT17
-rw-r--r--ccan/licenses/CC028
-rw-r--r--ccan/list/list.h773
-rw-r--r--ccan/str/str.h16
-rw-r--r--class.c2001
-rw-r--r--common.mk2502
-rw-r--r--compar.c148
-rw-r--r--compile.c8361
-rw-r--r--complex.c2280
-rw-r--r--config.guess1459
-rw-r--r--config.sub1537
-rw-r--r--configure.in4834
-rw-r--r--constant.h50
-rw-r--r--cont.c1716
-rw-r--r--coverage/README17
-rw-r--r--cygwin/GNUmakefile.in75
-rw-r--r--debug.c132
-rw-r--r--defines.h270
-rw-r--r--defs/gmake.mk78
-rw-r--r--defs/id.def174
-rw-r--r--defs/keywords53
-rw-r--r--defs/known_errors.def148
-rw-r--r--defs/lex.c.src53
-rw-r--r--defs/opt_insn_unif.def29
-rw-r--r--defs/opt_operand.def22
-rw-r--r--dir.c2050
-rw-r--r--distruby.rb59
-rw-r--r--djgpp/GNUmakefile.in2
-rw-r--r--djgpp/README.djgpp21
-rw-r--r--djgpp/config.hin114
-rw-r--r--djgpp/config.sed128
-rwxr-xr-xdjgpp/configure.bat20
-rw-r--r--djgpp/mkver.sed1
-rw-r--r--dln.c892
-rw-r--r--dln.h21
-rw-r--r--dln_find.c297
-rw-r--r--dmydln.c11
-rw-r--r--dmyenc.c10
-rw-r--r--dmyext.c2
-rw-r--r--doc/.document4
-rw-r--r--doc/ChangeLog-0.06_to_0.521147
-rw-r--r--doc/ChangeLog-0.50_to_0.60462
-rw-r--r--doc/ChangeLog-0.60_to_1.13955
-rw-r--r--doc/ChangeLog-1.8.0163
-rw-r--r--doc/ChangeLog-1.9.392772
-rw-r--r--doc/ChangeLog-2.0.024015
-rw-r--r--doc/ChangeLog-2.1.018060
-rw-r--r--doc/ChangeLog-2.2.012157
-rw-r--r--doc/ChangeLog-YARV6917
-rw-r--r--doc/NEWS-1.8.0837
-rw-r--r--doc/NEWS-1.8.7669
-rw-r--r--doc/NEWS-1.9.1429
-rw-r--r--doc/NEWS-1.9.2509
-rw-r--r--doc/NEWS-1.9.3341
-rw-r--r--doc/NEWS-2.0.0531
-rw-r--r--doc/NEWS-2.1.0376
-rw-r--r--doc/NEWS-2.2.0361
-rw-r--r--doc/contributing.rdoc468
-rw-r--r--doc/contributors.rdoc778
-rw-r--r--doc/dtrace_probes.rdoc178
-rw-r--r--doc/etc.rd.ja75
-rw-r--r--doc/extension.ja.rdoc1799
-rw-r--r--doc/extension.rdoc1829
-rw-r--r--doc/forwardable.rd84
-rw-r--r--doc/forwardable.rd.ja47
-rw-r--r--doc/globals.rdoc70
-rw-r--r--doc/images/boottime-classes.pngbin28677 -> 0 bytes-rw-r--r--doc/irb/irb-tools.rd.ja117
-rw-r--r--doc/irb/irb.rd392
-rw-r--r--doc/irb/irb.rd.ja375
-rw-r--r--doc/keywords.rdoc158
-rw-r--r--doc/maintainers.rdoc320
-rw-r--r--doc/marshal.rdoc313
-rw-r--r--doc/pty/README.expect.ja21
-rw-r--r--doc/pty/README.ja76
-rw-r--r--doc/regexp.rdoc691
-rw-r--r--doc/security.rdoc152
-rw-r--r--doc/shell.rd348
-rw-r--r--doc/shell.rd.ja151
-rw-r--r--doc/standard_library.rdoc115
-rw-r--r--doc/syntax.rdoc34
-rw-r--r--doc/syntax/assignment.rdoc454
-rw-r--r--doc/syntax/calling_methods.rdoc352
-rw-r--r--doc/syntax/control_expressions.rdoc499
-rw-r--r--doc/syntax/exceptions.rdoc95
-rw-r--r--doc/syntax/literals.rdoc368
-rw-r--r--doc/syntax/methods.rdoc455
-rw-r--r--doc/syntax/miscellaneous.rdoc106
-rw-r--r--doc/syntax/modules_and_classes.rdoc344
-rw-r--r--doc/syntax/precedence.rdoc60
-rw-r--r--doc/syntax/refinements.rdoc262
-rw-r--r--enc/Makefile.in82
-rw-r--r--enc/ascii.c100
-rw-r--r--enc/big5.c373
-rw-r--r--enc/cp949.c221
-rw-r--r--enc/depend608
-rw-r--r--enc/ebcdic.h11
-rw-r--r--enc/emacs_mule.c341
-rw-r--r--enc/encdb.c26
-rw-r--r--enc/encinit.c.erb37
-rw-r--r--enc/euc_jp.c615
-rw-r--r--enc/euc_kr.c194
-rw-r--r--enc/euc_tw.c227
-rw-r--r--enc/gb18030.c603
-rw-r--r--enc/gb2312.c13
-rw-r--r--enc/gbk.c224
-rw-r--r--enc/iso_2022_jp.h47
-rw-r--r--enc/iso_8859_1.c277
-rw-r--r--enc/iso_8859_10.c246
-rw-r--r--enc/iso_8859_11.c113
-rw-r--r--enc/iso_8859_13.c249
-rw-r--r--enc/iso_8859_14.c248
-rw-r--r--enc/iso_8859_15.c242
-rw-r--r--enc/iso_8859_16.c244
-rw-r--r--enc/iso_8859_2.c242
-rw-r--r--enc/iso_8859_3.c242
-rw-r--r--enc/iso_8859_4.c245
-rw-r--r--enc/iso_8859_5.c232
-rw-r--r--enc/iso_8859_6.c109
-rw-r--r--enc/iso_8859_7.c239
-rw-r--r--enc/iso_8859_8.c109
-rw-r--r--enc/iso_8859_9.c245
-rw-r--r--enc/jis/props.h227
-rw-r--r--enc/jis/props.h.blt227
-rw-r--r--enc/jis/props.kwd52
-rw-r--r--enc/jis/props.src52
-rw-r--r--enc/koi8_r.c221
-rw-r--r--enc/koi8_u.c223
-rwxr-xr-xenc/make_encmake.rb151
-rw-r--r--enc/mktable.c1162
-rw-r--r--enc/prelude.rb4
-rw-r--r--enc/shift_jis.c583
-rw-r--r--enc/trans/CP/CP932UDA%UCS.src1912
-rw-r--r--enc/trans/CP/CP932VDC@IBM%UCS.src420
-rw-r--r--enc/trans/CP/CP932VDC@NEC_IBM%UCS.src406
-rw-r--r--enc/trans/CP/UCS%CP932UDA.src1912
-rw-r--r--enc/trans/CP/UCS%CP932VDC@IBM.src420
-rw-r--r--enc/trans/CP/UCS%CP932VDC@NEC_IBM.src406
-rw-r--r--enc/trans/EMOJI/EMOJI_ISO-2022-JP-KDDI%UCS.src658
-rw-r--r--enc/trans/EMOJI/EMOJI_SHIFT_JIS-DOCOMO%UCS.src293
-rw-r--r--enc/trans/EMOJI/EMOJI_SHIFT_JIS-KDDI%UCS.src658
-rw-r--r--enc/trans/EMOJI/EMOJI_SHIFT_JIS-KDDI-UNDOC%UCS.src658
-rw-r--r--enc/trans/EMOJI/EMOJI_SHIFT_JIS-SOFTBANK%UCS.src496
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_ISO-2022-JP-KDDI-UNDOC.src658
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_ISO-2022-JP-KDDI.src658
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_SHIFT_JIS-DOCOMO.src293
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_SHIFT_JIS-KDDI-UNDOC.src658
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_SHIFT_JIS-KDDI.src658
-rw-r--r--enc/trans/EMOJI/UCS%EMOJI_SHIFT_JIS-SOFTBANK.src496
-rw-r--r--enc/trans/GB/GB12345%UCS.src7618
-rw-r--r--enc/trans/GB/GB2312%UCS.src7535
-rw-r--r--enc/trans/GB/UCS%GB12345.src7620
-rw-r--r--enc/trans/GB/UCS%GB2312.src7531
-rw-r--r--enc/trans/JIS/JISX0201-KANA%UCS.src124
-rw-r--r--enc/trans/JIS/JISX0208@1990%UCS.src6964
-rw-r--r--enc/trans/JIS/JISX0208@MS%UCS.src6893
-rw-r--r--enc/trans/JIS/JISX0208UDC%UCS.src954
-rw-r--r--enc/trans/JIS/JISX0208VDC@NEC%UCS.src97
-rw-r--r--enc/trans/JIS/JISX0212%UCS.src6159
-rw-r--r--enc/trans/JIS/JISX0212@MS%UCS.src6081
-rw-r--r--enc/trans/JIS/JISX0212UDC%UCS.src954
-rw-r--r--enc/trans/JIS/JISX0212VDC@IBM%UCS.src120
-rw-r--r--enc/trans/JIS/JISX0213-1%UCS@BMP.src1926
-rw-r--r--enc/trans/JIS/JISX0213-1%UCS@SIP.src60
-rw-r--r--enc/trans/JIS/JISX0213-2%UCS@BMP.src2193
-rw-r--r--enc/trans/JIS/JISX0213-2%UCS@SIP.src311
-rw-r--r--enc/trans/JIS/UCS%JISX0201-KANA.src125
-rw-r--r--enc/trans/JIS/UCS%JISX0208@1990.src6965
-rw-r--r--enc/trans/JIS/UCS%JISX0208@MS.src6894
-rw-r--r--enc/trans/JIS/UCS%JISX0208UDC.src955
-rw-r--r--enc/trans/JIS/UCS%JISX0208VDC@NEC.src98
-rw-r--r--enc/trans/JIS/UCS%JISX0212.src6163
-rw-r--r--enc/trans/JIS/UCS%JISX0212@MS.src6082
-rw-r--r--enc/trans/JIS/UCS%JISX0212UDC.src955
-rw-r--r--enc/trans/JIS/UCS%JISX0212VDC@IBM.src121
-rw-r--r--enc/trans/JIS/UCS@BMP%JISX0213-1.src1922
-rw-r--r--enc/trans/JIS/UCS@BMP%JISX0213-2.src2189
-rw-r--r--enc/trans/JIS/UCS@SIP%JISX0213-1.src56
-rw-r--r--enc/trans/JIS/UCS@SIP%JISX0213-2.src307
-rw-r--r--enc/trans/big5-hkscs-tbl.rb37302
-rw-r--r--enc/trans/big5-uao-tbl.rb19784
-rw-r--r--enc/trans/big5.trans32
-rw-r--r--enc/trans/chinese.trans31
-rw-r--r--enc/trans/cp850-tbl.rb130
-rw-r--r--enc/trans/cp852-tbl.rb130
-rw-r--r--enc/trans/cp855-tbl.rb130
-rw-r--r--enc/trans/cp949-tbl.rb8831
-rw-r--r--enc/trans/ebcdic.trans278
-rw-r--r--enc/trans/emoji-exchange-tbl.rb8407
-rw-r--r--enc/trans/emoji.trans36
-rw-r--r--enc/trans/emoji_iso2022_kddi.trans216
-rw-r--r--enc/trans/emoji_sjis_docomo.trans32
-rw-r--r--enc/trans/emoji_sjis_kddi.trans33
-rw-r--r--enc/trans/emoji_sjis_softbank.trans32
-rw-r--r--enc/trans/escape.trans93
-rw-r--r--enc/trans/euckr-tbl.rb8230
-rw-r--r--enc/trans/gb18030-tbl.rb63362
-rw-r--r--enc/trans/gb18030.trans183
-rw-r--r--enc/trans/gbk-tbl.rb21794
-rw-r--r--enc/trans/gbk.trans15
-rw-r--r--enc/trans/ibm437-tbl.rb130
-rw-r--r--enc/trans/ibm737-tbl.rb130
-rw-r--r--enc/trans/ibm775-tbl.rb130
-rw-r--r--enc/trans/ibm852-tbl.rb130
-rw-r--r--enc/trans/ibm855-tbl.rb130
-rw-r--r--enc/trans/ibm857-tbl.rb127
-rw-r--r--enc/trans/ibm860-tbl.rb130
-rw-r--r--enc/trans/ibm861-tbl.rb130
-rw-r--r--enc/trans/ibm862-tbl.rb130
-rw-r--r--enc/trans/ibm863-tbl.rb130
-rw-r--r--enc/trans/ibm865-tbl.rb130
-rw-r--r--enc/trans/ibm866-tbl.rb130
-rw-r--r--enc/trans/ibm869-tbl.rb121
-rw-r--r--enc/trans/iso-8859-1-tbl.rb98
-rw-r--r--enc/trans/iso-8859-10-tbl.rb98
-rw-r--r--enc/trans/iso-8859-11-tbl.rb90
-rw-r--r--enc/trans/iso-8859-13-tbl.rb98
-rw-r--r--enc/trans/iso-8859-14-tbl.rb98
-rw-r--r--enc/trans/iso-8859-15-tbl.rb98
-rw-r--r--enc/trans/iso-8859-16-tbl.rb98
-rw-r--r--enc/trans/iso-8859-2-tbl.rb98
-rw-r--r--enc/trans/iso-8859-3-tbl.rb91
-rw-r--r--enc/trans/iso-8859-4-tbl.rb98
-rw-r--r--enc/trans/iso-8859-5-tbl.rb98
-rw-r--r--enc/trans/iso-8859-6-tbl.rb53
-rw-r--r--enc/trans/iso-8859-7-tbl.rb95
-rw-r--r--enc/trans/iso-8859-8-tbl.rb62
-rw-r--r--enc/trans/iso-8859-9-tbl.rb98
-rw-r--r--enc/trans/iso2022.trans567
-rw-r--r--enc/trans/japanese.trans97
-rw-r--r--enc/trans/japanese_euc.trans57
-rw-r--r--enc/trans/japanese_sjis.trans33
-rw-r--r--enc/trans/koi8-r-tbl.rb130
-rw-r--r--enc/trans/koi8-u-tbl.rb130
-rw-r--r--enc/trans/korean.trans18
-rw-r--r--enc/trans/maccroatian-tbl.rb129
-rw-r--r--enc/trans/maccyrillic-tbl.rb130
-rw-r--r--enc/trans/macgreek-tbl.rb129
-rw-r--r--enc/trans/maciceland-tbl.rb129
-rw-r--r--enc/trans/macroman-tbl.rb129
-rw-r--r--enc/trans/macromania-tbl.rb129
-rw-r--r--enc/trans/macturkish-tbl.rb128
-rw-r--r--enc/trans/macukraine-tbl.rb130
-rw-r--r--enc/trans/newline.trans135
-rw-r--r--enc/trans/single_byte.trans91
-rw-r--r--enc/trans/tis-620-tbl.rb89
-rw-r--r--enc/trans/transdb.c18
-rw-r--r--enc/trans/ucm/glibc-BIG5-2.3.3.ucm14087
-rw-r--r--enc/trans/ucm/glibc-BIG5HKSCS-2.3.3.ucm18332
-rw-r--r--enc/trans/ucm/windows-950-2000.ucm20379
-rw-r--r--enc/trans/ucm/windows-950_hkscs-2001.ucm23446
-rw-r--r--enc/trans/utf8_mac-tbl.rb23154
-rw-r--r--enc/trans/utf8_mac.trans256
-rw-r--r--enc/trans/utf_16_32.trans556
-rw-r--r--enc/trans/windows-1250-tbl.rb125
-rw-r--r--enc/trans/windows-1251-tbl.rb129
-rw-r--r--enc/trans/windows-1252-tbl.rb125
-rw-r--r--enc/trans/windows-1253-tbl.rb113
-rw-r--r--enc/trans/windows-1254-tbl.rb123
-rw-r--r--enc/trans/windows-1255-tbl.rb141
-rw-r--r--enc/trans/windows-1256-tbl.rb130
-rw-r--r--enc/trans/windows-1257-tbl.rb118
-rw-r--r--enc/trans/windows-874-tbl.rb99
-rw-r--r--enc/unicode.c605
-rwxr-xr-xenc/unicode/case-folding.rb196
-rw-r--r--enc/unicode/casefold.h6248
-rw-r--r--enc/unicode/name2ctype.h34027
-rw-r--r--enc/unicode/name2ctype.h.blt32679
-rw-r--r--enc/unicode/name2ctype.kwd26550
-rw-r--r--enc/unicode/name2ctype.src26550
-rw-r--r--enc/us_ascii.c37
-rw-r--r--enc/utf_16_32.h5
-rw-r--r--enc/utf_16be.c254
-rw-r--r--enc/utf_16le.c246
-rw-r--r--enc/utf_32be.c193
-rw-r--r--enc/utf_32le.c192
-rw-r--r--enc/utf_7.h5
-rw-r--r--enc/utf_8.c446
-rw-r--r--enc/windows_1250.c220
-rw-r--r--enc/windows_1251.c210
-rw-r--r--enc/windows_1252.c211
-rw-r--r--enc/windows_31j.c80
-rw-r--r--enc/x_emoji.h26
-rw-r--r--encindex.h67
-rw-r--r--encoding.c1994
-rw-r--r--enum.c3521
-rw-r--r--enumerator.c2126
-rw-r--r--env.h60
-rw-r--r--error.c2557
-rw-r--r--eval.c13524
-rw-r--r--eval_error.c331
-rw-r--r--eval_intern.h304
-rw-r--r--eval_jump.c145
-rw-r--r--ext/-test-/array/resize/extconf.rb2
-rw-r--r--ext/-test-/array/resize/resize.c14
-rw-r--r--ext/-test-/bignum/big2str.c53
-rw-r--r--ext/-test-/bignum/bigzero.c26
-rw-r--r--ext/-test-/bignum/depend102
-rw-r--r--ext/-test-/bignum/div.c35
-rw-r--r--ext/-test-/bignum/extconf.rb8
-rw-r--r--ext/-test-/bignum/init.c11
-rw-r--r--ext/-test-/bignum/intpack.c87
-rw-r--r--ext/-test-/bignum/mul.c65
-rw-r--r--ext/-test-/bignum/str2big.c38
-rw-r--r--ext/-test-/bug-3571/bug.c23
-rw-r--r--ext/-test-/bug-3571/extconf.rb2
-rw-r--r--ext/-test-/bug-5832/bug.c14
-rw-r--r--ext/-test-/bug-5832/extconf.rb2
-rw-r--r--ext/-test-/bug_reporter/bug_reporter.c24
-rw-r--r--ext/-test-/bug_reporter/extconf.rb2
-rw-r--r--ext/-test-/class/class2name.c14
-rw-r--r--ext/-test-/class/extconf.rb8
-rw-r--r--ext/-test-/class/init.c11
-rw-r--r--ext/-test-/debug/depend32
-rw-r--r--ext/-test-/debug/extconf.rb7
-rw-r--r--ext/-test-/debug/init.c11
-rw-r--r--ext/-test-/debug/inspector.c32
-rw-r--r--ext/-test-/debug/profile_frames.c43
-rw-r--r--ext/-test-/dln/empty/empty.c4
-rw-r--r--ext/-test-/dln/empty/extconf.rb2
-rw-r--r--ext/-test-/exception/dataerror.c31
-rw-r--r--ext/-test-/exception/depend43
-rw-r--r--ext/-test-/exception/enc_raise.c15
-rw-r--r--ext/-test-/exception/ensured.c25
-rw-r--r--ext/-test-/exception/extconf.rb7
-rw-r--r--ext/-test-/exception/init.c11
-rw-r--r--ext/-test-/fatal/extconf.rb2
-rw-r--r--ext/-test-/fatal/rb_fatal.c19
-rw-r--r--ext/-test-/file/depend36
-rw-r--r--ext/-test-/file/extconf.rb22
-rw-r--r--ext/-test-/file/fs.c80
-rw-r--r--ext/-test-/file/init.c11
-rw-r--r--ext/-test-/file/stat.c27
-rw-r--r--ext/-test-/float/depend3
-rw-r--r--ext/-test-/float/extconf.rb8
-rw-r--r--ext/-test-/float/init.c11
-rw-r--r--ext/-test-/float/nextafter.c36
-rw-r--r--ext/-test-/funcall/extconf.rb3
-rw-r--r--ext/-test-/funcall/passing_block.c30
-rw-r--r--ext/-test-/gvl/call_without_gvl/call_without_gvl.c34
-rw-r--r--ext/-test-/gvl/call_without_gvl/extconf.rb2
-rw-r--r--ext/-test-/hash/delete.c16
-rw-r--r--ext/-test-/hash/extconf.rb8
-rw-r--r--ext/-test-/hash/init.c11
-rw-r--r--ext/-test-/iseq_load/extconf.rb2
-rw-r--r--ext/-test-/iseq_load/iseq_load.c21
-rw-r--r--ext/-test-/iter/break.c25
-rw-r--r--ext/-test-/iter/extconf.rb8
-rw-r--r--ext/-test-/iter/init.c11
-rw-r--r--ext/-test-/iter/yield.c16
-rw-r--r--ext/-test-/load/dot.dot/dot.dot.c1
-rw-r--r--ext/-test-/load/dot.dot/extconf.rb2
-rw-r--r--ext/-test-/marshal/compat/extconf.rb2
-rw-r--r--ext/-test-/marshal/compat/usrcompat.c32
-rw-r--r--ext/-test-/marshal/internal_ivar/extconf.rb2
-rw-r--r--ext/-test-/marshal/internal_ivar/internal_ivar.c39
-rw-r--r--ext/-test-/marshal/usr/extconf.rb2
-rw-r--r--ext/-test-/marshal/usr/usrmarshal.c50
-rw-r--r--ext/-test-/method/arity.c22
-rw-r--r--ext/-test-/method/extconf.rb7
-rw-r--r--ext/-test-/method/init.c11
-rw-r--r--ext/-test-/notimplement/bug.c16
-rw-r--r--ext/-test-/notimplement/extconf.rb2
-rw-r--r--ext/-test-/num2int/extconf.rb2
-rw-r--r--ext/-test-/num2int/num2int.c136
-rw-r--r--ext/-test-/path_to_class/extconf.rb7
-rw-r--r--ext/-test-/path_to_class/path_to_class.c15
-rw-r--r--ext/-test-/popen_deadlock/extconf.rb5
-rw-r--r--ext/-test-/popen_deadlock/infinite_loop_dlsym.c50
-rw-r--r--ext/-test-/postponed_job/depend1
-rw-r--r--ext/-test-/postponed_job/extconf.rb2
-rw-r--r--ext/-test-/postponed_job/postponed_job.c53
-rw-r--r--ext/-test-/printf/depend3
-rw-r--r--ext/-test-/printf/extconf.rb2
-rw-r--r--ext/-test-/printf/printf.c101
-rw-r--r--ext/-test-/proc/extconf.rb8
-rw-r--r--ext/-test-/proc/init.c11
-rw-r--r--ext/-test-/proc/receiver.c21
-rw-r--r--ext/-test-/proc/super.c27
-rw-r--r--ext/-test-/rational/depend20
-rw-r--r--ext/-test-/rational/extconf.rb8
-rw-r--r--ext/-test-/rational/rat.c37
-rw-r--r--ext/-test-/recursion/extconf.rb3
-rw-r--r--ext/-test-/recursion/recursion.c28
-rw-r--r--ext/-test-/st/foreach/extconf.rb2
-rw-r--r--ext/-test-/st/foreach/foreach.c175
-rw-r--r--ext/-test-/st/numhash/extconf.rb2
-rw-r--r--ext/-test-/st/numhash/numhash.c138
-rw-r--r--ext/-test-/st/update/extconf.rb2
-rw-r--r--ext/-test-/st/update/update.c34
-rw-r--r--ext/-test-/string/coderange.c47
-rw-r--r--ext/-test-/string/cstr.c123
-rw-r--r--ext/-test-/string/depend115
-rw-r--r--ext/-test-/string/ellipsize.c13
-rw-r--r--ext/-test-/string/enc_associate.c22
-rw-r--r--ext/-test-/string/enc_str_buf_cat.c14
-rw-r--r--ext/-test-/string/extconf.rb8
-rw-r--r--ext/-test-/string/fstring.c15
-rw-r--r--ext/-test-/string/init.c11
-rw-r--r--ext/-test-/string/modify.c22
-rw-r--r--ext/-test-/string/nofree.c13
-rw-r--r--ext/-test-/string/normalize.c17
-rw-r--r--ext/-test-/string/qsort.c61
-rw-r--r--ext/-test-/string/set_len.c14
-rw-r--r--ext/-test-/struct/duplicate.c24
-rw-r--r--ext/-test-/struct/extconf.rb8
-rw-r--r--ext/-test-/struct/init.c11
-rw-r--r--ext/-test-/struct/member.c18
-rw-r--r--ext/-test-/symbol/extconf.rb8
-rw-r--r--ext/-test-/symbol/init.c25
-rw-r--r--ext/-test-/symbol/type.c78
-rw-r--r--ext/-test-/time/extconf.rb8
-rw-r--r--ext/-test-/time/init.c11
-rw-r--r--ext/-test-/time/new.c34
-rw-r--r--ext/-test-/tracepoint/depend22
-rw-r--r--ext/-test-/tracepoint/extconf.rb2
-rw-r--r--ext/-test-/tracepoint/gc_hook.c80
-rw-r--r--ext/-test-/tracepoint/tracepoint.c96
-rw-r--r--ext/-test-/typeddata/extconf.rb2
-rw-r--r--ext/-test-/typeddata/typeddata.c20
-rw-r--r--ext/-test-/vm/at_exit.c44
-rw-r--r--ext/-test-/vm/extconf.rb1
-rw-r--r--ext/-test-/wait_for_single_fd/depend14
-rw-r--r--ext/-test-/wait_for_single_fd/extconf.rb2
-rw-r--r--ext/-test-/wait_for_single_fd/wait_for_single_fd.c30
-rw-r--r--ext/-test-/win32/console/attribute.c56
-rw-r--r--ext/-test-/win32/console/depend1
-rw-r--r--ext/-test-/win32/console/extconf.rb9
-rw-r--r--ext/-test-/win32/console/init.c11
-rw-r--r--ext/-test-/win32/dln/depend9
-rw-r--r--ext/-test-/win32/dln/dlntest.c17
-rw-r--r--ext/-test-/win32/dln/extconf.rb33
-rw-r--r--ext/-test-/win32/dln/libdlntest.c4
-rw-r--r--ext/-test-/win32/dln/libdlntest.def2
-rw-r--r--ext/-test-/win32/fd_setsize/depend1
-rw-r--r--ext/-test-/win32/fd_setsize/extconf.rb4
-rw-r--r--ext/-test-/win32/fd_setsize/fd_setsize.c55
-rw-r--r--ext/.cvsignore2
-rw-r--r--ext/.document102
-rw-r--r--ext/Setup30
-rw-r--r--ext/Setup.atheos10
-rw-r--r--ext/Setup.dj34
-rw-r--r--ext/Setup.emx34
-rw-r--r--ext/Setup.nacl46
-rw-r--r--ext/Setup.nt11
-rw-r--r--ext/Setup.x6834
-rw-r--r--ext/Win32API/.cvsignore3
-rw-r--r--ext/Win32API/Win32API.c215
-rw-r--r--ext/Win32API/depend1
-rw-r--r--ext/Win32API/extconf.rb6
-rw-r--r--ext/Win32API/getch.rb5
-rw-r--r--ext/Win32API/lib/win32/registry.rb831
-rw-r--r--ext/Win32API/lib/win32/resolv.rb366
-rw-r--r--ext/Win32API/point.rb18
-rw-r--r--ext/bigdecimal/.cvsignore3
-rw-r--r--ext/bigdecimal/README60
-rw-r--r--ext/bigdecimal/bigdecimal.c6953
-rw-r--r--ext/bigdecimal/bigdecimal.def2
-rw-r--r--ext/bigdecimal/bigdecimal.gemspec31
-rw-r--r--ext/bigdecimal/bigdecimal.h244
-rw-r--r--ext/bigdecimal/bigdecimal_en.html796
-rw-r--r--ext/bigdecimal/bigdecimal_ja.html799
-rw-r--r--ext/bigdecimal/depend14
-rw-r--r--ext/bigdecimal/extconf.rb15
-rw-r--r--ext/bigdecimal/lib/bigdecimal/jacobian.rb37
-rw-r--r--ext/bigdecimal/lib/bigdecimal/ludcmp.rb45
-rw-r--r--ext/bigdecimal/lib/bigdecimal/math.rb177
-rw-r--r--ext/bigdecimal/lib/bigdecimal/newton.rb17
-rw-r--r--ext/bigdecimal/lib/bigdecimal/util.rb145
-rw-r--r--ext/bigdecimal/sample/linear.rb22
-rw-r--r--ext/bigdecimal/sample/nlsolve.rb24
-rw-r--r--ext/bigdecimal/sample/pi.rb1
-rw-r--r--ext/cgi/escape/escape.c105
-rw-r--r--ext/cgi/escape/extconf.rb3
-rw-r--r--ext/continuation/continuation.c13
-rw-r--r--ext/continuation/extconf.rb4
-rw-r--r--ext/coverage/coverage.c133
-rw-r--r--ext/coverage/depend41
-rw-r--r--ext/coverage/extconf.rb5
-rw-r--r--ext/curses/.cvsignore3
-rw-r--r--ext/curses/curses.c2101
-rw-r--r--ext/curses/depend1
-rw-r--r--ext/curses/extconf.rb31
-rw-r--r--ext/curses/hello.rb30
-rw-r--r--ext/curses/mouse.rb53
-rw-r--r--ext/curses/rain.rb76
-rw-r--r--ext/curses/view.rb91
-rw-r--r--ext/curses/view2.rb115
-rw-r--r--ext/date/date_core.c9667
-rw-r--r--ext/date/date_parse.c3138
-rw-r--r--ext/date/date_strftime.c633
-rw-r--r--ext/date/date_strptime.c703
-rw-r--r--ext/date/date_tmx.h56
-rw-r--r--ext/date/depend53
-rw-r--r--ext/date/extconf.rb4
-rw-r--r--ext/date/lib/date.rb61
-rw-r--r--ext/dbm/.cvsignore3
-rw-r--r--ext/dbm/dbm.c763
-rw-r--r--ext/dbm/depend1
-rw-r--r--ext/dbm/extconf.rb285
-rw-r--r--ext/digest/.cvsignore3
-rw-r--r--ext/digest/bubblebabble/.cvsignore3
-rw-r--r--ext/digest/bubblebabble/bubblebabble.c40
-rw-r--r--ext/digest/bubblebabble/depend16
-rw-r--r--ext/digest/bubblebabble/extconf.rb2
-rw-r--r--ext/digest/defs.h14
-rw-r--r--ext/digest/depend15
-rw-r--r--ext/digest/digest.c168
-rw-r--r--ext/digest/digest.h25
-rw-r--r--ext/digest/digest_conf.rb30
-rw-r--r--ext/digest/extconf.rb3
-rw-r--r--ext/digest/lib/digest.rb79
-rw-r--r--ext/digest/lib/md5.rb23
-rw-r--r--ext/digest/lib/sha1.rb23
-rw-r--r--ext/digest/md5/.cvsignore3
-rw-r--r--ext/digest/md5/depend22
-rw-r--r--ext/digest/md5/extconf.rb18
-rw-r--r--ext/digest/md5/md5.c14
-rw-r--r--ext/digest/md5/md5.h6
-rw-r--r--ext/digest/md5/md5cc.h12
-rw-r--r--ext/digest/md5/md5init.c20
-rw-r--r--ext/digest/md5/md5ossl.c9
-rw-r--r--ext/digest/md5/md5ossl.h4
-rw-r--r--ext/digest/rmd160/.cvsignore3
-rw-r--r--ext/digest/rmd160/depend34
-rw-r--r--ext/digest/rmd160/extconf.rb17
-rw-r--r--ext/digest/rmd160/rmd160.c16
-rw-r--r--ext/digest/rmd160/rmd160.h8
-rw-r--r--ext/digest/rmd160/rmd160init.c18
-rw-r--r--ext/digest/rmd160/rmd160ossl.c8
-rw-r--r--ext/digest/rmd160/rmd160ossl.h3
-rw-r--r--ext/digest/sha1/.cvsignore3
-rw-r--r--ext/digest/sha1/depend34
-rw-r--r--ext/digest/sha1/extconf.rb17
-rw-r--r--ext/digest/sha1/sha1.c6
-rw-r--r--ext/digest/sha1/sha1.h10
-rw-r--r--ext/digest/sha1/sha1cc.h14
-rw-r--r--ext/digest/sha1/sha1init.c24
-rw-r--r--ext/digest/sha1/sha1ossl.c10
-rw-r--r--ext/digest/sha1/sha1ossl.h4
-rw-r--r--ext/digest/sha2/.cvsignore3
-rw-r--r--ext/digest/sha2/depend33
-rw-r--r--ext/digest/sha2/extconf.rb21
-rw-r--r--ext/digest/sha2/lib/sha2.rb51
-rw-r--r--ext/digest/sha2/sha2.c312
-rw-r--r--ext/digest/sha2/sha2.h170
-rw-r--r--ext/digest/sha2/sha2cc.h31
-rw-r--r--ext/digest/sha2/sha2init.c19
-rw-r--r--ext/digest/sha2/sha2ossl.h27
-rw-r--r--ext/dl/.cvsignore8
-rw-r--r--ext/dl/depend46
-rw-r--r--ext/dl/dl.c736
-rw-r--r--ext/dl/dl.def59
-rw-r--r--ext/dl/dl.h313
-rw-r--r--ext/dl/doc/dl.txt266
-rw-r--r--ext/dl/extconf.rb193
-rw-r--r--ext/dl/h2rb500
-rw-r--r--ext/dl/handle.c215
-rw-r--r--ext/dl/install.rb49
-rw-r--r--ext/dl/lib/dl/import.rb225
-rw-r--r--ext/dl/lib/dl/struct.rb149
-rw-r--r--ext/dl/lib/dl/types.rb245
-rw-r--r--ext/dl/lib/dl/win32.rb25
-rw-r--r--ext/dl/mkcall.rb62
-rw-r--r--ext/dl/mkcallback.rb56
-rw-r--r--ext/dl/mkcbtable.rb18
-rw-r--r--ext/dl/ptr.c1058
-rw-r--r--ext/dl/sample/c++sample.C35
-rw-r--r--ext/dl/sample/c++sample.rb60
-rw-r--r--ext/dl/sample/drives.rb70
-rw-r--r--ext/dl/sample/getch.rb5
-rw-r--r--ext/dl/sample/libc.rb69
-rw-r--r--ext/dl/sample/msgbox.rb19
-rw-r--r--ext/dl/sample/msgbox2.rb18
-rw-r--r--ext/dl/sample/stream.rb87
-rw-r--r--ext/dl/sym.c993
-rw-r--r--ext/dl/test/libtest.def28
-rw-r--r--ext/dl/test/test.c247
-rw-r--r--ext/dl/test/test.rb306
-rw-r--r--ext/dl/type.rb115
-rw-r--r--ext/enumerator/.cvsignore2
-rw-r--r--ext/enumerator/enumerator.c298
-rw-r--r--ext/enumerator/enumerator.txt102
-rw-r--r--ext/enumerator/extconf.rb2
-rw-r--r--ext/etc/.cvsignore3
-rw-r--r--ext/etc/depend10
-rw-r--r--ext/etc/etc.c1044
-rw-r--r--ext/etc/etc.txt72
-rw-r--r--ext/etc/etc.txt.ja72
-rw-r--r--ext/etc/extconf.rb75
-rw-r--r--ext/etc/mkconstants.rb332
-rw-r--r--[-rwxr-xr-x]ext/extmk.rb467
-rw-r--r--ext/fcntl/.cvsignore3
-rw-r--r--ext/fcntl/depend1
-rw-r--r--ext/fcntl/extconf.rb1
-rw-r--r--ext/fcntl/fcntl.c192
-rw-r--r--ext/fiber/extconf.rb4
-rw-r--r--ext/fiber/fiber.c8
-rw-r--r--ext/fiddle/closure.c344
-rw-r--r--ext/fiddle/closure.h8
-rw-r--r--ext/fiddle/conversions.c141
-rw-r--r--ext/fiddle/conversions.h44
-rw-r--r--ext/fiddle/depend57
-rw-r--r--ext/fiddle/extconf.rb182
-rw-r--r--ext/fiddle/extlibs2
-rw-r--r--ext/fiddle/fiddle.c454
-rw-r--r--ext/fiddle/fiddle.h138
-rw-r--r--ext/fiddle/function.c315
-rw-r--r--ext/fiddle/function.h8
-rw-r--r--ext/fiddle/handle.c479
-rw-r--r--ext/fiddle/lib/fiddle.rb56
-rw-r--r--ext/fiddle/lib/fiddle/closure.rb49
-rw-r--r--ext/fiddle/lib/fiddle/cparser.rb194
-rw-r--r--ext/fiddle/lib/fiddle/function.rb18
-rw-r--r--ext/fiddle/lib/fiddle/import.rb315
-rw-r--r--ext/fiddle/lib/fiddle/pack.rb129
-rw-r--r--ext/fiddle/lib/fiddle/struct.rb244
-rw-r--r--ext/fiddle/lib/fiddle/types.rb72
-rw-r--r--ext/fiddle/lib/fiddle/value.rb113
-rw-r--r--ext/fiddle/pointer.c721
-rwxr-xr-xext/fiddle/win32/fficonfig.h29
-rw-r--r--ext/fiddle/win32/libffi-3.2.1-mswin.patch191
-rwxr-xr-xext/fiddle/win32/libffi-config.rb48
-rwxr-xr-xext/fiddle/win32/libffi.mk.tmpl96
-rw-r--r--ext/gdbm/.cvsignore3
-rw-r--r--ext/gdbm/depend1
-rw-r--r--ext/gdbm/extconf.rb12
-rw-r--r--ext/gdbm/gdbm.c523
-rw-r--r--ext/iconv/.cvsignore5
-rw-r--r--ext/iconv/charset_alias.rb103
-rw-r--r--ext/iconv/depend2
-rw-r--r--ext/iconv/extconf.rb51
-rw-r--r--ext/iconv/iconv.c913
-rwxr-xr-xext/io/console/buildgem.sh5
-rw-r--r--ext/io/console/console.c977
-rw-r--r--ext/io/console/depend25
-rw-r--r--ext/io/console/extconf.rb27
-rw-r--r--ext/io/console/io-console.gemspec21
-rw-r--r--ext/io/console/lib/console/size.rb23
-rw-r--r--ext/io/console/win32_vk.chksum1
-rw-r--r--ext/io/console/win32_vk.inc1400
-rw-r--r--ext/io/console/win32_vk.list166
-rw-r--r--ext/io/nonblock/depend4
-rw-r--r--ext/io/nonblock/extconf.rb9
-rw-r--r--ext/io/nonblock/nonblock.c140
-rw-r--r--ext/io/wait/.cvsignore2
-rw-r--r--ext/io/wait/depend4
-rw-r--r--ext/io/wait/extconf.rb6
-rw-r--r--ext/io/wait/lib/nonblock.rb23
-rw-r--r--ext/io/wait/wait.c181
-rw-r--r--ext/json/extconf.rb4
-rw-r--r--ext/json/fbuffer/fbuffer.h190
-rw-r--r--ext/json/generator/depend21
-rw-r--r--ext/json/generator/extconf.rb5
-rw-r--r--ext/json/generator/generator.c1458
-rw-r--r--ext/json/generator/generator.h166
-rw-r--r--ext/json/json.gemspec7
-rw-r--r--ext/json/lib/json.rb63
-rw-r--r--ext/json/lib/json/add/bigdecimal.rb29
-rw-r--r--ext/json/lib/json/add/complex.rb29
-rw-r--r--ext/json/lib/json/add/core.rb12
-rw-r--r--ext/json/lib/json/add/date.rb35
-rw-r--r--ext/json/lib/json/add/date_time.rb51
-rw-r--r--ext/json/lib/json/add/exception.rb32
-rw-r--r--ext/json/lib/json/add/ostruct.rb32
-rw-r--r--ext/json/lib/json/add/range.rb30
-rw-r--r--ext/json/lib/json/add/rational.rb28
-rw-r--r--ext/json/lib/json/add/regexp.rb31
-rw-r--r--ext/json/lib/json/add/struct.rb31
-rw-r--r--ext/json/lib/json/add/symbol.rb26
-rw-r--r--ext/json/lib/json/add/time.rb39
-rw-r--r--ext/json/lib/json/common.rb485
-rw-r--r--ext/json/lib/json/ext.rb22
-rw-r--r--ext/json/lib/json/generic_object.rb63
-rw-r--r--ext/json/lib/json/version.rb9
-rw-r--r--ext/json/parser/depend20
-rw-r--r--ext/json/parser/extconf.rb6
-rw-r--r--ext/json/parser/parser.c2240
-rw-r--r--ext/json/parser/parser.h92
-rw-r--r--ext/json/parser/parser.rl963
-rw-r--r--ext/json/parser/prereq.mk10
-rw-r--r--ext/mathn/complex/complex.c7
-rw-r--r--ext/mathn/complex/extconf.rb4
-rw-r--r--ext/mathn/rational/extconf.rb4
-rw-r--r--ext/mathn/rational/rational.c7
-rw-r--r--ext/nkf/.cvsignore3
-rw-r--r--ext/nkf/depend23
-rw-r--r--ext/nkf/extconf.rb1
-rw-r--r--ext/nkf/lib/kconv.rb286
-rw-r--r--ext/nkf/nkf-utf8/config.h77
-rw-r--r--ext/nkf/nkf-utf8/nkf.c10014
-rw-r--r--ext/nkf/nkf-utf8/nkf.h189
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.c7346
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.h38
-rw-r--r--ext/nkf/nkf.c405
-rw-r--r--ext/objspace/depend66
-rw-r--r--ext/objspace/extconf.rb4
-rw-r--r--ext/objspace/object_tracing.c492
-rw-r--r--ext/objspace/objspace.c996
-rw-r--r--ext/objspace/objspace.h20
-rw-r--r--ext/objspace/objspace_dump.c479
-rw-r--r--ext/openssl/.cvsignore5
-rw-r--r--ext/openssl/depend1091
-rw-r--r--ext/openssl/deprecation.rb22
-rw-r--r--ext/openssl/extconf.rb110
-rw-r--r--ext/openssl/lib/net/ftptls.rb53
-rw-r--r--ext/openssl/lib/net/telnets.rb251
-rw-r--r--ext/openssl/lib/openssl.rb13
-rw-r--r--ext/openssl/lib/openssl/bn.rb44
-rw-r--r--ext/openssl/lib/openssl/buffering.rb264
-rw-r--r--ext/openssl/lib/openssl/cipher.rb63
-rw-r--r--ext/openssl/lib/openssl/config.rb473
-rw-r--r--ext/openssl/lib/openssl/digest.rb96
-rw-r--r--ext/openssl/lib/openssl/pkey.rb37
-rw-r--r--ext/openssl/lib/openssl/ssl.rb368
-rw-r--r--ext/openssl/lib/openssl/x509.rb74
-rw-r--r--ext/openssl/openssl_missing.c43
-rw-r--r--ext/openssl/openssl_missing.h108
-rw-r--r--ext/openssl/ossl.c874
-rw-r--r--ext/openssl/ossl.h87
-rw-r--r--ext/openssl/ossl_asn1.c1295
-rw-r--r--ext/openssl/ossl_asn1.h7
-rw-r--r--ext/openssl/ossl_bio.c32
-rw-r--r--ext/openssl/ossl_bio.h4
-rw-r--r--ext/openssl/ossl_bn.c517
-rw-r--r--ext/openssl/ossl_bn.h9
-rw-r--r--ext/openssl/ossl_cipher.c767
-rw-r--r--ext/openssl/ossl_cipher.h5
-rw-r--r--ext/openssl/ossl_config.c434
-rw-r--r--ext/openssl/ossl_config.h4
-rw-r--r--ext/openssl/ossl_digest.c431
-rw-r--r--ext/openssl/ossl_digest.h5
-rw-r--r--ext/openssl/ossl_engine.c297
-rw-r--r--ext/openssl/ossl_engine.h3
-rw-r--r--ext/openssl/ossl_hmac.c245
-rw-r--r--ext/openssl/ossl_hmac.h3
-rw-r--r--ext/openssl/ossl_ns_spki.c218
-rw-r--r--ext/openssl/ossl_ns_spki.h4
-rw-r--r--ext/openssl/ossl_ocsp.c727
-rw-r--r--ext/openssl/ossl_ocsp.h3
-rw-r--r--ext/openssl/ossl_pkcs12.c126
-rw-r--r--ext/openssl/ossl_pkcs12.h5
-rw-r--r--ext/openssl/ossl_pkcs5.c188
-rw-r--r--ext/openssl/ossl_pkcs7.c282
-rw-r--r--ext/openssl/ossl_pkcs7.h5
-rw-r--r--ext/openssl/ossl_pkey.c277
-rw-r--r--ext/openssl/ossl_pkey.h57
-rw-r--r--ext/openssl/ossl_pkey_dh.c362
-rw-r--r--ext/openssl/ossl_pkey_dsa.c306
-rw-r--r--ext/openssl/ossl_pkey_ec.c1705
-rw-r--r--ext/openssl/ossl_pkey_rsa.c345
-rw-r--r--ext/openssl/ossl_rand.c186
-rw-r--r--ext/openssl/ossl_rand.h4
-rw-r--r--ext/openssl/ossl_ssl.c2030
-rw-r--r--ext/openssl/ossl_ssl.h25
-rw-r--r--ext/openssl/ossl_ssl_session.c328
-rw-r--r--ext/openssl/ossl_version.h5
-rw-r--r--ext/openssl/ossl_x509.c6
-rw-r--r--ext/openssl/ossl_x509.h3
-rw-r--r--ext/openssl/ossl_x509attr.c103
-rw-r--r--ext/openssl/ossl_x509cert.c415
-rw-r--r--ext/openssl/ossl_x509crl.c132
-rw-r--r--ext/openssl/ossl_x509ext.c150
-rw-r--r--ext/openssl/ossl_x509name.c257
-rw-r--r--ext/openssl/ossl_x509req.c120
-rw-r--r--ext/openssl/ossl_x509revoked.c78
-rw-r--r--ext/openssl/ossl_x509store.c222
-rw-r--r--ext/openssl/ruby_missing.h19
-rw-r--r--ext/pathname/depend3
-rw-r--r--ext/pathname/extconf.rb4
-rw-r--r--ext/pathname/lib/pathname.rb591
-rw-r--r--ext/pathname/pathname.c1463
-rw-r--r--ext/psych/.gitignore11
-rw-r--r--ext/psych/depend3
-rw-r--r--ext/psych/extconf.rb39
-rw-r--r--ext/psych/lib/psych.rb505
-rw-r--r--ext/psych/lib/psych/class_loader.rb102
-rw-r--r--ext/psych/lib/psych/coder.rb95
-rw-r--r--ext/psych/lib/psych/core_ext.rb36
-rw-r--r--ext/psych/lib/psych/deprecated.rb86
-rw-r--r--ext/psych/lib/psych/exception.rb14
-rw-r--r--ext/psych/lib/psych/handler.rb250
-rw-r--r--ext/psych/lib/psych/handlers/document_stream.rb23
-rw-r--r--ext/psych/lib/psych/handlers/recorder.rb40
-rw-r--r--ext/psych/lib/psych/json/ruby_events.rb20
-rw-r--r--ext/psych/lib/psych/json/stream.rb17
-rw-r--r--ext/psych/lib/psych/json/tree_builder.rb13
-rw-r--r--ext/psych/lib/psych/json/yaml_events.rb30
-rw-r--r--ext/psych/lib/psych/nodes.rb78
-rw-r--r--ext/psych/lib/psych/nodes/alias.rb19
-rw-r--r--ext/psych/lib/psych/nodes/document.rb61
-rw-r--r--ext/psych/lib/psych/nodes/mapping.rb57
-rw-r--r--ext/psych/lib/psych/nodes/node.rb56
-rw-r--r--ext/psych/lib/psych/nodes/scalar.rb68
-rw-r--r--ext/psych/lib/psych/nodes/sequence.rb82
-rw-r--r--ext/psych/lib/psych/nodes/stream.rb38
-rw-r--r--ext/psych/lib/psych/omap.rb5
-rw-r--r--ext/psych/lib/psych/parser.rb52
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb150
-rw-r--r--ext/psych/lib/psych/set.rb5
-rw-r--r--ext/psych/lib/psych/stream.rb38
-rw-r--r--ext/psych/lib/psych/streaming.rb28
-rw-r--r--ext/psych/lib/psych/syntax_error.rb22
-rw-r--r--ext/psych/lib/psych/tree_builder.rb97
-rw-r--r--ext/psych/lib/psych/versions.rb4
-rw-r--r--ext/psych/lib/psych/visitors.rb7
-rw-r--r--ext/psych/lib/psych/visitors/depth_first.rb27
-rw-r--r--ext/psych/lib/psych/visitors/emitter.rb52
-rw-r--r--ext/psych/lib/psych/visitors/json_tree.rb25
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb406
-rw-r--r--ext/psych/lib/psych/visitors/visitor.rb20
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb598
-rw-r--r--ext/psych/lib/psych/y.rb10
-rw-r--r--ext/psych/lib/psych_jars.rb6
-rw-r--r--ext/psych/psych.c34
-rw-r--r--ext/psych/psych.gemspec25
-rw-r--r--ext/psych/psych.h20
-rw-r--r--ext/psych/psych_emitter.c570
-rw-r--r--ext/psych/psych_emitter.h8
-rw-r--r--ext/psych/psych_parser.c597
-rw-r--r--ext/psych/psych_parser.h6
-rw-r--r--ext/psych/psych_to_ruby.c43
-rw-r--r--ext/psych/psych_to_ruby.h8
-rw-r--r--ext/psych/psych_yaml_tree.c24
-rw-r--r--ext/psych/psych_yaml_tree.h8
-rw-r--r--ext/psych/yaml/LICENSE19
-rw-r--r--ext/psych/yaml/api.c1415
-rw-r--r--ext/psych/yaml/config.h10
-rw-r--r--ext/psych/yaml/dumper.c394
-rw-r--r--ext/psych/yaml/emitter.c2329
-rw-r--r--ext/psych/yaml/loader.c459
-rw-r--r--ext/psych/yaml/parser.c1370
-rw-r--r--ext/psych/yaml/reader.c469
-rw-r--r--ext/psych/yaml/scanner.c3576
-rw-r--r--ext/psych/yaml/writer.c141
-rw-r--r--ext/psych/yaml/yaml.h1971
-rw-r--r--ext/psych/yaml/yaml_private.h664
-rw-r--r--ext/pty/.cvsignore3
-rw-r--r--ext/pty/README65
-rw-r--r--ext/pty/README.expect22
-rw-r--r--ext/pty/README.expect.ja21
-rw-r--r--ext/pty/README.ja89
-rw-r--r--ext/pty/depend18
-rw-r--r--ext/pty/expect_sample.rb55
-rw-r--r--ext/pty/extconf.rb9
-rw-r--r--ext/pty/lib/expect.rb40
-rw-r--r--ext/pty/pty.c863
-rw-r--r--ext/pty/script.rb37
-rw-r--r--ext/pty/shl.rb (renamed from sample/pty/shl.rb)0
-rw-r--r--ext/purelib.rb3
-rw-r--r--ext/racc/cparse/.cvsignore3
-rw-r--r--ext/racc/cparse/README11
-rw-r--r--ext/racc/cparse/cparse.c161
-rw-r--r--ext/racc/cparse/depend1
-rw-r--r--ext/racc/cparse/extconf.rb2
-rw-r--r--ext/rbconfig/sizeof/depend17
-rw-r--r--ext/rbconfig/sizeof/extconf.rb36
-rw-r--r--ext/readline/.cvsignore3
-rw-r--r--ext/readline/README68
-rw-r--r--ext/readline/README.ja393
-rw-r--r--ext/readline/depend18
-rw-r--r--ext/readline/extconf.rb113
-rw-r--r--ext/readline/readline.c1926
-rw-r--r--ext/ripper/README30
-rw-r--r--ext/ripper/depend75
-rw-r--r--ext/ripper/eventids2.c306
-rw-r--r--ext/ripper/extconf.rb22
-rw-r--r--ext/ripper/lib/ripper.rb74
-rw-r--r--ext/ripper/lib/ripper/core.rb72
-rw-r--r--ext/ripper/lib/ripper/filter.rb78
-rw-r--r--ext/ripper/lib/ripper/lexer.rb215
-rw-r--r--ext/ripper/lib/ripper/sexp.rb146
-rwxr-xr-xext/ripper/tools/generate-param-macros.rb15
-rwxr-xr-xext/ripper/tools/generate.rb162
-rwxr-xr-xext/ripper/tools/preproc.rb92
-rwxr-xr-xext/ripper/tools/strip.rb13
-rw-r--r--ext/sdbm/.cvsignore3
-rw-r--r--ext/sdbm/_sdbm.c259
-rw-r--r--ext/sdbm/depend21
-rw-r--r--ext/sdbm/extconf.rb2
-rw-r--r--ext/sdbm/init.c762
-rw-r--r--ext/sdbm/sdbm.h10
-rw-r--r--ext/socket/.cvsignore3
-rw-r--r--ext/socket/.document17
-rw-r--r--ext/socket/addrinfo.h49
-rw-r--r--ext/socket/ancdata.c1732
-rw-r--r--ext/socket/basicsocket.c733
-rw-r--r--ext/socket/constants.c145
-rw-r--r--ext/socket/depend298
-rw-r--r--ext/socket/extconf.rb700
-rw-r--r--ext/socket/getaddrinfo.c123
-rw-r--r--ext/socket/getnameinfo.c53
-rw-r--r--ext/socket/ifaddr.c459
-rw-r--r--ext/socket/init.c683
-rw-r--r--ext/socket/ipsocket.c341
-rw-r--r--ext/socket/lib/socket.rb1351
-rw-r--r--ext/socket/mkconstants.rb805
-rw-r--r--ext/socket/option.c1480
-rw-r--r--ext/socket/raddrinfo.c2617
-rw-r--r--ext/socket/rubysocket.h433
-rw-r--r--ext/socket/socket.c5211
-rw-r--r--ext/socket/sockport.h84
-rw-r--r--ext/socket/sockssocket.c68
-rw-r--r--ext/socket/tcpserver.c146
-rw-r--r--ext/socket/tcpsocket.c82
-rw-r--r--ext/socket/udpsocket.c242
-rw-r--r--ext/socket/unixserver.c126
-rw-r--r--ext/socket/unixsocket.c546
-rw-r--r--ext/stringio/.cvsignore3
-rw-r--r--ext/stringio/README3
-rw-r--r--ext/stringio/depend6
-rw-r--r--ext/stringio/extconf.rb1
-rw-r--r--ext/stringio/stringio.c1134
-rw-r--r--ext/strscan/.cvsignore3
-rw-r--r--ext/strscan/depend18
-rw-r--r--ext/strscan/extconf.rb2
-rw-r--r--ext/strscan/strscan.c380
-rw-r--r--ext/syck/.cvsignore3
-rw-r--r--ext/syck/bytecode.c1166
-rw-r--r--ext/syck/depend12
-rw-r--r--ext/syck/emitter.c1242
-rw-r--r--ext/syck/extconf.rb5
-rw-r--r--ext/syck/gram.c1894
-rw-r--r--ext/syck/gram.h79
-rw-r--r--ext/syck/handler.c174
-rw-r--r--ext/syck/implicit.c2990
-rw-r--r--ext/syck/node.c408
-rw-r--r--ext/syck/rubyext.c2366
-rw-r--r--ext/syck/syck.c504
-rw-r--r--ext/syck/syck.h458
-rw-r--r--ext/syck/token.c2725
-rw-r--r--ext/syck/yaml2byte.c257
-rw-r--r--ext/syck/yamlbyte.h170
-rw-r--r--ext/syslog/.cvsignore3
-rw-r--r--ext/syslog/depend14
-rw-r--r--ext/syslog/extconf.rb1
-rw-r--r--ext/syslog/lib/syslog/logger.rb209
-rw-r--r--ext/syslog/syslog.c397
-rw-r--r--ext/syslog/syslog.txt9
-rw-r--r--ext/syslog/test.rb164
-rw-r--r--ext/thread/extconf.rb9
-rw-r--r--ext/thread/lib/thread.rb5
-rw-r--r--ext/thread/thread.c1197
-rw-r--r--ext/tk/.cvsignore3
-rw-r--r--ext/tk/ChangeLog.tkextlib63
-rw-r--r--ext/tk/MANUAL_tcltklib.eng328
-rw-r--r--ext/tk/MANUAL_tcltklib.eucj557
-rw-r--r--ext/tk/MANUAL_tcltklib.ja578
-rw-r--r--ext/tk/README.1st29
-rw-r--r--ext/tk/README.ActiveTcl35
-rw-r--r--ext/tk/README.fork14
-rw-r--r--ext/tk/README.macosx-aqua20
-rw-r--r--ext/tk/README.tcltklib133
-rw-r--r--ext/tk/config_list.in41
-rw-r--r--ext/tk/depend4
-rw-r--r--ext/tk/extconf.rb2071
-rw-r--r--ext/tk/lib/README6
-rw-r--r--ext/tk/lib/multi-tk.rb1000
-rw-r--r--ext/tk/lib/remote-tk.rb47
-rw-r--r--ext/tk/lib/tcltk.rb29
-rw-r--r--ext/tk/lib/tk.rb1919
-rw-r--r--ext/tk/lib/tk/after.rb1
-rw-r--r--ext/tk/lib/tk/autoload.rb707
-rw-r--r--ext/tk/lib/tk/bgerror.rb1
-rw-r--r--ext/tk/lib/tk/bindtag.rb84
-rw-r--r--ext/tk/lib/tk/busy.rb119
-rw-r--r--ext/tk/lib/tk/button.rb9
-rw-r--r--ext/tk/lib/tk/canvas.rb174
-rw-r--r--ext/tk/lib/tk/canvastag.rb145
-rw-r--r--ext/tk/lib/tk/checkbutton.rb14
-rw-r--r--ext/tk/lib/tk/clipboard.rb1
-rw-r--r--ext/tk/lib/tk/clock.rb1
-rw-r--r--ext/tk/lib/tk/composite.rb119
-rw-r--r--ext/tk/lib/tk/console.rb7
-rw-r--r--ext/tk/lib/tk/dialog.rb31
-rw-r--r--ext/tk/lib/tk/encodedstr.rb91
-rw-r--r--ext/tk/lib/tk/entry.rb10
-rw-r--r--ext/tk/lib/tk/event.rb277
-rw-r--r--ext/tk/lib/tk/font.rb826
-rw-r--r--ext/tk/lib/tk/fontchooser.rb181
-rw-r--r--ext/tk/lib/tk/frame.rb9
-rw-r--r--ext/tk/lib/tk/grid.rb80
-rw-r--r--ext/tk/lib/tk/image.rb195
-rw-r--r--ext/tk/lib/tk/itemconfig.rb315
-rw-r--r--ext/tk/lib/tk/itemfont.rb70
-rw-r--r--ext/tk/lib/tk/kinput.rb7
-rw-r--r--ext/tk/lib/tk/label.rb9
-rw-r--r--ext/tk/lib/tk/labelframe.rb13
-rw-r--r--ext/tk/lib/tk/listbox.rb42
-rw-r--r--ext/tk/lib/tk/macpkg.rb12
-rw-r--r--ext/tk/lib/tk/menu.rb187
-rw-r--r--ext/tk/lib/tk/menubar.rb49
-rw-r--r--ext/tk/lib/tk/menuspec.rb260
-rw-r--r--ext/tk/lib/tk/message.rb10
-rw-r--r--ext/tk/lib/tk/mngfocus.rb5
-rw-r--r--ext/tk/lib/tk/msgcat.rb86
-rw-r--r--ext/tk/lib/tk/namespace.rb165
-rw-r--r--ext/tk/lib/tk/optiondb.rb69
-rw-r--r--ext/tk/lib/tk/optionobj.rb19
-rw-r--r--ext/tk/lib/tk/pack.rb18
-rw-r--r--ext/tk/lib/tk/package.rb5
-rw-r--r--ext/tk/lib/tk/palette.rb7
-rw-r--r--ext/tk/lib/tk/panedwindow.rb73
-rw-r--r--ext/tk/lib/tk/place.rb13
-rw-r--r--ext/tk/lib/tk/radiobutton.rb14
-rw-r--r--ext/tk/lib/tk/root.rb48
-rw-r--r--ext/tk/lib/tk/scale.rb39
-rw-r--r--ext/tk/lib/tk/scrollable.rb1
-rw-r--r--ext/tk/lib/tk/scrollbar.rb76
-rw-r--r--ext/tk/lib/tk/scrollbox.rb8
-rw-r--r--ext/tk/lib/tk/selection.rb7
-rw-r--r--ext/tk/lib/tk/spinbox.rb68
-rw-r--r--ext/tk/lib/tk/tagfont.rb1
-rw-r--r--ext/tk/lib/tk/text.rb339
-rw-r--r--ext/tk/lib/tk/textimage.rb25
-rw-r--r--ext/tk/lib/tk/textmark.rb109
-rw-r--r--ext/tk/lib/tk/texttag.rb137
-rw-r--r--ext/tk/lib/tk/textwindow.rb34
-rw-r--r--ext/tk/lib/tk/timer.rb92
-rw-r--r--ext/tk/lib/tk/tk_mac.rb159
-rw-r--r--ext/tk/lib/tk/toplevel.rb34
-rw-r--r--ext/tk/lib/tk/ttk_selector.rb99
-rw-r--r--ext/tk/lib/tk/txtwin_abst.rb1
-rw-r--r--ext/tk/lib/tk/validation.rb54
-rw-r--r--ext/tk/lib/tk/variable.rb634
-rw-r--r--ext/tk/lib/tk/virtevent.rb86
-rw-r--r--ext/tk/lib/tk/winfo.rb11
-rw-r--r--ext/tk/lib/tk/winpkg.rb26
-rw-r--r--ext/tk/lib/tk/wm.rb477
-rw-r--r--ext/tk/lib/tk/xim.rb5
-rw-r--r--ext/tk/lib/tkafter.rb1
-rw-r--r--ext/tk/lib/tkbgerror.rb1
-rw-r--r--ext/tk/lib/tkcanvas.rb1
-rw-r--r--ext/tk/lib/tkclass.rb1
-rw-r--r--ext/tk/lib/tkconsole.rb1
-rw-r--r--ext/tk/lib/tkdialog.rb1
-rw-r--r--ext/tk/lib/tkentry.rb1
-rw-r--r--ext/tk/lib/tkextlib/ICONS.rb1
-rw-r--r--ext/tk/lib/tkextlib/ICONS/icons.rb9
-rw-r--r--ext/tk/lib/tkextlib/ICONS/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/SUPPORT_STATUS89
-rw-r--r--ext/tk/lib/tkextlib/blt.rb7
-rw-r--r--ext/tk/lib/tkextlib/blt/barchart.rb7
-rw-r--r--ext/tk/lib/tkextlib/blt/bitmap.rb22
-rw-r--r--ext/tk/lib/tkextlib/blt/busy.rb4
-rw-r--r--ext/tk/lib/tkextlib/blt/component.rb628
-rw-r--r--ext/tk/lib/tkextlib/blt/container.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/cutbuffer.rb1
-rw-r--r--ext/tk/lib/tkextlib/blt/dragdrop.rb78
-rw-r--r--ext/tk/lib/tkextlib/blt/eps.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/graph.rb5
-rw-r--r--ext/tk/lib/tkextlib/blt/htext.rb5
-rw-r--r--ext/tk/lib/tkextlib/blt/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/blt/spline.rb1
-rw-r--r--ext/tk/lib/tkextlib/blt/stripchart.rb7
-rw-r--r--ext/tk/lib/tkextlib/blt/table.rb31
-rw-r--r--ext/tk/lib/tkextlib/blt/tabnotebook.rb94
-rw-r--r--ext/tk/lib/tkextlib/blt/tabset.rb186
-rw-r--r--ext/tk/lib/tkextlib/blt/ted.rb13
-rw-r--r--ext/tk/lib/tkextlib/blt/tile.rb5
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/button.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/checkbutton.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/frame.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/label.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/radiobutton.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/scrollbar.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/toplevel.rb3
-rw-r--r--ext/tk/lib/tkextlib/blt/tree.rb390
-rw-r--r--ext/tk/lib/tkextlib/blt/treeview.rb286
-rw-r--r--ext/tk/lib/tkextlib/blt/unix_dnd.rb23
-rw-r--r--ext/tk/lib/tkextlib/blt/vector.rb50
-rw-r--r--ext/tk/lib/tkextlib/blt/watch.rb48
-rw-r--r--ext/tk/lib/tkextlib/blt/win_printer.rb1
-rw-r--r--ext/tk/lib/tkextlib/blt/winop.rb13
-rw-r--r--ext/tk/lib/tkextlib/bwidget.rb3
-rw-r--r--ext/tk/lib/tkextlib/bwidget/arrowbutton.rb3
-rw-r--r--ext/tk/lib/tkextlib/bwidget/bitmap.rb1
-rw-r--r--ext/tk/lib/tkextlib/bwidget/button.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/buttonbox.rb23
-rw-r--r--ext/tk/lib/tkextlib/bwidget/combobox.rb22
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dialog.rb52
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dragsite.rb1
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dropsite.rb1
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dynamichelp.rb8
-rw-r--r--ext/tk/lib/tkextlib/bwidget/entry.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/label.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelentry.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelframe.rb11
-rw-r--r--ext/tk/lib/tkextlib/bwidget/listbox.rb63
-rw-r--r--ext/tk/lib/tkextlib/bwidget/mainframe.rb55
-rw-r--r--ext/tk/lib/tkextlib/bwidget/messagedlg.rb19
-rw-r--r--ext/tk/lib/tkextlib/bwidget/notebook.rb33
-rw-r--r--ext/tk/lib/tkextlib/bwidget/pagesmanager.rb19
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panedwindow.rb16
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panelframe.rb23
-rw-r--r--ext/tk/lib/tkextlib/bwidget/passwddlg.rb9
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressbar.rb3
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressdlg.rb7
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollableframe.rb11
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb21
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollview.rb3
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectcolor.rb31
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectfont.rb15
-rw-r--r--ext/tk/lib/tkextlib/bwidget/separator.rb3
-rw-r--r--ext/tk/lib/tkextlib/bwidget/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/spinbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/statusbar.rb27
-rw-r--r--ext/tk/lib/tkextlib/bwidget/titleframe.rb11
-rw-r--r--ext/tk/lib/tkextlib/bwidget/tree.rb117
-rw-r--r--ext/tk/lib/tkextlib/bwidget/widget.rb21
-rw-r--r--ext/tk/lib/tkextlib/itcl.rb1
-rw-r--r--ext/tk/lib/tkextlib/itcl/incr_tcl.rb15
-rw-r--r--ext/tk/lib/tkextlib/itcl/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/itk.rb1
-rw-r--r--ext/tk/lib/tkextlib/itk/incr_tk.rb51
-rw-r--r--ext/tk/lib/tkextlib/itk/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets.rb1
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/buttonbox.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/calendar.rb24
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/checkbox.rb25
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/combobox.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dateentry.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/datefield.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialogshell.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/entryfield.rb38
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extbutton.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/feedback.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/finddialog.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hierarchy.rb81
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledframe.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/mainwindow.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/menubar.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagebox.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagedialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/notebook.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/optionmenu.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/panedwindow.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/promptdialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/pushbutton.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/radiobox.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scopedobject.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb27
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb7
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb95
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectionbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/shell.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spindate.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinint.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinner.rb38
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spintime.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb25
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabset.rb53
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timeentry.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timefield.rb3
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/toolbar.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/watch.rb5
-rwxr-xr-xext/tk/lib/tkextlib/pkg_checker.rb7
-rw-r--r--ext/tk/lib/tkextlib/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tcllib.rb30
-rw-r--r--ext/tk/lib/tkextlib/tcllib/README14
-rw-r--r--ext/tk/lib/tkextlib/tcllib/autoscroll.rb27
-rw-r--r--ext/tk/lib/tkextlib/tcllib/calendar.rb56
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_sqmap.rb37
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_zoom.rb22
-rw-r--r--ext/tk/lib/tkextlib/tcllib/chatwidget.rb152
-rw-r--r--ext/tk/lib/tkextlib/tcllib/crosshair.rb118
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ctext.rb15
-rw-r--r--ext/tk/lib/tkextlib/tcllib/cursor.rb15
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dateentry.rb63
-rw-r--r--ext/tk/lib/tkextlib/tcllib/datefield.rb15
-rw-r--r--ext/tk/lib/tkextlib/tcllib/diagrams.rb225
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dialog.rb3
-rw-r--r--ext/tk/lib/tkextlib/tcllib/getstring.rb10
-rw-r--r--ext/tk/lib/tkextlib/tcllib/history.rb1
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ico.rb53
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ip_entry.rb18
-rw-r--r--ext/tk/lib/tkextlib/tcllib/khim.rb69
-rw-r--r--ext/tk/lib/tkextlib/tcllib/menuentry.rb48
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ntext.rb147
-rw-r--r--ext/tk/lib/tkextlib/tcllib/panelframe.rb11
-rw-r--r--ext/tk/lib/tkextlib/tcllib/plotchart.rb790
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ruler.rb3
-rw-r--r--ext/tk/lib/tkextlib/tcllib/screenruler.rb3
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrolledwindow.rb58
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrollwin.rb3
-rw-r--r--ext/tk/lib/tkextlib/tcllib/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tcllib/statusbar.rb80
-rw-r--r--ext/tk/lib/tkextlib/tcllib/style.rb1
-rw-r--r--ext/tk/lib/tkextlib/tcllib/superframe.rb3
-rw-r--r--ext/tk/lib/tkextlib/tcllib/swaplist.rb16
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist.rb8
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_core.rb343
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb23
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tkpiechart.rb37
-rw-r--r--ext/tk/lib/tkextlib/tcllib/toolbar.rb176
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tooltip.rb14
-rw-r--r--ext/tk/lib/tkextlib/tcllib/validator.rb66
-rw-r--r--ext/tk/lib/tkextlib/tcllib/widget.rb35
-rw-r--r--ext/tk/lib/tkextlib/tclx.rb1
-rw-r--r--ext/tk/lib/tkextlib/tclx/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tclx/tclx.rb1
-rw-r--r--ext/tk/lib/tkextlib/tile.rb286
-rw-r--r--ext/tk/lib/tkextlib/tile/dialog.rb21
-rw-r--r--ext/tk/lib/tkextlib/tile/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tile/sizegrip.rb10
-rw-r--r--ext/tk/lib/tkextlib/tile/style.rb260
-rw-r--r--ext/tk/lib/tkextlib/tile/tbutton.rb11
-rw-r--r--ext/tk/lib/tkextlib/tile/tcheckbutton.rb13
-rw-r--r--ext/tk/lib/tkextlib/tile/tcombobox.rb7
-rw-r--r--ext/tk/lib/tkextlib/tile/tentry.rb16
-rw-r--r--ext/tk/lib/tkextlib/tile/tframe.rb11
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabel.rb11
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabelframe.rb13
-rw-r--r--ext/tk/lib/tkextlib/tile/tmenubutton.rb17
-rw-r--r--ext/tk/lib/tkextlib/tile/tnotebook.rb46
-rw-r--r--ext/tk/lib/tkextlib/tile/tpaned.rb94
-rw-r--r--ext/tk/lib/tkextlib/tile/tprogressbar.rb7
-rw-r--r--ext/tk/lib/tkextlib/tile/tradiobutton.rb13
-rw-r--r--ext/tk/lib/tkextlib/tile/treeview.rb322
-rw-r--r--ext/tk/lib/tkextlib/tile/tscale.rb15
-rw-r--r--ext/tk/lib/tkextlib/tile/tscrollbar.rb40
-rw-r--r--ext/tk/lib/tkextlib/tile/tseparator.rb7
-rw-r--r--ext/tk/lib/tkextlib/tile/tspinbox.rb108
-rw-r--r--ext/tk/lib/tkextlib/tile/tsquare.rb3
-rw-r--r--ext/tk/lib/tkextlib/tkDND.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkDND/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tkDND/shape.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkDND/tkdnd.rb73
-rw-r--r--ext/tk/lib/tkextlib/tkHTML.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb26
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tkimg.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/README2
-rw-r--r--ext/tk/lib/tkextlib/tkimg/bmp.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/dted.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/gif.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ico.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/jpeg.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pcx.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pixmap.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/png.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ppm.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ps.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/raw.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sgi.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sun.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tga.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tiff.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/window.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xbm.rb1
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xpm.rb1
-rw-r--r--ext/tk/lib/tkextlib/tktable.rb1
-rw-r--r--ext/tk/lib/tkextlib/tktable/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tktable/tktable.rb308
-rw-r--r--ext/tk/lib/tkextlib/tktrans.rb1
-rw-r--r--ext/tk/lib/tkextlib/tktrans/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/tktrans/tktrans.rb5
-rw-r--r--ext/tk/lib/tkextlib/treectrl.rb1
-rw-r--r--ext/tk/lib/tkextlib/treectrl/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/treectrl/tktreectrl.rb520
-rw-r--r--ext/tk/lib/tkextlib/trofs.rb1
-rw-r--r--ext/tk/lib/tkextlib/trofs/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/trofs/trofs.rb1
-rw-r--r--ext/tk/lib/tkextlib/version.rb3
-rw-r--r--ext/tk/lib/tkextlib/vu.rb1
-rw-r--r--ext/tk/lib/tkextlib/vu/bargraph.rb11
-rw-r--r--ext/tk/lib/tkextlib/vu/charts.rb3
-rw-r--r--ext/tk/lib/tkextlib/vu/dial.rb7
-rw-r--r--ext/tk/lib/tkextlib/vu/pie.rb84
-rw-r--r--ext/tk/lib/tkextlib/vu/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/vu/spinbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/winico.rb1
-rw-r--r--ext/tk/lib/tkextlib/winico/setup.rb5
-rw-r--r--ext/tk/lib/tkextlib/winico/winico.rb90
-rw-r--r--ext/tk/lib/tkfont.rb1
-rw-r--r--ext/tk/lib/tkmacpkg.rb1
-rw-r--r--ext/tk/lib/tkmenubar.rb1
-rw-r--r--ext/tk/lib/tkmngfocus.rb1
-rw-r--r--ext/tk/lib/tkpalette.rb1
-rw-r--r--ext/tk/lib/tkscrollbox.rb1
-rw-r--r--ext/tk/lib/tktext.rb1
-rw-r--r--ext/tk/lib/tkvirtevent.rb1
-rw-r--r--ext/tk/lib/tkwinpkg.rb1
-rw-r--r--ext/tk/old-README.tcltklib.eucj159
-rw-r--r--ext/tk/old-README.tcltklib.ja159
-rw-r--r--ext/tk/old-extconf.rb441
-rw-r--r--ext/tk/sample/24hr_clock.rb131
-rw-r--r--ext/tk/sample/binding_sample.rb9
-rw-r--r--ext/tk/sample/bindtag_sample.rb39
-rw-r--r--ext/tk/sample/binstr_usage.rb15
-rw-r--r--ext/tk/sample/btn_with_frame.rb1
-rw-r--r--ext/tk/sample/cd_timer.rb17
-rw-r--r--ext/tk/sample/cmd_res_test.rb3
-rw-r--r--ext/tk/sample/demos-en/ChangeLog.prev2
-rw-r--r--ext/tk/sample/demos-en/README130
-rw-r--r--ext/tk/sample/demos-en/README.1st8
-rw-r--r--ext/tk/sample/demos-en/README.tkencoding22
-rw-r--r--ext/tk/sample/demos-en/anilabel.rb25
-rw-r--r--ext/tk/sample/demos-en/aniwave.rb20
-rw-r--r--ext/tk/sample/demos-en/arrow.rb81
-rw-r--r--ext/tk/sample/demos-en/bind.rb68
-rw-r--r--ext/tk/sample/demos-en/bitmap.rb17
-rw-r--r--ext/tk/sample/demos-en/browse122
-rw-r--r--ext/tk/sample/demos-en/browse222
-rw-r--r--ext/tk/sample/demos-en/button.rb13
-rw-r--r--ext/tk/sample/demos-en/check.rb23
-rw-r--r--ext/tk/sample/demos-en/check2.rb47
-rw-r--r--ext/tk/sample/demos-en/clrpick.rb31
-rw-r--r--ext/tk/sample/demos-en/colors.rb21
-rw-r--r--ext/tk/sample/demos-en/combo.rb97
-rw-r--r--ext/tk/sample/demos-en/cscroll.rb35
-rw-r--r--ext/tk/sample/demos-en/ctext.rb82
-rw-r--r--ext/tk/sample/demos-en/dialog1.rb1
-rw-r--r--ext/tk/sample/demos-en/dialog2.rb1
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms2
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms.tk802
-rw-r--r--ext/tk/sample/demos-en/entry1.rb19
-rw-r--r--ext/tk/sample/demos-en/entry2.rb13
-rw-r--r--ext/tk/sample/demos-en/entry3.rb71
-rw-r--r--ext/tk/sample/demos-en/filebox.rb48
-rw-r--r--ext/tk/sample/demos-en/floor.rb561
-rw-r--r--ext/tk/sample/demos-en/floor2.rb561
-rw-r--r--ext/tk/sample/demos-en/form.rb15
-rw-r--r--ext/tk/sample/demos-en/goldberg.rb420
-rw-r--r--ext/tk/sample/demos-en/hello6
-rw-r--r--ext/tk/sample/demos-en/hscale.rb30
-rw-r--r--ext/tk/sample/demos-en/icon.rb25
-rw-r--r--ext/tk/sample/demos-en/image1.rb16
-rw-r--r--ext/tk/sample/demos-en/image2.rb29
-rw-r--r--ext/tk/sample/demos-en/image3.rb44
-rw-r--r--ext/tk/sample/demos-en/items.rb104
-rw-r--r--ext/tk/sample/demos-en/ixset28
-rw-r--r--ext/tk/sample/demos-en/ixset254
-rw-r--r--ext/tk/sample/demos-en/knightstour.rb272
-rw-r--r--ext/tk/sample/demos-en/label.rb30
-rw-r--r--ext/tk/sample/demos-en/labelframe.rb19
-rw-r--r--ext/tk/sample/demos-en/mclist.rb118
-rw-r--r--ext/tk/sample/demos-en/menu.rb61
-rw-r--r--ext/tk/sample/demos-en/menu84.rb69
-rw-r--r--ext/tk/sample/demos-en/menubu.rb15
-rw-r--r--ext/tk/sample/demos-en/msgbox.rb35
-rw-r--r--ext/tk/sample/demos-en/msgbox2.rb92
-rw-r--r--ext/tk/sample/demos-en/paned1.rb19
-rw-r--r--ext/tk/sample/demos-en/paned2.rb53
-rw-r--r--ext/tk/sample/demos-en/patch_1.1c193
-rw-r--r--ext/tk/sample/demos-en/pendulum.rb76
-rw-r--r--ext/tk/sample/demos-en/plot.rb37
-rw-r--r--ext/tk/sample/demos-en/puzzle.rb39
-rw-r--r--ext/tk/sample/demos-en/radio.rb25
-rw-r--r--ext/tk/sample/demos-en/radio2.rb34
-rw-r--r--ext/tk/sample/demos-en/radio3.rb56
-rw-r--r--ext/tk/sample/demos-en/rmt68
-rw-r--r--ext/tk/sample/demos-en/rolodex8
-rw-r--r--ext/tk/sample/demos-en/rolodex-j323
-rw-r--r--ext/tk/sample/demos-en/ruler.rb43
-rw-r--r--ext/tk/sample/demos-en/sayings.rb17
-rw-r--r--ext/tk/sample/demos-en/search.rb52
-rw-r--r--ext/tk/sample/demos-en/spin.rb23
-rw-r--r--ext/tk/sample/demos-en/square12
-rw-r--r--ext/tk/sample/demos-en/states.rb31
-rw-r--r--ext/tk/sample/demos-en/style.rb81
-rw-r--r--ext/tk/sample/demos-en/tcolor18
-rw-r--r--ext/tk/sample/demos-en/text.rb17
-rw-r--r--ext/tk/sample/demos-en/textpeer.rb77
-rw-r--r--ext/tk/sample/demos-en/timer2
-rw-r--r--ext/tk/sample/demos-en/tkencoding.rb1
-rw-r--r--ext/tk/sample/demos-en/toolbar.rb131
-rw-r--r--ext/tk/sample/demos-en/tree.rb120
-rw-r--r--ext/tk/sample/demos-en/ttkbut.rb140
-rw-r--r--ext/tk/sample/demos-en/ttkmenu.rb86
-rw-r--r--ext/tk/sample/demos-en/ttknote.rb90
-rw-r--r--ext/tk/sample/demos-en/ttkpane.rb214
-rw-r--r--ext/tk/sample/demos-en/ttkprogress.rb67
-rw-r--r--ext/tk/sample/demos-en/twind.rb73
-rw-r--r--ext/tk/sample/demos-en/twind2.rb135
-rw-r--r--ext/tk/sample/demos-en/unicodeout.rb51
-rw-r--r--ext/tk/sample/demos-en/vscale.rb30
-rw-r--r--ext/tk/sample/demos-en/widget359
-rw-r--r--ext/tk/sample/demos-jp/README104
-rw-r--r--ext/tk/sample/demos-jp/README.1st28
-rw-r--r--ext/tk/sample/demos-jp/anilabel.rb46
-rw-r--r--ext/tk/sample/demos-jp/aniwave.rb29
-rw-r--r--ext/tk/sample/demos-jp/arrow.rb98
-rw-r--r--ext/tk/sample/demos-jp/bind.rb89
-rw-r--r--ext/tk/sample/demos-jp/bitmap.rb34
-rw-r--r--ext/tk/sample/demos-jp/browse122
-rw-r--r--ext/tk/sample/demos-jp/browse222
-rw-r--r--ext/tk/sample/demos-jp/button.rb25
-rw-r--r--ext/tk/sample/demos-jp/check.rb40
-rw-r--r--ext/tk/sample/demos-jp/check2.rb62
-rw-r--r--ext/tk/sample/demos-jp/clrpick.rb46
-rw-r--r--ext/tk/sample/demos-jp/colors.rb40
-rw-r--r--ext/tk/sample/demos-jp/combo.rb99
-rw-r--r--ext/tk/sample/demos-jp/cscroll.rb54
-rw-r--r--ext/tk/sample/demos-jp/ctext.rb109
-rw-r--r--ext/tk/sample/demos-jp/dialog1.rb12
-rw-r--r--ext/tk/sample/demos-jp/dialog2.rb12
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms2
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms.tk802
-rw-r--r--ext/tk/sample/demos-jp/entry1.rb46
-rw-r--r--ext/tk/sample/demos-jp/entry2.rb42
-rw-r--r--ext/tk/sample/demos-jp/entry3.rb106
-rw-r--r--ext/tk/sample/demos-jp/filebox.rb73
-rw-r--r--ext/tk/sample/demos-jp/floor.rb580
-rw-r--r--ext/tk/sample/demos-jp/floor2.rb580
-rw-r--r--ext/tk/sample/demos-jp/form.rb38
-rw-r--r--ext/tk/sample/demos-jp/goldberg.rb441
-rw-r--r--ext/tk/sample/demos-jp/hello5
-rw-r--r--ext/tk/sample/demos-jp/hscale.rb42
-rw-r--r--ext/tk/sample/demos-jp/icon.rb46
-rw-r--r--ext/tk/sample/demos-jp/image1.rb37
-rw-r--r--ext/tk/sample/demos-jp/image2.rb53
-rw-r--r--ext/tk/sample/demos-jp/image3.rb41
-rw-r--r--ext/tk/sample/demos-jp/items.rb157
-rw-r--r--ext/tk/sample/demos-jp/ixset30
-rw-r--r--ext/tk/sample/demos-jp/ixset277
-rw-r--r--ext/tk/sample/demos-jp/knightstour.rb274
-rw-r--r--ext/tk/sample/demos-jp/label.rb47
-rw-r--r--ext/tk/sample/demos-jp/labelframe.rb49
-rw-r--r--ext/tk/sample/demos-jp/mclist.rb122
-rw-r--r--ext/tk/sample/demos-jp/menu.rb142
-rw-r--r--ext/tk/sample/demos-jp/menu84.rb108
-rw-r--r--ext/tk/sample/demos-jp/menu8x.rb160
-rw-r--r--ext/tk/sample/demos-jp/menubu.rb42
-rw-r--r--ext/tk/sample/demos-jp/msgbox.rb64
-rw-r--r--ext/tk/sample/demos-jp/msgbox2.rb91
-rw-r--r--ext/tk/sample/demos-jp/paned1.rb35
-rw-r--r--ext/tk/sample/demos-jp/paned2.rb75
-rw-r--r--ext/tk/sample/demos-jp/pendulum.rb85
-rw-r--r--ext/tk/sample/demos-jp/plot.rb62
-rw-r--r--ext/tk/sample/demos-jp/puzzle.rb68
-rw-r--r--ext/tk/sample/demos-jp/radio.rb44
-rw-r--r--ext/tk/sample/demos-jp/radio2.rb50
-rw-r--r--ext/tk/sample/demos-jp/radio3.rb62
-rw-r--r--ext/tk/sample/demos-jp/rmt68
-rw-r--r--ext/tk/sample/demos-jp/rolodex8
-rw-r--r--ext/tk/sample/demos-jp/rolodex-j135
-rw-r--r--ext/tk/sample/demos-jp/ruler.rb60
-rw-r--r--ext/tk/sample/demos-jp/sayings.rb36
-rw-r--r--ext/tk/sample/demos-jp/search.rb81
-rw-r--r--ext/tk/sample/demos-jp/spin.rb65
-rw-r--r--ext/tk/sample/demos-jp/square12
-rw-r--r--ext/tk/sample/demos-jp/states.rb44
-rw-r--r--ext/tk/sample/demos-jp/style.rb259
-rw-r--r--ext/tk/sample/demos-jp/tcolor51
-rw-r--r--ext/tk/sample/demos-jp/text.rb112
-rw-r--r--ext/tk/sample/demos-jp/textpeer.rb83
-rw-r--r--ext/tk/sample/demos-jp/timer2
-rw-r--r--ext/tk/sample/demos-jp/toolbar.rb137
-rw-r--r--ext/tk/sample/demos-jp/tree.rb121
-rw-r--r--ext/tk/sample/demos-jp/ttkbut.rb146
-rw-r--r--ext/tk/sample/demos-jp/ttkmenu.rb92
-rw-r--r--ext/tk/sample/demos-jp/ttknote.rb98
-rw-r--r--ext/tk/sample/demos-jp/ttkpane.rb217
-rw-r--r--ext/tk/sample/demos-jp/ttkprogress.rb72
-rw-r--r--ext/tk/sample/demos-jp/twind.rb144
-rw-r--r--ext/tk/sample/demos-jp/twind2.rb224
-rw-r--r--ext/tk/sample/demos-jp/unicodeout.rb87
-rw-r--r--ext/tk/sample/demos-jp/vscale.rb45
-rw-r--r--ext/tk/sample/demos-jp/widget619
-rw-r--r--ext/tk/sample/editable_listbox.rb136
-rw-r--r--ext/tk/sample/encstr_usage.rb10
-rw-r--r--ext/tk/sample/figmemo_sample.rb457
-rw-r--r--ext/tk/sample/irbtk.rb5
-rw-r--r--ext/tk/sample/irbtkw.rbw50
-rw-r--r--ext/tk/sample/menubar1.rb23
-rw-r--r--ext/tk/sample/menubar2.rb29
-rw-r--r--ext/tk/sample/menubar3.rb73
-rw-r--r--ext/tk/sample/msgs_rb/README4
-rw-r--r--ext/tk/sample/msgs_rb/es.msg2
-rw-r--r--ext/tk/sample/msgs_rb/ru.msg4
-rw-r--r--ext/tk/sample/msgs_rb2/README2
-rw-r--r--ext/tk/sample/msgs_rb2/ja.msg154
-rw-r--r--ext/tk/sample/msgs_tk/README4
-rw-r--r--ext/tk/sample/msgs_tk/el.msg2
-rw-r--r--ext/tk/sample/msgs_tk/es.msg2
-rw-r--r--ext/tk/sample/msgs_tk/license.terms2
-rw-r--r--ext/tk/sample/msgs_tk/ru.msg4
-rw-r--r--ext/tk/sample/multi-ip_sample.rb8
-rw-r--r--ext/tk/sample/multi-ip_sample2.rb3
-rw-r--r--ext/tk/sample/optobj_sample.rb31
-rw-r--r--ext/tk/sample/propagate.rb3
-rw-r--r--ext/tk/sample/remote-ip_sample.rb11
-rw-r--r--ext/tk/sample/remote-ip_sample2.rb21
-rw-r--r--[-rwxr-xr-x]ext/tk/sample/safe-tk.rb61
-rw-r--r--ext/tk/sample/scrollframe.rb31
-rw-r--r--ext/tk/sample/tcltklib/lines1.rb1
-rw-r--r--ext/tk/sample/tcltklib/lines2.rb1
-rw-r--r--ext/tk/sample/tcltklib/lines3.rb1
-rw-r--r--ext/tk/sample/tcltklib/lines4.rb1
-rw-r--r--ext/tk/sample/tcltklib/safeTk.rb1
-rw-r--r--ext/tk/sample/tcltklib/sample0.rb13
-rw-r--r--ext/tk/sample/tcltklib/sample1.rb305
-rw-r--r--ext/tk/sample/tcltklib/sample2.rb121
-rw-r--r--ext/tk/sample/tkalignbox.rb103
-rw-r--r--ext/tk/sample/tkballoonhelp.rb119
-rw-r--r--ext/tk/sample/tkbiff.rb7
-rw-r--r--ext/tk/sample/tkbrowse.rb3
-rw-r--r--ext/tk/sample/tkcombobox.rb134
-rw-r--r--ext/tk/sample/tkdialog.rb3
-rw-r--r--ext/tk/sample/tkextlib/ICONS/viewIcons.rb39
-rw-r--r--ext/tk/sample/tkextlib/blt/barchart5.rb23
-rw-r--r--ext/tk/sample/tkextlib/blt/calendar.rb55
-rw-r--r--ext/tk/sample/tkextlib/blt/graph6.rb4057
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7.rb9
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7a.rb11
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7b.rb9
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7c.rb9
-rw-r--r--ext/tk/sample/tkextlib/blt/pareto.rb37
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1.rb1
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1b.rb3
-rw-r--r--ext/tk/sample/tkextlib/blt/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/blt/scripts/stipples.rb1
-rw-r--r--ext/tk/sample/tkextlib/blt/winop1.rb9
-rw-r--r--ext/tk/sample/tkextlib/blt/winop2.rb3
-rw-r--r--ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt12
-rw-r--r--ext/tk/sample/tkextlib/bwidget/basic.rb97
-rw-r--r--ext/tk/sample/tkextlib/bwidget/demo.rb85
-rw-r--r--ext/tk/sample/tkextlib/bwidget/dnd.rb17
-rw-r--r--ext/tk/sample/tkextlib/bwidget/manager.rb29
-rw-r--r--ext/tk/sample/tkextlib/bwidget/select.rb57
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tmpldlg.rb163
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tree.rb97
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt24
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb17
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb11
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb17
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb5
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb37
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb67
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb5
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb5
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb5
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb5
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/shell.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb3
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb1
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb33
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/watch.rb3
-rw-r--r--ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt8
-rw-r--r--ext/tk/sample/tkextlib/tcllib/datefield.rb5
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos1.rb23
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos2.rb9
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos3.rb21
-rw-r--r--ext/tk/sample/tkextlib/tcllib/xyplot.rb3
-rw-r--r--ext/tk/sample/tkextlib/tile/demo.rb214
-rw-r--r--ext/tk/sample/tkextlib/tile/readme.txt4
-rw-r--r--ext/tk/sample/tkextlib/tile/repeater.tcl10
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl8
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl2
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl28
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl2
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc.rb123
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl38
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl2
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl2
-rw-r--r--ext/tk/sample/tkextlib/tile/toolbutton.tcl34
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/README6
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/hv.rb49
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/index.html2
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/index.html48
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/index.html38
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/index.html2
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/ss.rb83
-rw-r--r--ext/tk/sample/tkextlib/tkimg/demo.rb11
-rw-r--r--ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension4
-rw-r--r--ext/tk/sample/tkextlib/tkimg/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt4
-rw-r--r--ext/tk/sample/tkextlib/tktable/basic.rb15
-rw-r--r--ext/tk/sample/tkextlib/tktable/buttons.rb13
-rw-r--r--ext/tk/sample/tkextlib/tktable/command.rb23
-rw-r--r--ext/tk/sample/tkextlib/tktable/debug.rb17
-rw-r--r--ext/tk/sample/tkextlib/tktable/dynarows.rb15
-rw-r--r--ext/tk/sample/tkextlib/tktable/maxsize.rb15
-rw-r--r--ext/tk/sample/tkextlib/tktable/spreadsheet.rb17
-rwxr-xr-x[-rw-r--r--]ext/tk/sample/tkextlib/tktable/tcllogo.gifbin2341 -> 2341 bytes-rw-r--r--ext/tk/sample/tkextlib/tktable/valid.rb13
-rw-r--r--ext/tk/sample/tkextlib/treectrl/bitmaps.rb33
-rw-r--r--ext/tk/sample/tkextlib/treectrl/demo.rb350
-rw-r--r--ext/tk/sample/tkextlib/treectrl/explorer.rb127
-rw-r--r--ext/tk/sample/tkextlib/treectrl/help.rb107
-rw-r--r--ext/tk/sample/tkextlib/treectrl/imovie.rb31
-rw-r--r--ext/tk/sample/tkextlib/treectrl/layout.rb27
-rw-r--r--ext/tk/sample/tkextlib/treectrl/mailwasher.rb101
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-folders.rb53
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb103
-rw-r--r--ext/tk/sample/tkextlib/treectrl/random.rb69
-rw-r--r--ext/tk/sample/tkextlib/treectrl/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/treectrl/www-options.rb73
-rw-r--r--ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt4
-rw-r--r--ext/tk/sample/tkextlib/vu/canvItems.rb69
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker.rb5
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker2.rb17
-rw-r--r--ext/tk/sample/tkextlib/vu/dial_demo.rb63
-rw-r--r--ext/tk/sample/tkextlib/vu/oscilloscope.rb17
-rw-r--r--ext/tk/sample/tkextlib/vu/pie.rb11
-rw-r--r--ext/tk/sample/tkextlib/vu/vu_demo.rb15
-rw-r--r--ext/tk/sample/tkfrom.rb3
-rw-r--r--ext/tk/sample/tkhello.rb3
-rw-r--r--ext/tk/sample/tkline.rb1
-rw-r--r--ext/tk/sample/tkmenubutton.rb57
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb.rb17
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb2.rb17
-rw-r--r--ext/tk/sample/tkmsgcat-load_tk.rb23
-rw-r--r--ext/tk/sample/tkmulticolumnlist.rb115
-rw-r--r--ext/tk/sample/tkmultilistbox.rb97
-rw-r--r--ext/tk/sample/tkmultilistframe.rb169
-rw-r--r--[-rwxr-xr-x]ext/tk/sample/tkoptdb-safeTk.rb33
-rw-r--r--ext/tk/sample/tkoptdb.rb35
-rw-r--r--ext/tk/sample/tkrttimer.rb18
-rw-r--r--ext/tk/sample/tksleep_sample.rb30
-rw-r--r--ext/tk/sample/tktextframe.rb268
-rw-r--r--ext/tk/sample/tktextio.rb69
-rw-r--r--ext/tk/sample/tktimer.rb1
-rw-r--r--ext/tk/sample/tktimer2.rb9
-rw-r--r--ext/tk/sample/tktimer3.rb9
-rw-r--r--ext/tk/sample/tktree.rb27
-rw-r--r--ext/tk/sample/ttk_wrapper.rb155
-rw-r--r--ext/tk/stubs.c168
-rw-r--r--ext/tk/stubs.h10
-rw-r--r--ext/tk/tcltklib.c4695
-rw-r--r--ext/tk/tkutil/.cvsignore3
-rw-r--r--ext/tk/tkutil/extconf.rb17
-rw-r--r--ext/tk/tkutil/tkutil.c1042
-rw-r--r--ext/win32/extconf.rb4
-rw-r--r--ext/win32/lib/Win32API.rb38
-rw-r--r--ext/win32/lib/win32/importer.rb9
-rw-r--r--ext/win32/lib/win32/registry.rb911
-rw-r--r--ext/win32/lib/win32/resolv.rb379
-rw-r--r--ext/win32/lib/win32/sspi.rb331
-rw-r--r--ext/win32ole/.cvsignore4
-rw-r--r--ext/win32ole/depend13
-rw-r--r--ext/win32ole/doc/win32ole.rd294
-rw-r--r--ext/win32ole/extconf.rb42
-rw-r--r--ext/win32ole/lib/win32ole/property.rb1
-rw-r--r--ext/win32ole/sample/excel1.rb17
-rw-r--r--ext/win32ole/sample/excel2.rb21
-rw-r--r--ext/win32ole/sample/excel3.rb8
-rw-r--r--ext/win32ole/sample/ie.rb1
-rw-r--r--ext/win32ole/sample/ieconst.rb3
-rw-r--r--ext/win32ole/sample/ienavi.rb3
-rw-r--r--ext/win32ole/sample/ienavi2.rb41
-rw-r--r--ext/win32ole/sample/oledirs.rb3
-rw-r--r--ext/win32ole/sample/olegen.rb34
-rw-r--r--ext/win32ole/sample/xml.rb37
-rw-r--r--ext/win32ole/tests/oleserver.rb10
-rw-r--r--ext/win32ole/tests/testNIL2VTEMPTY.rb28
-rw-r--r--ext/win32ole/tests/testOLEMETHOD.rb92
-rw-r--r--ext/win32ole/tests/testOLEPARAM.rb65
-rw-r--r--ext/win32ole/tests/testOLETYPE.rb96
-rw-r--r--ext/win32ole/tests/testOLEVARIABLE.rb49
-rw-r--r--ext/win32ole/tests/testVARIANT.rb32
-rw-r--r--ext/win32ole/tests/testWIN32OLE.rb373
-rw-r--r--ext/win32ole/tests/test_ole_methods.rb36
-rw-r--r--ext/win32ole/tests/test_propertyputref.rb19
-rw-r--r--ext/win32ole/tests/test_win32ole_event.rb133
-rw-r--r--ext/win32ole/tests/test_word.rb37
-rw-r--r--ext/win32ole/tests/testall.rb16
-rw-r--r--ext/win32ole/win32ole.c6263
-rw-r--r--ext/win32ole/win32ole.h155
-rw-r--r--ext/win32ole/win32ole_error.c83
-rw-r--r--ext/win32ole/win32ole_error.h8
-rw-r--r--ext/win32ole/win32ole_event.c1278
-rw-r--r--ext/win32ole/win32ole_event.h6
-rw-r--r--ext/win32ole/win32ole_method.c950
-rw-r--r--ext/win32ole/win32ole_method.h16
-rw-r--r--ext/win32ole/win32ole_param.c438
-rw-r--r--ext/win32ole/win32ole_param.h8
-rw-r--r--ext/win32ole/win32ole_record.c604
-rw-r--r--ext/win32ole/win32ole_record.h10
-rw-r--r--ext/win32ole/win32ole_type.c915
-rw-r--r--ext/win32ole/win32ole_type.h8
-rw-r--r--ext/win32ole/win32ole_typelib.c844
-rw-r--r--ext/win32ole/win32ole_typelib.h11
-rw-r--r--ext/win32ole/win32ole_variable.c380
-rw-r--r--ext/win32ole/win32ole_variable.h8
-rw-r--r--ext/win32ole/win32ole_variant.c732
-rw-r--r--ext/win32ole/win32ole_variant.h9
-rw-r--r--ext/win32ole/win32ole_variant_m.c149
-rw-r--r--ext/win32ole/win32ole_variant_m.h7
-rw-r--r--ext/zlib/.cvsignore3
-rw-r--r--ext/zlib/depend5
-rw-r--r--ext/zlib/doc/zlib.rd911
-rw-r--r--ext/zlib/extconf.rb17
-rw-r--r--ext/zlib/zlib.c3003
-rw-r--r--file.c4713
-rw-r--r--gc.c10144
-rw-r--r--gc.h114
-rw-r--r--gem_prelude.rb7
-rw-r--r--gems/bundled_gems6
-rw-r--r--golf_prelude.rb123
-rw-r--r--goruby.c60
-rw-r--r--hash.c3889
-rw-r--r--ia64.s11
-rw-r--r--id_table.c1580
-rw-r--r--id_table.h30
-rw-r--r--include/ruby.h35
-rw-r--r--include/ruby/backward/classext.h18
-rw-r--r--include/ruby/backward/rubyio.h6
-rw-r--r--include/ruby/backward/rubysig.h47
-rw-r--r--include/ruby/backward/st.h6
-rw-r--r--include/ruby/backward/util.h6
-rw-r--r--include/ruby/debug.h110
-rw-r--r--include/ruby/defines.h293
-rw-r--r--include/ruby/encoding.h419
-rw-r--r--include/ruby/intern.h1001
-rw-r--r--include/ruby/io.h185
-rw-r--r--include/ruby/missing.h261
-rw-r--r--include/ruby/oniguruma.h841
-rw-r--r--include/ruby/re.h72
-rw-r--r--include/ruby/regex.h46
-rw-r--r--include/ruby/ruby.h2224
-rw-r--r--include/ruby/st.h157
-rw-r--r--include/ruby/subst.h19
-rw-r--r--include/ruby/thread.h45
-rw-r--r--include/ruby/thread_native.h56
-rw-r--r--include/ruby/util.h94
-rw-r--r--include/ruby/version.h74
-rw-r--r--include/ruby/vm.h64
-rw-r--r--include/ruby/win32.h797
-rw-r--r--inits.c119
-rw-r--r--insns.def2207
-rw-r--r--install-sh (renamed from lib/rdoc/generator/template/darkfish/.document)0
-rwxr-xr-xinstruby.rb355
-rw-r--r--intern.h510
-rw-r--r--internal.h1404
-rw-r--r--io.c12614
-rw-r--r--iseq.c2461
-rw-r--r--iseq.h249
-rw-r--r--keywords42
-rw-r--r--lex.c136
-rw-r--r--lex.c.blt310
-rw-r--r--lib/.document106
-rw-r--r--lib/English.rb57
-rw-r--r--lib/Env.rb18
-rw-r--r--lib/README96
-rw-r--r--lib/abbrev.rb135
-rw-r--r--lib/base64.rb154
-rw-r--r--lib/benchmark.rb476
-rw-r--r--lib/cgi-lib.rb272
-rw-r--r--lib/cgi.rb2213
-rw-r--r--lib/cgi/.document2
-rw-r--r--lib/cgi/cookie.rb188
-rw-r--r--lib/cgi/core.rb881
-rw-r--r--lib/cgi/html.rb1035
-rw-r--r--lib/cgi/session.rb288
-rw-r--r--lib/cgi/session/pstore.rb74
-rw-r--r--lib/cgi/util.rb200
-rw-r--r--lib/cmath.rb435
-rw-r--r--lib/complex.rb631
-rw-r--r--lib/csv.rb3052
-rw-r--r--lib/date.rb1708
-rw-r--r--lib/date/format.rb1088
-rw-r--r--lib/date2.rb5
-rw-r--r--lib/debug.rb1730
-rw-r--r--lib/delegate.rb549
-rw-r--r--lib/drb.rb1
-rw-r--r--lib/drb/acl.rb167
-rw-r--r--lib/drb/drb.rb737
-rw-r--r--lib/drb/eq.rb5
-rw-r--r--lib/drb/extserv.rb50
-rw-r--r--lib/drb/extservm.rb72
-rw-r--r--lib/drb/gw.rb43
-rw-r--r--lib/drb/invokemethod.rb15
-rw-r--r--lib/drb/observer.rb24
-rw-r--r--lib/drb/ssl.rb342
-rw-r--r--lib/drb/timeridconv.rb97
-rw-r--r--lib/drb/unix.rb62
-rw-r--r--lib/e2mmap.rb130
-rw-r--r--lib/erb.rb866
-rw-r--r--lib/eregex.rb37
-rw-r--r--lib/fileutils.rb697
-rw-r--r--lib/finalize.rb193
-rw-r--r--lib/find.rb64
-rw-r--r--lib/forwardable.rb316
-rw-r--r--lib/ftools.rb261
-rw-r--r--lib/generator.rb380
-rw-r--r--lib/getoptlong.rb300
-rw-r--r--lib/getopts.rb127
-rw-r--r--lib/gserver.rb253
-rw-r--r--lib/importenv.rb33
-rw-r--r--lib/ipaddr.rb677
-rw-r--r--lib/irb.rb691
-rw-r--r--lib/irb/cmd/chws.rb17
-rw-r--r--lib/irb/cmd/fork.rb42
-rw-r--r--lib/irb/cmd/help.rb26
-rw-r--r--lib/irb/cmd/load.rb62
-rw-r--r--lib/irb/cmd/nop.rb24
-rw-r--r--lib/irb/cmd/pushws.rb20
-rw-r--r--lib/irb/cmd/subirb.rb20
-rw-r--r--lib/irb/completion.rb337
-rw-r--r--lib/irb/context.rb325
-rw-r--r--lib/irb/ext/change-ws.rb58
-rw-r--r--lib/irb/ext/history.rb85
-rw-r--r--lib/irb/ext/loader.rb145
-rw-r--r--lib/irb/ext/math-mode.rb29
-rw-r--r--lib/irb/ext/multi-irb.rb243
-rw-r--r--lib/irb/ext/save-history.rb96
-rw-r--r--lib/irb/ext/tracer.rb47
-rw-r--r--lib/irb/ext/use-loader.rb47
-rw-r--r--lib/irb/ext/workspaces.rb47
-rw-r--r--lib/irb/extend-command.rb303
-rw-r--r--lib/irb/frame.rb26
-rw-r--r--lib/irb/help.rb36
-rw-r--r--lib/irb/init.rb254
-rw-r--r--lib/irb/input-method.rb142
-rw-r--r--lib/irb/inspector.rb132
-rw-r--r--lib/irb/lc/.document4
-rw-r--r--lib/irb/lc/error.rb14
-rw-r--r--lib/irb/lc/help-message43
-rw-r--r--lib/irb/lc/ja/encoding_aliases.rb11
-rw-r--r--lib/irb/lc/ja/error.rb34
-rw-r--r--lib/irb/lc/ja/help-message71
-rw-r--r--lib/irb/locale.rb192
-rw-r--r--lib/irb/magic-file.rb38
-rw-r--r--lib/irb/notifier.rb193
-rw-r--r--lib/irb/output-method.rb75
-rw-r--r--lib/irb/ruby-lex.rb820
-rw-r--r--lib/irb/ruby-token.rb58
-rw-r--r--lib/irb/slex.rb311
-rw-r--r--lib/irb/src_encoding.rb5
-rw-r--r--lib/irb/version.rb12
-rw-r--r--lib/irb/workspace.rb134
-rw-r--r--lib/irb/ws-for-case-2.rb10
-rw-r--r--lib/irb/xmp.rb116
-rw-r--r--lib/jcode.rb220
-rw-r--r--lib/logger.rb643
-rw-r--r--lib/mailread.rb62
-rw-r--r--lib/mathn.rb380
-rw-r--r--lib/matrix.rb2070
-rw-r--r--lib/matrix/eigenvalue_decomposition.rb883
-rw-r--r--lib/matrix/lup_decomposition.rb219
-rw-r--r--lib/mkmf.rb3630
-rw-r--r--lib/monitor.rb365
-rw-r--r--lib/mutex_m.rb130
-rw-r--r--lib/net/ftp.rb1215
-rw-r--r--lib/net/http.rb2676
-rw-r--r--lib/net/http/backward.rb26
-rw-r--r--lib/net/http/exceptions.rb26
-rw-r--r--lib/net/http/generic_request.rb333
-rw-r--r--lib/net/http/header.rb453
-rw-r--r--lib/net/http/proxy_delta.rb17
-rw-r--r--lib/net/http/request.rb21
-rw-r--r--lib/net/http/requests.rb123
-rw-r--r--lib/net/http/response.rb417
-rw-r--r--lib/net/http/responses.rb275
-rw-r--r--lib/net/https.rb166
-rw-r--r--lib/net/imap.rb1618
-rw-r--r--lib/net/pop.rb369
-rw-r--r--lib/net/protocol.rb74
-rw-r--r--lib/net/smtp.rb832
-rw-r--r--lib/net/telnet.rb749
-rw-r--r--lib/observer.rb108
-rw-r--r--lib/open-uri.rb454
-rw-r--r--lib/open3.rb690
-rw-r--r--lib/optionparser.rb2
-rw-r--r--lib/optparse.rb738
-rw-r--r--lib/optparse/ac.rb51
-rw-r--r--lib/optparse/date.rb1
-rw-r--r--lib/optparse/shellwords.rb1
-rw-r--r--lib/optparse/time.rb1
-rw-r--r--lib/optparse/uri.rb1
-rw-r--r--lib/optparse/version.rb13
-rw-r--r--lib/ostruct.rb290
-rw-r--r--lib/parsearg.rb87
-rw-r--r--lib/parsedate.rb53
-rw-r--r--lib/pathname.rb1062
-rw-r--r--lib/ping.rb64
-rw-r--r--lib/pp.rb477
-rw-r--r--lib/prettyprint.rb780
-rw-r--r--lib/prime.rb466
-rw-r--r--lib/profile.rb5
-rw-r--r--lib/profiler.rb158
-rw-r--r--lib/pstore.rb396
-rw-r--r--lib/racc/parser.rb289
-rw-r--r--lib/racc/rdoc/grammar.en.rdoc219
-rw-r--r--lib/rational.rb530
-rw-r--r--lib/rbconfig/.document1
-rw-r--r--lib/rbconfig/datadir.rb14
-rw-r--r--lib/rdoc.rb188
-rw-r--r--lib/rdoc/README489
-rw-r--r--lib/rdoc/alias.rb112
-rw-r--r--lib/rdoc/anon_class.rb11
-rw-r--r--lib/rdoc/any_method.rb317
-rw-r--r--lib/rdoc/attr.rb176
-rw-r--r--lib/rdoc/class_module.rb800
-rw-r--r--lib/rdoc/code_object.rb430
-rw-r--r--lib/rdoc/code_objects.rb767
-rw-r--r--lib/rdoc/comment.rb230
-rw-r--r--lib/rdoc/constant.rb187
-rw-r--r--lib/rdoc/context.rb1212
-rw-r--r--lib/rdoc/context/section.rb239
-rw-r--r--lib/rdoc/cross_reference.rb184
-rw-r--r--lib/rdoc/diagram.rb335
-rw-r--r--lib/rdoc/dot/dot.rb255
-rw-r--r--lib/rdoc/encoding.rb100
-rw-r--r--lib/rdoc/erb_partial.rb19
-rw-r--r--lib/rdoc/erbio.rb38
-rw-r--r--lib/rdoc/extend.rb10
-rw-r--r--lib/rdoc/generator.rb52
-rw-r--r--lib/rdoc/generator/darkfish.rb761
-rw-r--r--lib/rdoc/generator/json_index.rb298
-rw-r--r--lib/rdoc/generator/markup.rb170
-rw-r--r--lib/rdoc/generator/pot.rb98
-rw-r--r--lib/rdoc/generator/pot/message_extractor.rb68
-rw-r--r--lib/rdoc/generator/pot/po.rb84
-rw-r--r--lib/rdoc/generator/pot/po_entry.rb141
-rw-r--r--lib/rdoc/generator/ri.rb31
-rw-r--r--lib/rdoc/generator/template/darkfish/_footer.rhtml5
-rw-r--r--lib/rdoc/generator/template/darkfish/_head.rhtml19
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml19
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml9
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml9
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml12
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml12
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml14
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/class.rhtml174
-rw-r--r--lib/rdoc/generator/template/darkfish/css/fonts.css167
-rw-r--r--lib/rdoc/generator/template/darkfish/css/rdoc.css590
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfbin94668 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfbin94196 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfbin96184 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfbin95316 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfbin71200 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfbin71692 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/add.pngbin733 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/arrow_up.pngbin372 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick.pngbin452 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick_link.pngbin764 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bug.pngbin774 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_black.pngbin211 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngbin207 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngbin209 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/date.pngbin626 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/delete.pngbin715 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/find.pngbin659 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifbin5886 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngbin207 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/package.pngbin853 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_green.pngbin621 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_text.pngbin342 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_width.pngbin309 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/plugin.pngbin591 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/ruby.pngbin592 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/tag_blue.pngbin1880 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/tag_green.pngbin613 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/transparent.pngbin97 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench.pngbin610 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench_orange.pngbin584 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/zoom.pngbin692 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/index.rhtml23
-rw-r--r--lib/rdoc/generator/template/darkfish/js/darkfish.js161
-rw-r--r--lib/rdoc/generator/template/darkfish/js/jquery.js4
-rw-r--r--lib/rdoc/generator/template/darkfish/js/search.js109
-rw-r--r--lib/rdoc/generator/template/darkfish/page.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/servlet_root.rhtml63
-rw-r--r--lib/rdoc/generator/template/darkfish/table_of_contents.rhtml58
-rw-r--r--lib/rdoc/generator/template/json_index/.document1
-rw-r--r--lib/rdoc/generator/template/json_index/js/navigation.js142
-rw-r--r--lib/rdoc/generator/template/json_index/js/searcher.js228
-rw-r--r--lib/rdoc/generators/chm_generator.rb112
-rw-r--r--lib/rdoc/generators/html_generator.rb1509
-rw-r--r--lib/rdoc/generators/ri_generator.rb268
-rw-r--r--lib/rdoc/generators/template/chm/chm.rb87
-rw-r--r--lib/rdoc/generators/template/html/hefss.rb418
-rw-r--r--lib/rdoc/generators/template/html/html.rb711
-rw-r--r--lib/rdoc/generators/template/html/kilmer.rb435
-rw-r--r--lib/rdoc/generators/template/html/old_html.rb728
-rw-r--r--lib/rdoc/generators/template/html/one_page_html.rb122
-rw-r--r--lib/rdoc/generators/template/xml/rdf.rb112
-rw-r--r--lib/rdoc/generators/template/xml/xml.rb112
-rw-r--r--lib/rdoc/generators/xml_generator.rb130
-rw-r--r--lib/rdoc/ghost_method.rb7
-rw-r--r--lib/rdoc/i18n.rb10
-rw-r--r--lib/rdoc/i18n/locale.rb102
-rw-r--r--lib/rdoc/i18n/text.rb126
-rw-r--r--lib/rdoc/include.rb10
-rw-r--r--lib/rdoc/known_classes.rb73
-rw-r--r--lib/rdoc/markdown.rb16134
-rw-r--r--lib/rdoc/markdown/entities.rb2132
-rw-r--r--lib/rdoc/markdown/literals_1_9.rb421
-rw-r--r--lib/rdoc/markup.rb870
-rw-r--r--lib/rdoc/markup/.document2
-rw-r--r--lib/rdoc/markup/attr_changer.rb23
-rw-r--r--lib/rdoc/markup/attr_span.rb30
-rw-r--r--lib/rdoc/markup/attribute_manager.rb344
-rw-r--r--lib/rdoc/markup/attributes.rb71
-rw-r--r--lib/rdoc/markup/blank_line.rb28
-rw-r--r--lib/rdoc/markup/block_quote.rb15
-rw-r--r--lib/rdoc/markup/document.rb165
-rw-r--r--lib/rdoc/markup/formatter.rb265
-rw-r--r--lib/rdoc/markup/formatter_test_case.rb768
-rw-r--r--lib/rdoc/markup/hard_break.rb32
-rw-r--r--lib/rdoc/markup/heading.rb79
-rw-r--r--lib/rdoc/markup/include.rb43
-rw-r--r--lib/rdoc/markup/indented_paragraph.rb48
-rw-r--r--lib/rdoc/markup/inline.rb2
-rw-r--r--lib/rdoc/markup/list.rb102
-rw-r--r--lib/rdoc/markup/list_item.rb100
-rw-r--r--lib/rdoc/markup/paragraph.rb29
-rw-r--r--lib/rdoc/markup/parser.rb559
-rw-r--r--lib/rdoc/markup/pre_process.rb294
-rw-r--r--lib/rdoc/markup/raw.rb70
-rw-r--r--lib/rdoc/markup/rule.rb21
-rw-r--r--lib/rdoc/markup/sample/rdoc2latex.rb16
-rw-r--r--lib/rdoc/markup/sample/sample.rb42
-rw-r--r--lib/rdoc/markup/simple_markup.rb476
-rw-r--r--lib/rdoc/markup/simple_markup/fragments.rb328
-rw-r--r--lib/rdoc/markup/simple_markup/inline.rb340
-rw-r--r--lib/rdoc/markup/simple_markup/lines.rb151
-rw-r--r--lib/rdoc/markup/simple_markup/preprocess.rb73
-rw-r--r--lib/rdoc/markup/simple_markup/to_flow.rb188
-rw-r--r--lib/rdoc/markup/simple_markup/to_html.rb289
-rw-r--r--lib/rdoc/markup/simple_markup/to_latex.rb333
-rw-r--r--lib/rdoc/markup/special.rb41
-rw-r--r--lib/rdoc/markup/test/AllTests.rb2
-rw-r--r--lib/rdoc/markup/test/TestInline.rb154
-rw-r--r--lib/rdoc/markup/test/TestParse.rb503
-rw-r--r--lib/rdoc/markup/text_formatter_test_case.rb115
-rw-r--r--lib/rdoc/markup/to_ansi.rb94
-rw-r--r--lib/rdoc/markup/to_bs.rb79
-rw-r--r--lib/rdoc/markup/to_html.rb399
-rw-r--r--lib/rdoc/markup/to_html_crossref.rb161
-rw-r--r--lib/rdoc/markup/to_html_snippet.rb285
-rw-r--r--lib/rdoc/markup/to_joined_paragraph.rb72
-rw-r--r--lib/rdoc/markup/to_label.rb75
-rw-r--r--lib/rdoc/markup/to_markdown.rb192
-rw-r--r--lib/rdoc/markup/to_rdoc.rb334
-rw-r--r--lib/rdoc/markup/to_table_of_contents.rb88
-rw-r--r--lib/rdoc/markup/to_test.rb70
-rw-r--r--lib/rdoc/markup/to_tt_only.rb121
-rw-r--r--lib/rdoc/markup/verbatim.rb84
-rw-r--r--lib/rdoc/meta_method.rb7
-rw-r--r--lib/rdoc/method_attr.rb419
-rw-r--r--lib/rdoc/mixin.rb121
-rw-r--r--lib/rdoc/normal_class.rb93
-rw-r--r--lib/rdoc/normal_module.rb74
-rw-r--r--lib/rdoc/options.rb1662
-rw-r--r--lib/rdoc/parser.rb311
-rw-r--r--lib/rdoc/parser/c.rb1230
-rw-r--r--lib/rdoc/parser/changelog.rb199
-rw-r--r--lib/rdoc/parser/markdown.rb24
-rw-r--r--lib/rdoc/parser/rd.rb23
-rw-r--r--lib/rdoc/parser/ruby.rb2161
-rw-r--r--lib/rdoc/parser/ruby_tools.rb168
-rw-r--r--lib/rdoc/parser/simple.rb62
-rw-r--r--lib/rdoc/parser/text.rb12
-rw-r--r--lib/rdoc/parsers/parse_c.rb773
-rw-r--r--lib/rdoc/parsers/parse_f95.rb1841
-rw-r--r--lib/rdoc/parsers/parse_rb.rb2609
-rw-r--r--lib/rdoc/parsers/parse_simple.rb41
-rw-r--r--lib/rdoc/parsers/parserfactory.rb99
-rw-r--r--lib/rdoc/rd.rb100
-rw-r--r--lib/rdoc/rd/block_parser.rb1056
-rw-r--r--lib/rdoc/rd/inline.rb72
-rw-r--r--lib/rdoc/rd/inline_parser.rb1208
-rw-r--r--lib/rdoc/rdoc.gemspec7
-rw-r--r--lib/rdoc/rdoc.rb731
-rw-r--r--lib/rdoc/require.rb52
-rw-r--r--lib/rdoc/ri.rb21
-rw-r--r--lib/rdoc/ri/driver.rb1498
-rw-r--r--lib/rdoc/ri/formatter.rb6
-rw-r--r--lib/rdoc/ri/paths.rb188
-rw-r--r--lib/rdoc/ri/ri_cache.rb187
-rw-r--r--lib/rdoc/ri/ri_descriptions.rb154
-rw-r--r--lib/rdoc/ri/ri_display.rb255
-rw-r--r--lib/rdoc/ri/ri_driver.rb143
-rw-r--r--lib/rdoc/ri/ri_formatter.rb672
-rw-r--r--lib/rdoc/ri/ri_options.rb313
-rw-r--r--lib/rdoc/ri/ri_paths.rb80
-rw-r--r--lib/rdoc/ri/ri_reader.rb100
-rw-r--r--lib/rdoc/ri/ri_util.rb75
-rw-r--r--lib/rdoc/ri/ri_writer.rb62
-rw-r--r--lib/rdoc/ri/store.rb7
-rw-r--r--lib/rdoc/ri/task.rb72
-rw-r--r--lib/rdoc/ruby_lex.rb1378
-rw-r--r--lib/rdoc/ruby_token.rb461
-rw-r--r--lib/rdoc/rubygems_hook.rb254
-rw-r--r--lib/rdoc/servlet.rb442
-rw-r--r--lib/rdoc/single_class.rb26
-rw-r--r--lib/rdoc/stats.rb462
-rw-r--r--lib/rdoc/stats/normal.rb60
-rw-r--r--lib/rdoc/stats/quiet.rb60
-rw-r--r--lib/rdoc/stats/verbose.rb46
-rw-r--r--lib/rdoc/store.rb980
-rw-r--r--lib/rdoc/task.rb331
-rw-r--r--lib/rdoc/template.rb234
-rw-r--r--lib/rdoc/test_case.rb218
-rw-r--r--lib/rdoc/text.rb324
-rw-r--r--lib/rdoc/token_stream.rb96
-rw-r--r--lib/rdoc/tokenstream.rb25
-rw-r--r--lib/rdoc/tom_doc.rb258
-rw-r--r--lib/rdoc/top_level.rb283
-rw-r--r--lib/rdoc/usage.rb210
-rw-r--r--lib/readbytes.rb41
-rw-r--r--lib/resolv-replace.rb23
-rw-r--r--lib/resolv.rb1775
-rw-r--r--lib/rexml/attlistdecl.rb113
-rw-r--r--lib/rexml/attribute.rb305
-rw-r--r--lib/rexml/cdata.rb97
-rw-r--r--lib/rexml/child.rb165
-rw-r--r--lib/rexml/comment.rb118
-rw-r--r--lib/rexml/doctype.rb47
-rw-r--r--lib/rexml/document.rb335
-rw-r--r--lib/rexml/dtd/attlistdecl.rb15
-rw-r--r--lib/rexml/dtd/dtd.rb78
-rw-r--r--lib/rexml/dtd/elementdecl.rb27
-rw-r--r--lib/rexml/dtd/entitydecl.rb99
-rw-r--r--lib/rexml/dtd/notationdecl.rb65
-rw-r--r--lib/rexml/element.rb242
-rw-r--r--lib/rexml/encoding.rb96
-rw-r--r--lib/rexml/encodings/CP-1252.rb103
-rw-r--r--lib/rexml/encodings/EUC-JP.rb35
-rw-r--r--lib/rexml/encodings/ICONV.rb22
-rw-r--r--lib/rexml/encodings/ISO-8859-1.rb7
-rw-r--r--lib/rexml/encodings/ISO-8859-15.rb72
-rw-r--r--lib/rexml/encodings/SHIFT-JIS.rb37
-rw-r--r--lib/rexml/encodings/SHIFT_JIS.rb1
-rw-r--r--lib/rexml/encodings/UNILE.rb34
-rw-r--r--lib/rexml/encodings/US-ASCII.rb30
-rw-r--r--lib/rexml/encodings/UTF-16.rb35
-rw-r--r--lib/rexml/encodings/UTF-8.rb18
-rw-r--r--lib/rexml/entity.rb295
-rw-r--r--lib/rexml/formatters/default.rb11
-rw-r--r--lib/rexml/formatters/pretty.rb19
-rw-r--r--lib/rexml/formatters/transitive.rb8
-rw-r--r--lib/rexml/functions.rb59
-rw-r--r--lib/rexml/instruction.rb99
-rw-r--r--lib/rexml/light/node.rb382
-rw-r--r--lib/rexml/namespace.rb79
-rw-r--r--lib/rexml/node.rb79
-rw-r--r--lib/rexml/output.rb30
-rw-r--r--lib/rexml/parent.rb54
-rw-r--r--lib/rexml/parseexception.rb9
-rw-r--r--lib/rexml/parsers/baseparser.rb152
-rw-r--r--lib/rexml/parsers/lightparser.rb85
-rw-r--r--lib/rexml/parsers/pullparser.rb3
-rw-r--r--lib/rexml/parsers/sax2parser.rb433
-rw-r--r--lib/rexml/parsers/streamparser.rb11
-rw-r--r--lib/rexml/parsers/treeparser.rb16
-rw-r--r--lib/rexml/parsers/ultralightparser.rb81
-rw-r--r--lib/rexml/parsers/xpathparser.rb145
-rw-r--r--lib/rexml/quickpath.rb496
-rw-r--r--lib/rexml/rexml.rb22
-rw-r--r--lib/rexml/sax2listener.rb185
-rw-r--r--lib/rexml/security.rb28
-rw-r--r--lib/rexml/source.rb148
-rw-r--r--lib/rexml/streamlistener.rb181
-rw-r--r--lib/rexml/syncenumerator.rb8
-rw-r--r--lib/rexml/text.rb238
-rw-r--r--lib/rexml/undefinednamespaceexception.rb1
-rw-r--r--lib/rexml/validation/relaxng.rb58
-rw-r--r--lib/rexml/validation/validation.rb23
-rw-r--r--lib/rexml/validation/validationexception.rb1
-rw-r--r--lib/rexml/xmldecl.rb123
-rw-r--r--lib/rexml/xmltokens.rb95
-rw-r--r--lib/rexml/xpath.rb121
-rw-r--r--lib/rexml/xpath_parser.rb184
-rw-r--r--lib/rinda/rinda.rb69
-rw-r--r--lib/rinda/ring.rb358
-rw-r--r--lib/rinda/tuplespace.rb118
-rw-r--r--lib/rss.rb86
-rw-r--r--lib/rss/0.9.rb96
-rw-r--r--lib/rss/1.0.rb94
-rw-r--r--lib/rss/2.0.rb40
-rw-r--r--lib/rss/atom.rb840
-rw-r--r--lib/rss/content.rb28
-rw-r--r--lib/rss/content/1.0.rb10
-rw-r--r--lib/rss/content/2.0.rb12
-rw-r--r--lib/rss/converter.rb45
-rw-r--r--lib/rss/dublincore.rb58
-rw-r--r--lib/rss/dublincore/1.0.rb13
-rw-r--r--lib/rss/dublincore/2.0.rb13
-rw-r--r--lib/rss/dublincore/atom.rb17
-rw-r--r--lib/rss/image.rb33
-rw-r--r--lib/rss/itunes.rb413
-rw-r--r--lib/rss/maker.rb60
-rw-r--r--lib/rss/maker/0.9.rb451
-rw-r--r--lib/rss/maker/1.0.rb344
-rw-r--r--lib/rss/maker/2.0.rb170
-rw-r--r--lib/rss/maker/atom.rb173
-rw-r--r--lib/rss/maker/base.rb969
-rw-r--r--lib/rss/maker/content.rb15
-rw-r--r--lib/rss/maker/dublincore.rb151
-rw-r--r--lib/rss/maker/entry.rb164
-rw-r--r--lib/rss/maker/feed.rb427
-rw-r--r--lib/rss/maker/image.rb119
-rw-r--r--lib/rss/maker/itunes.rb243
-rw-r--r--lib/rss/maker/slash.rb34
-rw-r--r--lib/rss/maker/syndication.rb14
-rw-r--r--lib/rss/maker/taxonomy.rb127
-rw-r--r--lib/rss/maker/trackback.rb118
-rw-r--r--lib/rss/parser.rb227
-rw-r--r--lib/rss/rexmlparser.rb16
-rw-r--r--lib/rss/rss.rb818
-rw-r--r--lib/rss/slash.rb52
-rw-r--r--lib/rss/syndication.rb21
-rw-r--r--lib/rss/taxonomy.rb25
-rw-r--r--lib/rss/trackback.rb41
-rw-r--r--lib/rss/utils.rb175
-rw-r--r--lib/rss/xml-stylesheet.rb9
-rw-r--r--lib/rss/xml.rb72
-rw-r--r--lib/rss/xmlparser.rb18
-rw-r--r--lib/rss/xmlscanner.rb11
-rw-r--r--lib/rubygems.rb1263
-rw-r--r--lib/rubygems/LICENSE.txt54
-rw-r--r--lib/rubygems/available_set.rb165
-rw-r--r--lib/rubygems/basic_specification.rb329
-rw-r--r--lib/rubygems/command.rb583
-rw-r--r--lib/rubygems/command_manager.rb219
-rw-r--r--lib/rubygems/commands/build_command.rb61
-rw-r--r--lib/rubygems/commands/cert_command.rb277
-rw-r--r--lib/rubygems/commands/check_command.rb94
-rw-r--r--lib/rubygems/commands/cleanup_command.rb166
-rw-r--r--lib/rubygems/commands/contents_command.rb191
-rw-r--r--lib/rubygems/commands/dependency_command.rb218
-rw-r--r--lib/rubygems/commands/environment_command.rb161
-rw-r--r--lib/rubygems/commands/fetch_command.rb78
-rw-r--r--lib/rubygems/commands/generate_index_command.rb85
-rw-r--r--lib/rubygems/commands/help_command.rb375
-rw-r--r--lib/rubygems/commands/install_command.rb348
-rw-r--r--lib/rubygems/commands/list_command.rb41
-rw-r--r--lib/rubygems/commands/lock_command.rb111
-rw-r--r--lib/rubygems/commands/mirror_command.rb26
-rw-r--r--lib/rubygems/commands/open_command.rb77
-rw-r--r--lib/rubygems/commands/outdated_command.rb33
-rw-r--r--lib/rubygems/commands/owner_command.rb100
-rw-r--r--lib/rubygems/commands/pristine_command.rb176
-rw-r--r--lib/rubygems/commands/push_command.rb99
-rw-r--r--lib/rubygems/commands/query_command.rb344
-rw-r--r--lib/rubygems/commands/rdoc_command.rb97
-rw-r--r--lib/rubygems/commands/search_command.rb41
-rw-r--r--lib/rubygems/commands/server_command.rb87
-rw-r--r--lib/rubygems/commands/setup_command.rb484
-rw-r--r--lib/rubygems/commands/sources_command.rb211
-rw-r--r--lib/rubygems/commands/specification_command.rb146
-rw-r--r--lib/rubygems/commands/stale_command.rb39
-rw-r--r--lib/rubygems/commands/uninstall_command.rb165
-rw-r--r--lib/rubygems/commands/unpack_command.rb183
-rw-r--r--lib/rubygems/commands/update_command.rb278
-rw-r--r--lib/rubygems/commands/which_command.rb91
-rw-r--r--lib/rubygems/commands/yank_command.rb108
-rw-r--r--lib/rubygems/compatibility.rb60
-rw-r--r--lib/rubygems/config_file.rb484
-rw-r--r--lib/rubygems/core_ext/kernel_gem.rb74
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb138
-rw-r--r--lib/rubygems/defaults.rb178
-rw-r--r--lib/rubygems/dependency.rb338
-rw-r--r--lib/rubygems/dependency_installer.rb491
-rw-r--r--lib/rubygems/dependency_list.rb244
-rw-r--r--lib/rubygems/deprecate.rb71
-rw-r--r--lib/rubygems/doctor.rb132
-rw-r--r--lib/rubygems/errors.rb138
-rw-r--r--lib/rubygems/exceptions.rb271
-rw-r--r--lib/rubygems/ext.rb19
-rw-r--r--lib/rubygems/ext/build_error.rb7
-rw-r--r--lib/rubygems/ext/builder.rb221
-rw-r--r--lib/rubygems/ext/cmake_builder.rb17
-rw-r--r--lib/rubygems/ext/configure_builder.rb24
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb84
-rw-r--r--lib/rubygems/ext/rake_builder.rb37
-rw-r--r--lib/rubygems/gem_runner.rb82
-rw-r--r--lib/rubygems/gemcutter_utilities.rb155
-rw-r--r--lib/rubygems/indexer.rb434
-rw-r--r--lib/rubygems/install_default_message.rb13
-rw-r--r--lib/rubygems/install_message.rb13
-rw-r--r--lib/rubygems/install_update_options.rb187
-rw-r--r--lib/rubygems/installer.rb852
-rw-r--r--lib/rubygems/installer_test_case.rb194
-rw-r--r--lib/rubygems/local_remote_options.rb149
-rw-r--r--lib/rubygems/mock_gem_ui.rb89
-rw-r--r--lib/rubygems/name_tuple.rb124
-rw-r--r--lib/rubygems/package.rb627
-rw-r--r--lib/rubygems/package/digest_io.rb65
-rw-r--r--lib/rubygems/package/file_source.rb34
-rw-r--r--lib/rubygems/package/io_source.rb46
-rw-r--r--lib/rubygems/package/old.rb179
-rw-r--r--lib/rubygems/package/source.rb4
-rw-r--r--lib/rubygems/package/tar_header.rb230
-rw-r--r--lib/rubygems/package/tar_reader.rb124
-rw-r--r--lib/rubygems/package/tar_reader/entry.rb154
-rw-r--r--lib/rubygems/package/tar_test_case.rb147
-rw-r--r--lib/rubygems/package/tar_writer.rb345
-rw-r--r--lib/rubygems/package_task.rb129
-rw-r--r--lib/rubygems/path_support.rb81
-rw-r--r--lib/rubygems/platform.rb206
-rw-r--r--lib/rubygems/psych_additions.rb10
-rw-r--r--lib/rubygems/psych_tree.rb32
-rw-r--r--lib/rubygems/rdoc.rb335
-rw-r--r--lib/rubygems/remote_fetcher.rb424
-rw-r--r--lib/rubygems/request.rb248
-rw-r--r--lib/rubygems/request/connection_pools.rb88
-rw-r--r--lib/rubygems/request/http_pool.rb48
-rw-r--r--lib/rubygems/request/https_pool.rb11
-rw-r--r--lib/rubygems/request_set.rb419
-rw-r--r--lib/rubygems/request_set/gem_dependency_api.rb802
-rw-r--r--lib/rubygems/request_set/lockfile.rb239
-rw-r--r--lib/rubygems/request_set/lockfile/parser.rb346
-rw-r--r--lib/rubygems/request_set/lockfile/tokenizer.rb112
-rw-r--r--lib/rubygems/requirement.rb285
-rw-r--r--lib/rubygems/resolver.rb291
-rw-r--r--lib/rubygems/resolver/activation_request.rb174
-rw-r--r--lib/rubygems/resolver/api_set.rb126
-rw-r--r--lib/rubygems/resolver/api_specification.rb86
-rw-r--r--lib/rubygems/resolver/best_set.rb79
-rw-r--r--lib/rubygems/resolver/composed_set.rb67
-rw-r--r--lib/rubygems/resolver/conflict.rb160
-rw-r--r--lib/rubygems/resolver/current_set.rb14
-rw-r--r--lib/rubygems/resolver/dependency_request.rb120
-rw-r--r--lib/rubygems/resolver/git_set.rb123
-rw-r--r--lib/rubygems/resolver/git_specification.rb59
-rw-r--r--lib/rubygems/resolver/index_set.rb81
-rw-r--r--lib/rubygems/resolver/index_specification.rb70
-rw-r--r--lib/rubygems/resolver/installed_specification.rb59
-rw-r--r--lib/rubygems/resolver/installer_set.rb225
-rw-r--r--lib/rubygems/resolver/local_specification.rb42
-rw-r--r--lib/rubygems/resolver/lock_set.rb85
-rw-r--r--lib/rubygems/resolver/lock_specification.rb85
-rw-r--r--lib/rubygems/resolver/molinillo.rb2
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo.rb6
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb278
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb70
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb4
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb100
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb64
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb435
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb44
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/state.rb52
-rw-r--r--lib/rubygems/resolver/requirement_list.rb82
-rw-r--r--lib/rubygems/resolver/set.rb57
-rw-r--r--lib/rubygems/resolver/spec_specification.rb57
-rw-r--r--lib/rubygems/resolver/specification.rb111
-rw-r--r--lib/rubygems/resolver/stats.rb45
-rw-r--r--lib/rubygems/resolver/vendor_set.rb88
-rw-r--r--lib/rubygems/resolver/vendor_specification.rb25
-rw-r--r--lib/rubygems/security.rb596
-rw-r--r--lib/rubygems/security/policies.rb116
-rw-r--r--lib/rubygems/security/policy.rb296
-rw-r--r--lib/rubygems/security/signer.rb155
-rw-r--r--lib/rubygems/security/trust_dir.rb119
-rw-r--r--lib/rubygems/server.rb869
-rw-r--r--lib/rubygems/source.rb235
-rw-r--r--lib/rubygems/source/git.rb241
-rw-r--r--lib/rubygems/source/installed.rb41
-rw-r--r--lib/rubygems/source/local.rb130
-rw-r--r--lib/rubygems/source/lock.rb49
-rw-r--r--lib/rubygems/source/specific_file.rb73
-rw-r--r--lib/rubygems/source/vendor.rb28
-rw-r--r--lib/rubygems/source_list.rb150
-rw-r--r--lib/rubygems/source_local.rb6
-rw-r--r--lib/rubygems/source_specific_file.rb5
-rw-r--r--lib/rubygems/spec_fetcher.rb270
-rw-r--r--lib/rubygems/specification.rb3014
-rw-r--r--lib/rubygems/ssl_certs/.document1
-rw-r--r--lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem25
-rw-r--r--lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem32
-rw-r--r--lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem14
-rw-r--r--lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem23
-rw-r--r--lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem28
-rw-r--r--lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem20
-rw-r--r--lib/rubygems/stub_specification.rb215
-rw-r--r--lib/rubygems/syck_hack.rb77
-rw-r--r--lib/rubygems/test_case.rb1496
-rw-r--r--lib/rubygems/test_utilities.rb384
-rw-r--r--lib/rubygems/text.rb74
-rw-r--r--lib/rubygems/uninstaller.rb346
-rw-r--r--lib/rubygems/uri_formatter.rb50
-rw-r--r--lib/rubygems/user_interaction.rb704
-rw-r--r--lib/rubygems/util.rb135
-rw-r--r--lib/rubygems/util/licenses.rb330
-rw-r--r--lib/rubygems/util/list.rb37
-rw-r--r--lib/rubygems/validator.rb166
-rw-r--r--lib/rubygems/version.rb367
-rw-r--r--lib/rubygems/version_option.rb72
-rw-r--r--lib/rubyunit.rb6
-rw-r--r--lib/runit/assert.rb73
-rw-r--r--lib/runit/cui/testrunner.rb51
-rw-r--r--lib/runit/error.rb9
-rw-r--r--lib/runit/testcase.rb45
-rw-r--r--lib/runit/testresult.rb44
-rw-r--r--lib/runit/testsuite.rb26
-rw-r--r--lib/runit/topublic.rb8
-rw-r--r--lib/scanf.rb782
-rw-r--r--lib/securerandom.rb249
-rw-r--r--lib/set.rb1271
-rw-r--r--lib/shell.rb324
-rw-r--r--lib/shell/builtin-command.rb79
-rw-r--r--lib/shell/command-processor.rb722
-rw-r--r--lib/shell/error.rb12
-rw-r--r--lib/shell/filter.rb92
-rw-r--r--lib/shell/process-controller.rb345
-rw-r--r--lib/shell/system-command.rb149
-rw-r--r--lib/shell/version.rb16
-rw-r--r--lib/shellwords.rb243
-rw-r--r--lib/singleton.rb418
-rw-r--r--lib/soap/attachment.rb107
-rw-r--r--lib/soap/baseData.rb942
-rw-r--r--lib/soap/element.rb258
-rw-r--r--lib/soap/encodingstyle/aspDotNetHandler.rb213
-rw-r--r--lib/soap/encodingstyle/handler.rb100
-rw-r--r--lib/soap/encodingstyle/literalHandler.rb226
-rw-r--r--lib/soap/encodingstyle/soapHandler.rb582
-rw-r--r--lib/soap/generator.rb268
-rw-r--r--lib/soap/header/handler.rb57
-rw-r--r--lib/soap/header/handlerset.rb70
-rw-r--r--lib/soap/header/simplehandler.rb44
-rw-r--r--lib/soap/httpconfigloader.rb119
-rw-r--r--lib/soap/mapping.rb10
-rw-r--r--lib/soap/mapping/factory.rb355
-rw-r--r--lib/soap/mapping/mapping.rb381
-rw-r--r--lib/soap/mapping/registry.rb541
-rw-r--r--lib/soap/mapping/rubytypeFactory.rb475
-rw-r--r--lib/soap/mapping/typeMap.rb50
-rw-r--r--lib/soap/mapping/wsdlencodedregistry.rb280
-rw-r--r--lib/soap/mapping/wsdlliteralregistry.rb418
-rw-r--r--lib/soap/marshal.rb59
-rw-r--r--lib/soap/mimemessage.rb240
-rw-r--r--lib/soap/netHttpClient.rb190
-rw-r--r--lib/soap/parser.rb251
-rw-r--r--lib/soap/processor.rb66
-rw-r--r--lib/soap/property.rb333
-rw-r--r--lib/soap/rpc/cgistub.rb206
-rw-r--r--lib/soap/rpc/driver.rb254
-rw-r--r--lib/soap/rpc/element.rb325
-rw-r--r--lib/soap/rpc/httpserver.rb129
-rw-r--r--lib/soap/rpc/proxy.rb497
-rw-r--r--lib/soap/rpc/router.rb594
-rw-r--r--lib/soap/rpc/rpc.rb25
-rw-r--r--lib/soap/rpc/soaplet.rb162
-rw-r--r--lib/soap/rpc/standaloneServer.rb43
-rw-r--r--lib/soap/soap.rb140
-rw-r--r--lib/soap/streamHandler.rb229
-rw-r--r--lib/soap/wsdlDriver.rb575
-rw-r--r--lib/sync.rb344
-rw-r--r--lib/tempfile.rb396
-rw-r--r--lib/test/unit.rb280
-rw-r--r--lib/test/unit/assertionfailederror.rb14
-rw-r--r--lib/test/unit/assertions.rb622
-rw-r--r--lib/test/unit/autorunner.rb220
-rw-r--r--lib/test/unit/collector.rb43
-rw-r--r--lib/test/unit/collector/dir.rb107
-rw-r--r--lib/test/unit/collector/objectspace.rb34
-rw-r--r--lib/test/unit/error.rb56
-rw-r--r--lib/test/unit/failure.rb51
-rw-r--r--lib/test/unit/testcase.rb160
-rw-r--r--lib/test/unit/testresult.rb80
-rw-r--r--lib/test/unit/testsuite.rb76
-rw-r--r--lib/test/unit/ui/console/testrunner.rb127
-rw-r--r--lib/test/unit/ui/fox/testrunner.rb268
-rw-r--r--lib/test/unit/ui/gtk/testrunner.rb416
-rw-r--r--lib/test/unit/ui/gtk2/testrunner.rb465
-rw-r--r--lib/test/unit/ui/testrunnermediator.rb68
-rw-r--r--lib/test/unit/ui/testrunnerutilities.rb46
-rw-r--r--lib/test/unit/ui/tk/testrunner.rb260
-rw-r--r--lib/test/unit/util/backtracefilter.rb40
-rw-r--r--lib/test/unit/util/observable.rb90
-rw-r--r--lib/test/unit/util/procwrapper.rb48
-rw-r--r--lib/thread.rb479
-rw-r--r--lib/thwait.rb100
-rw-r--r--lib/time.rb819
-rw-r--r--lib/timeout.rb192
-rw-r--r--lib/tmpdir.rb156
-rw-r--r--lib/tracer.rb246
-rw-r--r--lib/tsort.rb318
-rw-r--r--lib/ubygems.rb11
-rw-r--r--lib/un.rb229
-rw-r--r--lib/unicode_normalize.rb79
-rw-r--r--lib/unicode_normalize/normalize.rb161
-rw-r--r--lib/unicode_normalize/tables.rb1160
-rw-r--r--lib/uri.rb96
-rw-r--r--lib/uri/common.rb808
-rw-r--r--lib/uri/ftp.rb185
-rw-r--r--lib/uri/generic.rb1021
-rw-r--r--lib/uri/http.rb53
-rw-r--r--lib/uri/https.rb5
-rw-r--r--lib/uri/ldap.rb79
-rw-r--r--lib/uri/ldaps.rb21
-rw-r--r--lib/uri/mailto.rb177
-rw-r--r--lib/uri/rfc2396_parser.rb544
-rw-r--r--lib/uri/rfc3986_parser.rb125
-rw-r--r--lib/weakref.rb167
-rw-r--r--lib/webrick.rb202
-rw-r--r--lib/webrick/accesslog.rb102
-rw-r--r--lib/webrick/cgi.rb108
-rw-r--r--lib/webrick/compat.rb21
-rw-r--r--lib/webrick/config.rb65
-rw-r--r--lib/webrick/cookie.rb72
-rw-r--r--lib/webrick/htmlutils.rb11
-rw-r--r--lib/webrick/httpauth.rb57
-rw-r--r--lib/webrick/httpauth/authenticator.rb70
-rw-r--r--lib/webrick/httpauth/basicauth.rb47
-rw-r--r--lib/webrick/httpauth/digestauth.rb101
-rw-r--r--lib/webrick/httpauth/htdigest.rb49
-rw-r--r--lib/webrick/httpauth/htgroup.rb33
-rw-r--r--lib/webrick/httpauth/htpasswd.rb52
-rw-r--r--lib/webrick/httpauth/userdb.rb32
-rw-r--r--lib/webrick/httpproxy.rb318
-rw-r--r--lib/webrick/httprequest.rb324
-rw-r--r--lib/webrick/httpresponse.rb218
-rw-r--r--lib/webrick/https.rb30
-rw-r--r--lib/webrick/httpserver.rb88
-rw-r--r--lib/webrick/httpservlet.rb1
-rw-r--r--lib/webrick/httpservlet/abstract.rb93
-rw-r--r--lib/webrick/httpservlet/cgi_runner.rb6
-rw-r--r--lib/webrick/httpservlet/cgihandler.rb59
-rw-r--r--lib/webrick/httpservlet/erbhandler.rb50
-rw-r--r--lib/webrick/httpservlet/filehandler.rb143
-rw-r--r--lib/webrick/httpservlet/prochandler.rb22
-rw-r--r--lib/webrick/httpstatus.rb185
-rw-r--r--lib/webrick/httputils.rb167
-rw-r--r--lib/webrick/httpversion.rb31
-rw-r--r--lib/webrick/log.rb78
-rw-r--r--lib/webrick/server.rb268
-rw-r--r--lib/webrick/ssl.rb89
-rw-r--r--lib/webrick/utils.rb226
-rw-r--r--lib/webrick/version.rb7
-rw-r--r--lib/wsdl/binding.rb65
-rw-r--r--lib/wsdl/data.rb64
-rw-r--r--lib/wsdl/definitions.rb250
-rw-r--r--lib/wsdl/documentation.rb32
-rw-r--r--lib/wsdl/import.rb80
-rw-r--r--lib/wsdl/importer.rb38
-rw-r--r--lib/wsdl/info.rb39
-rw-r--r--lib/wsdl/message.rb54
-rw-r--r--lib/wsdl/operation.rb130
-rw-r--r--lib/wsdl/operationBinding.rb108
-rw-r--r--lib/wsdl/param.rb85
-rw-r--r--lib/wsdl/parser.rb163
-rw-r--r--lib/wsdl/part.rb52
-rw-r--r--lib/wsdl/port.rb84
-rw-r--r--lib/wsdl/portType.rb73
-rw-r--r--lib/wsdl/service.rb61
-rw-r--r--lib/wsdl/soap/address.rb40
-rw-r--r--lib/wsdl/soap/binding.rb49
-rw-r--r--lib/wsdl/soap/body.rb56
-rw-r--r--lib/wsdl/soap/cgiStubCreator.rb76
-rw-r--r--lib/wsdl/soap/classDefCreator.rb314
-rw-r--r--lib/wsdl/soap/classDefCreatorSupport.rb126
-rw-r--r--lib/wsdl/soap/clientSkeltonCreator.rb78
-rw-r--r--lib/wsdl/soap/complexType.rb161
-rw-r--r--lib/wsdl/soap/data.rb42
-rw-r--r--lib/wsdl/soap/definitions.rb149
-rw-r--r--lib/wsdl/soap/driverCreator.rb95
-rw-r--r--lib/wsdl/soap/element.rb28
-rw-r--r--lib/wsdl/soap/fault.rb56
-rw-r--r--lib/wsdl/soap/header.rb86
-rw-r--r--lib/wsdl/soap/headerfault.rb56
-rw-r--r--lib/wsdl/soap/mappingRegistryCreator.rb92
-rw-r--r--lib/wsdl/soap/methodDefCreator.rb228
-rw-r--r--lib/wsdl/soap/operation.rb122
-rw-r--r--lib/wsdl/soap/servantSkeltonCreator.rb67
-rw-r--r--lib/wsdl/soap/standaloneServerStubCreator.rb85
-rw-r--r--lib/wsdl/soap/wsdl2ruby.rb176
-rw-r--r--lib/wsdl/types.rb43
-rw-r--r--lib/wsdl/wsdl.rb23
-rw-r--r--lib/wsdl/xmlSchema/all.rb69
-rw-r--r--lib/wsdl/xmlSchema/annotation.rb34
-rw-r--r--lib/wsdl/xmlSchema/any.rb56
-rw-r--r--lib/wsdl/xmlSchema/attribute.rb127
-rw-r--r--lib/wsdl/xmlSchema/choice.rb69
-rw-r--r--lib/wsdl/xmlSchema/complexContent.rb92
-rw-r--r--lib/wsdl/xmlSchema/complexType.rb139
-rw-r--r--lib/wsdl/xmlSchema/content.rb96
-rw-r--r--lib/wsdl/xmlSchema/data.rb80
-rw-r--r--lib/wsdl/xmlSchema/element.rb154
-rw-r--r--lib/wsdl/xmlSchema/enumeration.rb36
-rw-r--r--lib/wsdl/xmlSchema/import.rb65
-rw-r--r--lib/wsdl/xmlSchema/importer.rb87
-rw-r--r--lib/wsdl/xmlSchema/include.rb54
-rw-r--r--lib/wsdl/xmlSchema/length.rb35
-rw-r--r--lib/wsdl/xmlSchema/parser.rb166
-rw-r--r--lib/wsdl/xmlSchema/pattern.rb36
-rw-r--r--lib/wsdl/xmlSchema/schema.rb143
-rw-r--r--lib/wsdl/xmlSchema/sequence.rb69
-rw-r--r--lib/wsdl/xmlSchema/simpleContent.rb65
-rw-r--r--lib/wsdl/xmlSchema/simpleExtension.rb54
-rw-r--r--lib/wsdl/xmlSchema/simpleRestriction.rb73
-rw-r--r--lib/wsdl/xmlSchema/simpleType.rb73
-rw-r--r--lib/wsdl/xmlSchema/unique.rb34
-rw-r--r--lib/wsdl/xmlSchema/xsd2ruby.rb107
-rw-r--r--lib/xmlrpc.rb312
-rw-r--r--lib/xmlrpc/.document1
-rw-r--r--lib/xmlrpc/README.txt31
-rw-r--r--lib/xmlrpc/base64.rb72
-rw-r--r--lib/xmlrpc/client.rb708
-rw-r--r--lib/xmlrpc/config.rb36
-rw-r--r--lib/xmlrpc/create.rb219
-rw-r--r--lib/xmlrpc/datetime.rb130
-rw-r--r--lib/xmlrpc/httpserver.rb178
-rw-r--r--lib/xmlrpc/marshal.rb21
-rw-r--r--lib/xmlrpc/parser.rb542
-rw-r--r--lib/xmlrpc/server.rb678
-rw-r--r--lib/xmlrpc/utils.rb75
-rw-r--r--lib/xsd/charset.rb187
-rw-r--r--lib/xsd/codegen.rb12
-rw-r--r--lib/xsd/codegen/classdef.rb203
-rw-r--r--lib/xsd/codegen/commentdef.rb34
-rw-r--r--lib/xsd/codegen/gensupport.rb166
-rw-r--r--lib/xsd/codegen/methoddef.rb63
-rw-r--r--lib/xsd/codegen/moduledef.rb191
-rw-r--r--lib/xsd/datatypes.rb1269
-rw-r--r--lib/xsd/datatypes1999.rb20
-rw-r--r--lib/xsd/iconvcharset.rb33
-rw-r--r--lib/xsd/mapping.rb42
-rw-r--r--lib/xsd/namedelements.rb95
-rw-r--r--lib/xsd/ns.rb140
-rw-r--r--lib/xsd/qname.rb78
-rw-r--r--lib/xsd/xmlparser.rb61
-rw-r--r--lib/xsd/xmlparser/parser.rb96
-rw-r--r--lib/xsd/xmlparser/rexmlparser.rb54
-rw-r--r--lib/xsd/xmlparser/xmlparser.rb50
-rw-r--r--lib/xsd/xmlparser/xmlscanner.rb147
-rw-r--r--lib/yaml.rb470
-rw-r--r--lib/yaml/baseemitter.rb247
-rw-r--r--lib/yaml/basenode.rb216
-rw-r--r--lib/yaml/constants.rb45
-rw-r--r--lib/yaml/dbm.rb201
-rw-r--r--lib/yaml/encoding.rb33
-rw-r--r--lib/yaml/error.rb34
-rw-r--r--lib/yaml/loader.rb14
-rw-r--r--lib/yaml/rubytypes.rb408
-rw-r--r--lib/yaml/store.rb77
-rw-r--r--lib/yaml/stream.rb40
-rw-r--r--lib/yaml/stringio.rb83
-rw-r--r--lib/yaml/syck.rb19
-rw-r--r--lib/yaml/tag.rb91
-rw-r--r--lib/yaml/types.rb192
-rw-r--r--lib/yaml/yamlnode.rb54
-rw-r--r--lib/yaml/ypath.rb52
-rw-r--r--load.c1211
-rw-r--r--loadpath.c92
-rw-r--r--localeinit.c112
-rw-r--r--main.c45
-rw-r--r--man/erb.1157
-rw-r--r--man/goruby.139
-rw-r--r--man/irb.1173
-rw-r--r--man/ri.1181
-rw-r--r--man/ruby.1651
-rw-r--r--marshal.c1958
-rw-r--r--math.c941
-rwxr-xr-xmdoc2man.rb465
-rw-r--r--method.h213
-rw-r--r--miniinit.c49
-rw-r--r--misc/README7
-rw-r--r--misc/inf-ruby.el249
-rw-r--r--misc/rb_optparse.bash20
-rwxr-xr-xmisc/rb_optparse.zsh38
-rw-r--r--misc/rdebug.el136
-rw-r--r--misc/rdoc-mode.el166
-rw-r--r--misc/ruby-additional.el131
-rw-r--r--misc/ruby-electric.el675
-rw-r--r--misc/ruby-mode.el1919
-rw-r--r--misc/ruby-style.el79
-rw-r--r--misc/rubydb3x.el42
-rw-r--r--missing.h142
-rw-r--r--missing/acosh.c19
-rw-r--r--missing/alloca.c13
-rw-r--r--missing/cbrt.c11
-rw-r--r--missing/close.c72
-rw-r--r--missing/crt_externs.h8
-rw-r--r--missing/crypt.c125
-rw-r--r--missing/dup2.c5
-rw-r--r--missing/erf.c13
-rw-r--r--missing/explicit_bzero.c88
-rw-r--r--missing/ffs.c49
-rw-r--r--missing/file.h2
-rw-r--r--missing/finite.c5
-rw-r--r--missing/flock.c25
-rw-r--r--missing/hypot.c4
-rw-r--r--missing/isinf.c19
-rw-r--r--missing/isnan.c25
-rw-r--r--missing/langinfo.c148
-rw-r--r--missing/lgamma_r.c80
-rw-r--r--missing/memcmp.c10
-rw-r--r--missing/memmove.c18
-rw-r--r--missing/nextafter.c77
-rw-r--r--missing/os2.c113
-rw-r--r--missing/setproctitle.c175
-rw-r--r--missing/signbit.c19
-rw-r--r--missing/strcasecmp.c16
-rw-r--r--missing/strchr.c22
-rw-r--r--missing/strerror.c5
-rw-r--r--missing/strftime.c903
-rw-r--r--missing/strlcat.c74
-rw-r--r--missing/strlcpy.c70
-rw-r--r--missing/strncasecmp.c21
-rw-r--r--missing/strstr.c15
-rw-r--r--missing/strtod.c271
-rw-r--r--missing/strtol.c10
-rw-r--r--missing/strtoul.c184
-rw-r--r--missing/tgamma.c92
-rw-r--r--missing/vsnprintf.c1135
-rw-r--r--missing/x68.c40
-rw-r--r--missing/x86_64-chkstk.s10
-rwxr-xr-xmkconfig.rb191
-rw-r--r--nacl/GNUmakefile.in100
-rw-r--r--nacl/README.nacl51
-rw-r--r--nacl/create_nmf.rb70
-rw-r--r--nacl/dirent.h15
-rw-r--r--nacl/example.html150
-rwxr-xr-xnacl/nacl-config.rb61
-rw-r--r--nacl/package.rb113
-rw-r--r--nacl/pepper_main.c732
-rw-r--r--nacl/resource.h8
-rw-r--r--nacl/select.h7
-rw-r--r--nacl/signal.h6
-rw-r--r--nacl/stat.h10
-rw-r--r--nacl/unistd.h9
-rw-r--r--nacl/utime.h11
-rw-r--r--node.c1100
-rw-r--r--node.h414
-rw-r--r--numeric.c3966
-rw-r--r--object.c3311
-rw-r--r--pack.c2012
-rw-r--r--parse.y11671
-rw-r--r--prec.c141
-rw-r--r--prelude.rb134
-rw-r--r--probes.d234
-rw-r--r--probes_helper.h43
-rw-r--r--proc.c3034
-rw-r--r--process.c7019
-rw-r--r--random.c1662
-rw-r--r--range.c1358
-rw-r--r--rational.c2620
-rw-r--r--re.c3772
-rw-r--r--re.h42
-rw-r--r--regcomp.c6754
-rw-r--r--regenc.c959
-rw-r--r--regenc.h234
-rw-r--r--regerror.c408
-rw-r--r--regex.c4687
-rw-r--r--regex.h221
-rw-r--r--regexec.c4500
-rw-r--r--regint.h987
-rw-r--r--regparse.c6496
-rw-r--r--regparse.h367
-rw-r--r--regsyntax.c387
-rw-r--r--ruby.1351
-rw-r--r--ruby.c2323
-rw-r--r--ruby.h759
-rw-r--r--ruby_atomic.h233
-rw-r--r--rubyio.h88
-rw-r--r--rubysig.h105
-rwxr-xr-xrubytest.rb49
-rwxr-xr-xrunruby.rb61
-rw-r--r--safe.c128
-rw-r--r--sample/README15
-rw-r--r--sample/benchmark.rb19
-rw-r--r--sample/biorhythm.rb134
-rw-r--r--sample/cal.rb86
-rw-r--r--sample/cbreak.rb4
-rw-r--r--sample/cgi-session-pstore.rb11
-rw-r--r--sample/coverage.rb62
-rw-r--r--sample/dbmtest.rb14
-rw-r--r--sample/delegate.rb31
-rw-r--r--sample/drb/README.ja.rdoc59
-rw-r--r--sample/drb/README.rd56
-rw-r--r--sample/drb/README.rd.ja59
-rw-r--r--sample/drb/README.rdoc56
-rw-r--r--sample/drb/acl.rb15
-rw-r--r--sample/drb/darray.rb2
-rw-r--r--sample/drb/darrayc.rb16
-rw-r--r--sample/drb/dbiff.rb24
-rw-r--r--sample/drb/dchatc.rb4
-rw-r--r--sample/drb/dchats.rb22
-rw-r--r--sample/drb/dhasen.rb4
-rw-r--r--sample/drb/dhasenc.rb7
-rw-r--r--sample/drb/dlogc.rb2
-rw-r--r--sample/drb/dlogd.rb6
-rw-r--r--sample/drb/dqin.rb2
-rw-r--r--sample/drb/dqout.rb2
-rw-r--r--sample/drb/dqueue.rb2
-rw-r--r--sample/drb/drbc.rb2
-rw-r--r--sample/drb/drbch.rb2
-rw-r--r--sample/drb/drbm.rb6
-rw-r--r--sample/drb/drbmc.rb2
-rw-r--r--sample/drb/drbs-acl.rb6
-rw-r--r--sample/drb/drbs.rb4
-rw-r--r--sample/drb/extserv_test.rb12
-rw-r--r--sample/drb/gw_cu.rb2
-rw-r--r--sample/drb/holderc.rb2
-rw-r--r--sample/drb/holders.rb6
-rw-r--r--sample/drb/http0.rb64
-rw-r--r--sample/drb/http0serv.rb118
-rw-r--r--sample/drb/name.rb16
-rw-r--r--sample/drb/namec.rb2
-rw-r--r--sample/drb/old_tuplespace.rb80
-rw-r--r--sample/drb/ring_echo.rb2
-rw-r--r--sample/drb/ring_place.rb6
-rw-r--r--sample/drb/simpletuple.rb14
-rw-r--r--sample/drb/speedc.rb2
-rw-r--r--sample/drb/speeds.rb4
-rw-r--r--sample/dualstack-fetch.rb2
-rw-r--r--sample/dualstack-httpd.rb36
-rw-r--r--sample/eval.rb2
-rw-r--r--sample/exyacc.rb34
-rw-r--r--sample/fib.awk8
-rw-r--r--sample/fib.pl4
-rw-r--r--sample/fib.scm4
-rw-r--r--sample/freq.rb2
-rw-r--r--sample/from.rb161
-rw-r--r--sample/fullpath.rb2
-rw-r--r--sample/getopts.test36
-rw-r--r--sample/goodfriday.rb48
-rw-r--r--sample/iseq_loader.rb243
-rw-r--r--sample/list.rb3
-rw-r--r--sample/list2.rb2
-rw-r--r--sample/list3.rb2
-rw-r--r--sample/logger/app.rb2
-rw-r--r--[-rwxr-xr-x]sample/mine.rb39
-rw-r--r--sample/mkproto.rb24
-rw-r--r--sample/mrshtest.rb13
-rw-r--r--sample/net-imap.rb167
-rw-r--r--sample/observ.rb8
-rw-r--r--sample/occur.pl8
-rw-r--r--sample/occur.rb6
-rw-r--r--sample/occur2.rb13
-rw-r--r--sample/open3.rb12
-rw-r--r--sample/openssl/c_rehash.rb38
-rw-r--r--sample/openssl/cert_store_view.rb911
-rw-r--r--sample/openssl/certstore.rb54
-rw-r--r--sample/openssl/cipher.rb73
-rw-r--r--sample/openssl/crlstore.rb32
-rw-r--r--sample/openssl/echo_cli.rb21
-rw-r--r--sample/openssl/echo_svr.rb15
-rw-r--r--sample/openssl/gen_csr.rb13
-rw-r--r--sample/openssl/smime_read.rb10
-rw-r--r--sample/openssl/smime_write.rb12
-rw-r--r--sample/openssl/wget.rb17
-rw-r--r--[-rwxr-xr-x]sample/optparse/opttest.rb76
-rw-r--r--sample/philos.rb2
-rw-r--r--sample/pstore.rb19
-rw-r--r--sample/pty/expect_sample.rb48
-rw-r--r--sample/pty/script.rb37
-rw-r--r--sample/rcs.awk54
-rw-r--r--sample/rdoc/markup/rdoc2latex.rb15
-rw-r--r--sample/rdoc/markup/sample.rb40
-rw-r--r--sample/regx.rb23
-rw-r--r--sample/rinda-ring.rb22
-rw-r--r--sample/ripper/ruby2html.rb112
-rw-r--r--sample/ripper/strip-comment.rb19
-rwxr-xr-xsample/rss/blend.rb6
-rwxr-xr-xsample/rss/convert.rb2
-rw-r--r--[-rwxr-xr-x]sample/rss/list_description.rb17
-rwxr-xr-xsample/rss/re_read.rb14
-rw-r--r--[-rwxr-xr-x]sample/rss/rss_recent.rb24
-rw-r--r--sample/simple-bench.rb140
-rw-r--r--sample/svr.rb4
-rw-r--r--sample/tempfile.rb8
-rw-r--r--[-rwxr-xr-x]sample/test.rb968
-rw-r--r--sample/time.rb16
-rw-r--r--sample/timeout.rb42
-rw-r--r--sample/trick2013/README.md15
-rw-r--r--sample/trick2013/kinaba/authors.markdown3
-rw-r--r--sample/trick2013/kinaba/entry.rb1
-rw-r--r--sample/trick2013/kinaba/remarks.markdown37
-rw-r--r--sample/trick2013/mame/authors.markdown3
-rw-r--r--sample/trick2013/mame/entry.rb97
-rw-r--r--sample/trick2013/mame/music-box.mp4bin580724 -> 0 bytes-rw-r--r--sample/trick2013/mame/remarks.markdown47
-rw-r--r--sample/trick2013/shinh/authors.markdown2
-rw-r--r--sample/trick2013/shinh/entry.rb10
-rw-r--r--sample/trick2013/shinh/remarks.markdown4
-rw-r--r--sample/trick2013/yhara/authors.markdown3
-rw-r--r--sample/trick2013/yhara/entry.rb28
-rw-r--r--sample/trick2013/yhara/remarks.en.markdown23
-rw-r--r--sample/trick2013/yhara/remarks.markdown24
-rw-r--r--sample/trick2015/README.md16
-rw-r--r--sample/trick2015/eregon/authors.markdown3
-rw-r--r--sample/trick2015/eregon/entry.rb16
-rw-r--r--sample/trick2015/eregon/remarks.markdown70
-rw-r--r--sample/trick2015/kinaba/authors.markdown4
-rw-r--r--sample/trick2015/kinaba/entry.rb150
-rw-r--r--sample/trick2015/kinaba/remarks.markdown85
-rw-r--r--sample/trick2015/ksk_1/authors.markdown3
-rw-r--r--sample/trick2015/ksk_1/entry.rb1
-rw-r--r--sample/trick2015/ksk_1/remarks.markdown120
-rw-r--r--sample/trick2015/ksk_2/abnormal.cnf6
-rw-r--r--sample/trick2015/ksk_2/authors.markdown3
-rw-r--r--sample/trick2015/ksk_2/entry.rb1
-rw-r--r--sample/trick2015/ksk_2/quinn.cnf21
-rw-r--r--sample/trick2015/ksk_2/remarks.markdown204
-rw-r--r--sample/trick2015/ksk_2/sample.cnf9
-rw-r--r--sample/trick2015/ksk_2/uf20-01.cnf99
-rw-r--r--sample/trick2015/ksk_2/unsat.cnf11
-rw-r--r--sample/trick2015/monae/authors.markdown1
-rw-r--r--sample/trick2015/monae/entry.rb26
-rw-r--r--sample/trick2015/monae/remarks.markdown25
-rw-r--r--sample/trojan.rb4
-rw-r--r--sample/tsvr.rb2
-rw-r--r--sample/weakref.rb9
-rw-r--r--sample/webrick/httpproxy.rb7
-rw-r--r--signal.c1479
-rw-r--r--siphash.c484
-rw-r--r--siphash.h48
-rw-r--r--sparc.c40
-rw-r--r--spec/README31
-rw-r--r--spec/default.mspec23
-rw-r--r--sprintf.c1348
-rw-r--r--st.c1764
-rw-r--r--st.h72
-rw-r--r--strftime.c1163
-rw-r--r--string.c9438
-rw-r--r--struct.c1307
-rw-r--r--symbol.c1134
-rw-r--r--symbol.h108
-rw-r--r--template/Doxyfile.tmpl265
-rw-r--r--template/GNUmakefile.in6
-rw-r--r--template/encdb.h.tmpl91
-rw-r--r--template/fake.rb.in40
-rw-r--r--template/id.c.tmpl43
-rw-r--r--template/id.h.tmpl87
-rw-r--r--template/insns.inc.tmpl20
-rw-r--r--template/insns_info.inc.tmpl83
-rw-r--r--template/known_errors.inc.tmpl14
-rw-r--r--template/minsns.inc.tmpl14
-rw-r--r--template/opt_sc.inc.tmpl32
-rw-r--r--template/optinsn.inc.tmpl30
-rw-r--r--template/optunifs.inc.tmpl35
-rw-r--r--template/prelude.c.tmpl195
-rw-r--r--template/ruby-runner.c.in37
-rw-r--r--template/ruby.pc.in56
-rw-r--r--template/sizes.c.tmpl32
-rw-r--r--template/transdb.h.tmpl59
-rw-r--r--template/unicode_norm_gen.tmpl222
-rw-r--r--template/verconf.h.tmpl63
-rw-r--r--template/vm.inc.tmpl29
-rw-r--r--template/vmtc.inc.tmpl18
-rw-r--r--template/yarvarch.en7
-rw-r--r--template/yarvarch.ja454
-rw-r--r--template/yasmdata.rb.tmpl20
-rw-r--r--test/-ext-/array/test_resize.rb30
-rw-r--r--test/-ext-/bignum/test_big2str.rb30
-rw-r--r--test/-ext-/bignum/test_bigzero.rb14
-rw-r--r--test/-ext-/bignum/test_div.rb29
-rw-r--r--test/-ext-/bignum/test_mul.rb138
-rw-r--r--test/-ext-/bignum/test_pack.rb399
-rw-r--r--test/-ext-/bignum/test_str2big.rb38
-rw-r--r--test/-ext-/bug_reporter/test_bug_reporter.rb24
-rw-r--r--test/-ext-/class/test_class2name.rb19
-rw-r--r--test/-ext-/debug/test_debug.rb59
-rw-r--r--test/-ext-/debug/test_profile_frames.rb122
-rw-r--r--test/-ext-/exception/test_data_error.rb14
-rw-r--r--test/-ext-/exception/test_enc_raise.rb16
-rw-r--r--test/-ext-/exception/test_ensured.rb32
-rw-r--r--test/-ext-/file/test_stat.rb15
-rw-r--r--test/-ext-/float/test_nextafter.rb65
-rw-r--r--test/-ext-/funcall/test_passing_block.rb23
-rw-r--r--test/-ext-/gvl/test_last_thread.rb23
-rw-r--r--test/-ext-/hash/test_delete.rb20
-rw-r--r--test/-ext-/iseq_load/test_iseq_load.rb117
-rw-r--r--test/-ext-/iter/test_iter_break.rb16
-rw-r--r--test/-ext-/iter/test_yield_block.rb22
-rw-r--r--test/-ext-/load/test_dot_dot.rb11
-rw-r--r--test/-ext-/marshal/test_internal_ivar.rb20
-rw-r--r--test/-ext-/marshal/test_usrmarshal.rb33
-rw-r--r--test/-ext-/method/test_arity.rb38
-rw-r--r--test/-ext-/num2int/test_num2int.rb268
-rw-r--r--test/-ext-/path_to_class/test_path_to_class.rb13
-rw-r--r--test/-ext-/popen_deadlock/test_popen_deadlock.rb36
-rw-r--r--test/-ext-/postponed_job/test_postponed_job.rb29
-rw-r--r--test/-ext-/proc/test_bmethod.rb38
-rw-r--r--test/-ext-/rational/test_rat.rb32
-rw-r--r--test/-ext-/st/test_foreach.rb16
-rw-r--r--test/-ext-/st/test_numhash.rb50
-rw-r--r--test/-ext-/st/test_update.rb51
-rw-r--r--test/-ext-/string/test_coderange.rb60
-rw-r--r--test/-ext-/string/test_cstr.rb158
-rw-r--r--test/-ext-/string/test_ellipsize.rb47
-rw-r--r--test/-ext-/string/test_enc_associate.rb24
-rw-r--r--test/-ext-/string/test_enc_str_buf_cat.rb16
-rw-r--r--test/-ext-/string/test_fstring.rb65
-rw-r--r--test/-ext-/string/test_modify_expand.rb16
-rw-r--r--test/-ext-/string/test_nofree.rb13
-rw-r--r--test/-ext-/string/test_normalize.rb110
-rw-r--r--test/-ext-/string/test_qsort.rb20
-rw-r--r--test/-ext-/string/test_set_len.rb26
-rw-r--r--test/-ext-/struct/test_duplicate.rb22
-rw-r--r--test/-ext-/struct/test_member.rb16
-rw-r--r--test/-ext-/symbol/test_inadvertent_creation.rb505
-rw-r--r--test/-ext-/symbol/test_type.rb143
-rw-r--r--test/-ext-/test_bug-3571.rb21
-rw-r--r--test/-ext-/test_bug-5832.rb22
-rw-r--r--test/-ext-/test_notimplement.rb15
-rw-r--r--test/-ext-/test_printf.rb187
-rw-r--r--test/-ext-/test_recursion.rb36
-rw-r--r--test/-ext-/time/test_new.rb44
-rw-r--r--test/-ext-/tracepoint/test_tracepoint.rb80
-rw-r--r--test/-ext-/typeddata/test_typeddata.rb20
-rw-r--r--test/-ext-/vm/test_at_exit.rb19
-rw-r--r--test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb46
-rw-r--r--test/-ext-/win32/test_console_attr.rb44
-rw-r--r--test/-ext-/win32/test_dln.rb35
-rw-r--r--test/-ext-/win32/test_fd_setsize.rb25
-rw-r--r--test/base64/test_base64.rb115
-rw-r--r--test/benchmark/test_benchmark.rb162
-rw-r--r--test/bigdecimal/test_bigdecimal.rb1583
-rw-r--r--test/bigdecimal/test_bigdecimal_util.rb51
-rw-r--r--test/bigdecimal/test_bigmath.rb81
-rw-r--r--test/bigdecimal/testbase.rb28
-rw-r--r--test/cgi/test_cgi_cookie.rb118
-rw-r--r--test/cgi/test_cgi_core.rb303
-rw-r--r--test/cgi/test_cgi_header.rb184
-rw-r--r--test/cgi/test_cgi_modruby.rb149
-rw-r--r--test/cgi/test_cgi_multipart.rb386
-rw-r--r--test/cgi/test_cgi_session.rb169
-rw-r--r--test/cgi/test_cgi_tag_helper.rb355
-rw-r--r--test/cgi/test_cgi_util.rb141
-rw-r--r--test/cgi/testdata/file1.html10
-rw-r--r--test/cgi/testdata/large.pngbin156414 -> 0 bytes-rw-r--r--test/cgi/testdata/small.pngbin82 -> 0 bytes-rw-r--r--test/cgi/update_env.rb9
-rw-r--r--test/colors3
-rw-r--r--test/coverage/test_coverage.rb114
-rw-r--r--test/csv/base.rb9
-rw-r--r--test/csv/line_endings.gzbin59 -> 0 bytes-rw-r--r--test/csv/test_csv.rb1753
-rwxr-xr-xtest/csv/test_csv_parsing.rb222
-rwxr-xr-xtest/csv/test_csv_writing.rb98
-rwxr-xr-xtest/csv/test_data_converters.rb264
-rwxr-xr-xtest/csv/test_encodings.rb338
-rwxr-xr-xtest/csv/test_features.rb328
-rwxr-xr-xtest/csv/test_headers.rb298
-rwxr-xr-xtest/csv/test_interface.rb369
-rwxr-xr-xtest/csv/test_row.rb359
-rwxr-xr-xtest/csv/test_table.rb438
-rw-r--r--test/csv/ts_all.rb21
-rw-r--r--test/date/test_date.rb151
-rw-r--r--test/date/test_date_arith.rb265
-rw-r--r--test/date/test_date_attr.rb104
-rw-r--r--test/date/test_date_base.rb443
-rw-r--r--test/date/test_date_compat.rb22
-rw-r--r--test/date/test_date_conv.rb138
-rw-r--r--test/date/test_date_marshal.rb42
-rw-r--r--test/date/test_date_new.rb272
-rw-r--r--test/date/test_date_parse.rb1125
-rw-r--r--test/date/test_date_strftime.rb423
-rw-r--r--test/date/test_date_strptime.rb513
-rw-r--r--test/date/test_switch_hitter.rb665
-rw-r--r--test/dbm/test_dbm.rb217
-rw-r--r--test/digest/digest/foo.rb11
-rw-r--r--test/digest/test_digest.rb169
-rw-r--r--test/digest/test_digest_extend.rb159
-rw-r--r--test/drb/drbtest.rb171
-rw-r--r--test/drb/ignore_test_drb.rb20
-rw-r--r--test/drb/test_acl.rb5
-rw-r--r--test/drb/test_drb.rb121
-rw-r--r--test/drb/test_drbssl.rb25
-rw-r--r--test/drb/test_drbunix.rb24
-rw-r--r--test/drb/ut_array.rb4
-rw-r--r--test/drb/ut_array_drbssl.rb19
-rw-r--r--test/drb/ut_array_drbunix.rb2
-rw-r--r--test/drb/ut_drb.rb12
-rw-r--r--test/drb/ut_drb_drbssl.rb21
-rw-r--r--test/drb/ut_drb_drbunix.rb4
-rw-r--r--test/drb/ut_eq.rb37
-rw-r--r--test/drb/ut_eval.rb8
-rw-r--r--test/drb/ut_large.rb10
-rw-r--r--test/drb/ut_port.rb2
-rw-r--r--test/drb/ut_safe1.rb4
-rw-r--r--test/drb/ut_timerholder.rb9
-rw-r--r--test/dtrace/dummy.rb2
-rw-r--r--test/dtrace/helper.rb59
-rw-r--r--test/dtrace/test_array_create.rb36
-rw-r--r--test/dtrace/test_cmethod.rb50
-rw-r--r--test/dtrace/test_function_entry.rb88
-rw-r--r--test/dtrace/test_gc.rb27
-rw-r--r--test/dtrace/test_hash_create.rb53
-rw-r--r--test/dtrace/test_load.rb53
-rw-r--r--test/dtrace/test_method_cache.rb29
-rw-r--r--test/dtrace/test_object_create_start.rb36
-rw-r--r--test/dtrace/test_raise.rb30
-rw-r--r--test/dtrace/test_require.rb35
-rw-r--r--test/dtrace/test_singleton_function.rb56
-rw-r--r--test/dtrace/test_string.rb28
-rw-r--r--test/erb/test_erb.rb187
-rw-r--r--test/erb/test_erb_command.rb12
-rw-r--r--test/erb/test_erb_m17n.rb124
-rw-r--r--test/etc/test_etc.rb172
-rw-r--r--test/excludes/TestException.rb9
-rw-r--r--test/excludes/TestIO_Console.rb2
-rw-r--r--test/excludes/TestThread.rb2
-rw-r--r--test/fiddle/helper.rb126
-rw-r--r--test/fiddle/test_c_struct_entry.rb77
-rw-r--r--test/fiddle/test_c_union_entity.rb35
-rw-r--r--test/fiddle/test_closure.rb85
-rw-r--r--test/fiddle/test_cparser.rb211
-rw-r--r--test/fiddle/test_fiddle.rb17
-rw-r--r--test/fiddle/test_func.rb93
-rw-r--r--test/fiddle/test_function.rb102
-rw-r--r--test/fiddle/test_handle.rb186
-rw-r--r--test/fiddle/test_import.rb151
-rw-r--r--test/fiddle/test_pointer.rb238
-rw-r--r--test/fileutils/clobber.rb92
-rw-r--r--test/fileutils/fileasserts.rb129
-rw-r--r--test/fileutils/test_dryrun.rb21
-rw-r--r--test/fileutils/test_fileutils.rb827
-rw-r--r--test/fileutils/test_nowrite.rb91
-rw-r--r--test/fileutils/test_verbose.rb19
-rw-r--r--test/fileutils/visibility_tests.rb42
-rw-r--r--test/gdbm/test_gdbm.rb272
-rw-r--r--test/io/console/test_io_console.rb352
-rw-r--r--test/io/nonblock/test_flush.rb49
-rw-r--r--test/io/wait/test_io_wait.rb117
-rw-r--r--test/irb/test_completion.rb22
-rw-r--r--test/irb/test_option.rb12
-rw-r--r--test/irb/test_raise_no_backtrace_exception.rb14
-rw-r--r--test/json/fixtures/fail1.json1
-rw-r--r--test/json/fixtures/fail10.json1
-rw-r--r--test/json/fixtures/fail11.json1
-rw-r--r--test/json/fixtures/fail12.json1
-rw-r--r--test/json/fixtures/fail13.json1
-rw-r--r--test/json/fixtures/fail14.json1
-rw-r--r--test/json/fixtures/fail18.json1
-rw-r--r--test/json/fixtures/fail19.json1
-rw-r--r--test/json/fixtures/fail2.json1
-rw-r--r--test/json/fixtures/fail20.json1
-rw-r--r--test/json/fixtures/fail21.json1
-rw-r--r--test/json/fixtures/fail22.json1
-rw-r--r--test/json/fixtures/fail23.json1
-rw-r--r--test/json/fixtures/fail24.json1
-rw-r--r--test/json/fixtures/fail25.json1
-rw-r--r--test/json/fixtures/fail27.json2
-rw-r--r--test/json/fixtures/fail28.json2
-rw-r--r--test/json/fixtures/fail3.json1
-rw-r--r--test/json/fixtures/fail4.json1
-rw-r--r--test/json/fixtures/fail5.json1
-rw-r--r--test/json/fixtures/fail6.json1
-rw-r--r--test/json/fixtures/fail7.json1
-rw-r--r--test/json/fixtures/fail8.json1
-rw-r--r--test/json/fixtures/fail9.json1
-rw-r--r--test/json/fixtures/pass1.json56
-rw-r--r--test/json/fixtures/pass15.json1
-rw-r--r--test/json/fixtures/pass16.json1
-rw-r--r--test/json/fixtures/pass17.json1
-rw-r--r--test/json/fixtures/pass2.json1
-rw-r--r--test/json/fixtures/pass26.json1
-rw-r--r--test/json/fixtures/pass3.json6
-rw-r--r--test/json/setup_variant.rb12
-rwxr-xr-xtest/json/test_json.rb577
-rw-r--r--test/json/test_json_addition.rb197
-rw-r--r--test/json/test_json_encoding.rb66
-rw-r--r--test/json/test_json_fixtures.rb36
-rw-r--r--test/json/test_json_generate.rb361
-rw-r--r--test/json/test_json_generic_object.rb76
-rw-r--r--test/json/test_json_string_matching.rb40
-rw-r--r--test/json/test_json_unicode.rb73
-rw-r--r--test/lib/envutil.rb267
-rw-r--r--test/lib/find_executable.rb22
-rw-r--r--test/lib/iseq_loader_checker.rb75
-rw-r--r--test/lib/leakchecker.rb201
-rw-r--r--test/lib/memory_status.rb140
-rw-r--r--test/lib/minitest/README.txt457
-rw-r--r--test/lib/minitest/autorun.rb14
-rw-r--r--test/lib/minitest/benchmark.rb418
-rw-r--r--test/lib/minitest/mock.rb196
-rw-r--r--test/lib/minitest/unit.rb1402
-rw-r--r--test/lib/profile_test_all.rb91
-rw-r--r--test/lib/test/unit.rb1025
-rw-r--r--test/lib/test/unit/assertions.rb845
-rw-r--r--test/lib/test/unit/parallel.rb191
-rw-r--r--test/lib/test/unit/testcase.rb36
-rw-r--r--test/lib/tracepointchecker.rb119
-rw-r--r--test/lib/with_different_ofs.rb18
-rw-r--r--test/lib/zombie_hunter.rb9
-rw-r--r--test/logger/test_logdevice.rb565
-rw-r--r--test/logger/test_logger.rb199
-rw-r--r--test/logger/test_severity.rb16
-rw-r--r--test/matrix/test_matrix.rb612
-rw-r--r--test/matrix/test_vector.rb220
-rw-r--r--test/minitest/metametameta.rb71
-rw-r--r--test/minitest/test_minitest_benchmark.rb131
-rw-r--r--test/minitest/test_minitest_mock.rb404
-rw-r--r--test/minitest/test_minitest_unit.rb1782
-rw-r--r--test/misc/test_ruby_mode.rb183
-rw-r--r--test/mkmf/base.rb145
-rw-r--r--test/mkmf/test_config.rb17
-rw-r--r--test/mkmf/test_constant.rb38
-rw-r--r--test/mkmf/test_convertible.rb35
-rw-r--r--test/mkmf/test_find_executable.rb51
-rw-r--r--test/mkmf/test_flags.rb57
-rw-r--r--test/mkmf/test_framework.rb49
-rw-r--r--test/mkmf/test_have_func.rb15
-rw-r--r--test/mkmf/test_have_library.rb56
-rw-r--r--test/mkmf/test_have_macro.rb36
-rw-r--r--test/mkmf/test_libs.rb87
-rw-r--r--test/mkmf/test_signedness.rb30
-rw-r--r--test/mkmf/test_sizeof.rb48
-rw-r--r--test/monitor/test_monitor.rb169
-rw-r--r--test/net/ftp/test_buffered_socket.rb42
-rw-r--r--test/net/ftp/test_ftp.rb1659
-rw-r--r--test/net/ftp/test_mlsx_entry.rb98
-rw-r--r--test/net/http/test_buffered_io.rb18
-rw-r--r--test/net/http/test_http.rb990
-rw-r--r--test/net/http/test_http_request.rb80
-rw-r--r--test/net/http/test_httpheader.rb38
-rw-r--r--test/net/http/test_httpresponse.rb395
-rw-r--r--test/net/http/test_httpresponses.rb25
-rw-r--r--test/net/http/test_https.rb195
-rw-r--r--test/net/http/test_https_proxy.rb41
-rw-r--r--test/net/http/utils.rb109
-rw-r--r--test/net/imap/Makefile15
-rw-r--r--test/net/imap/cacert.pem66
-rw-r--r--test/net/imap/server.crt48
-rw-r--r--test/net/imap/server.key15
-rw-r--r--test/net/imap/test_imap.rb608
-rw-r--r--test/net/imap/test_imap_response_parser.rb294
-rw-r--r--test/net/pop/test_pop.rb137
-rw-r--r--test/net/protocol/test_protocol.rb29
-rw-r--r--test/net/smtp/test_response.rb100
-rw-r--r--test/net/smtp/test_smtp.rb55
-rw-r--r--test/net/smtp/test_ssl_socket.rb92
-rw-r--r--test/nkf/test_kconv.rb105
-rw-r--r--test/nkf/test_nkf.rb7
-rw-r--r--test/objspace/test_objspace.rb376
-rw-r--r--test/open-uri/test_open-uri.rb834
-rw-r--r--test/open-uri/test_ssl.rb391
-rw-r--r--test/openssl/ssl_server.rb81
-rw-r--r--test/openssl/test_asn1.rb429
-rw-r--r--test/openssl/test_bn.rb53
-rw-r--r--test/openssl/test_buffering.rb88
-rw-r--r--test/openssl/test_cipher.rb182
-rw-r--r--test/openssl/test_config.rb298
-rw-r--r--test/openssl/test_digest.rb55
-rw-r--r--test/openssl/test_engine.rb76
-rw-r--r--test/openssl/test_fips.rb15
-rw-r--r--test/openssl/test_hmac.rb34
-rw-r--r--test/openssl/test_ns_spki.rb15
-rw-r--r--test/openssl/test_ocsp.rb48
-rw-r--r--test/openssl/test_pair.rb437
-rw-r--r--test/openssl/test_partial_record_read.rb35
-rw-r--r--test/openssl/test_pkcs12.rb210
-rw-r--r--test/openssl/test_pkcs5.rb98
-rw-r--r--test/openssl/test_pkcs7.rb182
-rw-r--r--test/openssl/test_pkey_dh.rb104
-rw-r--r--test/openssl/test_pkey_dsa.rb241
-rw-r--r--test/openssl/test_pkey_ec.rb212
-rw-r--r--test/openssl/test_pkey_rsa.rb279
-rw-r--r--test/openssl/test_random.rb17
-rw-r--r--test/openssl/test_ssl.rb1270
-rw-r--r--test/openssl/test_ssl_session.rb382
-rw-r--r--test/openssl/test_x509cert.rb136
-rw-r--r--test/openssl/test_x509crl.rb37
-rw-r--r--test/openssl/test_x509ext.rb10
-rw-r--r--test/openssl/test_x509name.rb118
-rw-r--r--test/openssl/test_x509req.rb59
-rw-r--r--test/openssl/test_x509store.rb54
-rw-r--r--test/openssl/utils.rb209
-rw-r--r--test/optparse/test_acceptable.rb196
-rw-r--r--test/optparse/test_autoconf.rb64
-rw-r--r--test/optparse/test_bash_completion.rb43
-rw-r--r--test/optparse/test_getopts.rb6
-rw-r--r--test/optparse/test_noarg.rb15
-rw-r--r--test/optparse/test_optarg.rb5
-rw-r--r--test/optparse/test_optparse.rb23
-rw-r--r--test/optparse/test_placearg.rb14
-rw-r--r--test/optparse/test_reqarg.rb23
-rw-r--r--test/optparse/test_summary.rb47
-rw-r--r--test/optparse/test_zsh_completion.rb23
-rw-r--r--test/ostruct/test_ostruct.rb161
-rw-r--r--test/pathname/test_pathname.rb1013
-rw-r--r--test/psych/handlers/test_recorder.rb26
-rw-r--r--test/psych/helper.rb122
-rw-r--r--test/psych/json/test_stream.rb110
-rw-r--r--test/psych/nodes/test_enumerable.rb44
-rw-r--r--test/psych/test_alias_and_anchor.rb97
-rw-r--r--test/psych/test_array.rb58
-rw-r--r--test/psych/test_boolean.rb37
-rw-r--r--test/psych/test_class.rb37
-rw-r--r--test/psych/test_coder.rb207
-rw-r--r--test/psych/test_date_time.rb39
-rw-r--r--test/psych/test_deprecated.rb215
-rw-r--r--test/psych/test_document.rb47
-rw-r--r--test/psych/test_emitter.rb112
-rw-r--r--test/psych/test_encoding.rb269
-rw-r--r--test/psych/test_exception.rb158
-rw-r--r--test/psych/test_hash.rb95
-rw-r--r--test/psych/test_json_tree.rb66
-rw-r--r--test/psych/test_marshalable.rb55
-rw-r--r--test/psych/test_merge_keys.rb181
-rw-r--r--test/psych/test_nil.rb19
-rw-r--r--test/psych/test_null.rb20
-rw-r--r--test/psych/test_numeric.rb46
-rw-r--r--test/psych/test_object.rb45
-rw-r--r--test/psych/test_object_references.rb72
-rw-r--r--test/psych/test_omap.rb76
-rw-r--r--test/psych/test_parser.rb340
-rw-r--r--test/psych/test_psych.rb179
-rw-r--r--test/psych/test_safe_load.rb98
-rw-r--r--test/psych/test_scalar.rb12
-rw-r--r--test/psych/test_scalar_scanner.rb107
-rw-r--r--test/psych/test_serialize_subclasses.rb39
-rw-r--r--test/psych/test_set.rb50
-rw-r--r--test/psych/test_stream.rb94
-rw-r--r--test/psych/test_string.rb227
-rw-r--r--test/psych/test_struct.rb50
-rw-r--r--test/psych/test_symbol.rb26
-rw-r--r--test/psych/test_tainted.rb131
-rw-r--r--test/psych/test_to_yaml_properties.rb64
-rw-r--r--test/psych/test_tree_builder.rb80
-rw-r--r--test/psych/test_yaml.rb1293
-rw-r--r--test/psych/test_yamldbm.rb193
-rw-r--r--test/psych/test_yamlstore.rb86
-rw-r--r--test/psych/visitors/test_depth_first.rb50
-rw-r--r--test/psych/visitors/test_emitter.rb145
-rw-r--r--test/psych/visitors/test_to_ruby.rb332
-rw-r--r--test/psych/visitors/test_yaml_tree.rb174
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Amps and angle encoding.text21
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Auto links.text13
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Backslash escapes.text120
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Blockquotes with code blocks.text11
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Code Blocks.text14
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Code Spans.text6
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text8
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Horizontal rules.text67
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML (Advanced).text15
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML (Simple).text69
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML comments.text13
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, inline style.text12
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, reference style.text71
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, shortcut references.text20
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Literal quotes in titles.text7
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Basics.text306
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text888
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Nested blockquotes.text5
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Ordered and unordered lists.text131
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Strong and em together.text7
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Tabs.text21
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Tidyness.text5
-rw-r--r--test/rdoc/README1
-rw-r--r--test/rdoc/binary.datbin1024 -> 0 bytes-rw-r--r--test/rdoc/hidden.zip.txt1
-rw-r--r--test/rdoc/parsers/test_parse_c.rb261
-rw-r--r--test/rdoc/test.ja.largedoc3
-rw-r--r--test/rdoc/test.ja.rdoc10
-rw-r--r--test/rdoc/test.ja.txt8
-rw-r--r--test/rdoc/test.txt1
-rw-r--r--test/rdoc/test_rdoc_alias.rb14
-rw-r--r--test/rdoc/test_rdoc_any_method.rb461
-rw-r--r--test/rdoc/test_rdoc_attr.rb191
-rw-r--r--test/rdoc/test_rdoc_class_module.rb1493
-rw-r--r--test/rdoc/test_rdoc_code_object.rb451
-rw-r--r--test/rdoc/test_rdoc_comment.rb505
-rw-r--r--test/rdoc/test_rdoc_constant.rb182
-rw-r--r--test/rdoc/test_rdoc_context.rb902
-rw-r--r--test/rdoc/test_rdoc_context_section.rb131
-rw-r--r--test/rdoc/test_rdoc_cross_reference.rb193
-rw-r--r--test/rdoc/test_rdoc_encoding.rb228
-rw-r--r--test/rdoc/test_rdoc_extend.rb95
-rw-r--r--test/rdoc/test_rdoc_generator_darkfish.rb230
-rw-r--r--test/rdoc/test_rdoc_generator_json_index.rb325
-rw-r--r--test/rdoc/test_rdoc_generator_markup.rb60
-rw-r--r--test/rdoc/test_rdoc_generator_pot.rb92
-rw-r--r--test/rdoc/test_rdoc_generator_pot_po.rb52
-rw-r--r--test/rdoc/test_rdoc_generator_pot_po_entry.rb140
-rw-r--r--test/rdoc/test_rdoc_generator_ri.rb79
-rw-r--r--test/rdoc/test_rdoc_i18n_locale.rb74
-rw-r--r--test/rdoc/test_rdoc_i18n_text.rb124
-rw-r--r--test/rdoc/test_rdoc_include.rb109
-rw-r--r--test/rdoc/test_rdoc_markdown.rb981
-rw-r--r--test/rdoc/test_rdoc_markdown_test.rb1885
-rw-r--r--test/rdoc/test_rdoc_markup.rb96
-rw-r--r--test/rdoc/test_rdoc_markup_attribute_manager.rb365
-rw-r--r--test/rdoc/test_rdoc_markup_attributes.rb40
-rw-r--r--test/rdoc/test_rdoc_markup_document.rb208
-rw-r--r--test/rdoc/test_rdoc_markup_formatter.rb176
-rw-r--r--test/rdoc/test_rdoc_markup_hard_break.rb32
-rw-r--r--test/rdoc/test_rdoc_markup_heading.rb30
-rw-r--r--test/rdoc/test_rdoc_markup_include.rb20
-rw-r--r--test/rdoc/test_rdoc_markup_indented_paragraph.rb54
-rw-r--r--test/rdoc/test_rdoc_markup_paragraph.rb33
-rw-r--r--test/rdoc/test_rdoc_markup_parser.rb1681
-rw-r--r--test/rdoc/test_rdoc_markup_pre_process.rb474
-rw-r--r--test/rdoc/test_rdoc_markup_raw.rb23
-rw-r--r--test/rdoc/test_rdoc_markup_to_ansi.rb370
-rw-r--r--test/rdoc/test_rdoc_markup_to_bs.rb367
-rw-r--r--test/rdoc/test_rdoc_markup_to_html.rb663
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_crossref.rb226
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_snippet.rb712
-rw-r--r--test/rdoc/test_rdoc_markup_to_joined_paragraph.rb33
-rw-r--r--test/rdoc/test_rdoc_markup_to_label.rb113
-rw-r--r--test/rdoc/test_rdoc_markup_to_markdown.rb390
-rw-r--r--test/rdoc/test_rdoc_markup_to_rdoc.rb378
-rw-r--r--test/rdoc/test_rdoc_markup_to_table_of_contents.rb127
-rw-r--r--test/rdoc/test_rdoc_markup_to_tt_only.rb247
-rw-r--r--test/rdoc/test_rdoc_markup_verbatim.rb30
-rw-r--r--test/rdoc/test_rdoc_method_attr.rb194
-rw-r--r--test/rdoc/test_rdoc_normal_class.rb48
-rw-r--r--test/rdoc/test_rdoc_normal_module.rb43
-rw-r--r--test/rdoc/test_rdoc_options.rb767
-rw-r--r--test/rdoc/test_rdoc_parser.rb328
-rw-r--r--test/rdoc/test_rdoc_parser_c.rb1897
-rw-r--r--test/rdoc/test_rdoc_parser_changelog.rb316
-rw-r--r--test/rdoc/test_rdoc_parser_markdown.rb62
-rw-r--r--test/rdoc/test_rdoc_parser_rd.rb56
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb3323
-rw-r--r--test/rdoc/test_rdoc_parser_simple.rb116
-rw-r--r--test/rdoc/test_rdoc_rd.rb31
-rw-r--r--test/rdoc/test_rdoc_rd_block_parser.rb536
-rw-r--r--test/rdoc/test_rdoc_rd_inline.rb64
-rw-r--r--test/rdoc/test_rdoc_rd_inline_parser.rb178
-rw-r--r--test/rdoc/test_rdoc_rdoc.rb456
-rw-r--r--test/rdoc/test_rdoc_require.rb26
-rw-r--r--test/rdoc/test_rdoc_ri_driver.rb1437
-rw-r--r--test/rdoc/test_rdoc_ri_paths.rb156
-rw-r--r--test/rdoc/test_rdoc_ruby_lex.rb422
-rw-r--r--test/rdoc/test_rdoc_ruby_token.rb20
-rw-r--r--test/rdoc/test_rdoc_rubygems_hook.rb252
-rw-r--r--test/rdoc/test_rdoc_servlet.rb535
-rw-r--r--test/rdoc/test_rdoc_single_class.rb21
-rw-r--r--test/rdoc/test_rdoc_stats.rb723
-rw-r--r--test/rdoc/test_rdoc_store.rb994
-rw-r--r--test/rdoc/test_rdoc_task.rb174
-rw-r--r--test/rdoc/test_rdoc_text.rb558
-rw-r--r--test/rdoc/test_rdoc_token_stream.rb43
-rw-r--r--test/rdoc/test_rdoc_tom_doc.rb521
-rw-r--r--test/rdoc/test_rdoc_top_level.rb288
-rw-r--r--test/rdoc/xref_data.rb77
-rw-r--r--test/rdoc/xref_test_case.rb68
-rw-r--r--test/readline/test_readline.rb534
-rw-r--r--test/readline/test_readline_history.rb293
-rw-r--r--test/resolv/test_addr.rb30
-rw-r--r--test/resolv/test_dns.rb224
-rw-r--r--test/resolv/test_resource.rb22
-rw-r--r--test/rexml/data/LostineRiver.kml.gzbin50154 -> 0 bytes-rw-r--r--test/rexml/data/ProductionSupport.xml29
-rw-r--r--test/rexml/data/axis.xml25
-rw-r--r--test/rexml/data/bad.xml5
-rw-r--r--test/rexml/data/basic.xml11
-rw-r--r--test/rexml/data/basicupdate.xml47
-rw-r--r--test/rexml/data/broken.rss20
-rw-r--r--test/rexml/data/contents.xml70
-rw-r--r--test/rexml/data/dash.xml12
-rw-r--r--test/rexml/data/defaultNamespace.xml6
-rw-r--r--test/rexml/data/doctype_test.xml34
-rw-r--r--test/rexml/data/documentation.xml542
-rw-r--r--test/rexml/data/euc.xml296
-rw-r--r--test/rexml/data/evaluate.xml28
-rw-r--r--test/rexml/data/fibo.xml29
-rw-r--r--test/rexml/data/foo.xml10
-rw-r--r--test/rexml/data/google.2.xml156
-rw-r--r--test/rexml/data/id.xml21
-rw-r--r--test/rexml/data/iso8859-1.xml4
-rw-r--r--test/rexml/data/jaxen24.xml2
-rw-r--r--test/rexml/data/jaxen3.xml15
-rw-r--r--test/rexml/data/lang.xml11
-rw-r--r--test/rexml/data/lang0.xml18
-rw-r--r--test/rexml/data/message.xml27
-rw-r--r--test/rexml/data/moreover.xml244
-rw-r--r--test/rexml/data/much_ado.xml6850
-rw-r--r--test/rexml/data/namespaces.xml18
-rw-r--r--test/rexml/data/nitf.xml67
-rw-r--r--test/rexml/data/numbers.xml18
-rw-r--r--test/rexml/data/ofbiz-issues-full-177.xml13971
-rw-r--r--test/rexml/data/pi.xml13
-rw-r--r--test/rexml/data/pi2.xml6
-rw-r--r--test/rexml/data/project.xml1
-rw-r--r--test/rexml/data/simple.xml2
-rw-r--r--test/rexml/data/stream_accents.xml4
-rw-r--r--test/rexml/data/t63-1.xmlbin161690 -> 0 bytes-rw-r--r--test/rexml/data/t63-2.svg2828
-rw-r--r--test/rexml/data/t75.xml31
-rw-r--r--test/rexml/data/test/tests.xml683
-rw-r--r--test/rexml/data/test/tests.xsl369
-rw-r--r--test/rexml/data/testNamespaces.xml22
-rw-r--r--test/rexml/data/testsrc.xml64
-rw-r--r--test/rexml/data/text.xml10
-rw-r--r--test/rexml/data/ticket_61.xml4
-rw-r--r--test/rexml/data/ticket_68.xml590
-rw-r--r--test/rexml/data/tutorial.xml678
-rw-r--r--test/rexml/data/underscore.xml6
-rw-r--r--test/rexml/data/utf16.xmlbin207464 -> 0 bytes-rw-r--r--test/rexml/data/web.xml42
-rw-r--r--test/rexml/data/web2.xml7
-rw-r--r--test/rexml/data/working.rss202
-rw-r--r--test/rexml/data/xmlfile-bug.xml15
-rw-r--r--test/rexml/data/xp.tst27
-rw-r--r--test/rexml/data/yahoo.xml80
-rw-r--r--test/rexml/listener.rb51
-rw-r--r--test/rexml/parse/test_document_type_declaration.rb50
-rw-r--r--test/rexml/parse/test_notation_declaration.rb100
-rw-r--r--test/rexml/parser/test_sax2.rb203
-rw-r--r--test/rexml/parser/test_tree.rb43
-rw-r--r--test/rexml/parser/test_ultra_light.rb70
-rw-r--r--test/rexml/rexml_test_utils.rb7
-rw-r--r--test/rexml/test_attributes.rb223
-rw-r--r--test/rexml/test_attributes_mixin.rb32
-rw-r--r--test/rexml/test_changing_encoding.rb45
-rw-r--r--test/rexml/test_comment.rb26
-rw-r--r--test/rexml/test_contrib.rb585
-rw-r--r--test/rexml/test_core.rb1468
-rw-r--r--test/rexml/test_doctype.rb107
-rw-r--r--test/rexml/test_document.rb416
-rw-r--r--test/rexml/test_elements.rb119
-rw-r--r--test/rexml/test_encoding.rb108
-rw-r--r--test/rexml/test_entity.rb206
-rw-r--r--test/rexml/test_functions.rb225
-rw-r--r--test/rexml/test_functions_number.rb35
-rw-r--r--test/rexml/test_jaxen.rb130
-rw-r--r--test/rexml/test_light.rb107
-rw-r--r--test/rexml/test_lightparser.rb16
-rw-r--r--test/rexml/test_listener.rb131
-rw-r--r--test/rexml/test_martin_fowler.rb40
-rw-r--r--test/rexml/test_namespace.rb41
-rw-r--r--test/rexml/test_order.rb110
-rw-r--r--test/rexml/test_preceding_sibling.rb41
-rw-r--r--test/rexml/test_pullparser.rb103
-rw-r--r--test/rexml/test_rexml_issuezilla.rb19
-rw-r--r--test/rexml/test_sax.rb287
-rw-r--r--test/rexml/test_stream.rb130
-rw-r--r--test/rexml/test_text.rb22
-rw-r--r--test/rexml/test_ticket_80.rb59
-rw-r--r--test/rexml/test_validation_rng.rb793
-rw-r--r--test/rexml/test_xml_declaration.rb36
-rw-r--r--test/rexml/xpath/test_attribute.rb30
-rw-r--r--test/rexml/xpath/test_axis_preceding_sibling.rb40
-rw-r--r--test/rexml/xpath/test_base.rb1090
-rw-r--r--test/rexml/xpath/test_node.rb43
-rw-r--r--test/rexml/xpath/test_predicate.rb83
-rw-r--r--test/rexml/xpath/test_text.rb75
-rw-r--r--test/rinda/test_rinda.rb641
-rw-r--r--test/rinda/test_tuplebag.rb173
-rw-r--r--test/ripper/dummyparser.rb221
-rw-r--r--test/ripper/test_files.rb24
-rw-r--r--test/ripper/test_filter.rb84
-rw-r--r--test/ripper/test_parser_events.rb1342
-rw-r--r--test/ripper/test_ripper.rb75
-rw-r--r--test/ripper/test_scanner_events.rb918
-rw-r--r--test/ripper/test_sexp.rb85
-rw-r--r--test/rss/dot.pngbin111 -> 0 bytes-rw-r--r--test/rss/rss-assertions.rb1945
-rw-r--r--test/rss/rss-testcase.rb210
-rw-r--r--test/rss/test_1.0.rb213
-rw-r--r--test/rss/test_2.0.rb148
-rw-r--r--test/rss/test_accessor.rb35
-rw-r--r--test/rss/test_atom.rb684
-rw-r--r--test/rss/test_content.rb79
-rw-r--r--test/rss/test_dublincore.rb321
-rw-r--r--test/rss/test_image.rb25
-rw-r--r--test/rss/test_inherit.rb8
-rw-r--r--test/rss/test_itunes.rb348
-rw-r--r--test/rss/test_maker_0.9.rb218
-rw-r--r--test/rss/test_maker_1.0.rb284
-rw-r--r--test/rss/test_maker_2.0.rb201
-rw-r--r--test/rss/test_maker_atom_entry.rb394
-rw-r--r--test/rss/test_maker_atom_feed.rb455
-rw-r--r--test/rss/test_maker_content.rb18
-rw-r--r--test/rss/test_maker_dc.rb25
-rw-r--r--test/rss/test_maker_image.rb7
-rw-r--r--test/rss/test_maker_itunes.rb470
-rw-r--r--test/rss/test_maker_slash.rb38
-rw-r--r--test/rss/test_maker_sy.rb8
-rw-r--r--test/rss/test_maker_taxo.rb9
-rw-r--r--test/rss/test_maker_trackback.rb5
-rw-r--r--test/rss/test_maker_xml-stylesheet.rb17
-rw-r--r--test/rss/test_parser.rb37
-rw-r--r--test/rss/test_parser_1.0.rb21
-rw-r--r--test/rss/test_parser_2.0.rb3
-rw-r--r--test/rss/test_parser_atom_entry.rb164
-rw-r--r--test/rss/test_parser_atom_feed.rb277
-rw-r--r--test/rss/test_setup_maker_0.9.rb52
-rw-r--r--test/rss/test_setup_maker_1.0.rb113
-rw-r--r--test/rss/test_setup_maker_2.0.rb45
-rw-r--r--test/rss/test_setup_maker_atom_entry.rb410
-rw-r--r--test/rss/test_setup_maker_atom_feed.rb446
-rw-r--r--test/rss/test_setup_maker_itunes.rb144
-rw-r--r--test/rss/test_setup_maker_slash.rb39
-rw-r--r--test/rss/test_slash.rb65
-rw-r--r--test/rss/test_syndication.rb43
-rw-r--r--test/rss/test_taxonomy.rb17
-rw-r--r--test/rss/test_to_s.rb271
-rw-r--r--test/rss/test_trackback.rb31
-rw-r--r--test/rss/test_version.rb5
-rw-r--r--test/rss/test_xml-stylesheet.rb25
-rw-r--r--test/ruby/allpairs.rb103
-rw-r--r--test/ruby/beginmainend.rb7
-rw-r--r--test/ruby/bug-11928.rb14
-rw-r--r--test/ruby/enc/test_big5.rb29
-rw-r--r--test/ruby/enc/test_cp949.rb29
-rw-r--r--test/ruby/enc/test_emoji.rb443
-rw-r--r--test/ruby/enc/test_euc_jp.rb25
-rw-r--r--test/ruby/enc/test_euc_kr.rb37
-rw-r--r--test/ruby/enc/test_euc_tw.rb29
-rw-r--r--test/ruby/enc/test_gb18030.rb127
-rw-r--r--test/ruby/enc/test_gbk.rb29
-rw-r--r--test/ruby/enc/test_iso_8859.rb164
-rw-r--r--test/ruby/enc/test_koi8.rb23
-rw-r--r--test/ruby/enc/test_shift_jis.rb28
-rw-r--r--test/ruby/enc/test_utf16.rb385
-rw-r--r--test/ruby/enc/test_utf32.rb94
-rw-r--r--test/ruby/enc/test_windows_1251.rb17
-rw-r--r--test/ruby/enc/test_windows_1252.rb26
-rw-r--r--test/ruby/endblockwarn.rb12
-rw-r--r--test/ruby/envutil.rb28
-rw-r--r--test/ruby/lbtest.rb50
-rw-r--r--test/ruby/marshaltestlib.rb187
-rw-r--r--test/ruby/sentence.rb669
-rw-r--r--test/ruby/suicide.rb2
-rw-r--r--test/ruby/test_alias.rb198
-rw-r--r--test/ruby/test_argf.rb922
-rw-r--r--test/ruby/test_arity.rb70
-rw-r--r--test/ruby/test_array.rb2565
-rw-r--r--test/ruby/test_assignment.rb784
-rw-r--r--test/ruby/test_autoload.rb247
-rw-r--r--test/ruby/test_backtrace.rb301
-rw-r--r--test/ruby/test_basicinstructions.rb701
-rw-r--r--test/ruby/test_beginendblock.rb181
-rw-r--r--test/ruby/test_bignum.rb639
-rw-r--r--test/ruby/test_call.rb78
-rw-r--r--test/ruby/test_case.rb97
-rw-r--r--test/ruby/test_class.rb579
-rw-r--r--test/ruby/test_clone.rb3
-rw-r--r--test/ruby/test_comparable.rb101
-rw-r--r--test/ruby/test_complex.rb926
-rw-r--r--test/ruby/test_complex2.rb736
-rw-r--r--test/ruby/test_complexrational.rb408
-rw-r--r--test/ruby/test_condition.rb1
-rw-r--r--test/ruby/test_const.rb47
-rw-r--r--test/ruby/test_continuation.rb135
-rw-r--r--test/ruby/test_defined.rb213
-rw-r--r--test/ruby/test_dir.rb316
-rw-r--r--test/ruby/test_dir_m17n.rb434
-rw-r--r--test/ruby/test_econv.rb924
-rw-r--r--test/ruby/test_encoding.rb127
-rw-r--r--test/ruby/test_enum.rb772
-rw-r--r--test/ruby/test_enumerator.rb649
-rw-r--r--test/ruby/test_env.rb452
-rw-r--r--test/ruby/test_eval.rb476
-rw-r--r--test/ruby/test_exception.rb684
-rw-r--r--test/ruby/test_extlibs.rb87
-rw-r--r--test/ruby/test_fiber.rb348
-rw-r--r--test/ruby/test_file.rb497
-rw-r--r--test/ruby/test_file_exhaustive.rb1415
-rw-r--r--test/ruby/test_fixnum.rb333
-rw-r--r--test/ruby/test_flip.rb42
-rw-r--r--test/ruby/test_float.rb661
-rw-r--r--test/ruby/test_fnmatch.rb132
-rw-r--r--test/ruby/test_gc.rb372
-rw-r--r--test/ruby/test_hash.rb886
-rw-r--r--test/ruby/test_ifunless.rb15
-rw-r--r--test/ruby/test_integer.rb281
-rw-r--r--test/ruby/test_integer_comb.rb632
-rw-r--r--test/ruby/test_io.rb3275
-rw-r--r--test/ruby/test_io_m17n.rb2639
-rw-r--r--test/ruby/test_iseq.rb215
-rw-r--r--test/ruby/test_iterator.rb151
-rw-r--r--test/ruby/test_keyword.rb600
-rw-r--r--test/ruby/test_lambda.rb174
-rw-r--r--test/ruby/test_lazy_enumerator.rb542
-rw-r--r--test/ruby/test_literal.rb508
-rw-r--r--test/ruby/test_m17n.rb1690
-rw-r--r--test/ruby/test_m17n_comb.rb1644
-rw-r--r--test/ruby/test_marshal.rb713
-rw-r--r--test/ruby/test_math.rb340
-rw-r--r--test/ruby/test_metaclass.rb168
-rw-r--r--test/ruby/test_method.rb919
-rw-r--r--test/ruby/test_mixed_unicode_escapes.rb26
-rw-r--r--test/ruby/test_module.rb2213
-rw-r--r--test/ruby/test_not.rb13
-rw-r--r--test/ruby/test_notimp.rb85
-rw-r--r--test/ruby/test_numeric.rb339
-rw-r--r--test/ruby/test_object.rb892
-rw-r--r--test/ruby/test_objectspace.rb124
-rw-r--r--test/ruby/test_optimization.rb426
-rw-r--r--test/ruby/test_pack.rb775
-rw-r--r--test/ruby/test_parse.rb882
-rw-r--r--test/ruby/test_path.rb61
-rw-r--r--test/ruby/test_pipe.rb18
-rw-r--r--test/ruby/test_primitive.rb424
-rw-r--r--test/ruby/test_proc.rb1279
-rw-r--r--test/ruby/test_process.rb2238
-rw-r--r--test/ruby/test_rand.rb570
-rw-r--r--test/ruby/test_range.rb617
-rw-r--r--test/ruby/test_rational.rb943
-rw-r--r--test/ruby/test_rational2.rb1387
-rw-r--r--test/ruby/test_readpartial.rb19
-rw-r--r--test/ruby/test_refinement.rb1628
-rw-r--r--test/ruby/test_regexp.rb1106
-rw-r--r--test/ruby/test_require.rb765
-rw-r--r--test/ruby/test_rubyoptions.rb839
-rw-r--r--test/ruby/test_rubyvm.rb18
-rw-r--r--test/ruby/test_settracefunc.rb1576
-rw-r--r--test/ruby/test_signal.rb322
-rw-r--r--test/ruby/test_sleep.rb17
-rw-r--r--test/ruby/test_sprintf.rb431
-rw-r--r--test/ruby/test_sprintf_comb.rb554
-rw-r--r--test/ruby/test_string.rb2293
-rw-r--r--test/ruby/test_stringchar.rb66
-rw-r--r--test/ruby/test_struct.rb377
-rw-r--r--test/ruby/test_super.rb405
-rw-r--r--test/ruby/test_symbol.rb327
-rw-r--r--test/ruby/test_syntax.rb845
-rw-r--r--test/ruby/test_system.rb186
-rw-r--r--test/ruby/test_thread.rb1091
-rw-r--r--test/ruby/test_threadgroup.rb58
-rw-r--r--test/ruby/test_time.rb996
-rw-r--r--test/ruby/test_time_tz.rb403
-rw-r--r--test/ruby/test_trace.rb47
-rw-r--r--test/ruby/test_transcode.rb2129
-rw-r--r--test/ruby/test_undef.rb38
-rw-r--r--test/ruby/test_unicode_escape.rb271
-rw-r--r--test/ruby/test_variable.rb106
-rw-r--r--test/ruby/test_weakmap.rb134
-rw-r--r--test/ruby/test_whileuntil.rb114
-rw-r--r--test/ruby/test_yield.rb425
-rw-r--r--test/ruby/ut_eof.rb17
-rw-r--r--test/rubygems/alternate_cert.pem18
-rw-r--r--test/rubygems/alternate_cert_32.pem18
-rw-r--r--test/rubygems/alternate_key.pem27
-rw-r--r--test/rubygems/bad_rake.rb2
-rw-r--r--test/rubygems/bogussources.rb9
-rw-r--r--test/rubygems/ca_cert.pem68
-rw-r--r--test/rubygems/child_cert.pem18
-rw-r--r--test/rubygems/child_cert_32.pem18
-rw-r--r--test/rubygems/child_key.pem27
-rw-r--r--test/rubygems/client.pem49
-rw-r--r--test/rubygems/data/gem-private_key.pem27
-rw-r--r--test/rubygems/data/gem-public_cert.pem20
-rw-r--r--test/rubygems/data/null-type.gemspec.rzbin554 -> 0 bytes-rw-r--r--test/rubygems/encrypted_private_key.pem30
-rw-r--r--test/rubygems/expired_cert.pem18
-rw-r--r--test/rubygems/fake_certlib/openssl.rb8
-rw-r--r--test/rubygems/fix_openssl_warnings.rb13
-rw-r--r--test/rubygems/foo/discover.rb1
-rw-r--r--test/rubygems/future_cert.pem18
-rw-r--r--test/rubygems/future_cert_32.pem18
-rw-r--r--test/rubygems/good_rake.rb2
-rw-r--r--test/rubygems/grandchild_cert.pem18
-rw-r--r--test/rubygems/grandchild_cert_32.pem18
-rw-r--r--test/rubygems/grandchild_key.pem27
-rw-r--r--test/rubygems/invalid_client.pem49
-rw-r--r--test/rubygems/invalid_issuer_cert.pem18
-rw-r--r--test/rubygems/invalid_issuer_cert_32.pem18
-rw-r--r--test/rubygems/invalid_key.pem27
-rw-r--r--test/rubygems/invalid_signer_cert.pem18
-rw-r--r--test/rubygems/invalid_signer_cert_32.pem18
-rw-r--r--test/rubygems/invalidchild_cert.pem18
-rw-r--r--test/rubygems/invalidchild_cert_32.pem18
-rw-r--r--test/rubygems/invalidchild_key.pem27
-rw-r--r--test/rubygems/plugin/exception/rubygems_plugin.rb3
-rw-r--r--test/rubygems/plugin/load/rubygems_plugin.rb4
-rw-r--r--test/rubygems/plugin/standarderror/rubygems_plugin.rb3
-rw-r--r--test/rubygems/private_key.pem27
-rw-r--r--test/rubygems/public_cert.pem18
-rw-r--r--test/rubygems/public_cert_32.pem18
-rw-r--r--test/rubygems/public_key.pem9
-rw-r--r--test/rubygems/rubygems/commands/crash_command.rb6
-rw-r--r--test/rubygems/rubygems_plugin.rb22
-rw-r--r--test/rubygems/sff/discover.rb1
-rw-r--r--test/rubygems/simple_gem.rb67
-rw-r--r--test/rubygems/specifications/bar-0.0.2.gemspec9
-rw-r--r--test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspecbin269 -> 0 bytes-rw-r--r--test/rubygems/specifications/foo-0.0.1.gemspecbin269 -> 0 bytes-rw-r--r--test/rubygems/test_bundled_ca.rb57
-rw-r--r--test/rubygems/test_config.rb24
-rw-r--r--test/rubygems/test_deprecate.rb77
-rw-r--r--test/rubygems/test_gem.rb1621
-rw-r--r--test/rubygems/test_gem_available_set.rb130
-rw-r--r--test/rubygems/test_gem_command.rb244
-rw-r--r--test/rubygems/test_gem_command_manager.rb264
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb111
-rw-r--r--test/rubygems/test_gem_commands_cert_command.rb671
-rw-r--r--test/rubygems/test_gem_commands_check_command.rb69
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb169
-rw-r--r--test/rubygems/test_gem_commands_contents_command.rb240
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb230
-rw-r--r--test/rubygems/test_gem_commands_environment_command.rb154
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb127
-rw-r--r--test/rubygems/test_gem_commands_generate_index_command.rb51
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb75
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb987
-rw-r--r--test/rubygems/test_gem_commands_list_command.rb34
-rw-r--r--test/rubygems/test_gem_commands_lock_command.rb69
-rw-r--r--test/rubygems/test_gem_commands_mirror.rb20
-rw-r--r--test/rubygems/test_gem_commands_open_command.rb53
-rw-r--r--test/rubygems/test_gem_commands_outdated_command.rb33
-rw-r--r--test/rubygems/test_gem_commands_owner_command.rb205
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb491
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb263
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb634
-rw-r--r--test/rubygems/test_gem_commands_search_command.rb18
-rw-r--r--test/rubygems/test_gem_commands_server_command.rb60
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb137
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb249
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb251
-rw-r--r--test/rubygems/test_gem_commands_stale_command.rb43
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb283
-rw-r--r--test/rubygems/test_gem_commands_unpack_command.rb209
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb514
-rw-r--r--test/rubygems/test_gem_commands_which_command.rb87
-rw-r--r--test/rubygems/test_gem_commands_yank_command.rb98
-rw-r--r--test/rubygems/test_gem_config_file.rb468
-rw-r--r--test/rubygems/test_gem_dependency.rb362
-rw-r--r--test/rubygems/test_gem_dependency_installer.rb1235
-rw-r--r--test/rubygems/test_gem_dependency_list.rb260
-rw-r--r--test/rubygems/test_gem_dependency_resolution_error.rb29
-rw-r--r--test/rubygems/test_gem_doctor.rb169
-rw-r--r--test/rubygems/test_gem_ext_builder.rb337
-rw-r--r--test/rubygems/test_gem_ext_cmake_builder.rb85
-rw-r--r--test/rubygems/test_gem_ext_configure_builder.rb87
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb211
-rw-r--r--test/rubygems/test_gem_ext_rake_builder.rb65
-rw-r--r--test/rubygems/test_gem_gem_runner.rb69
-rw-r--r--test/rubygems/test_gem_gemcutter_utilities.rb235
-rw-r--r--test/rubygems/test_gem_impossible_dependencies_error.rb62
-rw-r--r--test/rubygems/test_gem_indexer.rb367
-rw-r--r--test/rubygems/test_gem_install_update_options.rb185
-rw-r--r--test/rubygems/test_gem_installer.rb1540
-rw-r--r--test/rubygems/test_gem_local_remote_options.rb134
-rw-r--r--test/rubygems/test_gem_name_tuple.rb45
-rw-r--r--test/rubygems/test_gem_package.rb870
-rw-r--r--test/rubygems/test_gem_package_old.rb90
-rw-r--r--test/rubygems/test_gem_package_tar_header.rb147
-rw-r--r--test/rubygems/test_gem_package_tar_reader.rb90
-rw-r--r--test/rubygems/test_gem_package_tar_reader_entry.rb142
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb264
-rw-r--r--test/rubygems/test_gem_package_task.rb84
-rw-r--r--test/rubygems/test_gem_path_support.rb85
-rw-r--r--test/rubygems/test_gem_platform.rb308
-rw-r--r--test/rubygems/test_gem_rdoc.rb270
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb1049
-rw-r--r--test/rubygems/test_gem_request.rb363
-rw-r--r--test/rubygems/test_gem_request_connection_pools.rb130
-rw-r--r--test/rubygems/test_gem_request_set.rb595
-rw-r--r--test/rubygems/test_gem_request_set_gem_dependency_api.rb843
-rw-r--r--test/rubygems/test_gem_request_set_lockfile.rb470
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_parser.rb544
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_tokenizer.rb306
-rw-r--r--test/rubygems/test_gem_requirement.rb387
-rw-r--r--test/rubygems/test_gem_resolver.rb715
-rw-r--r--test/rubygems/test_gem_resolver_activation_request.rb74
-rw-r--r--test/rubygems/test_gem_resolver_api_set.rb209
-rw-r--r--test/rubygems/test_gem_resolver_api_specification.rb145
-rw-r--r--test/rubygems/test_gem_resolver_best_set.rb138
-rw-r--r--test/rubygems/test_gem_resolver_composed_set.rb46
-rw-r--r--test/rubygems/test_gem_resolver_conflict.rb88
-rw-r--r--test/rubygems/test_gem_resolver_dependency_request.rb85
-rw-r--r--test/rubygems/test_gem_resolver_git_set.rb190
-rw-r--r--test/rubygems/test_gem_resolver_git_specification.rb114
-rw-r--r--test/rubygems/test_gem_resolver_index_set.rb90
-rw-r--r--test/rubygems/test_gem_resolver_index_specification.rb90
-rw-r--r--test/rubygems/test_gem_resolver_installed_specification.rb50
-rw-r--r--test/rubygems/test_gem_resolver_installer_set.rb258
-rw-r--r--test/rubygems/test_gem_resolver_local_specification.rb46
-rw-r--r--test/rubygems/test_gem_resolver_lock_set.rb64
-rw-r--r--test/rubygems/test_gem_resolver_lock_specification.rb100
-rw-r--r--test/rubygems/test_gem_resolver_requirement_list.rb21
-rw-r--r--test/rubygems/test_gem_resolver_specification.rb65
-rw-r--r--test/rubygems/test_gem_resolver_vendor_set.rb84
-rw-r--r--test/rubygems/test_gem_resolver_vendor_specification.rb84
-rw-r--r--test/rubygems/test_gem_security.rb307
-rw-r--r--test/rubygems/test_gem_security_policy.rb541
-rw-r--r--test/rubygems/test_gem_security_signer.rb209
-rw-r--r--test/rubygems/test_gem_security_trust_dir.rb101
-rw-r--r--test/rubygems/test_gem_server.rb409
-rw-r--r--test/rubygems/test_gem_silent_ui.rb117
-rw-r--r--test/rubygems/test_gem_source.rb242
-rw-r--r--test/rubygems/test_gem_source_fetch_problem.rb20
-rw-r--r--test/rubygems/test_gem_source_git.rb309
-rw-r--r--test/rubygems/test_gem_source_installed.rb37
-rw-r--r--test/rubygems/test_gem_source_list.rb112
-rw-r--r--test/rubygems/test_gem_source_local.rb107
-rw-r--r--test/rubygems/test_gem_source_lock.rb115
-rw-r--r--test/rubygems/test_gem_source_specific_file.rb76
-rw-r--r--test/rubygems/test_gem_source_vendor.rb32
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb311
-rw-r--r--test/rubygems/test_gem_specification.rb3504
-rw-r--r--test/rubygems/test_gem_stream_ui.rb239
-rw-r--r--test/rubygems/test_gem_stub_specification.rb217
-rw-r--r--test/rubygems/test_gem_text.rb77
-rw-r--r--test/rubygems/test_gem_uninstaller.rb485
-rw-r--r--test/rubygems/test_gem_unsatisfiable_dependency_error.rb33
-rw-r--r--test/rubygems/test_gem_uri_formatter.rb29
-rw-r--r--test/rubygems/test_gem_util.rb40
-rw-r--r--test/rubygems/test_gem_validator.rb46
-rw-r--r--test/rubygems/test_gem_version.rb214
-rw-r--r--test/rubygems/test_gem_version_option.rb152
-rw-r--r--test/rubygems/test_kernel.rb86
-rw-r--r--test/rubygems/test_require.rb322
-rw-r--r--test/rubygems/wrong_key_cert.pem18
-rw-r--r--test/rubygems/wrong_key_cert_32.pem18
-rw-r--r--test/runner.rb46
-rw-r--r--test/scanf/data.txt6
-rw-r--r--test/scanf/test_scanf.rb304
-rw-r--r--test/scanf/test_scanfblocks.rb82
-rw-r--r--test/scanf/test_scanfio.rb21
-rw-r--r--test/sdbm/test_sdbm.rb146
-rw-r--r--test/shell/test_command_processor.rb69
-rw-r--r--test/soap/asp.net/hello.wsdl96
-rw-r--r--test/soap/asp.net/test_aspdotnet.rb111
-rw-r--r--test/soap/calc/calc.rb17
-rw-r--r--test/soap/calc/calc2.rb29
-rw-r--r--test/soap/calc/server.cgi13
-rw-r--r--test/soap/calc/server.rb17
-rw-r--r--test/soap/calc/server2.rb20
-rw-r--r--test/soap/calc/test_calc.rb49
-rw-r--r--test/soap/calc/test_calc2.rb53
-rw-r--r--test/soap/calc/test_calc_cgi.rb69
-rw-r--r--test/soap/fault/test_customfault.rb58
-rw-r--r--test/soap/header/server.cgi119
-rw-r--r--test/soap/header/test_authheader.rb240
-rw-r--r--test/soap/header/test_authheader_cgi.rb121
-rw-r--r--test/soap/header/test_simplehandler.rb116
-rw-r--r--test/soap/helloworld/hw_s.rb16
-rw-r--r--test/soap/helloworld/test_helloworld.rb40
-rw-r--r--test/soap/marshal/test_digraph.rb56
-rw-r--r--test/soap/marshal/test_marshal.rb26
-rw-r--r--test/soap/marshal/test_struct.rb47
-rw-r--r--test/soap/ssl/README1
-rw-r--r--test/soap/ssl/ca.cert23
-rw-r--r--test/soap/ssl/client.cert19
-rw-r--r--test/soap/ssl/client.key15
-rw-r--r--test/soap/ssl/server.cert (renamed from test/rubygems/ssl_cert.pem)0
-rw-r--r--test/soap/ssl/server.key (renamed from test/rubygems/ssl_key.pem)0
-rw-r--r--test/soap/ssl/sslsvr.rb57
-rw-r--r--test/soap/ssl/subca.cert21
-rw-r--r--test/soap/ssl/test_ssl.rb204
-rw-r--r--test/soap/struct/test_struct.rb77
-rw-r--r--test/soap/swa/test_file.rb73
-rw-r--r--test/soap/test_basetype.rb970
-rw-r--r--test/soap/test_envelopenamespace.rb92
-rw-r--r--test/soap/test_httpconfigloader.rb39
-rw-r--r--test/soap/test_mapping.rb59
-rw-r--r--test/soap/test_no_indent.rb86
-rw-r--r--test/soap/test_property.rb424
-rw-r--r--test/soap/test_soapelement.rb122
-rw-r--r--test/soap/test_streamhandler.rb209
-rw-r--r--test/soap/test_styleuse.rb333
-rw-r--r--test/soap/wsdlDriver/README.txt2
-rw-r--r--test/soap/wsdlDriver/calc.wsdl126
-rw-r--r--test/soap/wsdlDriver/document.wsdl54
-rw-r--r--test/soap/wsdlDriver/echo_version.rb20
-rw-r--r--test/soap/wsdlDriver/simpletype.wsdl63
-rw-r--r--test/soap/wsdlDriver/test_calc.rb100
-rw-r--r--test/soap/wsdlDriver/test_document.rb78
-rw-r--r--test/soap/wsdlDriver/test_simpletype.rb87
-rw-r--r--test/socket/test_addrinfo.rb660
-rw-r--r--test/socket/test_ancdata.rb68
-rw-r--r--test/socket/test_basicsocket.rb155
-rw-r--r--test/socket/test_nonblock.rb276
-rw-r--r--test/socket/test_socket.rb747
-rw-r--r--test/socket/test_sockopt.rb80
-rw-r--r--test/socket/test_tcp.rb89
-rw-r--r--test/socket/test_udp.rb101
-rw-r--r--test/socket/test_unix.rb597
-rw-r--r--test/stringio/test_stringio.rb633
-rw-r--r--test/strscan/test_stringscanner.rb242
-rw-r--r--test/syslog/test_syslog_logger.rb573
-rw-r--r--test/test_abbrev.rb55
-rw-r--r--test/test_cmath.rb76
-rw-r--r--test/test_delegate.rb241
-rw-r--r--test/test_find.rb302
-rw-r--r--test/test_forwardable.rb248
-rw-r--r--test/test_ipaddr.rb274
-rw-r--r--test/test_mathn.rb120
-rw-r--r--test/test_mutex_m.rb27
-rw-r--r--test/test_observer.rb66
-rw-r--r--test/test_open3.rb287
-rw-r--r--test/test_pp.rb197
-rw-r--r--test/test_prettyprint.rb521
-rw-r--r--test/test_prime.rb199
-rw-r--r--test/test_pstore.rb145
-rw-r--r--test/test_pty.rb242
-rw-r--r--test/test_rbconfig.rb54
-rw-r--r--test/test_securerandom.rb187
-rw-r--r--test/test_set.rb736
-rw-r--r--test/test_shellwords.rb114
-rw-r--r--test/test_singleton.rb104
-rw-r--r--test/test_syslog.rb190
-rw-r--r--test/test_tempfile.rb349
-rw-r--r--test/test_time.rb502
-rw-r--r--test/test_timeout.rb106
-rw-r--r--test/test_tmpdir.rb59
-rw-r--r--test/test_tracer.rb56
-rw-r--r--test/test_tsort.rb115
-rw-r--r--test/test_unicode_normalize.rb185
-rw-r--r--test/test_weakref.rb72
-rw-r--r--test/test_win32api.rb24
-rw-r--r--test/testunit/collector/test_dir.rb406
-rw-r--r--test/testunit/collector/test_objectspace.rb98
-rw-r--r--test/testunit/runit/test_assert.rb402
-rw-r--r--test/testunit/runit/test_testcase.rb91
-rw-r--r--test/testunit/runit/test_testresult.rb144
-rw-r--r--test/testunit/runit/test_testsuite.rb49
-rw-r--r--test/testunit/test4test_hideskip.rb10
-rw-r--r--test/testunit/test4test_redefinition.rb14
-rw-r--r--test/testunit/test4test_sorting.rb18
-rw-r--r--test/testunit/test_assertion.rb9
-rw-r--r--test/testunit/test_assertions.rb528
-rw-r--r--test/testunit/test_error.rb26
-rw-r--r--test/testunit/test_failure.rb33
-rw-r--r--test/testunit/test_hideskip.rb17
-rw-r--r--test/testunit/test_parallel.rb192
-rw-r--r--test/testunit/test_redefinition.rb16
-rw-r--r--test/testunit/test_sorting.rb18
-rw-r--r--test/testunit/test_testcase.rb275
-rw-r--r--test/testunit/test_testresult.rb104
-rw-r--r--test/testunit/test_testsuite.rb129
-rw-r--r--test/testunit/tests_for_parallel/ptest_first.rb8
-rw-r--r--test/testunit/tests_for_parallel/ptest_forth.rb30
-rw-r--r--test/testunit/tests_for_parallel/ptest_second.rb12
-rw-r--r--test/testunit/tests_for_parallel/ptest_third.rb11
-rw-r--r--test/testunit/tests_for_parallel/runner.rb14
-rw-r--r--test/testunit/util/test_backtracefilter.rb41
-rw-r--r--test/testunit/util/test_observable.rb102
-rw-r--r--test/testunit/util/test_procwrapper.rb36
-rwxr-xr-xtest/thread/lbtest.rb51
-rw-r--r--test/thread/test_cv.rb222
-rw-r--r--test/thread/test_queue.rb544
-rw-r--r--test/thread/test_sync.rb64
-rw-r--r--test/thread/test_thread.rb119
-rw-r--r--test/uri/test_common.rb173
-rw-r--r--test/uri/test_ftp.rb31
-rw-r--r--test/uri/test_generic.rb322
-rw-r--r--test/uri/test_http.rb6
-rw-r--r--test/uri/test_ldap.rb33
-rw-r--r--test/uri/test_mailto.rb44
-rw-r--r--test/uri/test_parser.rb48
-rw-r--r--test/webrick/test_cgi.rb124
-rw-r--r--test/webrick/test_cookie.rb28
-rw-r--r--test/webrick/test_do_not_reverse_lookup.rb71
-rw-r--r--test/webrick/test_filehandler.rb211
-rw-r--r--test/webrick/test_htmlutils.rb21
-rw-r--r--test/webrick/test_httpauth.rb203
-rw-r--r--test/webrick/test_httpproxy.rb285
-rw-r--r--test/webrick/test_httprequest.rb146
-rw-r--r--test/webrick/test_httpresponse.rb150
-rw-r--r--test/webrick/test_httpserver.rb225
-rw-r--r--test/webrick/test_httputils.rb41
-rw-r--r--test/webrick/test_httpversion.rb1
-rw-r--r--test/webrick/test_server.rb130
-rw-r--r--test/webrick/test_utils.rb105
-rw-r--r--test/webrick/utils.rb63
-rw-r--r--test/webrick/webrick.cgi2
-rwxr-xr-x[-rw-r--r--]test/webrick/webrick_long_filename.cgi2
-rw-r--r--test/win32ole/err_in_callback.rb10
-rw-r--r--test/win32ole/orig_data.csv5
-rw-r--r--test/win32ole/test_err_in_callback.rb56
-rw-r--r--test/win32ole/test_folderitem2_invokeverb.rb66
-rw-r--r--test/win32ole/test_nil2vtempty.rb37
-rw-r--r--test/win32ole/test_ole_methods.rb37
-rw-r--r--test/win32ole/test_propertyputref.rb31
-rw-r--r--test/win32ole/test_thread.rb34
-rw-r--r--test/win32ole/test_win32ole.rb568
-rw-r--r--test/win32ole/test_win32ole_event.rb401
-rw-r--r--test/win32ole/test_win32ole_method.rb147
-rw-r--r--test/win32ole/test_win32ole_param.rb107
-rw-r--r--test/win32ole/test_win32ole_record.rb213
-rw-r--r--test/win32ole/test_win32ole_type.rb250
-rw-r--r--test/win32ole/test_win32ole_typelib.rb117
-rw-r--r--test/win32ole/test_win32ole_variable.rb62
-rw-r--r--test/win32ole/test_win32ole_variant.rb722
-rw-r--r--test/win32ole/test_win32ole_variant_m.rb36
-rw-r--r--test/win32ole/test_win32ole_variant_outarg.rb69
-rw-r--r--test/win32ole/test_word.rb68
-rw-r--r--test/wsdl/any/any.wsdl50
-rw-r--r--test/wsdl/any/expectedDriver.rb54
-rw-r--r--test/wsdl/any/expectedEcho.rb14
-rw-r--r--test/wsdl/any/expectedService.rb52
-rw-r--r--test/wsdl/any/test_any.rb58
-rw-r--r--test/wsdl/axisArray/axisArray.wsdl60
-rw-r--r--test/wsdl/axisArray/itemList.rb27
-rw-r--r--test/wsdl/axisArray/test_axisarray.rb69
-rw-r--r--test/wsdl/datetime/DatetimeService.rb44
-rw-r--r--test/wsdl/datetime/datetime.rb0
-rw-r--r--test/wsdl/datetime/datetime.wsdl45
-rw-r--r--test/wsdl/datetime/datetimeServant.rb21
-rw-r--r--test/wsdl/datetime/test_datetime.rb82
-rw-r--r--test/wsdl/document/document.wsdl74
-rw-r--r--test/wsdl/document/echo.rb92
-rw-r--r--test/wsdl/document/number.wsdl54
-rw-r--r--test/wsdl/document/ping_nosoapaction.wsdl66
-rw-r--r--test/wsdl/document/test_nosoapaction.rb109
-rw-r--r--test/wsdl/document/test_number.rb99
-rw-r--r--test/wsdl/document/test_rpc.rb177
-rw-r--r--test/wsdl/emptycomplextype.wsdl31
-rw-r--r--test/wsdl/map/map.wsdl92
-rw-r--r--test/wsdl/map/map.xml43
-rw-r--r--test/wsdl/map/test_map.rb99
-rw-r--r--test/wsdl/marshal/person.wsdl21
-rw-r--r--test/wsdl/marshal/person_org.rb22
-rw-r--r--test/wsdl/marshal/test_wsdlmarshal.rb80
-rw-r--r--test/wsdl/multiplefault.wsdl68
-rw-r--r--test/wsdl/qualified/lp.rb0
-rw-r--r--test/wsdl/qualified/lp.wsdl47
-rw-r--r--test/wsdl/qualified/lp.xsd26
-rw-r--r--test/wsdl/qualified/np.wsdl50
-rw-r--r--test/wsdl/qualified/test_qualified.rb154
-rw-r--r--test/wsdl/qualified/test_unqualified.rb143
-rw-r--r--test/wsdl/raa/RAA.rb243
-rw-r--r--test/wsdl/raa/RAAServant.rb99
-rw-r--r--test/wsdl/raa/RAAService.rb100
-rw-r--r--test/wsdl/raa/README.txt8
-rw-r--r--test/wsdl/raa/raa.wsdl264
-rw-r--r--test/wsdl/raa/server.rb103
-rw-r--r--test/wsdl/raa/test_raa.rb71
-rw-r--r--test/wsdl/ref/expectedProduct.rb90
-rw-r--r--test/wsdl/ref/product.wsdl86
-rw-r--r--test/wsdl/ref/test_ref.rb54
-rw-r--r--test/wsdl/rpc/echoDriver.rb55
-rw-r--r--test/wsdl/rpc/echo_serviceClient.rb23
-rw-r--r--test/wsdl/rpc/rpc.wsdl75
-rw-r--r--test/wsdl/rpc/test-rpc-lit.wsdl364
-rw-r--r--test/wsdl/rpc/test-rpc-lit12.wsdl455
-rw-r--r--test/wsdl/rpc/test_rpc.rb118
-rw-r--r--test/wsdl/rpc/test_rpc_lit.rb399
-rw-r--r--test/wsdl/simpletype/rpc/expectedClient.rb34
-rw-r--r--test/wsdl/simpletype/rpc/expectedDriver.rb62
-rw-r--r--test/wsdl/simpletype/rpc/expectedEchoVersion.rb23
-rw-r--r--test/wsdl/simpletype/rpc/expectedServant.rb32
-rw-r--r--test/wsdl/simpletype/rpc/expectedService.rb60
-rw-r--r--test/wsdl/simpletype/rpc/rpc.wsdl80
-rw-r--r--test/wsdl/simpletype/rpc/test_rpc.rb62
-rw-r--r--test/wsdl/simpletype/simpletype.wsdl95
-rw-r--r--test/wsdl/simpletype/test_simpletype.rb99
-rw-r--r--test/wsdl/soap/soapbodyparts.wsdl103
-rw-r--r--test/wsdl/soap/test_soapbodyparts.rb79
-rw-r--r--test/wsdl/test_emptycomplextype.rb21
-rw-r--r--test/wsdl/test_fault.rb51
-rw-r--r--test/wsdl/test_multiplefault.rb39
-rw-r--r--test/xmlrpc/data/blog.xml18
-rw-r--r--test/xmlrpc/htpasswd2
-rw-r--r--test/xmlrpc/test_client.rb323
-rw-r--r--test/xmlrpc/test_cookie.rb97
-rw-r--r--test/xmlrpc/test_datetime.rb67
-rw-r--r--test/xmlrpc/test_features.rb11
-rw-r--r--test/xmlrpc/test_marshal.rb26
-rw-r--r--test/xmlrpc/test_parser.rb21
-rw-r--r--test/xmlrpc/test_webrick_server.rb78
-rw-r--r--test/xmlrpc/webrick_testing.rb69
-rw-r--r--test/xsd/codegen/test_classdef.rb214
-rw-r--r--test/xsd/noencoding.xml4
-rw-r--r--test/xsd/test_noencoding.rb32
-rw-r--r--test/xsd/test_xmlschemaparser.rb22
-rw-r--r--test/xsd/test_xsd.rb1511
-rw-r--r--test/xsd/xmlschema.xml12
-rw-r--r--test/yaml/test_yaml.rb1292
-rw-r--r--test/zlib/test_zlib.rb1097
-rw-r--r--thread.c4835
-rw-r--r--thread_pthread.c1760
-rw-r--r--thread_pthread.h54
-rw-r--r--thread_sync.c1313
-rw-r--r--thread_win32.c802
-rw-r--r--thread_win32.h36
-rw-r--r--time.c5470
-rw-r--r--timev.h42
-rw-r--r--tool/asm_parse.rb51
-rwxr-xr-xtool/bisect.sh42
-rwxr-xr-xtool/build-transcode16
-rwxr-xr-xtool/change_maker.rb34
-rwxr-xr-xtool/checksum.rb72
-rw-r--r--tool/downloader.rb214
-rw-r--r--tool/enc-emoji-citrus-gen.rb131
-rw-r--r--tool/enc-emoji4unicode.rb133
-rwxr-xr-xtool/enc-unicode.rb457
-rw-r--r--tool/eval.rb159
-rwxr-xr-xtool/expand-config.rb33
-rwxr-xr-xtool/extlibs.rb143
-rw-r--r--tool/fake.rb64
-rwxr-xr-xtool/file2lastrev.rb94
-rwxr-xr-xtool/gem-unpack.rb18
-rwxr-xr-xtool/gen_dummy_probes.rb28
-rwxr-xr-xtool/gen_ruby_tapset.rb105
-rw-r--r--tool/generic_erb.rb55
-rwxr-xr-xtool/id2token.rb24
-rwxr-xr-xtool/ifchange85
-rwxr-xr-xtool/insns2vm.rb15
-rw-r--r--tool/install-sh17
-rwxr-xr-xtool/instruction.rb1346
-rw-r--r--tool/jisx0208.rb84
-rwxr-xr-xtool/make-snapshot413
-rw-r--r--tool/make_hgraph.rb95
-rwxr-xr-xtool/mdoc2man.rb473
-rwxr-xr-xtool/merger.rb265
-rw-r--r--tool/mk_call_iseq_optimized.rb72
-rwxr-xr-xtool/mkconfig.rb306
-rwxr-xr-xtool/mkrunnable.rb125
-rwxr-xr-xtool/node_name.rb6
-rw-r--r--tool/parse.rb13
-rw-r--r--tool/probes_to_wiki.rb16
-rwxr-xr-xtool/rbinstall.rb807
-rwxr-xr-xtool/rbuninstall.rb67
-rwxr-xr-xtool/redmine-backporter.rb583
-rwxr-xr-xtool/release.sh38
-rwxr-xr-xtool/rmdirs11
-rwxr-xr-xtool/rubytest.rb30
-rwxr-xr-xtool/runruby.rb106
-rwxr-xr-xtool/strip-rdoc.rb23
-rw-r--r--tool/test/test_jisx0208.rb40
-rw-r--r--tool/transcode-tblgen.rb1114
-rwxr-xr-xtool/update-deps615
-rw-r--r--tool/vcs.rb356
-rw-r--r--tool/vpath.rb87
-rw-r--r--tool/vtlh.rb15
-rwxr-xr-xtool/ytab.sed59
-rw-r--r--transcode.c4561
-rw-r--r--transcode_data.h139
-rw-r--r--util.c1055
-rw-r--r--util.h67
-rw-r--r--variable.c2998
-rw-r--r--version.c99
-rw-r--r--version.h65
-rw-r--r--vm.c3273
-rw-r--r--vm_args.c826
-rw-r--r--vm_backtrace.c1435
-rw-r--r--vm_core.h1240
-rw-r--r--vm_debug.h37
-rw-r--r--vm_dump.c1092
-rw-r--r--vm_eval.c2206
-rw-r--r--vm_exec.c170
-rw-r--r--vm_exec.h182
-rw-r--r--vm_insnhelper.c2643
-rw-r--r--vm_insnhelper.h227
-rw-r--r--vm_method.c2103
-rw-r--r--vm_opts.h57
-rw-r--r--vm_trace.c1616
-rw-r--r--vms/config.h102
-rw-r--r--vms/vms.h10
-rw-r--r--vms/vmsruby_private.c52
-rw-r--r--vms/vmsruby_private.h7
-rw-r--r--vsnprintf.c1313
-rw-r--r--win32/Makefile.sub956
-rw-r--r--win32/README.win3283
-rwxr-xr-xwin32/configure.bat197
-rw-r--r--win32/dir.h41
-rw-r--r--win32/enc-setup.mak10
-rw-r--r--win32/file.c771
-rw-r--r--win32/file.h45
-rwxr-xr-xwin32/ifchange.bat77
-rwxr-xr-xwin32/makedirs.bat3
-rwxr-xr-xwin32/mkexports.rb189
-rwxr-xr-xwin32/resource.rb32
-rwxr-xr-xwin32/rm.bat12
-rwxr-xr-xwin32/rmdirs.bat30
-rw-r--r--win32/rtname.cmd35
-rw-r--r--win32/setup.mak216
-rw-r--r--win32/stub.c48
-rw-r--r--win32/win32.c6937
-rw-r--r--win32/win32.h560
-rw-r--r--win32/winmain.c4
-rw-r--r--wince/Makefile.sub505
-rw-r--r--wince/README.wince121
-rw-r--r--wince/assert.c11
-rw-r--r--wince/assert.h6
-rwxr-xr-xwince/configure.bat102
-rw-r--r--wince/direct.c54
-rw-r--r--wince/direct.h22
-rw-r--r--wince/errno.c11
-rw-r--r--wince/errno.h55
-rw-r--r--wince/fcntl.h42
-rw-r--r--wince/io.h76
-rw-r--r--wince/io_wce.c230
-rw-r--r--wince/mkconfig_wce.rb7
-rw-r--r--wince/mkexports.rb35
-rw-r--r--wince/process.h46
-rw-r--r--wince/process_wce.c47
-rw-r--r--wince/resource.rb96
-rw-r--r--wince/setup.mak245
-rw-r--r--wince/signal.h71
-rw-r--r--wince/signal_wce.c26
-rw-r--r--wince/stddef.h5
-rw-r--r--wince/stdio.c36
-rw-r--r--wince/stdlib.c57
-rw-r--r--wince/string_wce.c89
-rw-r--r--wince/sys/stat.c102
-rw-r--r--wince/sys/stat.h68
-rw-r--r--wince/sys/timeb.c25
-rw-r--r--wince/sys/timeb.h26
-rw-r--r--wince/sys/types.h60
-rw-r--r--wince/sys/utime.c44
-rw-r--r--wince/sys/utime.h27
-rw-r--r--wince/time.h63
-rw-r--r--wince/time_wce.c301
-rw-r--r--wince/varargs.h34
-rw-r--r--wince/wince.c583
-rw-r--r--wince/wince.h191
-rw-r--r--wince/wincemain.c19
-rw-r--r--wince/wincon.h7
-rw-r--r--wince/winsock2.c338
-rw-r--r--x68/_dtos18.c250
-rw-r--r--x68/_round.c45
-rw-r--r--x68/fconvert.c81
-rw-r--r--x68/select.c167
4616 files changed, 268214 insertions, 1488151 deletions
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000000..a72211d03f
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,48 @@
+*.bak
+*.orig
+*.rej
+*.sav
+*~
+.*.list
+.*.time
+.ccmalloc
+.ppack
+.ext
+.git
+.svn
+.pc
+COPYING.LIB
+ChangeLog.pre-alpha
+ChangeLog.pre1_1
+Makefile
+README.fat-patch
+README.v6
+README.atheos
+archive
+autom4te*.cache
+automake
+beos
+config.cache
+config.h
+config.h.in
+config.log
+config.status
+configure
+libruby.so.*
+miniruby
+newdate.rb
+newver.rb
+parse.c
+patches
+ppack
+preview
+rbconfig.rb
+repack
+riscos
+rubicon
+ruby
+ruby-man.rd.gz
+tmp
+web
+y.output
+y.tab.c
diff --git a/.document b/.document
index fb27ba325d..230c50e387 100644
--- a/.document
+++ b/.document
@@ -6,21 +6,11 @@
# Process all the C source files
*.c
-# prelude
-prelude.rb
-
# the lib/ directory (which has its own .document file)
-lib
-
-# and some of the ext/ directory (which has its own .document file)
-ext
-# rdoc files
-ChangeLog
+lib
-NEWS
-README.md
-README.ja.md
+# and some of the ext/ directory (which has its own .document file)
-doc
+ext
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 67abf4b978..0000000000
--- a/.editorconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-root = true
-
-[*]
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-tab_width = 8
-indent_style = tab
-indent_size = 4
-
-[**.bat]
-end_of_line = crlf
-
-[**.rb]
-indent_style = space
-indent_size = 2
diff --git a/.gdbinit b/.gdbinit
deleted file mode 100644
index 03c2b653cb..0000000000
--- a/.gdbinit
+++ /dev/null
@@ -1,966 +0,0 @@
-define hook-run
- set $color_type = 0
- set $color_highlite = 0
- set $color_end = 0
-end
-
-define ruby_gdb_init
- if !$color_type
- set $color_type = "\033[31m"
- end
- if !$color_highlite
- set $color_highlite = "\033[36m"
- end
- if !$color_end
- set $color_end = "\033[m"
- end
- if ruby_dummy_gdb_enums.special_consts
- end
-end
-
-# set prompt \033[36m(gdb)\033[m\040
-
-define rp
- ruby_gdb_init
- if (VALUE)($arg0) & RUBY_FIXNUM_FLAG
- printf "FIXNUM: %ld\n", (long)($arg0) >> 1
- else
- if ((VALUE)($arg0) & ~(~(VALUE)0<<RUBY_SPECIAL_SHIFT)) == RUBY_SYMBOL_FLAG
- set $id = (($arg0) >> RUBY_SPECIAL_SHIFT)
- printf "%sSYMBOL%s: ", $color_type, $color_end
- rp_id $id
- else
- if ($arg0) == RUBY_Qfalse
- echo false\n
- else
- if ($arg0) == RUBY_Qtrue
- echo true\n
- else
- if ($arg0) == RUBY_Qnil
- echo nil\n
- else
- if ($arg0) == RUBY_Qundef
- echo undef\n
- else
- if (VALUE)($arg0) & RUBY_IMMEDIATE_MASK
- if ((VALUE)($arg0) & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG
- printf "%sFLONUM%s: %g\n", $color_type, $color_end, (double)rb_float_value($arg0)
- else
- echo immediate\n
- end
- else
- set $flags = ((struct RBasic*)($arg0))->flags
- if ($flags & RUBY_FL_PROMOTED) == RUBY_FL_PROMOTED
- printf "[PROMOTED] "
- end
- if ($flags & RUBY_T_MASK) == RUBY_T_NONE
- printf "%sT_NONE%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_NIL
- printf "%sT_NIL%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_OBJECT
- printf "%sT_OBJECT%s: ", $color_type, $color_end
- print (struct RObject *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_CLASS
- printf "%sT_CLASS%s%s: ", $color_type, ($flags & RUBY_FL_SINGLETON) ? "*" : "", $color_end
- rp_class $arg0
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_ICLASS
- printf "%sT_ICLASS%s: ", $color_type, $color_end
- rp_class $arg0
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_MODULE
- printf "%sT_MODULE%s: ", $color_type, $color_end
- rp_class $arg0
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_FLOAT
- printf "%sT_FLOAT%s: %.16g ", $color_type, $color_end, (((struct RFloat*)($arg0))->float_value)
- print (struct RFloat *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_STRING
- printf "%sT_STRING%s: ", $color_type, $color_end
- rp_string $arg0 $flags
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_REGEXP
- set $regsrc = ((struct RRegexp*)($arg0))->src
- set $rsflags = ((struct RBasic*)$regsrc)->flags
- printf "%sT_REGEXP%s: ", $color_type, $color_end
- set print address off
- output (char *)(($rsflags & RUBY_FL_USER1) ? \
- ((struct RString*)$regsrc)->as.heap.ptr : \
- ((struct RString*)$regsrc)->as.ary)
- set print address on
- printf " len:%ld ", ($rsflags & RUBY_FL_USER1) ? \
- ((struct RString*)$regsrc)->as.heap.len : \
- (($rsflags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
- if $flags & RUBY_FL_USER6
- printf "(none) "
- end
- if $flags & RUBY_FL_USER5
- printf "(literal) "
- end
- if $flags & RUBY_FL_USER4
- printf "(fixed) "
- end
- printf "encoding:%d ", ($flags & RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT
- print (struct RRegexp *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_ARRAY
- if ($flags & RUBY_FL_USER1)
- set $len = (($flags & (RUBY_FL_USER3|RUBY_FL_USER4)) >> (RUBY_FL_USHIFT+3))
- printf "%sT_ARRAY%s: len=%ld ", $color_type, $color_end, $len
- printf "(embed) "
- if ($len == 0)
- printf "{(empty)} "
- else
- output/x *((VALUE*)((struct RArray*)($arg0))->as.ary) @ $len
- printf " "
- end
- else
- set $len = ((struct RArray*)($arg0))->as.heap.len
- printf "%sT_ARRAY%s: len=%ld ", $color_type, $color_end, $len
- if ($flags & RUBY_FL_USER2)
- printf "(shared) shared="
- output/x ((struct RArray*)($arg0))->as.heap.aux.shared
- printf " "
- else
- printf "(ownership) capa=%ld ", ((struct RArray*)($arg0))->as.heap.aux.capa
- end
- if ($len == 0)
- printf "{(empty)} "
- else
- output/x *((VALUE*)((struct RArray*)($arg0))->as.heap.ptr) @ $len
- printf " "
- end
- end
- print (struct RArray *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_FIXNUM
- printf "%sT_FIXNUM%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_HASH
- printf "%sT_HASH%s: ", $color_type, $color_end,
- if ((struct RHash *)($arg0))->ntbl
- printf "len=%ld ", ((struct RHash *)($arg0))->ntbl->num_entries
- end
- print (struct RHash *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_STRUCT
- printf "%sT_STRUCT%s: len=%ld ", $color_type, $color_end, \
- (($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
- ($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) >> (RUBY_FL_USHIFT+1) : \
- ((struct RStruct *)($arg0))->as.heap.len)
- print (struct RStruct *)($arg0)
- x/xw (($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
- ((struct RStruct *)($arg0))->as.ary : \
- ((struct RStruct *)($arg0))->as.heap.ptr)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_BIGNUM
- printf "%sT_BIGNUM%s: sign=%d len=%ld ", $color_type, $color_end, \
- (($flags & RUBY_FL_USER1) != 0), \
- (($flags & RUBY_FL_USER2) ? \
- ($flags & (RUBY_FL_USER5|RUBY_FL_USER4|RUBY_FL_USER3)) >> (RUBY_FL_USHIFT+3) : \
- ((struct RBignum*)($arg0))->as.heap.len)
- if $flags & RUBY_FL_USER2
- printf "(embed) "
- end
- print (struct RBignum *)($arg0)
- x/xw (($flags & RUBY_FL_USER2) ? \
- ((struct RBignum*)($arg0))->as.ary : \
- ((struct RBignum*)($arg0))->as.heap.digits)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_RATIONAL
- printf "%sT_RATIONAL%s: ", $color_type, $color_end
- print (struct RRational *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_COMPLEX
- printf "%sT_COMPLEX%s: ", $color_type, $color_end
- print (struct RComplex *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_FILE
- printf "%sT_FILE%s: ", $color_type, $color_end
- print (struct RFile *)($arg0)
- output *((struct RFile *)($arg0))->fptr
- printf "\n"
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_TRUE
- printf "%sT_TRUE%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_FALSE
- printf "%sT_FALSE%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_DATA
- if ((struct RTypedData *)($arg0))->typed_flag == 1
- printf "%sT_DATA%s(%s): ", $color_type, $color_end, ((struct RTypedData *)($arg0))->type->wrap_struct_name
- print (struct RTypedData *)($arg0)
- else
- printf "%sT_DATA%s: ", $color_type, $color_end
- print (struct RData *)($arg0)
- end
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_MATCH
- printf "%sT_MATCH%s: ", $color_type, $color_end
- print (struct RMatch *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_SYMBOL
- printf "%sT_SYMBOL%s: ", $color_type, $color_end
- print (struct RSymbol *)($arg0)
- set $id_type = ((struct RSymbol *)($arg0))->id & RUBY_ID_SCOPE_MASK
- if $id_type == RUBY_ID_LOCAL
- printf "l"
- else
- if $id_type == RUBY_ID_INSTANCE
- printf "i"
- else
- if $id_type == RUBY_ID_GLOBAL
- printf "G"
- else
- if $id_type == RUBY_ID_ATTRSET
- printf "a"
- else
- if $id_type == RUBY_ID_CONST
- printf "C"
- else
- if $id_type == RUBY_ID_CLASS
- printf "c"
- else
- printf "j"
- end
- end
- end
- end
- end
- end
- set $id_fstr = ((struct RSymbol *)($arg0))->fstr
- rp_string $id_fstr
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_UNDEF
- printf "%sT_UNDEF%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_IMEMO
- printf "%sT_IMEMO%s(", $color_type, $color_end
- output (enum imemo_type)(($flags>>RUBY_FL_USHIFT)&imemo_mask)
- printf "): "
- rp_imemo $arg0
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_NODE
- printf "%sT_NODE%s(", $color_type, $color_end
- output (enum node_type)(($flags&RUBY_NODE_TYPEMASK)>>RUBY_NODE_TYPESHIFT)
- printf "): "
- print *(NODE *)($arg0)
- else
- if ($flags & RUBY_T_MASK) == RUBY_T_ZOMBIE
- printf "%sT_ZOMBIE%s: ", $color_type, $color_end
- print (struct RData *)($arg0)
- else
- printf "%sunknown%s: ", $color_type, $color_end
- print (struct RBasic *)($arg0)
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
-end
-document rp
- Print a Ruby's VALUE.
-end
-
-define rp_id
- set $id = (ID)$arg0
- if $id == '!' || $id == '+' || $id == '-' || $id == '*' || $id == '/' || $id == '%' || $id == '<' || $id == '>' || $id == '`'
- printf "(:%c)\n", $id
- else
- if $id == idDot2
- printf "(:..)\n"
- else
- if $id == idDot3
- printf "(:...)\n"
- else
- if $id == idUPlus
- printf "(:+@)\n"
- else
- if $id == idUMinus
- printf "(:-@)\n"
- else
- if $id == idPow
- printf "(:**)\n"
- else
- if $id == idCmp
- printf "(:<=>)\n"
- else
- if $id == idLTLT
- printf "(:<<)\n"
- else
- if $id == idLE
- printf "(:<=)\n"
- else
- if $id == idGE
- printf "(:>=)\n"
- else
- if $id == idEq
- printf "(:==)\n"
- else
- if $id == idEqq
- printf "(:===)\n"
- else
- if $id == idNeq
- printf "(:!=)\n"
- else
- if $id == idEqTilde
- printf "(:=~)\n"
- else
- if $id == idNeqTilde
- printf "(:!~)\n"
- else
- if $id == idAREF
- printf "(:[])\n"
- else
- if $id == idASET
- printf "(:[]=)\n"
- else
- if $id <= tLAST_OP_ID
- printf "O"
- else
- set $id_type = $id & RUBY_ID_SCOPE_MASK
- if $id_type == RUBY_ID_LOCAL
- printf "l"
- else
- if $id_type == RUBY_ID_INSTANCE
- printf "i"
- else
- if $id_type == RUBY_ID_GLOBAL
- printf "G"
- else
- if $id_type == RUBY_ID_ATTRSET
- printf "a"
- else
- if $id_type == RUBY_ID_CONST
- printf "C"
- else
- if $id_type == RUBY_ID_CLASS
- printf "c"
- else
- printf "j"
- end
- end
- end
- end
- end
- end
- end
- printf "(%ld): ", $id
- set $str = lookup_id_str($id)
- if $str
- rp_string $str
- else
- echo undef\n
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
-end
-document rp_id
- Print an ID.
-end
-
-define rp_string
- set $flags = ((struct RBasic*)($arg0))->flags
- set print address off
- output (char *)(($flags & RUBY_FL_USER1) ? \
- ((struct RString*)($arg0))->as.heap.ptr : \
- ((struct RString*)($arg0))->as.ary)
- set print address on
- printf " bytesize:%ld ", ($flags & RUBY_FL_USER1) ? \
- ((struct RString*)($arg0))->as.heap.len : \
- (($flags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
- if !($flags & RUBY_FL_USER1)
- printf "(embed) "
- else
- if ($flags & RUBY_FL_USER2)
- printf "(shared) "
- end
- if ($flags & RUBY_FL_USER3)
- printf "(assoc) "
- end
- end
- printf "encoding:%d ", ($flags & RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT
- if ($flags & RUBY_ENC_CODERANGE_MASK) == 0
- printf "coderange:unknown "
- else
- if ($flags & RUBY_ENC_CODERANGE_MASK) == RUBY_ENC_CODERANGE_7BIT
- printf "coderange:7bit "
- else
- if ($flags & RUBY_ENC_CODERANGE_MASK) == RUBY_ENC_CODERANGE_VALID
- printf "coderange:valid "
- else
- printf "coderange:broken "
- end
- end
- end
- print (struct RString *)($arg0)
-end
-document rp_string
- Print the content of a String.
-end
-
-define rp_class
- printf "(struct RClass *) %p", (void*)$arg0
- if ((struct RClass *)($arg0))->ptr.origin_ != $arg0
- printf " -> %p", ((struct RClass *)($arg0))->ptr.origin_
- end
- printf "\n"
- rb_classname $arg0
- print *(struct RClass *)($arg0)
- print *((struct RClass *)($arg0))->ptr
-end
-document rp_class
- Print the content of a Class/Module.
-end
-
-define rp_imemo
- set $flags = (((struct RBasic *)($arg0))->flags >> RUBY_FL_USHIFT) & imemo_mask
- if $flags == imemo_cref
- printf "(rb_cref_t *) %p\n", (void*)$arg0
- print *(rb_cref_t *)$arg0
- else
- if $flags == imemo_svar
- printf "(struct vm_svar *) %p\n", (void*)$arg0
- print *(struct vm_svar *)$arg0
- else
- if $flags == imemo_throw_data
- printf "(struct vm_throw_data *) %p\n", (void*)$arg0
- print *(struct vm_throw_data *)$arg0
- else
- if $flags == imemo_ifunc
- printf "(struct vm_ifunc *) %p\n", (void*)$arg0
- print *(struct vm_ifunc *)$arg0
- else
- if $flags == imemo_memo
- printf "(struct MEMO *) %p\n", (void*)$arg0
- print *(struct MEMO *)$arg0
- else
- printf "(struct RIMemo *) %p\n", (void*)$arg0
- print *(struct RIMemo *)$arg0
- end
- end
- end
- end
- end
-end
-document rp_imemo
- Print the content of a memo
-end
-
-define nd_type
- print (enum node_type)((((NODE*)($arg0))->flags&RUBY_NODE_TYPEMASK)>>RUBY_NODE_TYPESHIFT)
-end
-document nd_type
- Print a Ruby' node type.
-end
-
-define nd_file
- print ((NODE*)($arg0))->nd_file
-end
-document nd_file
- Print the source file name of a node.
-end
-
-define nd_line
- print ((unsigned int)((((NODE*)($arg0))->flags>>RUBY_NODE_LSHIFT)&RUBY_NODE_LMASK))
-end
-document nd_line
- Print the source line number of a node.
-end
-
-# Print members of ruby node.
-
-define nd_head
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_alen
- printf "%su2.argc%s: ", $color_highlite, $color_end
- p ($arg0).u2.argc
-end
-
-define nd_next
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_cond
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_body
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-define nd_else
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_orig
- printf "%su3.value%s: ", $color_highlite, $color_end
- rp ($arg0).u3.value
-end
-
-
-define nd_resq
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-define nd_ensr
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_1st
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_2nd
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-
-define nd_stts
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-
-define nd_entry
- printf "%su3.entry%s: ", $color_highlite, $color_end
- p ($arg0).u3.entry
-end
-
-define nd_vid
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_cflag
- printf "%su2.id%s: ", $color_highlite, $color_end
- p ($arg0).u2.id
-end
-
-define nd_cval
- printf "%su3.value%s: ", $color_highlite, $color_end
- rp ($arg0).u3.value
-end
-
-
-define nd_cnt
- printf "%su3.cnt%s: ", $color_highlite, $color_end
- p ($arg0).u3.cnt
-end
-
-define nd_tbl
- printf "%su1.tbl%s: ", $color_highlite, $color_end
- p ($arg0).u1.tbl
-end
-
-
-define nd_var
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_ibdy
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-define nd_iter
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_value
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-define nd_aid
- printf "%su3.id%s: ", $color_highlite, $color_end
- p ($arg0).u3.id
-end
-
-
-define nd_lit
- printf "%su1.value%s: ", $color_highlite, $color_end
- rp ($arg0).u1.value
-end
-
-
-define nd_frml
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_rest
- printf "%su2.argc%s: ", $color_highlite, $color_end
- p ($arg0).u2.argc
-end
-
-define nd_opt
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-
-define nd_recv
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_mid
- printf "%su2.id%s: ", $color_highlite, $color_end
- p ($arg0).u2.id
-end
-
-define nd_args
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_noex
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_defn
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_old
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_new
- printf "%su2.id%s: ", $color_highlite, $color_end
- p ($arg0).u2.id
-end
-
-
-define nd_cfnc
- printf "%su1.cfunc%s: ", $color_highlite, $color_end
- p ($arg0).u1.cfunc
-end
-
-define nd_argc
- printf "%su2.argc%s: ", $color_highlite, $color_end
- p ($arg0).u2.argc
-end
-
-
-define nd_cname
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_super
- printf "%su3.node%s: ", $color_highlite, $color_end
- rp ($arg0).u3.node
-end
-
-
-define nd_modl
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_clss
- printf "%su1.value%s: ", $color_highlite, $color_end
- rp ($arg0).u1.value
-end
-
-
-define nd_beg
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
-define nd_end
- printf "%su2.node%s: ", $color_highlite, $color_end
- rp ($arg0).u2.node
-end
-
-define nd_state
- printf "%su3.state%s: ", $color_highlite, $color_end
- p ($arg0).u3.state
-end
-
-define nd_rval
- printf "%su2.value%s: ", $color_highlite, $color_end
- rp ($arg0).u2.value
-end
-
-
-define nd_nth
- printf "%su2.argc%s: ", $color_highlite, $color_end
- p ($arg0).u2.argc
-end
-
-
-define nd_tag
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
-define nd_tval
- printf "%su2.value%s: ", $color_highlite, $color_end
- rp ($arg0).u2.value
-end
-
-define nd_tree
- set $buf = (struct RString *)rb_str_buf_new(0)
- call dump_node((VALUE)($buf), rb_str_new(0, 0), 0, ($arg0))
- printf "%s\n", $buf->as.heap.ptr
-end
-
-define rb_p
- call rb_p($arg0)
-end
-
-define rb_numtable_entry
- set $rb_numtable_tbl = $arg0
- set $rb_numtable_id = (st_data_t)$arg1
- set $rb_numtable_key = 0
- set $rb_numtable_rec = 0
- if $rb_numtable_tbl->entries_packed
- set $rb_numtable_p = $rb_numtable_tbl->as.packed.bins
- while $rb_numtable_p && $rb_numtable_p < $rb_numtable_tbl->as.packed.bins+$rb_numtable_tbl->num_entries
- if $rb_numtable_p.k == $rb_numtable_id
- set $rb_numtable_key = $rb_numtable_p.k
- set $rb_numtable_rec = $rb_numtable_p.v
- set $rb_numtable_p = 0
- else
- set $rb_numtable_p = $rb_numtable_p + 1
- end
- end
- else
- set $rb_numtable_p = $rb_numtable_tbl->as.big.bins[st_numhash($rb_numtable_id) % $rb_numtable_tbl->num_bins]
- while $rb_numtable_p
- if $rb_numtable_p->key == $rb_numtable_id
- set $rb_numtable_key = $rb_numtable_p->key
- set $rb_numtable_rec = $rb_numtable_p->record
- set $rb_numtable_p = 0
- else
- set $rb_numtable_p = $rb_numtable_p->next
- end
- end
- end
-end
-
-define rb_id2name
- ruby_gdb_init
- printf "%sID%s: ", $color_type, $color_end
- rp_id $arg0
-end
-document rb_id2name
- Print the name of id
-end
-
-define rb_method_entry
- set $rb_method_entry_klass = (struct RClass *)$arg0
- set $rb_method_entry_id = (ID)$arg1
- set $rb_method_entry_me = (rb_method_entry_t *)0
- while !$rb_method_entry_me && $rb_method_entry_klass
- rb_numtable_entry $rb_method_entry_klass->m_tbl_wrapper->tbl $rb_method_entry_id
- set $rb_method_entry_me = (rb_method_entry_t *)$rb_numtable_rec
- if !$rb_method_entry_me
- set $rb_method_entry_klass = (struct RClass *)RCLASS_SUPER($rb_method_entry_klass)
- end
- end
- if $rb_method_entry_me
- print *$rb_method_entry_klass
- print *$rb_method_entry_me
- else
- echo method not found\n
- end
-end
-document rb_method_entry
- Search method entry by class and id
-end
-
-define rb_classname
- # up to 128bit int
- set $rb_classname_permanent = "0123456789ABCDEF"
- set $rb_classname = classname($arg0, $rb_classname_permanent)
- if $rb_classname != RUBY_Qnil
- rp $rb_classname
- else
- echo anonymous class/module\n
- end
-end
-
-define rb_ancestors
- set $rb_ancestors_module = $arg0
- while $rb_ancestors_module
- rp_class $rb_ancestors_module
- set $rb_ancestors_module = RCLASS_SUPER($rb_ancestors_module)
- end
-end
-document rb_ancestors
- Print ancestors.
-end
-
-define rb_backtrace
- call rb_backtrace()
-end
-
-define iseq
- if ruby_dummy_gdb_enums.special_consts
- end
- if ($arg0)->type == ISEQ_ELEMENT_NONE
- echo [none]\n
- end
- if ($arg0)->type == ISEQ_ELEMENT_LABEL
- print *(LABEL*)($arg0)
- end
- if ($arg0)->type == ISEQ_ELEMENT_INSN
- print *(INSN*)($arg0)
- if ((INSN*)($arg0))->insn_id != YARVINSN_jump
- set $i = 0
- set $operand_size = ((INSN*)($arg0))->operand_size
- set $operands = ((INSN*)($arg0))->operands
- while $i < $operand_size
- rp $operands[$i++]
- end
- end
- end
- if ($arg0)->type == ISEQ_ELEMENT_ADJUST
- print *(ADJUST*)($arg0)
- end
-end
-
-define rb_ps
- rb_ps_vm ruby_current_vm
-end
-document rb_ps
-Dump all threads and their callstacks
-end
-
-define rb_ps_vm
- print $ps_vm = (rb_vm_t*)$arg0
- set $ps_thread_ln = $ps_vm->living_threads.n.next
- set $ps_thread_ln_last = $ps_vm->living_threads.n.prev
- while 1
- set $ps_thread_th = (rb_thread_t *)$ps_thread_ln
- set $ps_thread = (VALUE)($ps_thread_th->self)
- rb_ps_thread $ps_thread
- if $ps_thread_ln == $ps_thread_ln_last
- loop_break
- end
- set $ps_thread_ln = $ps_thread_ln->next
- end
-end
-document rb_ps_vm
-Dump all threads in a (rb_vm_t*) and their callstacks
-end
-
-define rb_ps_thread
- set $ps_thread = (struct RTypedData*)$arg0
- set $ps_thread_th = (rb_thread_t*)$ps_thread->data
- printf "* #<Thread:%p rb_thread_t:%p native_thread:%p>\n", \
- $ps_thread, $ps_thread_th, $ps_thread_th->thread_id
-end
-
-# Details: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/MachineInstructionsTraceWithGDB
-define trace_machine_instructions
- set logging on
- set height 0
- set width 0
- display/i $pc
- while !$exit_code
- info line *$pc
- si
- end
-end
-
-define SDR
- call rb_vmdebug_stack_dump_raw_current()
-end
-
-define rbi
- if ((LINK_ELEMENT*)$arg0)->type == ISEQ_ELEMENT_LABEL
- p *(LABEL*)$arg0
- else
- if ((LINK_ELEMENT*)$arg0)->type == ISEQ_ELEMENT_INSN
- p *(INSN*)$arg0
- else
- if ((LINK_ELEMENT*)$arg0)->type == ISEQ_ELEMENT_ADJUST
- p *(ADJUST*)$arg0
- else
- print *$arg0
- end
- end
- end
-end
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index d9785fad00..0000000000
--- a/.gitattributes
+++ /dev/null
@@ -1,5 +0,0 @@
-*.gemspec diff=ruby
-*.rb diff=ruby
-bin/* diff=ruby
-tool/update-deps diff=ruby
-tool/make-snapshot diff=ruby
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 80c12594dd..0000000000
--- a/.gitignore
+++ /dev/null
@@ -1,183 +0,0 @@
-*-*-*.def
-*-*-*.exp
-*-*-*.lib
-*.a
-*.bak
-*.dSYM
-*.dmyh
-*.dylib
-*.elc
-*.inc
-*.log
-*.o
-*.obj
-*.orig
-*.pdb
-*.rej
-*.sav
-*.swp
-*.yarb
-*~
-.*-*
-.*.list
-.*.time
-.DS_Store
-.ccmalloc
-.ext
-.pc
-.ppack
-.svn
-Makefile
-Makefile.old
-cygruby*.def
-extconf.h
-y.output
-y.tab.c
-
-# /
-/*-fake.rb
-/*.dll
-/*.exe
-/*.res
-/*.pc
-/*.rc
-/*_prelude.c
-/COPYING.LIB
-/ChangeLog-*
-/ChangeLog.pre-alpha
-/ChangeLog.pre1_1
-/Doxyfile
-/GNUmakefile
-/GNUmakefile.old
-/README.atheos
-/README.fat-patch
-/README.v6
-/TAGS
-/archive
-/autom4te*.cache
-/automake
-/beos
-/bmlog-*
-/breakpoints.gdb
-/config.cache
-/config.h
-/config.h.in
-/config.status
-/config.status.lineno
-/configure
-/coverage/simplecov
-/coverage/simplecov-html
-/coverage/doclie
-/coverage/.last_run.json
-/coverage/.resultset.json*
-/coverage/assets
-/coverage/index.html
-/doc/capi
-/enc.mk
-/encdb.h
-/exts.mk
-/goruby
-/id.[ch]
-/largefile.h
-/lex.c
-/libruby*.*
-/miniprelude.c
-/miniruby
-/newdate.rb
-/newline.c
-/newver.rb
-/parse.c
-/parse.h
-/patches
-/patches-master
-/pitest.rb
-/ppack
-/prelude.c
-/preview
-/probes.h
-/rbconfig.rb
-/rename2.h
-/repack
-/revision.h
-/riscos
-/rubicon
-/ruby
-/ruby-runner
-/ruby-runner.c
-/ruby-man.rd.gz
-/sizes.c
-/test.rb
-/tmp
-/transdb.h
-/uncommon.mk
-/verconf.h
-/verconf.mk
-/web
-/yasmdata.rb
-
-# /benchmark/
-/benchmark/bmx_*.rb
-/benchmark/fasta.output.*
-/benchmark/wc.input
-
-/enc/*.def
-/enc/*.exp
-/enc/*.lib
-/enc/unicode/data
-
-# /enc/trans/
-/enc/trans/*.c
-/enc/trans/*.def
-/enc/trans/*.exp
-/enc/trans/*.lib
-/enc/trans/.time
-
-# /ext/
-/ext/extinit.c
-
-# /ext/-test-/win32/dln/
-/ext/-test-/win32/dln/dlntest.exp
-/ext/-test-/win32/dln/dlntest.lib
-
-# /ext/dl/callback/
-/ext/dl/callback/callback-*.c
-/ext/dl/callback/callback.c
-
-# /ext/etc/
-/ext/etc/constdefs.h
-
-# /ext/fiddle/
-/ext/fiddle/libffi-*
-
-# /ext/rbconfig/
-/ext/rbconfig/sizeof/sizes.c
-
-# /ext/ripper/
-/ext/ripper/eventids1.c
-/ext/ripper/eventids2table.c
-/ext/ripper/ripper.*
-/ext/ripper/ids1
-/ext/ripper/ids2
-
-# /ext/socket/
-/ext/socket/constants.h
-/ext/socket/constdefs.h
-/ext/socket/constdefs.c
-
-# /ext/tk/
-/ext/tk/config_list
-
-# /gems
-/gems/*.gem
-
-# /spec/
-/spec/mspec
-/spec/rubyspec
-
-# /tool/
-/tool/config.guess
-/tool/config.sub
-
-# /win32/
-/win32/*.ico
-/win32/.time
diff --git a/.indent.pro b/.indent.pro
deleted file mode 100644
index 6a207a0554..0000000000
--- a/.indent.pro
+++ /dev/null
@@ -1,21 +0,0 @@
--bap
--nbbb
--nbc
--br
--nbs
--ncdb
--ce
--cli0.5
--ndj
--ei
--nfc1
--i4
--l120
--lp
--npcs
--psl
--sc
--sob
-
--TID
--TVALUE
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index f87ffd3483..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (C) 2011 Urabe, Shyouhei. All rights reserved.
-#
-# This file is a part of the programming language Ruby. Permission is hereby
-# granted, to either redistribute or modify this file, provided that the
-# conditions mentioned in the file COPYING are met. Consult the file for
-# details.
-
-# This is a Travis-CI build configuration file. The list of configurations
-# available is located in
-#
-# http://about.travis-ci.org/docs/user/build-configuration/
-#
-# and as Ruby itself is a project written in C language,
-#
-# http://about.travis-ci.org/docs/user/languages/c/
-#
-# is also a good place to look at.
-
-# Language specification.
-language: c
-sudo: false
-
-# Compilers. Several compilers are provided in Travis, so we try them all.
-# The value set here is visible via $CC environment variable.
-compiler:
- - gcc
-
-os:
- - linux
-
-# Dependencies. Some header files are missing in a Travis' worker VM, so we
-# have to install them. The "1.9.1" here is OK. It is the most adopted
-# version string for Debian/Ubuntu, and no dependencies have been changed so
-# far since the 1.9.1 release.
-before_install:
- - "CONFIG_FLAG="
- - "JOBS='-j 4'"
-
-# Script is where the test runs. Note we just do "make test", not other tests
-# like test-all, test-rubyspec. This is because they take too much time,
-# enough for Travis to shut down the VM as being stalled.
-before_script:
- - "uname -a"
- - "uname -r"
- - "rm -fr .ext autom4te.cache"
- - "echo $TERM"
- - "make -f common.mk BASERUBY=ruby MAKEDIRS='mkdir -p' srcdir=. update-config_files"
- - "autoconf"
- - "mkdir config_1st config_2nd"
- - "./configure -C --disable-install-doc --with-gcc=$CC $CONFIG_FLAG"
- - "cp -pr config.status .ext/include config_1st"
- - "make reconfig"
- - "cp -pr config.status .ext/include config_2nd"
- - "diff -ru config_1st config_2nd"
- - "make after-update BASERUBY=ruby"
- - "make -s $JOBS"
- - "make update-rubyspec"
-script:
- - "make test TESTOPTS=--color=never"
- - "make test-all TESTOPTS='-q -j3 --color=never --job-status=normal'"
- - "make test-rubyspec MSPECOPT=-fm"
-
-# Branch matrix. Not all branches are Travis-ready so we limit branches here.
-branches:
- only:
- - trunk
- - ruby_2_0_0
- - ruby_2_1
- - ruby_2_2
- - ruby_2_3
-
-# We want to be notified when something happens.
-notifications:
- irc:
- channels:
- - "irc.freenode.org#ruby-core"
- - "irc.freenode.org#ruby-ja"
- on_success: change # [always|never|change] # default: always
- on_failure: always # [always|never|change] # default: always
- template:
- - "%{message} by @%{author}: See %{build_url}"
-
- # Update ruby-head installed on Travis CI so other projects can test against it.
- webhooks:
- urls:
- - "https://rubies.travis-ci.org/rebuild/ruby-head"
- on_success: always
- on_failure: never
-
- email:
- - ko1c-failure@atdot.net
- - shibata.hiroshi@gmail.com
-
-# Local Variables:
-# mode: YAML
-# coding: utf-8-unix
-# indent-tabs-mode: nil
-# tab-width: 4
-# fill-column: 79
-# default-justification: full
-# End:
diff --git a/BSDL b/BSDL
deleted file mode 100644
index a009caefea..0000000000
--- a/BSDL
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index ffdf2dd4b8..0000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Please see the [official issue tracker] and wiki [HowToContribute].
-
-[official issue tracker]: https://bugs.ruby-lang.org
-[HowToContribute]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToContribute
diff --git a/COPYING b/COPYING
index a1f19ff99d..9043404a83 100644
--- a/COPYING
+++ b/COPYING
@@ -1,6 +1,6 @@
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
-You can redistribute it and/or modify it under either the terms of the
-2-clause BSDL (see the file BSDL), or the conditions below:
+You can redistribute it and/or modify it under either the terms of the GPL
+version 2 (see the file GPL), or the conditions below:
1. You may make and give away verbatim copies of the source form of the
software without restriction, provided that you duplicate all of the
diff --git a/COPYING.ja b/COPYING.ja
index e50d01c8d1..933cc7cb9a 100644
--- a/COPYING.ja
+++ b/COPYING.ja
@@ -1,51 +1,51 @@
-本プログラムã¯ãƒ•リーソフトウェアã§ã™ï¼Ž2-clause BSDL
-ã¾ãŸã¯ä»¥ä¸‹ã«ç¤ºã™æ¡ä»¶ã§æœ¬ãƒ—ログラムをå†é…布ã§ãã¾ã™
-2-clause BSDLã«ã¤ã„ã¦ã¯BSDLファイルをå‚ç…§ã—ã¦ä¸‹ã•ã„.
+$BK\%W%m%0%i%`$O%U%j!<%=%U%H%&%'%"$G$9!%(BGPL(the GNU General
+Public License)$B$^$?$O0J2<$K<($9>r7o$GK\%W%m%0%i%`$r:FG[I[$G(B
+$B$-$^$9!%(BGPL$B$K$D$$$F$O(BGPL$B%U%!%$%k$r;2>H$7$F2<$5$$!%(B
- 1. 複製ã¯åˆ¶é™ãªã自由ã§ã™ï¼Ž
+ 1. $BJ#@=$O@)8B$J$/<+M3$G$9!%(B
- 2. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムã®ã‚½ãƒ¼ã‚¹ã‚’
- 自由ã«å¤‰æ›´ã§ãã¾ã™ï¼Ž
+ 2. $B0J2<$N>r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$N%=!<%9$r(B
+ $B<+M3$KJQ99$G$-$^$9!%(B
- (a) ãƒãƒƒãƒˆãƒ‹ãƒ¥ãƒ¼ã‚ºã«ãƒã‚¹ãƒˆã—ãŸã‚Šï¼Œä½œè€…ã«å¤‰æ›´ã‚’é€ä»˜ã™ã‚‹
- ãªã©ã®æ–¹æ³•ã§ï¼Œå¤‰æ›´ã‚’公開ã™ã‚‹ï¼Ž
+ (a) $B%M%C%H%K%e!<%:$K%]%9%H$7$?$j!$:n<T$KJQ99$rAwIU$9$k(B
+ $B$J$I$NJ}K!$G!$JQ99$r8x3+$9$k!%(B
- (b) 変更ã—ãŸæœ¬ãƒ—ãƒ­ã‚°ãƒ©ãƒ ã‚’è‡ªåˆ†ã®æ‰€å±žã™ã‚‹çµ„織内部ã ã‘ã§
- 使ã†ï¼Ž
+ (b) $BJQ99$7$?K\%W%m%0%i%`$r<+J,$N=jB0$9$kAH?%FbIt$@$1$G(B
+ $B;H$&!%(B
- (c) 変更点を明示ã—ãŸã†ãˆï¼Œã‚½ãƒ•トウェアã®åå‰ã‚’変更ã™ã‚‹ï¼Ž
- ãã®ã‚½ãƒ•トウェアをé…布ã™ã‚‹æ™‚ã«ã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラ
- ãƒ ã‚‚åŒæ™‚ã«é…布ã™ã‚‹ï¼Žã¾ãŸã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラムã®ã‚½ãƒ¼
- スã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ (c) $BJQ99E@$rL@<($7$?$&$(!$%=%U%H%&%'%"$NL>A0$rJQ99$9$k!%(B
+ $B$=$N%=%U%H%&%'%"$rG[I[$9$k;~$K$OJQ99A0$NK\%W%m%0%i(B
+ $B%`$bF1;~$KG[I[$9$k!%$^$?$OJQ99A0$NK\%W%m%0%i%`$N%=!<(B
+ $B%9$NF~<jK!$rL@<($9$k!%(B
- (d) ãã®ä»–ã®å¤‰æ›´æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
+ (d) $B$=$NB>$NJQ99>r7o$r:n<T$H9g0U$9$k!%(B
- 3. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムをコンパイ
- ルã—ãŸã‚ªãƒ–ジェクトコードや実行形å¼ã§ã‚‚é…布ã§ãã¾ã™ï¼Ž
+ 3. $B0J2<$N>r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$r%3%s%Q%$(B
+ $B%k$7$?%*%V%8%'%/%H%3!<%I$d<B9T7A<0$G$bG[I[$G$-$^$9!%(B
- (a) ãƒã‚¤ãƒŠãƒªã‚’å—ã‘å–ã£ãŸäººãŒã‚½ãƒ¼ã‚¹ã‚’入手ã§ãるよã†ã«ï¼Œ
- ソースã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ (a) $B%P%$%J%j$r<u$1<h$C$??M$,%=!<%9$rF~<j$G$-$k$h$&$K!$(B
+ $B%=!<%9$NF~<jK!$rL@<($9$k!%(B
- (b) 機械å¯èª­ãªã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’添付ã™ã‚‹ï¼Ž
+ (b) $B5!3#2DFI$J%=!<%9%3!<%I$rE:IU$9$k!%(B
- (c) 変更を行ã£ãŸãƒã‚¤ãƒŠãƒªã¯åå‰ã‚’変更ã—ãŸã†ãˆï¼Œã‚ªãƒªã‚¸ãƒŠ
- ルã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ (c) $BJQ99$r9T$C$?%P%$%J%j$OL>A0$rJQ99$7$?$&$(!$%*%j%8%J(B
+ $B%k$N%=!<%9%3!<%I$NF~<jK!$rL@<($9$k!%(B
- (d) ãã®ä»–ã®é…布æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
+ (d) $B$=$NB>$NG[I[>r7o$r:n<T$H9g0U$9$k!%(B
- 4. ä»–ã®ãƒ—ログラムã¸ã®å¼•用ã¯ã„ã‹ãªã‚‹ç›®çš„ã§ã‚れ自由ã§ã™ï¼ŽãŸ
- ã ã—,本プログラムã«å«ã¾ã‚Œã‚‹ä»–ã®ä½œè€…ã«ã‚ˆã‚‹ã‚³ãƒ¼ãƒ‰ã¯ï¼Œã
- れãžã‚Œã®ä½œè€…ã®æ„å‘ã«ã‚ˆã‚‹åˆ¶é™ãŒåŠ ãˆã‚‰ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ï¼Ž
+ 4. $BB>$N%W%m%0%i%`$X$N0zMQ$O$$$+$J$kL\E*$G$"$l<+M3$G$9!%$?(B
+ $B$@$7!$K\%W%m%0%i%`$K4^$^$l$kB>$N:n<T$K$h$k%3!<%I$O!$$=(B
+ $B$l$>$l$N:n<T$N0U8~$K$h$k@)8B$,2C$($i$l$k>l9g$,$"$j$^$9!%(B
- ãれらファイルã®ä¸€è¦§ã¨ãれãžã‚Œã®é…布æ¡ä»¶ãªã©ã«ä»˜ã„ã¦ã¯
- LEGALファイルをå‚ç…§ã—ã¦ãã ã•ã„.
+ $B$=$l$i%U%!%$%k$N0lMw$H$=$l$>$l$NG[I[>r7o$J$I$KIU$$$F$O(B
+ LEGAL$B%U%!%$%k$r;2>H$7$F$/$@$5$$!%(B
- 5. 本プログラムã¸ã®å…¥åŠ›ã¨ãªã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŠã‚ˆã³ï¼Œæœ¬ãƒ—ログラ
- ムã‹ã‚‰ã®å‡ºåŠ›ã®æ¨©åˆ©ã¯æœ¬ãƒ—ログラムã®ä½œè€…ã§ã¯ãªã,ãれãž
- れã®å…¥å‡ºåŠ›ã‚’ç”Ÿæˆã—ãŸäººã«å±žã—ã¾ã™ï¼Žã¾ãŸï¼Œæœ¬ãƒ—ログラムã«
- 組ã¿è¾¼ã¾ã‚Œã‚‹ãŸã‚ã®æ‹¡å¼µãƒ©ã‚¤ãƒ–ラリã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã™ï¼Ž
+ 5. $BK\%W%m%0%i%`$X$NF~NO$H$J$k%9%/%j%W%H$*$h$S!$K\%W%m%0%i(B
+ $B%`$+$i$N=PNO$N8"Mx$OK\%W%m%0%i%`$N:n<T$G$O$J$/!$$=$l$>(B
+ $B$l$NF~=PNO$r@8@.$7$??M$KB0$7$^$9!%$^$?!$K\%W%m%0%i%`$K(B
+ $BAH$_9~$^$l$k$?$a$N3HD%%i%$%V%i%j$K$D$$$F$bF1MM$G$9!%(B
- 6. 本プログラムã¯ç„¡ä¿è¨¼ã§ã™ï¼Žä½œè€…ã¯æœ¬ãƒ—ログラムをサãƒãƒ¼ãƒˆ
- ã™ã‚‹æ„å¿—ã¯ã‚りã¾ã™ãŒï¼Œãƒ—ログラム自身ã®ãƒã‚°ã‚ã‚‹ã„ã¯æœ¬ãƒ—
- ログラムã®å®Ÿè¡Œãªã©ã‹ã‚‰ç™ºç”Ÿã™ã‚‹ã„ã‹ãªã‚‹æå®³ã«å¯¾ã—ã¦ã‚‚責
- 任をæŒã¡ã¾ã›ã‚“.
+ 6. $BK\%W%m%0%i%`$OL5J]>Z$G$9!%:n<T$OK\%W%m%0%i%`$r%5%]!<%H(B
+ $B$9$k0U;V$O$"$j$^$9$,!$%W%m%0%i%`<+?H$N%P%0$"$k$$$OK\%W(B
+ $B%m%0%i%`$N<B9T$J$I$+$iH/@8$9$k$$$+$J$kB;32$KBP$7$F$b@U(B
+ $BG$$r;}$A$^$;$s!%(B
diff --git a/ChangeLog b/ChangeLog
index 7eabb55845..d3ea78a941 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12972 +1,20942 @@
-Tue Apr 26 02:58:51 2016 Marcus Stollsteimer <sto.mar@web.de>
+Wed Jan 21 10:56:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
- * doc/extension.rdoc: Improvements to english grammers.
- [Bug #12246][ruby-core:74792][ci skip]
+ * win32/win32.c (filetime_to_timeval): new function, split from
+ gettimeofday().
-Tue Apr 26 02:58:51 2016 craft4coder <yooobuntu@163.com>
+ * win32/win32.c (gettimeofday): use above function.
- * doc/extension.rdoc: [DOC] `nul` should be uppercase.
- change 'nul' => 'NUL'. [Fix GH-1172]
+ * win32/win32.c (filetime_to_unixtime): ditto. [ruby-dev:36135]
-Tue Apr 26 02:54:57 2016 Marcus Stollsteimer <sto.mar@web.de>
+Wed Jan 21 10:56:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
- * encoding.c: Fix return value of `Encoding::ISO8859_1.name`
- [Bug #12313][ruby-core:75147][ci skip]
- * ext/bigdecimal/bigdecimal.c: Fix code sample of `BigDecimal.new`
+ * win32/win32.c (gettimeofday): tv_usec is usec, not msec.
+ [ruby-dev:36094]
-Mon Apr 25 02:29:07 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Wed Jan 21 10:56:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: add missing -lm for AIX.
+ * win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system
+ time by myself. [ruby-dev:36084]
-Mon Apr 25 02:29:07 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Wed Jan 21 10:56:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: don't use the system-provided round(3) on AIX.
- In AIX, round(0.49999999999999994) returns 1.0.
- Use round() in numeric.c instead.
+ * win32/win32.c (gettimeofday): shouldn't use mktime(2) because it's
+ buggy about handling summer time.
+ reported by Yoshikawa <yoshixool AT gmail.com> at [ruby-dev:36071]
-Sun Apr 24 03:05:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jan 20 12:22:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby.c: cygwin does not use w32_cmdvector, command line can be
- other than UTF-8. [ruby-dev:49519] [Bug #12184]
+ * lib/scanf.rb (Scanf::FormatSpecifier#initialize): %i should accept
+ single digit decimal. [ruby-core:18355]
-Sat Apr 23 01:01:13 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 19 18:24:13 2009 Tanaka Akira <akr@fsij.org>
- * eval_jump.c (exec_end_procs_chain): restore previous error info
- for each end procs. [ruby-core:75038] [Bug #12302]
+ * configure.in (rb_cv_broken_glibc_ia64_erfc): renamed from
+ rb_broken_glibc_ia64_erfc.
+ [ruby-core:18228]
-Sat Apr 23 00:51:51 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jan 17 12:13:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c (new_label_body): initialize bit fields, since
- compile_data_alloc does not clear the memory. [Bug #12082]
+ * random.c (Init_Random): always initialize seed.
-Sat Apr 23 00:51:51 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jan 17 12:11:06 2009 NAKAMURA Usaku <usa@ruby-lang.org>
- * compile.c (iseq_optimize): disable tail call optimization in
- rescued, rescue, and ensure blocks.
- [ruby-core:73871] [Bug #12082]
+ * marshal.c (dump_ensure, load_ensure): should return values.
-Sat Apr 23 00:33:04 2016 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Jan 16 10:55:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/nkf/nkf-utf8/nkf.c (mime_putc): fix typo.
- [Bug #12202] [ruby-core:74802]
+ * class.c (clone_method): should copy cbase in cref as well.
+ [ruby-dev:35116]
-Sat Apr 23 00:33:04 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * node.h (NEW_CREF): new NEW_ macro.
- * ext/nkf/nkf-utf8/nkf.c: Merge upstream 4f3edf80a0.
- patched by Anton Sivakov [Bug #12201] [Bug #12202]
+ * eval.c (PUSH_CREF): use NEW_CREF().
-Sat Apr 23 00:29:15 2016 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jan 15 14:34:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/securerandom.rb (gen_random): to avoid blocking on Windows.
- On Windows OpenSSL RAND_bytes (underlying implementation is
- RAND_poll in crypto/rand/rand_win.c) may be blocked at
- NetStatisticsGet.
- https://wiki.openssl.org/index.php/Random_Numbers#Windows_Issues
- Instead of this, use Random.raw_seed directly (whose implementation
- CryptGenRandom is one of the source of
- entropy of RAND_poll on Windows).
- https://wiki.openssl.org/index.php/Random_Numbers
- Note: CryptGenRandom function is PRNG and doesn't check its entropy,
- so it won't block. [Bug #12139]
- https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa379942.aspx
- https://tools.ietf.org/html/rfc4086#section-7.1.3
- https://eprint.iacr.org/2007/419.pdf
- http://www.cs.huji.ac.il/~dolev/pubs/thesis/msc-thesis-leo.pdf
+ * gc.c (STACK_LEVEL_MAX, ruby_stack_length): returns size_t.
+ [ruby-core:18207]
+Wed Jan 14 10:32:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 23 00:25:26 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * stable/ext/socket/socket.c (NI_MAXHOST, NI_MAXSERV): fixed invalid
+ preprocessor directives. a patch from Peter Bowen at
+ [ruby-core:18211].
- * miniinit.c (Init_enc): add some common aliases of built-in
- encodings. [ruby-core:72481] [Bug #11872]
+Tue Jan 13 04:39:30 2009 Shugo Maeda <shugo@ruby-lang.org>
-Sat Apr 23 00:13:50 2016 sorah (Shota Fukumori) <her@sorah.jp>
+ * lib/net/ftp.rb (login): raise FTPReplyError if passwd or acct
+ is not supplied. backported from trunk. fixed [ruby-core:18058].
- * lib/forwardable.rb: Convert given accessors to String.
+Mon Jan 12 00:21:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- r53381 changed to accept only Symbol or String for accessors, but
- there are several rubygems that pass classes (e.g. Array,
- Hash, ...) as accessors. Prior r53381, it was accepted because Class#to_s
- returns its class name. After r53381 given accessors are checked
- with define_method, but it accepts only Symbol or String, otherwise
- raises TypeError.
+ * gc.c (gc_sweep, obj_free, run_final): defer finalizers of IO and
+ Data. [ruby-dev:35578]
- def_delegator Foo, :some_method
+ * gc.c (rb_gc_call_finalizer_at_exit): self-referencing finalizers
+ cannot be invoked. [ruby-dev:35681]
- This change is to revert unexpected incompatibility. But this behavior
- may change in the future.
+Sun Jan 11 11:31:52 2009 Shugo Maeda <shugo@ruby-lang.org>
-Sat Apr 23 00:02:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/ftp.rb (chdir): handle 5xx errors correctly.
+ backported from trunk. fixed [ruby-core:18057].
- * configure.in: check if succeeded in creating config.h.
+Fri Jan 9 19:22:24 2009 Shugo Maeda <shugo@ruby-lang.org>
- * tool/ifchange: ignore failures when TEST_COLORS unmatched. just
- use the default value if expected name is not contained in it.
- [ruby-core:75046] [Bug #12303]
+ * lib/net/imap.rb (disconnect): do not refer SSL::SSLSocket for
+ environments without OpenSSL. backported from trunk.
+ fixed [ruby-dev:35755].
-Fri Apr 22 23:47:05 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jan 8 13:20:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/regexp.rdoc (comments): [DOC] terminators cannot appear in
- comments. [ruby-core:74838] [Bug #12256]
+ * parse.y (deferred_nodes, compstmt, arg, fixup_nodes, range_op): fix
+ up fixnum range literal in conditional as automagical line number
+ comparison. [ruby-core:12124], [ruby-dev:35731]
-Fri Apr 22 23:44:07 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jan 7 10:06:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * extension.rdoc, extension.ja.rdoc: [DOC] Fix some errors.
- Renamed files, wrong method names or argument types; the example
- GetDBM macro is now updated to the current version of the actual
- code. patch by Marcus Stollsteimer in [ruby-core:74690].
- [Bug #12228]
+ * eval.c (timeofday): use monotonic clock. based on a patch
+ from zimbatm <zimbatm@oree.ch> in [ruby-core:16627].
-Fri Apr 22 23:32:19 2016 Tanaka Akira <akr@fsij.org>
+Tue Jan 6 09:02:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_time_tz.rb: Tests depends on Europe/Moscow removed
- to avoid test failures due to the tzdata change.
- https://github.com/eggert/tz/commit/8ee11a301cf173afb0c76e0315b9f9ec8ebb9d95
- Found by naruse.
+ * parse.y (yylex): 8 and 9 in octal integer should cause compile
+ error. [ruby-dev:35729]
-Tue Apr 19 02:32:50 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 5 11:12:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (rb_cv_lgamma_r_m0): fix the condition for
- lgamma_r(-0.0). [Bug #12249]
+ * eval.c (rb_thread_schedule): runs deferred finalizers.
-Tue Apr 19 02:32:50 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c (gc_sweep): sets rb_thread_pending to run deferred finalizers.
- * configure.in (rb_cv_lgamma_r_m0): check if lgamma_r(-0.0)
- returns negative infinity. [Bug #12249]
+ * rubysig.h (CHECK_INTS): now checks rb_thread_pending even on
+ platforms where setitimer is not available. [ruby-core:18045]
- * math.c (ruby_lgamma_r): define by the configured result.
+Mon Jan 5 11:12:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 19 02:32:50 2016 cremno phobia <cremno@mail.ru>
+ * rubysig.h (CHECK_INTS): gives the chance to perform to deferred
+ finalizers before explicit GC.start or the process termination.
+ [ruby-core:18045]
- * math.c (ruby_lgamma_r): missing/lgamma_r.c is used on Windows,
- since msvcrt does not provide it.
+Sun Jan 4 04:47:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * missing/lgamma_r.c (lgamma_r): fix lgamma(-0.0).
- [ruby-core:74823] [Bug #12249]
+ * win32/win32.c (rb_w32_telldir): just returns loc.
-Tue Apr 19 02:32:50 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+ * win32/win32.c (rb_w32_rewinddir): needs to intialize loc.
+ [ruby-core:18041]
- * math.c (ruby_lgamma_r): mswin's lgamma_r also seems to be wrong.
- cf. [Bug #12249]
+Thu Jan 1 08:39:36 2009 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Apr 19 02:32:50 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/date.rb (Date::Infinity#<=>): didn't work. A patch from
+ Dirkjan Bussink <d.bussink AT gmail.com> [ruby-core:15098].
+ This is a bug obviously. However it didn't affect the library's
+ functions.
+
+ * lib/date.rb, lib/date/format.rb: some trivial changes.
+
+Mon Aug 11 09:34:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/dl/dl.c (rb_str_to_ptr): should propagate taint to dlptr.
+
+ * ext/dl/dl.c (rb_ary_to_ptr): ditto.
+
+ * ext/dl/sym.c (rb_dlsym_call): should check taint of DLPtrData as
+ well.
+
+Fri Aug 8 10:53:52 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: randomize source port and transaction id.
+ CVE-2008-1447.
+
+ * lib/resolv-replace.rb (UDPSocket#bind): don't resolv host if host is
+ "".
+
+Mon Aug 4 14:15:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils#split_header_value):
+ reduce backtrack. based on a fix by Christian Neukirchen
+ <chneukirchen AT gmail.com>.
+
+Mon Aug 4 14:10:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regex.c (xmalloc, xrealloc, xfree): not to use ruby managed memory.
+
+ * regex.c (DOUBLE_STACK, re_compile_fastmap0, re_adjust_startpos),
+ (re_search, re_match_exec): check if failed to allocate memory.
+
+Mon Aug 4 13:49:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big2str0, bigsqr): made interruptible. [ruby-Bugs-20622]
+
+Mon Aug 4 13:39:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/openssl_missing.h (d2i_of_void): define for older
+ versions. [ruby-dev:35637]
+
+Mon Aug 4 12:25:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): fixed wrong check
+ about 64bit positive value.
+Mon Aug 4 12:25:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check.
+ fixed [ruby-dev:33683]
+
+Mon Aug 4 12:11:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (Init_GC): fix syntax error.
+
+Mon Aug 4 12:11:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_exc_new3): keeps the given string itself.
+
+ * eval.c (Init_Proc), gc.c (Init_GC): freeze messages of preallocated
+ special exceptions also.
+
+Thu Jul 17 21:37:39 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP::start): revert to avoid RFC2821
+ violation. [ruby-dev:35487]
- * math.c (ruby_tgamma): fix tgamma(-0.0) on mingw.
- [ruby-core:74817] [Bug #12249]
+Thu Jul 17 21:31:46 2008 Tanaka Akira <akr@fsij.org>
-Tue Apr 19 01:53:32 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c (rb_str_format_m): make tmp volatile to avoid possible GC
+ problem.
- * defs/keywords (alias, undef): symbol literals are allowed.
+Thu Jul 17 21:29:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parse_percent): should parse symbol literals for alias
- and undef. [ruby-dev:47681] [Bug #8851]
+ * lib/optparse.rb (OptionParser#environment): requires shellwords.
+ [ruby-dev:35466]
-Mon Apr 18 18:05:29 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 17 01:36:02 2008 Yusuke Endoh <mame@tsg.ne.jp>
- * struct.c (struct_make_members_list, rb_struct_s_def): member
- names should be unique. [ruby-core:74971] [Bug #12291]
+ * ext/zlib/zlib.c (rb_gzfile_set_mtime): fix typo. [ruby-core:17713]
- * struct.c (struct_make_members_list): extract making member name
- list from char* va_list, with creating symbols without
- intermediate IDs.
+Sun Jul 13 00:07:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 18 17:54:40 2016 Joe Swatosh <joe.swatosh@gmail.com>
+ * lib/ipaddr.rb (IPAddr#initialize): get rid of ArgumentError in
+ IPAddr#to_range. a patch from okkez <okkez000 AT gmail.com> in
+ [ruby-dev:35091].
- * ext/win32/lib/win32/registry.rb (DeleteValue, DeleteKey): fix
- API names. [ruby-core:74863] [Bug #12264]
+Sun Jul 13 00:02:26 2008 Tanaka Akira <akr@fsij.org>
-Mon Apr 18 17:27:30 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (erfc): erfc of glibc comes with Debian GNU/Linux Etch
+ on IA64 is broken. erfc(10000.0) aborts.
+ use missing/erf.c instead.
+ http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
- * compile.c (iseq_peephole_optimize): should not replace the
- current target INSN, not to follow the replaced dangling link in
- the caller. [ruby-core:74993] [Bug #11816]
+Thu Jul 10 18:44:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 18 17:18:25 2016 cremno phobia <cremno@mail.ru>
+ * file.c (rb_file_s_extname): fix for file name with spaces.
+ [ruby-talk:307404]
- * cont.c (fiber_initialize_machine_stack_context): fix wrong
- _MSC_VER check, should be decimal but not hexadecimal.
- [ruby-core:74936] [Bug #12279]
+Thu Jul 10 18:39:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 18 17:18:25 2016 cremno phobia <cremno@mail.ru>
+ * lib/net/ftp.rb (Net::FTP#sendport): use divmod. [ruby-core:17557]
- * cont.c (fiber_initialize_machine_stack_context): fix wrong
- _MSC_VER check, should be decimal but not hexadecimal.
- [ruby-core:74936] [Bug #12279]
+Thu Jul 10 18:35:07 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Mon Apr 18 17:08:10 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ruby.c: Mac OS X needs origargc times of '\0' in
+ origargv. [ruby-dev:35308]
- * vm_core.h (rb_vm_struct): make at_exit a single linked list but
- not RArray, not to mark the registered functions by the write
- barrier. based on the patches by Evan Phoenix.
- [ruby-core:73908] [Bug #12095]
+Thu Jul 10 13:51:03 2008 Tanaka Akira <akr@fsij.org>
-Mon Apr 18 16:56:31 2016 Benoit Daloze <eregontp@gmail.com>
+ * include/ruby/ruby.h (POSFIXABLE): use FIXNUM_MAX+1 instead of
+ FIXNUM_MAX to make it possible to convert to double accurately.
+ It assumes FLT_RADIX is 2.
+ fix RubyForge bug #14102.
+ backported from 1.9.
- * thread.c (update_coverage): Do not track coverage in loaded files
- after Coverage.result. Avoids out-of-bounds access. [Bug #12237]
+Mon Jul 7 16:14:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/coverage/coverage.c (coverage_clear_result_i): document.
+ * lib/net/smtp.rb (Net::SMTP::start): use 'localhost' instead of
+ 'localhost.localdomain'. [ruby-dev:35333]
-Mon Apr 18 16:33:50 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/smtp.rb (Net::SMTP::SMTP.start): ditto.
- * ext/date/date_core.c (Init_date_core): [DOC] fix misplaced doc
- of DateTime. [ruby-core:74729] [Bug #12233]
+Mon Jul 7 12:07:28 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Mon Apr 18 13:48:05 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/win32ole/win32ole.c: avoid creating Ruby object during
+ GC. thanks to arton <artonx AT yahoo.co.jp>. [ruby-dev:35313]
- * cygwin/GNUmakefile.in (MSYS2_ARG_CONV_EXCL_PARAM):
- * add missing parentheses and remove double quotes.
- * rename to get rid of recursive references.
- * as --excludes-dir option is for a path name, its argument
- should be converted.
- [ruby-dev:49526] [Bug #12199]
+ * ext/win32ole/tests: add test_win32ole_event.rb, remove
+ testOLEEVENT.rb
-Mon Apr 18 13:48:05 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/win32ole/tests/testWIN32OLE.rb(test_convert_bignum):
+ fix test.
- * common.mk (TEST_EXCLUDES, EXCLUDE_TESTFRAMEWORK): use full spell
- long option.
+Mon Jul 7 12:07:28 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * cygwin/GNUmakefile.in (MSYS2_ARG_CONV_EXCL): suppress path name
- conversions by msys2. [ruby-dev:49525] [Bug #12199]
+ * gc.c: add rb_during_gc(). based on a patch from arton <artonx AT
+ yahoo.co.jp> at [ruby-dev:35313].
-Mon Apr 18 13:48:05 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * intern.h: ditto.
- * test/lib/test/unit.rb (Options#non_options): make regexp name
- options prefixed with "!" negative filters.
+Thu Jul 3 17:15:04 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
- * common.mk (TEST_EXCLUDES): use negative filter to exclude memory
- leak tests. -x option excludes test files, not test methods.
+ * win32/win32.c: revert r17290, requested by NAKAMURA Usaku
+ <usa at ruby-lang.org>
-Sun Apr 17 04:30:13 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 2 19:05:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parse_ident): allow keyword arguments just after a
- method where the same name local variable is defined.
- [ruby-core:73816] [Bug#12073]
+ * lib/cgi.rb (CGI::QueryExtension.read_multipart): blanks inside
+ double quotes are allowed. [ruby-list:45140]
-Sun Apr 17 04:20:40 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 2 19:01:13 2008 Tanaka Akira <akr@fsij.org>
- * eval.c (setup_exception): set the cause only if it is explicitly
- given or not set yet. [Bug #12068]
+ * numeric.c (num_coerce): call rb_Float(x) first. don't depend on
+ evaluation order of function arguments.
-Sat Apr 16 00:56:45 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 2 18:55:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * thread.c (rb_thread_setname): defer setting native thread name
- set in initialize until the native thread is created.
- [ruby-core:74963] [Bug #12290]
+ * ext/syslog/syslog.c (syslog_write): syslog operations should be
+ protected from $SAFE level 4. a patch from Keita Yamaguchi
+ <keita.yamaguchi at gmail.com>.
-Fri Apr 15 21:10:00 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/syslog/syslog.c (mSyslog_close): ditto.
- * lib/irb/ext/save-history.rb: Fix NoMethodError when method is not defined.
+ * ext/syslog/syslog.c (mSyslog_set_mask): ditto.
-Fri Apr 15 14:52:06 2016 Elliot Winkler <elliot.winkler@gmail.com>
+Wed Jul 2 18:25:17 2008 Tanaka Akira <akr@fsij.org>
- * lib/forwardable.rb (def_instance_delegator) fix delegating to
- 'args' and 'block', clashing with local variables in generated
- methods. [ruby-core:72579] [Bug #11916]
+ * math.c (domain_check): fix preprocess condition.
- * lib/forwardable.rb (def_single_delegator): ditto.
+Wed Jul 2 18:19:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 15 14:27:48 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/tmpdir.rb (@@systmpdir): prior LOCAL_APPDATA if possible, and
+ should be clean. based on a patch from arton <artonx AT
+ yahoo.co.jp> at [ruby-dev:35269]
- * lib/irb/ext/save-history.rb: suppress warning: method redefined;
- discarding old save_history=.
+Wed Jul 2 18:13:30 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Tue Apr 12 16:15:39 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/win32ole/win32ole.c (date2time_str): fix the overflow in
+ some situation. [ruby-bugs-20793]
- * configure.in: improve ICC (Intel C Compiler) support.
+Wed Jul 2 17:38:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (CXX): The name of icc's c++ compiler is `icpc`.
+ * ext/iconv/iconv.c (iconv_iconv): fixed backport miss.
+ [ruby-core:17115]
- * configure.in (warnings): Add `-diag-disable=2259` to suppress
- noisy warnings: "non-pointer conversion from "..." to "..." may
- lose significant bits".
+Tue Jul 1 15:09:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (optflags): Add `-fp-model precise` like -fno-fast-math.
+ * array.c (rb_ary_fill): check if beg is too big.
- * lib/mkmf.rb: icc supports -Werror=division-by-zero
- and -Werror=deprecated-declarations, but doesn't support
- -Wdivision-by-zero and -Wdeprecated-declarations.
+Mon Jun 30 20:34:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 12 14:29:01 2016 Kazuki Yamaguchi <k@rhe.jp>
+ * string.c (str_buf_cat): check for self concatenation.
- * ext/openssl/extconf.rb: check SSL_CTX_set_next_proto_select_cb
- function rather than OPENSSL_NPN_NEGOTIATED macro. it exists
- even if it is disabled by OpenSSL configuration.
- [ruby-core:74384] [Bug #12182]
+Sun Jun 29 21:38:52 2008 Tanaka Akira <akr@fsij.org>
- * ext/openssl/ossl_ssl.c: update #ifdef(s) as above.
+ * eval.c (rb_obj_respond_to): use RTEST to test the result of
+ respond_to? method.
- * test/openssl/test_ssl.rb: skip NPN tests if NPN is disabled.
+Sun Jun 29 20:40:57 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-Tue Apr 12 14:27:04 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_fill): (compatibility) do not raise
+ ArgumentError on negative length. This behaviour shall change
+ in a future release.
- * lib/uri/http.rb (URI::HTTP#initialize): [DOC] fix example,
- missing mandatory arguments. [ruby-core:74540] [Bug #12215]
+Sun Jun 29 20:06:45 2008 Tanaka Akira <akr@fsij.org>
-Thu Apr 7 01:07:02 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (time_timeval): fix rounding negative float.
- * sprintf.c (rb_str_format): fix buffer overflow, length must be
- greater than precision. reported by William Bowling <will AT
- wbowling.info>.
+Sun Jun 29 18:35:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 6 00:33:45 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/inlinetest.rb (InlineTest.in_progname): workaround for frozen
+ $0. [ruby-dev:35261]
- * lib/rubygems/security.rb (DIGEST_ALGORITHM, KEY_ALGORITHM):
- should check same name as the used constants.
- [ruby-core:72674] [Bug #11940]
+ * lib/test/unit/ui/console/testrunner.rb (TestRunner#finished): ditto.
-Mon Apr 4 00:31:51 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 29 18:35:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (compile_massign_lhs): when index ends with splat,
- append rhs value to it like POSTARG, since VM_CALL_ARGS_SPLAT
- splats the last argument only. [ruby-core:72777] [Bug #11970]
+ * ruby.c (set_arg0, ruby_prog_init): freeze $0. a patch from Keita
+ Yamaguchi <keita.yamaguchi at gmail.com>.
-Sat Apr 2 02:07:29 2016 Seiei Miyagi <hanachin@gmail.com>
+Sun Jun 29 18:32:19 2008 Tanaka Akira <akr@fsij.org>
- * ext/ripper/lib/ripper/lexer.rb (on_heredoc_dedent): Fix
- Ripper.lex error in dedenting squiggly heredoc. heredoc tree is
- also an array of Elem in the outer tree. [Fix GH-1234]
+ * process.c: include sys/resource.h if HAVE_SYS_RESOURCE_H is defined.
+ pointed by TOYOFUKU Chikanobu. [ruby-dev:35258]
-Wed Mar 30 02:28:13 2016 Eric Wong <e@80x24.org>
+Sun Jun 29 18:25:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * thread_pthread.c (setup_communication_pipe): delay setting owner
- (rb_thread_create_timer_thread): until thread creation succeeds
- [ruby-core:72590] [Bug #11922]
+ * variable.c (rb_f_trace_var): should not be allowed at safe level 4.
+ a patch from Keita Yamaguchi <keita.yamaguchi at gmail.com>.
-Wed Mar 30 02:20:06 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * eval.c (rb_call0): wrong condition to check insecure method.
+ a patch from Keita Yamaguchi <keita.yamaguchi at gmail.com>.
- * localeinit.c (rb_locale_charmap_index): fix prototype.
- patched by Andreas Schwab [Bug #12218]
+Sun Jun 29 18:24:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 30 02:20:06 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * array.c (rb_ary_fill): not depend on unspecified behavior at integer
+ overflow. reported by Vincenzo Iozzo <snagg AT openssl.it>.
- * thread_pthread.c (reserve_stack): fix reserving position where
- the stack growing bottom to top. [Bug #12118]
+Sun Jun 29 18:21:23 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Wed Mar 30 02:17:33 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/win32ole/win32ole.c(ole_invoke): fix memory leak.
+ [ruby-bugs-20792]
- * win32/file.c (rb_readlink): drop garbage after the substitute
- name, as rb_w32_read_reparse_point returns the expected buffer
- size but "\??\" prefix is dropped from the result.
+Sun Jun 29 17:34:11 2008 Akinori MUSHA <knu@iDaemons.org>
- * win32/win32.c (w32_readlink): ditto, including NUL-terminator.
+ * eval.c (PUSH_FRAME, PUSH_CLASS): Add volatile to avoid a
+ possible optimization bug on OS X/PPC. This at least makes
+ build with gcc -O1 and `make test' pass.
-Wed Mar 30 02:17:33 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Jun 29 17:23:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/win32.c (fileattr_to_unixmode, rb_w32_reparse_symlink_p): volume
- mount point should be treated as directory, not symlink.
- [ruby-core:72483] [Bug #11874]
+ * lib/rdoc/parsers/parse_rb.rb (RDoc#collect_first_comment): skip
+ magic comment.
- * win32/win32.c (rb_w32_read_reparse_point): check the reparse point is
- a volume mount point or not.
+Sun Jun 29 17:21:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/file.c (rb_readlink): follow above change (but this pass won't
- be used).
+ * ext/stringio/stringio.c (strio_each, strio_readlines): IO#each and
+ IO#readlines do not affect $_. [ruby-core:17277]
-Wed Mar 30 01:32:14 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Sun Jun 29 17:18:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/-ext-/time/test_new.rb (test_timespec_new): change a gmtoff
- test to a better one that does not depend on whether the current
- time is in summer time or not.
+ * ext/stringio/stringio.c (strio_readline, strio_each)
+ (strio_readlines): set lastline. [ruby-core:17257]
-Wed Mar 30 01:32:14 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Sun Jun 29 17:10:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/-ext-/time/test_new.rb (test_timespec_new): Time#gmtoff values
- are the same only when both or neither of the Time objects are in
- summer time (daylight-saving time).
+ * ext/openssl/ossl.h: include winsock.h if USE_WINSOCK2 is not defined.
+ a patch from arton <artonx at yahoo.co.jp> in [ruby-dev:35078]
-Wed Mar 30 01:30:54 2016 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Sun Jun 29 17:07:30 2008 wanabe <s.wanabe@gmail.com>
- * lib/rubygems/test_case.rb: Fix test on Windows for inconsistent temp path.
- https://github.com/rubygems/rubygems/pull/1554
- [Bug #12193][ruby-core:74431]
+ * util.c (ruby_strtod): ruby_strtod don't allow a trailing
+ decimal point like "7.". [ruby-dev:34835] [ruby-dev:35009]
-Wed Mar 30 01:25:46 2016 NARUSE, Yui <naruse@ruby-lang.org>
+Sun Jun 29 16:56:57 2008 Akinori MUSHA <knu@iDaemons.org>
- * string.c (str_new_frozen): if the given string is embeddedable
- but not embedded, embed a new copied string. [Bug #11946]
+ * lib/set.rb (Set#delete_if): Call to_a.
+ (SortedSet#delete_if, TC_SortedSet#test_sortedset): Use super to
+ yield elements in sorted order; [ruby-core:17144] by Arthur
+ Schreiber.
+ (SortedSet#each, SortedSet#each, TC_Set#test_each)
+ (TC_SortedSet#test_sortedset): Return self; [ruby-dev:35002] by
+ Arthur Schreiber.
-Wed Mar 30 01:23:57 2016 Marcus Stollsteimer <sto.mar@web.de>
+Sun Jun 29 16:49:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/extension.ja.rdoc: Fix RDoc markup in doc/extension*.rdoc.
- [ci skip][Bug #12143][ruby-core:74143]
- * doc/extension.rdoc: ditto.
+ * eval.c (search_method, remove_method, error_print, rb_alias)
+ (rb_eval, rb_rescue2, search_required, Init_eval, rb_thread_create),
+ gc.c (rb_source_filename, Init_stack), io.c (rb_io_getline),
+ parse.y (rb_id2name, rb_parser_free): suppress warnings.
-Wed Mar 30 01:00:30 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 28 19:26:43 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
- * proc.c (proc_binding): proc from symbol can not make a binding.
- [ruby-core:74100] [Bug #12137]
+ * class.c (clone_method): use rb_copy_node_scope.
+ fixed [ruby-list:45102]
+ fixed [ruby-core:17393]
-Wed Mar 30 00:54:38 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 28 19:25:56 2008 Akinori MUSHA <knu@iDaemons.org>
- * include/ruby/win32.h (O_SHARE_DELETE): change to fit Fixnum
- limit. [ruby-core:74285] [Bug #12171]
+ * eval.c (rb_copy_node_scope), node.h: Rename from copy_node_scope
+ and export.
-Wed Mar 30 00:52:47 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Fri Jun 27 17:38:21 2008 Akinori MUSHA <knu@iDaemons.org>
- * test/net/imap/test_imap.rb (test_idle_timeout): Because of the
- timeout specified in "imap.idle(0.2)", there is no gurantee that
- the server thread has done all the work before the client thread
- performs the assertions. It depends on the thread scheduling.
- Add checks to avoid false positives (on AIX, particularly).
+ * ext/zlib/zlib.c (rb_deflate_initialize, Init_zlib): Fix up
+ initialize_copy; [ruby-list:45016], [ruby-list:45018].
-Wed Mar 30 00:41:42 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Fri Jun 27 17:28:39 2008 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/socket/test_socket.rb (test_udp_recvmsg_truncation):
- AIX does not set the MSG_TRUNC flag for a message partially read
- by recvmsg(2) with the MSG_PEEK flag set.
+ * io.c (rb_open_file, rb_io_s_sysopen): fmode should be unsigned int.
+ fixed [ruby-dev:34979]
-Wed Mar 30 00:00:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 27 17:20:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
- * doc/extension.rdoc, doc/extension.ja.rdoc: add editor local
- variables, with commenting out by :enddoc: directives which are
- just ignored unless code object mode. [Bug #12111]
+ * win32/win32.h: include ws2tcpip.h. fixed [ruby-Bugs-20528]
-Wed Mar 30 00:00:47 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Fri Jun 27 15:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/extension.ja.rdoc: removed rendering error caused by editor specific
- configuration on http://docs.ruby-lang.org/en/trunk/extension_rdoc.html .
- [Bug #12111][ruby-core:73990]
+ * ext/iconv/iconv.c (iconv_iconv): fixed backport miss.
+ [ruby-core:17115]
-Tue Mar 29 23:54:31 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 27 15:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (rb_mod_const_get): make error message at uninterned
- string consistent with symbols. [ruby-dev:49498] [Bug #12089]
+ * ext/iconv/iconv.c (iconv_iconv): fix for length argument and now
+ allows range. [ruby-core:17092]
-Tue Mar 29 23:45:24 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 24 15:38:52 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * dir.c (push_pattern, push_glob): deal with read paths as UTF-8
- to stat later, on Windows as well as OS X.
- [ruby-core:73868] [Bug #12081]
+ * lib/erb.rb (ERB::Compiler::TrimScanner#explicit_trim_line): Fix
+ without strscan problems. [ruby_core:17028].
-Tue Mar 29 23:36:49 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/erb/test_erb.rb (TestERBCoreWOStrScan): Add test class for
+ without strscan.
- * ext/extmk.rb: add cygwin case, nothing excluded.
- [ruby-core:73806] [Bug#12071]
+Sun Jun 22 00:09:20 2008 Akinori MUSHA <knu@iDaemons.org>
-Tue Mar 29 23:10:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/delegate.rb (DelegateClass, Delegator#respond_to?):
+ respond_to? should now take optional second argument; submitted
+ by Jeremy Kemper <jeremy at bitsweat.net> in [ruby-core:17045].
- * iseq.c (rb_iseq_mark): mark parent iseq to prevent dynamically
- generated iseq by eval from GC. [ruby-core:72620] [Bug #11928]
+Fri Jun 20 18:24:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 22:56:44 2016 Eric Wong <e@80x24.org>
+ * string.c (rb_str_buf_append): should infect.
- * lib/resolv.rb (Resolv::IPv6.create): avoid modifying frozen
- * test/resolv/test_dns.rb (test_ipv6_create): test for above
- [Bug #11910] [ruby-core:72559]
+Fri Jun 20 15:52:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 22:31:48 2016 Shugo Maeda <shugo@ruby-lang.org>
+ * array.c (rb_ary_store, rb_ary_splice): not depend on unspecified
+ behavior at integer overflow.
- * range.c (range_eqq): revert r11113 because rb_call_super() is
- called in range_include() and thus r11113 doesn't work when the
- receiver Range object consists of non linear objects such as Date
- objects.
- [ruby-core:72908] [Bug #12003]
+ * string.c (str_buf_cat): ditto.
-Tue Mar 29 22:26:55 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jun 18 22:25:10 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
- * vm_eval.c (rb_check_funcall_with_hook): also should call the
- given hook before returning Qundef when overridden respond_to?
- method returned false. [ruby-core:73556] [Bug #12030]
+ * array.c (ary_new, rb_ary_initialize, rb_ary_store,
+ rb_ary_aplice, rb_ary_times): integer overflows should be
+ checked. based on patches from Drew Yao <ayao at apple.com>
+ fixed CVE-2008-2726
-Tue Mar 29 22:08:36 2016 Kazuki Yamaguchi <k@rhe.jp>
+ * string.c (rb_str_buf_append): fixed unsafe use of alloca,
+ which led memory corruption. based on a patch from Drew Yao
+ <ayao at apple.com> fixed CVE-2008-2726
- * compile.c (iseq_peephole_optimize): don't apply tailcall
- optimization to send/invokesuper instructions with blockiseq.
- This is a follow-up to the changes in r51903; blockiseq is now
- the third operand of send/invokesuper instructions.
- [ruby-core:73413] [Bug #12018]
+ * sprintf.c (rb_str_format): backported from trunk.
-Tue Mar 29 21:22:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * intern.h: ditto.
- * parse.y (xstring): reset heredoc indent after dedenting,
- so that following string literal would not be dedented.
- [ruby-core:72857] [Bug #11990]
+Fri Jun 20 01:40:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 21:22:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_equal, rb_ary_eql, rb_ary_hash, rb_ary_cmp):
+ Make Array#eql?, #hash, #== and #<=> use rb_protect_inspect() and
+ handle recursive data properly. [ruby-dev:35181]
- * parse.y (string1): reset heredoc indent fore each string leteral
- so that concatenated string would not be dedented.
- [ruby-core:72857] [Bug #11990]
+Wed Jun 18 15:20:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 21:18:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
+ public methods only. [ruby-core:17283]
- * parse.y (parser_here_document): update indent for each line in
- indented here document with single-quotes.
- [ruby-core:72479] [Bug #11871]
+ * object.c (convert_type): ditto.
-Tue Mar 29 21:03:40 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/singleton.rb (Singleton#_dump): conversion method should be
+ public.
- * symbol.h (is_attrset_id): ASET is an attrset ID. fix
- unexpected safe call instead of an ordinary ASET.
+Wed Jun 18 13:19:55 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-Tue Mar 29 21:01:07 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c: fixes to compile on mswin32. Patch from U. Nakamura
+ <usa at garbagecollect.jp>. [ruby-dev:35127]
- * doc/syntax/calling_methods.rdoc: fix old operator for safe navigation
- operator. [ci skip][fix GH-1182] Patch by @dougo
+Tue Jun 17 22:16:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 18:49:54 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (LIBPATHFLAG, RPATHFLAG): no needs to be quoted,
+ it is done by libpathflag in mkmf.rb.
- * lib/ostruct.rb (freeze): define deferred accessors before
- freezing to get rid of an error when just reading frozen
- OpenStruct.
+Mon Jun 16 15:43:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 18:49:54 2016 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * proc.c (proc_dup): should copy safe_level from src proc
+ properly. a patch from Keita Yamaguchi
+ <keita.yamaguchi at gmail.com>
- * lib/ostruct.rb: Fix new_ostruct_member to correctly avoid
- redefinition [#11901]
+Sun Jun 15 23:31:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 17:54:17 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/zlib/extconf.rb: search zlib1, and regard mswin32 later than VC6
+ as WIN32. [ruby-core:16984]
- * lib/ostruct.rb (OpenStruct): make respond_to? working on
- just-allocated objects for workaround of Psych.
- [ruby-core:72501] [Bug #11884]
+Sun Jun 15 23:28:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 17:04:35 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
+ private methods too. [ruby-dev:34671]
- * vm_eval.c (rb_f_catch): [DOC] fix malformed RDoc syntax, "+...+"
- cannot enclose non-identifier characters.
- a patch by Sebastian S in [ruby-core:74278]. [Bug#12170]
+ * object.c (convert_type): ditto.
-Tue Mar 29 17:03:28 2016 Rei Odaira <Rei.Odaira@gmail.com>
+Sun Jun 15 23:26:50 2008 Akinori MUSHA <knu@iDaemons.org>
- * test/-ext-/float/test_nextafter.rb: In AIX,
- nextafter(+0.0,-0.0)=+0.0, and nextafter(-0.0,+0.0)=-0.0,
- but they should return -0.0 and +0.0, respectively. This is
- a known bug in nextafter(3) on AIX, so skip related tests.
+ * numeric.c (flo_divmod): Revert the behavior change; do not
+ suppress an exception when div is NaN or Inf. [ruby-dev:34857]
-Tue Mar 29 16:54:14 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 15 23:24:32 2008 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c (enc_succ_alnum_char): try to skip an invalid character
- gap between GREEK CAPITAL RHO and SIGMA.
- [ruby-core:74478] [Bug #12204]
+ * file.c (BUFCHECK): wrong condition. [ruby-core:16921]
-Tue Mar 29 16:45:58 2016 Victor Nawothnig <Victor.Nawothnig@gmail.com>
+ * file.c (file_expand_buf): shouldn't use buflen for length of string.
- * parse.y (parse_numvar): NTH_REF must be less than a half of
- INT_MAX, as it is left-shifted to be ORed with back-ref flag.
- [ruby-core:74444] [Bug#12192] [Fix GH-1296]
+Sun Jun 15 23:21:22 2008 Akinori MUSHA <knu@iDaemons.org>
-Tue Mar 29 16:44:54 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * marshal.c (r_object0, Init_marshal): Fix the garbled s_call
+ definition; fixes [ruby-dev:34843].
- * enc/trans/JIS: update Unicode's notice. [Bug #11844]
+Sun Jun 15 23:19:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 16:41:27 2016 Eric Hodel <drbrain@segment7.net>
+ * object.c (rb_cstr_to_dbl): should clear errno before calling
+ strtod(3). [ruby-dev:34834]
- * marshal.c (r_object0): raise ArgumentError when linking to undefined
+Sun Jun 15 23:18:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (marshal_load): should initialize arg.data used for
+ reentrant check. [ruby-dev:34837]
+
+Sun Jun 15 23:13:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (top_local_setup): fixed memory leak bug based on a
+ patch from Roger Pack <rogerpack2005 at gmail.com> in
+ [ruby-core:16610].
+Sun Jun 15 23:16:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (reentrant_check): check reentrance via callcc.
+ [ruby-dev:34802]
+
+
+Sun Jun 15 23:09:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): fixed SEGV on win32 with "% 0e" % 1.0/0.0.
+
+Sun Jun 15 23:07:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_f_system): set last_status when status == -1 because
+ there is no path to set it on win32. this patch is derived from
+ [ruby-core:16787], submitted by Luis Lavena <luislavena at gmail.com>
+
+Sun Jun 15 23:02:12 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpservlet/filehandler.rb: should normalize path
+ name in path_info to prevent script disclosure vulnerability on
+ DOSISH filesystems. (fix: CVE-2008-1891)
+ Note: NTFS/FAT filesystem should not be published by the platforms
+ other than Windows. Pathname interpretation (including short
+ filename) is less than perfect.
+
+ * lib/webrick/httpservlet/abstract.rb
+ (WEBrick::HTTPServlet::AbstracServlet#redirect_to_directory_uri):
+ should escape the value of Location: header.
+
+ * lib/webrick/httpservlet/cgi_runner.rb: accept interpreter
+ command line arguments.
+
+Sun Jun 15 23:02:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): support for alternative data stream
+ and ignored trailing garbages of NTFS.
+
+ * file.c (rb_file_s_basename): ditto.
+
+ * file.c (rb_file_s_extname): ditto.
+
+Sun Jun 15 22:53:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cat): fixed buffer overrun reported by
+ Christopher Thompson <cthompson at nexopia.com> in [ruby-core:16746]
+
+Sun Jun 15 22:51:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): add NODE_OP_ASGN_{OR,AND}. "defined?(a||=1)"
+ should not operate assignment. [ruby-dev:34645]
+
+Sun Jun 15 22:49:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_select): backport from trunk.
+ [ruby-talk:300743]
+
+Sun Jun 15 22:48:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (SimpleDelegator::dup): removed needless argument.
+ [ruby-list:44910]
+
+ * lib/delegate.rb (clone, dup): keep relationship with the target
object.
-Tue Mar 29 16:41:27 2016 Eric Hodel <drbrain@segment7.net>
+Sun Jun 15 22:46:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * marshal.c (r_object0): Fix Marshal crash for corrupt extended object.
+ * util.c (ruby_strtod): backported from 1.9. a patch from Satoshi
+ Nakagawa <psychs at limechat.net> in [ruby-dev:34625].
+ fixed: [ruby-dev:34623]
-Tue Mar 29 16:40:48 2016 Eric Wong <e@80x24.org>
+Sun Jun 15 22:44:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): document as MT-unsafe
- [ruby-core:73803] [Bug #12069]
+ * struct.c (rb_struct_s_def): to_str should be called only once.
+ [ruby-core:16647]
-Tue Mar 29 16:29:44 2016 NARUSE, Yui <naruse@ruby-lang.org>
+Sun Jun 15 22:42:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * insns.def (opt_mod): show its method name on ZeroDivisionError.
- [Bug #12158]
+ * ext/zlib/zlib.c (gzreader_gets): may cause infinite loop.
+ a patch from Kouya <kouyataifu4 at gmail.com> in
+ [ruby-reference-manual:762].
-Tue Mar 29 16:25:27 2016 Anthony Dmitriyev <antstorm@gmail.com>
+Sun Jun 15 22:34:09 2008 James Edward Gray II <jeg2@ruby-lang.org>
- * net/ftp.rb: add NullSocket#closed? to fix closing not opened
- connection. [Fix GH-1232]
+ Merged 16241 from trunk.
-Tue Mar 29 16:12:08 2016 Koichi ITO <koic.ito@gmail.com>
+ * lib/net/telnet.rb: Fixing a bug where line endings would not be properly
+ escaped when the two character ending was broken up into separate TCP
+ packets. Issue reported and patched by Brian Candler.
- * variable.c: Added documentation about order of `Module#constants`
- [ci skip][Bug #12121][ruby-dev:49505][fix GH-1301]
+Sun Jun 15 22:31:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 16:02:26 2016 Rei Odaira <Rei.Odaira@gmail.com>
+ * re.c (rb_reg_search): use local variable. a patch from wanabe
+ <s.wanabe AT gmail.com> in [ruby-dev:34537]. [ruby-dev:34492]
- * test/ruby/test_process.rb (test_execopts_gid): Skip a test
- that is known to fail on AIX. AIX allows setgid to
- a supplementary group, but Ruby does not allow the "-e"
- option when setgid'ed, so the test does not work as intended.
+Sun Jun 15 22:20:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 15:58:18 2016 Rei Odaira <Rei.Odaira@gmail.com>
+ * sprintf.c (rb_f_sprintf): should protect temporary string from
+ GC. [ruby-dev:34480]
- * test/socket/test_addrinfo.rb (test_ipv6_address_predicates):
- IN6_IS_ADDR_V4COMPAT and IN6_IS_ADDR_V4MAPPED are broken
- on AIX, so skip related tests.
+Sun Jun 15 22:18:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 15:31:06 2016 Rei Odaira <Rei.Odaira@gmail.com>
+ * regex.c (re_search): string might be NULL. [ruby-core:16478]
- * test/rinda/test_rinda.rb (test_make_socket_ipv4_multicast):
- The fifth argument to getsockopt(2) should be modified to
- indicate the actual size of the value on return,
- but not in AIX. This is a know bug. Skip related tests.
- * test/rinda/test_rinda.rb (test_ring_server_ipv4_multicast):
- ditto.
- * test/rinda/test_rinda.rb (test_make_socket_unicast): ditto.
- * test/socket/test_basicsocket.rb (test_getsockopt): ditto.
- * test/socket/test_sockopt.rb (test_bool): ditto.
+Sun Jun 15 22:16:21 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Mar 29 15:27:14 2016 Rei Odaira <Rei.Odaira@gmail.com>
+ * time.c (rb_strftime): check errno to detect strftime(3)'s error.
+ this is workaround for recent version of MSVCRT.
+ [ruby-dev:34456]
- * test/zlib/test_zlib.rb (test_adler32_combine, test_crc32_combine):
- Skip two tests on AIX because zconf.h in zlib does not correctly
- recognize _LARGE_FILES in AIX. The problem was already reported
- to zlib, and skip these tests until it is fixed.
+Sun Jun 15 22:12:07 2008 Akinori MUSHA <knu@iDaemons.org>
-Tue Mar 29 15:10:31 2016 Rei Odaira <Rei.Odaira@gmail.com>
+ * lib/yaml/types.rb: Likewise, pass self to YAML::quick_emit;
+ merged from 1.9.
- * thread_pthread.c (getstack): __pi_stacksize returned by
- pthread_getthrds_np() is wrong on AIX. Use
- __pi_stackend - __pi_stackaddr instead.
+ * lib/yaml.rb (quick_emit): use combination of object_id and hash to
+ identify repeated object references, since GC will reuse memory of
+ objects during output of YAML. [ruby-Bugs-8548] [ruby-Bugs-3698];
+ merged from 1.9.
-Tue Mar 29 15:10:05 2016 Alex Boyd <alex@opengroove.org>
+Sun Jun 15 22:09:02 2008 Akinori MUSHA <knu@iDaemons.org>
- * lib/irb.rb: avoid to needless truncation when using back_trace_limit option.
- [fix GH-1205][ruby-core:72773][Bug #11969]
+ * ext/syck/rubyext.c: Node#value defined twice.
-Tue Mar 29 15:05:16 2016 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * lib/yaml/: several method redefinitions causing warnings.
- * ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb: fix method name typo.
- [ruby-core:72513] [Bug #11893] The patch provided by Akira Matsuda.
+Sun Jun 15 22:04:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+ * marshal.c (w_object): add volatile to avoid potential GC bug. a
+ patch from Tomoyuki Chikanaga <chikanag at nippon-control-system.co.jp>
+ in [ruby-dev:34311].
-Tue Mar 29 15:05:02 2016 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Sun Jun 15 21:59:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/tk/lib/tkextlib/tcllib/toolbar.rb: fix method name typo.
- [ruby-core:72511] [Bug #11891] The patch provided by Akira Matsuda.
+ * re.c (rb_reg_quote): should always copy the quoting string.
+ [ruby-core:16235]
+Sun Jun 15 21:27:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 15:04:42 2016 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * lib/net/pop.rb (Net::POP3::do_finish): clear @n_mails and
+ @n_bytes as well. [ruby-core:16144]
- * ext/tk/lib/tkextlib/blt/tree.rb: fix method name typo.
- [ruby-core:72510] [Bug #11890] The patch provided by Akira Matsuda.
+Sun Jun 15 21:08:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/resolv.rb (Resolv::Config.default_config_hash): requires
+ win32/resolv to use Win32::Resolv. [ruby-dev:34138]
-Tue Mar 29 15:04:19 2016 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Sun Jun 15 20:54:07 2008 Akinori MUSHA <knu@iDaemons.org>
- * ext/tk/lib/tk/menubar.rb: fix a typo in font name. [ruby-core:72505]
- [Bug #11886] The patch provided by Akira Matsuda.
+ * parse.y (yycompile): Always prepare a new array for each file's
+ SCRIPT_LINES__ storage, instead of appending source lines every
+ time a file is re-loaded; submitted by Rocky Bernstein in
+ #18517.
- * ext/tk/sample/*.rb: ditto.
+Sun Jun 15 20:30:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 15:03:03 2016 Kenta Murata <mrkn@mrkn.jp>
+ * lib/resolv.rb (Resolv::Hosts): should not use win32/resolv on cygwin.
+ [ruby-dev:29945], [ruby-dev:34095]
- * ruby.h: undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
- and HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P on C++.
- [ruby-core:72736] [Bug #11962]
+ * lib/win32/registry.rb (Win32::Registry.expand_environ): try upcased
+ name too for cygwin. [ruby-dev:29945]
-Tue Mar 29 14:58:56 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/win32/resolv.rb (Win32::Resolv.get_hosts_path): use expand_path.
- * ext/socket/option.c (inspect_tcpi_msec): more accurate condition
- for TCPI msec member inspection function.
- [ruby-core:74388] [Bug #12185]
+Sun Jun 15 20:27:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:53:58 2016 Naotoshi Seo <sonots@gmail.com>
+ * misc/ruby-mode.el (ruby-mode): should use `run-mode-hooks' instead
+ of calling `run-hooks' directly to run the mode hook. patch from
+ Chiyuan Zhang <pluskid AT gmail.com> in [ruby-core:15915]
- * lib/logger.rb: Remove block from Logger.add as it's not needed
- patch provided by Daniel Lobato Garcia [fix GH-1240] [Bug #12054]
+Sun Jun 15 20:20:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:52:20 2016 Zachary Scott <zzak@ruby-lang.org>
+ * numeric.c (fix_coerce): try conversion before type check.
+ [ruby-core:15838]
- * re.c: Remove deprecated kcode argument from Regexp.new and compile
- patch provided by Dylan Pulliam [Bug #11495]
+Sun Jun 15 19:56:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:44:02 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454]
- * ext/socket/socket.c (sock_gethostname): support unlimited size
- hostname.
+Sun Jun 15 19:54:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:35:06 2016 Kouhei Sutou <kou@cozmixng.org>
+ * bignum.c (big2str_find_n1): check integer overflow.
- * lib/xmlrpc/client.rb: Support SSL options in async methods of
- XMLRPC::Client.
- [Bug #11489]
- Reported by Aleksandar Kostadinov. Thanks!!!
+Sun Jun 15 19:52:20 2008 Tanaka Akira <akr@fsij.org>
-Tue Mar 29 14:22:57 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed. [ruby-dev:33857]
- * marshal.c (r_object0): honor Marshal.load post proc
- value for TYPE_LINK. by Hiroshi Nakamura <nahi@ruby-lang.org>
- https://github.com/ruby/ruby/pull/1204 fix GH-1204
+Sun Jun 15 19:50:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:18:26 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/readline/readline.c (readline_event): prevent polling. based on
+ a patch from error errorsson in [ruby-Bugs-17675].
- * .travis.yml: removed commented-out code.
+Sun Jun 15 19:44:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:18:26 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * parse.y (yycompile): clear ruby_eval_tree_begin if parse failed.
- * .travis.yml: removed osx code. follow up with r53517
+Sun Jun 15 19:44:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:12:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (yycompile): clear ruby_eval_tree_begin too before parse.
- * ext/socket/option.c (sockopt_bool): relax boolean size to be one
- too not only sizeof(int). Winsock getsockopt() returns a single
- byte as a boolean socket option. [ruby-core:72730] [Bug #11958]
+Sun Jun 15 19:22:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 14:12:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/pty/lib/expect.rb (IO#expect): check if peer is closed.
+ [ruby-Bugs-17940]
- * ext/socket/option.c (check_size): extract a macro to check
- binary data size, with a consistent message.
+Sun Jun 15 19:20:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/option.c (sockopt_byte): fix error message,
- sizeof(int) differs from sizeof(unsigned char) in general.
+ * ext/iconv/iconv.c (iconv_convert): check upper bound. a patch from
+ Daniel Luz at [ruby-Bugs-17910].
-Tue Mar 29 14:01:14 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Jun 15 19:13:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (rb_execarg_parent_start1): need to convert the encoding to
- ospath's one.
+ * configure.in (ftruncate): check if available.
-Tue Mar 29 14:01:14 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+ * file.c (rb_file_truncate): check if ftruncate instead of truncate.
- * process.c: use rb_w32_uchdir() instead of plain chdir() on Windows.
- reported by naruse via twitter.
+Sun Jun 15 19:02:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (rb_execarg_addopt): need to convert the encoding to
- ospath's one.
+ * configure.in (sigsetmask): check when signal semantics is not POSIX.
-Tue Mar 29 13:56:36 2016 Eric Wong <e@80x24.org>
+ * signal.c (USE_TRAP_MASK): set true if sigprocmask or sigsetmask is
+ available.
- * ext/stringio/stringio.c (strio_binmode): implement to set encoding
- * test/stringio/test_stringio.rb (test_binmode): new test
- [ruby-core:72699] [Bug #11945]
+Sat Jun 14 16:49:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 29 13:50:30 2016 Eric Wong <e@80x24.org>
+ * lib/timeout.rb (Timeout::timeout): made sensitive to location on the
+ stack. [ruby-core:15458]
- * io.c (io_getpartial): remove unused kwarg from template
- * test/ruby/test_io.rb (test_readpartial_bad_args): new
- [Bug #11885]
+Fri Jun 13 13:14:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 29 13:41:03 2016 Tadashi Saito <tad.a.digger@gmail.com>
+ * ext/dl/ptr.c (dlmem_each_i): typo fixed. a patch from IKOMA
+Sun Jun 15 21:06:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c, cont.c, doc, man: fix common misspelling.
- [ruby-core:72466] [Bug #11870]
+ * class.c (clone_method): should copy cref as well.
+ [ruby-core:15833]
-Tue Mar 29 13:31:34 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ Yoshiki <ikoma@mb.i-chubu.ne.jp> in [ruby-dev:33776].
- * parse.y (regexp): set_yylval_num sets u1, should use nd_tag
- instead of nd_state. [ruby-core:72638] [Bug #11932]
+Fri Jun 13 13:13:23 2008 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-Tue Mar 29 13:31:34 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c (rb_newobj): prohibit call of rb_newobj() during gc.
+ Submitted by Sylvain Joyeux [ruby-core:12099].
- * parse.y (set_yylval_num): should be used as nd_state, set to u3.
- [ruby-core:72638] [Bug #11932]
+ * ext/dl/ptr.c: do not use LONG2NUM() inside dlptr_free().
+ Slightly modified fix bassed on a patch by Sylvain Joyeux
+ [ruby-core:12099] [ ruby-bugs-11859 ] [ ruby-bugs-11882 ]
+ [ ruby-patches-13151 ].
-Tue Mar 29 13:26:15 2016 Joseph Tibbertsma <josephtibbertsma@gmail.com>
+Fri Jun 13 12:10:13 2008 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (RVALUE_PAGE_WB_UNPROTECTED): fix a typo of argument name.
- [Fix GH-1221]
+ * lib/benchmark.rb (Job::Benchmark#item): fix typo.
-Thu Jan 21 16:39:55 2016 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Jun 13 12:06:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * Makefile.in (update-rubyspec): fix r53208 like r53451.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more
+ precision. [ruby-talk:290296]
-Fri Jan 15 00:05:57 2016 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/bigdecimal/bigdecimal.c (BASE_FIG): made constant.
- * lib/uri/generic.rb (URI::Generic#to_s): change encoding to
- UTF-8 as Ruby 2.2/ by Koichi ITO <koic.ito@gmail.com>
- https://github.com/ruby/ruby/pull/1188 fix GH-1188
+ * ext/bigdecimal/extconf.rb: ditto. [ruby-dev:33658]
-Tue Jan 12 17:23:39 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 13 12:01:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (rb_execarg_parent_start1): need to convert the encoding to
- ospath's one.
+ * lib/irb.rb (IRB::Irb::eval_input): rescues Interrupt and other than
+ SystemExit and SignalException. [ruby-core:15359]
-Tue Jan 12 17:23:39 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 13 11:57:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * process.c: use rb_w32_uchdir() instead of plain chdir() on Windows.
- reported by naruse via twitter.
+ * lib/benchmark.rb (Benchmark::realtime): make Benchmark#realtime
+ a bit faster. a patch from Alexander Dymo <dymo@ukrpost.ua> in
+ [ruby-core:15337].
- * process.c (rb_execarg_addopt): need to convert the encoding to
- ospath's one.
+Fri Jun 13 11:50:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jan 12 15:21:00 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_open_file): should check NUL in path.
+ <http://www.rubyist.net/~matz/20080125.html#c01>.
- * include/ruby/missing.h (explicit_bzero_by_memset_s): remove
- inline implementation by memset_s, which needs a macro before
- including headers and can cause problems in extension libraries
- by the order of the macro and headers.
+ * io.c (rb_io_s_popen): ditto.
-Thu Dec 24 23:01:57 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * io.c (rb_io_reopen): ditto.
- * NEWS: added entry for CGI.escapeHTML optimization.
+ * io.c (next_argv): ditto.
-Thu Dec 24 18:43:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_io_s_foreach): ditto.
- * error.c (rb_compile_error_with_enc, rb_compile_error),
- (rb_compile_bug): deprecate internal functions.
+ * io.c (rb_io_s_readlines): ditto.
- * parse.y (parser_yyerror): construct exception message with
- source code and caret.
+ * io.c (rb_io_s_read): ditto.
-Thu Dec 24 17:25:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jun 11 15:23:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (append_compile_error), parse.y (compile_error):
- preserve encoding of source file name in exceptions.
+ * lib/uri/generic.rb (URI::Generic::inspect): use Kernel#to_s instead
+ object_id with printf. [ruby-dev:33347]
- * error.c (rb_compile_error_str, rb_compile_bug_str): add.
+Wed Jun 11 15:00:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 24 16:17:47 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * configure.in: Remove wrong assumptions about Cygwin. a patch from
+ Corinna Vinschen in [ruby-Bugs-17018].
- * common.mk (fake.rb): $(arch)-fake.rb must depend on miniruby because
- it may depend on miniruby.
+Mon Jun 9 18:09:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 24 16:13:05 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * eval.c (eval): check if backtrace is empty. [ruby-core:15040]
- * common.mk (ripper.c): r50045 wrongly replace $(PWD) with ../..
- It is the top of build directory, not topsrcdir.
+Sun Jun 8 06:08:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 24 15:02:42 2015 sorah (Shota Fukumori) <her@sorah.jp>
+ * eval.c (rb_define_alloc_func, rb_undef_alloc_func): should
+ define/undef on a signleton class. [ruby-core:09959]
- * tool/vcs.rb (IO.popen): Refactor. Avoid assigning in condition.
+Sun Jun 8 06:04:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 24 15:01:38 2015 sorah (Shota Fukumori) <her@sorah.jp>
+ * time.c (time_arg): use converted object. [ruby-core:14759]
- * tool/file2lastrev.rb: Fix ArgumentError to work on Ruby 1.8.7.
+Sun Jun 8 06:02:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 24 14:44:08 2015 sorah (Shota Fukumori) <her@sorah.jp>
+ * io.c (fptr_finalize): clear errno first. [ruby-talk:284492]
- * tool/vcs.rb (IO.popen): Enable on Ruby 1.9 where chdir option is not
- supported on IO.popen
+Sun Jun 8 05:59:36 2008 Tadayoshi Funaba <tadf@dotrb.org>
- * tool/vcs.rb (IO.popen): Fix NoMethodError. I guess r49705 was not
- tested... :/
+ * lib/date.rb: don't freeze nil even if 1.8 will not be aware of
+ the issue. [ruby-dev:32677]
-Thu Dec 24 14:57:03 2015 Koichi Sasada <ko1@atdot.net>
+Sun Jun 8 05:54:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * NEWS: rename
- "Implementation changes" section to
- "Supported platform changes" section.
+ * configure.in (TIMEZONE_VOID): check whether timezone requires zero
+ arguments. [ruby-dev:32631]
- * NEWS: add "Implementation improvements" and add several entries.
+Sun Jun 8 05:37:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * NEWS: add NEWS entries by Eric Wong. [ruby-core:72450]
+ * parse.y (f_rest_arg): check if duplicated. [ruby-core:14140]
-Thu Dec 24 00:26:05 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 8 05:32:45 2008 Tanaka Akira <akr@fsij.org>
- * ext/io/console/extconf.rb: fix gem build failure on Windows.
- only win32_vk.inc is included in the gem and no dependencies for
- the header, so that gperf will not be mandatory.
- [ruby-core:72453] [Bug #11866]
+ * gc.c (stack_end_address): use local variable address instead of
+ __builtin_frame_address(0) to avoid SEGV on SunOS 5.11 on x86 with
+ gcc (GCC) 3.4.3 (csl-sol210-3_4-20050802).
- * ext/io/console/io-console.gemspec: include depend file and
- win32_vk header.
+Sun Jun 8 05:24:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 23 23:58:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (RUBY_CHECK_VARTYPE): check if a variable is defined
+ and its type.
- * io.c (rb_readwrite_syserr_fail): works with the given errno than
- thread local errno.
+ * configure.in (timezone, altzone): check for recent cygwin.
-Wed Dec 23 17:57:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * missing/strftime.c (strftime): fix for timezone. [ruby-dev:32536]
- * file.c, io.c, util.c: prefer rb_syserr_fail with saved errno
- over setting errno then call rb_sys_fail, not to be clobbered
- potentially and to reduce thread local errno accesses.
+ * lib/mkmf.rb (try_var): should fail for functions.
-Wed Dec 23 11:58:52 2015 Yuichiro Kaneko <yui-knk@ruby-lang.org>
+ * ext/readline/extconf.rb: should use have_func for functions instead
+ of have_var.
- * string.c: Fix document. Default value of the first
- argument of `String#split` is not `$;` but `nil`.
- When `nil` is passed as first argument, `$;` is used.
- [ci skip] [Bug #11729] [ruby-dev:49378]
+Sun Jun 8 05:08:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 23 07:15:17 2015 Eric Wong <e@80x24.org>
+ * lib/cgi.rb (read_multipart): exclude blanks from header values.
+ [ruby-list:44327]
- * ext/socket/init.c (rsock_init_sock): reject reserved FDs
- [ruby-core:72445] [Bug #11862]
+Sun Jun 8 05:02:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 23 02:59:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bignum.c (rb_cstr_to_inum): trailing spaces may exist at sqeezing
+ preceeding 0s. [ruby-core:13873]
- * configure.in (__STDC_WANT_LIB_EXT1__): necessary to use memset_s
- in strict C99 mode.
+Sun Jun 8 04:58:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 23 02:34:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (error_print): put newline unless multiple line message ends
+ with a newline. [ruby-dev:32429]
- * regexec.c (match_at): move direct threaded VM code to get rid of
- mixed declarations and code, and enable it only for gcc since it
- depends on a gcc extension.
+Sun Jun 8 04:55:26 2008 James Edward Gray II <jeg2@ruby-lang.org>
-Wed Dec 23 02:23:19 2015 Yuki Nishijima <mail@yukinishijima.net>
+ Merged 14070 from trunk.
+
+ * lib/xmlrpc/server.rb (XMLRPC::Server#server): Improve signal handling so
+ pressing control-c in the controlling terminal or sending SIGTERM stops
+ the XML-RPC server.
- * gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0
+Sun Jun 8 04:49:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * NEWS: Add news about the did_you_mean gem
+ * parse.y (newline_node): set line from outermost node before removing
+ NODE_BEGIN. [ruby-dev:32406]
-Wed Dec 23 02:18:57 2015 Jake Worth <jakeworth82@gmail.com>
+Sun Jun 8 04:37:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/contributing.rdoc: [DOC] remove an extra word "here".
- [Fix GH-1169]
+ * parse.y (stmt): remove unnecessary NODE_BEGIN. [ruby-core:13814]
-Wed Dec 23 01:58:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 8 04:16:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regexec.c (USE_DIRECT_THREADED_VM): enable direct threaded VM by
- the default.
+ * eval.c (rb_alias): do not call hook functions until initialization
+ finishes. [ruby-talk:279538]
-Tue Dec 22 22:15:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 8 04:14:16 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * gc.c (internal_object_p): should not expose singleton classes
- without a metaclass. based on patches by ko1 and shugo.
- [Bug #11740]
+ * ext/win32ole/win32ole.c (ole_invoke): bug fix. [ruby-talk:279100]
- * class.c (rb_singleton_class_object_p): added.
+Sun Jun 8 03:59:31 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Dec 22 22:15:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/curses/extconf.rb: check macro if cannot find func.
+ [ruby-list:44224]
- * ext/io/console/io-console.gemspec: bump up to 0.4.4.
+Sun Jun 8 03:52:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Dec 22 22:11:06 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/cgi/session.rb (CGI::Session::FileStore::restore): use
+ lockfile for exclusive locks. a patch from <tommy AT tmtm.org>.
+ [ruby-dev:32296]
- * NEWS: Added news entry of Psych 2.0.17
+Sun Jun 8 03:49:15 2008 Tanaka Akira <akr@fsij.org>
-Tue Dec 22 22:09:01 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * missing/isinf.c (isinf): don't define if the macro is defined.
- * NEWS: Added news entry of RDoc 4.2.1
+Sun Jun 8 03:42:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Dec 22 21:20:00 2015 Kenta Murata <mrkn@mrkn.jp>
+ * numeric.c (round): fallback definition.
- * ext/bigdecimal/bigdecimal.gemspec: bump version to 1.2.8.
+ * numeric.c (flo_divmod, flo_round): use round() always.
+ [ruby-dev:32269]
-Tue Dec 22 21:08:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Jun 8 03:42:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rdoc.rb: bump version to 4.2.1. It contains following fixes.
- https://github.com/rdoc/rdoc/pull/340
- https://github.com/rdoc/rdoc/pull/341
- https://github.com/rdoc/rdoc/pull/367
- https://github.com/rdoc/rdoc/pull/368
- * lib/rdoc/*: ditto.
- * test/rdoc/*: ditto.
+ * numeric.c (flodivmod): work around for infinity.
-Tue Dec 22 20:25:33 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * numeric.c (flo_divmod): work around for platforms have no round().
+ [ruby-dev:32247]
- * ext/psych/lib/psych.rb: bump version to 2.0.17
- * ext/psych/psych.gemspec: ditto.
+Sun Jun 8 03:42:10 2008 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-Tue Dec 22 20:14:47 2015 Koichi Sasada <ko1@atdot.net>
+ * numeric.c (flo_divmod): round to the nearest integer.
+ [ ruby-Bugs-14540 ]
- * vm_insnhelper.c: move vm_callee_setup_block_arg() (and related
- functions) to the latter location.
- This moving recovers performance a little.
- [Bug #11829]
+Sun Jun 8 03:28:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Dec 22 15:21:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rexml/encodings/SHIFT-JIS.rb (REXML::Encoding): place -x for
+ nkf conversion. a patch from <moonwolf AT moonwolf.com>.
+ [ruby-dev:32183]
- * string.c (str_compat_and_valid): as scrub does nothing for dummy
- encoding string now, incompatible encoding is not a matter.
+Sun Jun 8 03:07:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Dec 22 14:31:28 2015 Toru Iwase <tietew@tietew.net>
+ * lib/optparse.rb (OptionParser::Switch::summarize): fix for long form
+ option with very long argument. a patch from Kobayashi Noritada
+ <nori1 AT dolphin.c.u-tokyo.ac.jp> in [ruby-list:44179].
- * ext/cgi/escape/escape.c (optimized_escape_html): CGI.escapeHTML
- should return unfrozen new string.
- [ruby-core:72426] [Bug #11858]
+Sun Jun 8 03:04:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Dec 22 05:39:58 2015 Takashi Kokubun <takashikkbn@gmail.com>
+ * numeric.c (fix_pow): returns infinity for 0**-1. [ruby-dev:32084]
- * ext/cgi/escape/escape.c (preserve_original_state): Preserve
- original state for tainted and frozen. [Fix GH-1166]
- [ruby-dev:49451] [Bug #11855]
+Sun Jun 8 02:58:19 2008 James Edward Gray II <jeg2@ruby-lang.org>
-Tue Dec 22 03:57:20 2015 Eric Wong <e@80x24.org>
+ Merged 13781 from trunk.
- * ext/socket/init.c (rsock_init_sock): check FD after validating
- * test/socket/test_basicsocket.rb (test_for_fd): new
- [ruby-core:72418] [Bug #11854]
+ * lib/net/telnet.rb (Net::Telnet#login): Allowing "passphrase" in
+ addition to "password" for Telnet login prompts. [ruby-Bugs-10746]
-Mon Dec 21 21:29:45 2015 Naohisa Goto <ngotogenome@gmail.com>
+Wed Oct 25 06:46:21 2007 James Edward Gray II <jeg2@ruby-lang.org>
- * variable.c (struct ivar_update): rename "extended" to "iv_extended"
- to avoid name conflict with /usr/include/floatingpoint.h on
- Solaris. [Bug #11853] [ruby-dev:49448]
+ Merged 13779 from trunk.
-Mon Dec 21 12:15:32 2015 Kimura Wataru <kimuraw@i.nifty.jp>
+ * lib/net/telnet.rb (Net::Telnet#login): Making the password prompt
+ pattern case insensitive. [ruby-Bugs-10746]
- * test/ruby/test_io.rb: handled rlimit value same as r52277
- [Bug #11852][ruby-dev:49446]
+Sun Jun 8 02:55:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 21 10:21:22 2015 Ilya Vassilevsky <vassilevsky@gmail.com>
+ * io.c (rb_io_tell, rb_io_seek): check errno too. [ruby-dev:32093]
- * lib/net/http.rb (open_timeout): update default value in RDoc
- [ruby-core:72413]
+Sun Jun 8 01:53:50 2008 James Edward Gray II <jeg2@ruby-lang.org>
-Mon Dec 21 10:18:46 2015 Kazuki Yamaguchi <k@rhe.jp>
+ Merged 13767, 13768, 13769, and 13770 from trunk.
- * vm_backtrace.c (rb_profile_frames): ignore ifunc frames as it
- did before. [ruby-core:72409] [Bug #11851]
+ * lib/xmlrpc/parser.rb (XMLRPC::Convert::dateTime): Fixing a bug that
+ caused time zone conversion to fail for some ISO 8601 date formats.
+ [ruby-Bugs-12677]
-Mon Dec 21 09:33:17 2015 Karol Bucek <kares@users.noreply.github.com>
+ * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Explicitly start
+ the HTTP connection to support keepalive requests. [ruby-Bugs-9353]
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLSocket): fix
- NotImplementedError typo. [Fix GH-1165]
+ * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Improving the error
+ message for Content-Type check failures. [ruby-core:12163]
-Sun Dec 20 20:54:51 2015 Takashi Kokubun <takashikkbn@gmail.com>
+ * lib/xmlrpc/utils.rb (XMLRPC::ParseContentType#parse_content_type):
+ Making Content-Type checks case insensitive. [ruby-Bugs-3367]
- * cgi/escape/escape.c: Optimize CGI.escapeHTML for
- ASCII-compatible encodings. [Fix GH-1164]
+Sun Jun 8 01:50:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 20 15:36:46 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * marshal.c (r_bytes0): refined length check. [ruby-dev:32059]
- * lib/erb.rb: revert r53123. It breaks compatibility like thor and
- rspec-rails.
- We should try with Ruby 2.4 or 3.0.
- [Bug #11842][ruby-core:72374]
- * lib/rdoc/erb_partial.rb: ditto.
- * template/verconf.h.tmpl: ditto.
+Sun Jun 8 01:50:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 20 11:43:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (r_bytes0): check if source has enough data.
+ [ruby-dev:32054]
- * parse.y (parser_yylex): allow here documents in labeled
- argument. [ruby-core:72396] [Bug #11849]
+Sun Jun 8 01:41:19 2008 Tanaka Akira <akr@fsij.org>
-Sun Dec 20 11:14:11 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/socket/socket.c (s_accept_nonblock): make accepted fd
+ nonblocking. [ruby-talk:274079]
- * proc.c (rb_mod_define_method): should check Symbol or not.
- [Bug #11850]
+Sun Jun 8 01:36:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_method.rb: add a test.
+ * configure.in (AC_SYS_LARGEFILE): keep results also in command
+ options, to vail out of mismatch. [ruby-list:44114]
-Sun Dec 20 11:01:57 2015 Koichi Sasada <ko1@atdot.net>
+ * mkconfig.rb, lib/mkmf.rb (configuration): add DEFS.
- * proc.c (rb_mod_define_method): fix notation.
+Sun Jun 8 01:31:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 20 10:54:15 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/mkexports.rb: deal with __fastcall name decorations.
+ [ruby-list:44111]
- * proc.c (proc_new): fix notation.
+Sun Jun 8 01:27:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 20 00:29:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * {bcc,win}32/mkexports.rb: explicit data. [ruby-list:44108]
- * proc.c (rb_proc_get_iseq): proc made from symbol does not have
- iseq. fix infinite loop. [ruby-core:72381] [Bug #11845]
+Sun Jun 8 01:15:50 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat Dec 19 20:06:10 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/net/http.rb, lib/open-uri.rb: remove
+ Net::HTTP#enable_post_connection_check. [ruby-dev:31960]
- * enc/windows_1250.c: Should not use C++ style comments (C99 feature).
- [Bug #11843]
+ * lib/net/imap.rb: hostname should be verified against server's
+ indentity as persented in the server's certificate. [ruby-dev:31960]
-Sat Dec 19 17:17:04 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/lib/net/telnets.rb, ext/openssl/lib/net/ftptls.rb: ditto.
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
- use WEBrick::Utils::TimeoutHandler::Thread, which is ignored by
- LeakChecker#find_threads, instead of ::Thread to get rid of
- thread leak checker. since this TimeoutHandler is resident
- during tests because of Singleton, it waits for the next timeout
- if it has any schedules. in the case of nested timeouts, inner
- timeout does not cancel outer timeouts and then those schedules
- still remain.
+Thu Jun 5 16:21:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Dec 19 14:28:01 2015 Jake Worth <jakeworth82@gmail.com>
+ * win32/win32.c (make_cmdvector): adjust escaped successive
+ double-quote handling. (merge from trunk)
- * ext/zlib/zlib.c (Init_zlib): [DOC] Fix double-word typo and
- grammatical error. [Fix GH-1162]
+Thu Jun 5 12:26:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Dec 19 14:23:59 2015 Jake Worth <jakeworth82@gmail.com>
+ * win32/win32.c (init_env): initialize HOME and USER environment
+ variables unless set. [ruby-core:12328] (merge from trunk)
- * lib/csv.rb (CSV#initialize): [DOC] Fix double-word typo.
- [Fix GH-1161]
+ * win32/win32.c (NtInitialize, getlogin): ditto.
-Sat Dec 19 10:33:33 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * configure.in, win32/Makefile.sub (LIBS): need to link shell32
+ library for SH* functions on mswin32 and mingw32.
- * enc/iso_8859_2.c, enc/windows_1250.c: separate Windows-1250
- from ISO-8859-2 to fix 0x80..0x9e range (from Kimihito Matsui)
+Thu Jun 5 12:22:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Dec 18 21:26:54 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * gc.c (id2ref): valid id should not refer T_VALUE nor T_ICLASS.
+ [ruby-dev:31911]
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler): To prevent
- potential deadlocks, Queue is used to tell update of @timeout_info
- instead of sleep and wakeup. [Bug #11742] [ruby-dev:49387]
+Wed Jun 4 16:41:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 18 17:24:09 2015 Koichi Sasada <ko1@atdot.net>
+ * Makefile.in (ext/extinit.o): use $(OUTFLAG) as well as other
+ objects. [ruby-Bugs-14228]
- * compile.c (ibf_load_object_string): use fstring if frozen string.
+Tue Jun 3 16:15:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 18 16:54:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (yyerror): limit error message length. [ruby-dev:31848]
- * ext/stringio/stringio.c (strio_set_encoding): add StringIO's own
- encoding and separate it from the buffer string to override the
- encoding of string when reading. [ruby-core:72189] [Bug #11827]
- note that setting the encoding of its buffer string directly
- without StringIO#set_encoding may cause unpredictable behavior.
+ * regex.c (re_mbc_startpos): separated from re_adjust_startpos.
-Fri Dec 18 16:50:35 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jun 3 15:45:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (ibf_load_setup): check tainted string argument.
+ * gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
+ [ruby-dev:31810]
-Fri Dec 18 16:12:13 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jun 4 19:16:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: define USE_LAZY_LOAD if it is not defined.
+ * eval.c (remove_method): should not remove undef place holder.
+ [ruby-dev:31817]
-Fri Dec 18 15:40:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 3 15:22:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/stringio/stringio.c (strio_unget_bytes): extract from
- strio_ungetbyte to share with strio_ungetc.
+ * process.c (struct rb_exec_arg): proc should be a VALUE.
-Fri Dec 18 12:39:42 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * process.c (rb_f_exec): suppress a warning.
- * doc/syntax/*.rdoc: separated modifier at sentence.
- [ci skip][fix GH-1121] Patch by @clandry94
+ * process.c (rb_detach_process): cast for the platforms where size of
+ pointer differs from size of int.
-Fri Dec 18 12:09:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (rb_f_exec, rb_f_system): should not exceptions after
+ fork. [ruby-core:08262]
- * ext/stringio/stringio.c (strio_ungetbyte): pad with \000 when
- the current position is after the end.
+Wed May 21 01:32:56 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Fri Dec 18 11:24:48 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/webrick/httpservlet/filehandler.rb: should normalize path
+ name in path_info to prevent script disclosure vulnerability on
+ DOSISH filesystems. (fix: CVE-2008-1891)
+ Note: NTFS/FAT filesystem should not be published by the platforms
+ other than Windows. Pathname interpretation (including short
+ filename) is less than perfect.
- * vm_method.c (rb_method_entry_make, check_override_opt_method):
- should check whether a newly created method overrides an optimize
- method in case the method is defined in a prepended module of a
- built-in class.
- [ruby-core:72226] [Bug #11836]
+ * lib/webrick/httpservlet/abstract.rb
+ (WEBrick::HTTPServlet::AbstracServlet#redirect_to_directory_uri):
+ should escape the value of Location: header.
-Fri Dec 18 11:09:38 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/webrick/httpservlet/cgi_runner.rb: accept interpreter
+ command line arguments.
- * vm.c (vm_exec): call RUBY_DTRACE_CMETHOD_RETURN_HOOK instead of
- RUBY_DTRACE_METHOD_RETURN_HOOK.
+Sun May 18 01:57:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 18 10:24:44 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (isdirsep): backslash is valid path separator on cygwin too.
+ backported from 1.8 HEAD.
- * lib/irb/ruby-lex.rb: fixed parse error for striped heredocument syntax.
- [fix GH-1127] Patch by @koic
+Sat May 17 23:53:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 18 09:44:47 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (file_expand_path): fix for short file name on Cygwin.
- * ext/pty/pty.c: fix double words typo.
- [ci skip][fix GH-1157] Patch by @jwworth
+Sat May 17 23:50:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 18 09:42:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (OpenFile): prevent conflict on Windows.
- * ext/nkf/nkf-utf8/utf8tbl.c: fix a typo.
- [ci skip][fix GH-1159] Patch by @akshay-vishnoi
- * ext/nkf/nkf-utf8/utf8tbl.h: ditto.
+ * file.c (USE_NTFS): fixed merge miss.
-Fri Dec 18 07:39:01 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sat May 17 12:36:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (rb_vm_check_redefinition_opt_method): should check the real
- class instead of the origin iclass.
- [ruby-core:72188] [Bug #11826]
+ * file.c (file_expand_path): rb_str_set_len is not backported.
-Thu Dec 17 22:13:10 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sat May 17 12:15:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_args.c (vm_caller_setup_arg_block): remove code for ifunc
- because it was made unnecessary by r52138.
+ * file.c (file_expand_path): support for alternative data stream
+ and ignored trailing garbages of NTFS.
-Thu Dec 17 16:13:10 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * file.c (rb_file_s_basename): ditto.
- * proc.c (rb_block_arity): should not call GetProcPtr() for symbols.
- [ruby-core:72205] [Bug #11830]
+ * file.c (rb_file_s_extname): ditto.
-Thu Dec 17 14:16:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat May 17 10:18:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
- * string.c (rb_str_scrub): the result should be infected by the
- original string.
+ * re.c (rb_reg_search): need to free allocated buffer in re_register.
-Thu Dec 17 13:35:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Mar 3 23:34:13 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * transcode.c (rb_econv_substr_append, econv_primitive_convert):
- the result should be infected by the original string.
+ * lib/webrick/httpservlet/filehandler.rb: should normalize path
+ separators in path_info to prevent directory traversal attacks
+ on DOSISH platforms.
+ reported by Digital Security Research Group [DSECRG-08-026].
-Thu Dec 17 09:46:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/httpservlet/filehandler.rb: pathnames which have
+ not to be published should be checked case-insensitively.
- * re.c (reg_names_iter): should consider encoding of regexp.
- [ruby-core:72185] [Bug #11825]
+Mon Dec 3 08:13:52 2007 Kouhei Sutou <kou@cozmixng.org>
-Thu Dec 17 03:52:10 2015 Koichi Sasada <ko1@atdot.net>
+ * test/rss/test_taxonomy.rb, test/rss/test_parser_1.0.rb,
+ test/rss/test_image.rb, test/rss/rss-testcase.rb: ensured
+ declaring XML namespaces.
- * vm.c (vm_make_env_each): should not compare with Qfalse and FALSE.
- Pointed at http://d.hatena.ne.jp/nagachika/20151216/ruby_trunk_changes_53128_53163
+Sun Sep 23 21:57:25 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Dec 17 03:15:25 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/net/http.rb: an SSL verification (the server hostname should
+ be matched with its certificate's commonName) is added.
+ this verification can be skipped by
+ "Net::HTTP#enable_post_connection_check=(false)".
+ suggested by Chris Clark <cclark at isecpartners.com>
- * vm_insnhelper.c (vm_call_method_each_type): should not set fastpath
- with keyword arguments for VM_METHOD_TYPE_ATTRSET type methods.
+ * lib/net/open-uri.rb: use Net::HTTP#enable_post_connection_check to
+ perform SSL post connection check.
- Normally, we can not use keyword arguments for this kind of methods,
- (obj.foo = 1), but we can set alias names for them.
- [Bug #11657]
+ * ext/openssl/lib/openssl/ssl.c
+ (OpenSSL::SSL::SSLSocket#post_connection_check): refine error message.
- * test/ruby/test_keyword.rb: add a test for this fix.
+Sun Sep 23 07:49:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 16 20:32:43 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * eval.c, intern.h, ext/thread/thread.c: should not free queue while
+ any live threads are waiting. [ruby-dev:30653]
- * ext/fiddle/handle.c: check tainted string arguments.
- Patch provided by tenderlove and nobu.
+Sun Sep 23 06:05:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/fiddle/test_handle.rb (class TestHandle): add test for above.
+ * ext/stringio/stringio.c (strio_init): separate from strio_initialize
+ to share with strio_reopen properly. [ruby-Bugs-13919]
+Sun Sep 23 05:42:35 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Wed Dec 16 19:30:56 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/rdoc/options.rb (Options::check_diagram): dot -V output
+ changed. [ ruby-Bugs-11978 ], Thanks Florian Frank.
- * vm.c (vm_make_proc_from_block): should convert a Symbol to a Proc.
- [ruby-core:72083] [Bug #11811]
+Wed Sep 19 11:13:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Dec 16 16:17:34 2015 Eric Wong <e@80x24.org>
+ * bignum.c (bigtrunc): RBIGNUM(x)->len may be zero. out of bound
+ access. [ruby-dev:31404]
- * test/ruby/test_io.rb: fix spelling errors
+Mon Sep 17 05:24:13 2007 Sylvain Joyeux <sylvain.joyeux@m4x.org>
-Wed Dec 16 16:04:49 2015 Eric Wong <e@80x24.org>
+ * ext/thread/thread.c (lock_mutex): should take care of threads
+ not waiting any longer; there cases of a thread raising
+ exceptions. [ ruby-Bugs-11901 ]
- * NEWS: note IO#advise change [ruby-core:72168]
+ * test/thread/test_thread.rb (test_mutex_exception_handling):
+ test for above.
-Wed Dec 16 15:35:13 2015 Koichi Sasada <ko1@atdot.net>
+Mon Sep 17 05:01:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c: fix mark miss for proc given as passed block.
- [Bug #11750]
+ * runruby.rb: fix incomplete backport r12339.
- * vm.c (vm_make_proc_from_block): should return a Proc object
- if block is given. Previous implementation returns
- a Proc object only when corresponding Proc object is not
- available.
+Mon Sep 17 04:56:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (vm_make_env_each): ditto.
+ * test/thread/test_thread.rb (test_local_barrier),
+ test/thread/lbtest.rb: test for [ruby-dev:30653].
- * test/ruby/test_proc.rb: add a test for this bug.
+Mon Sep 17 04:52:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Dec 16 12:24:59 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ruby.c (proc_options): -W should be allowed in RUBYOPT
+ environment variable. [ruby-core:12118]
- * test_struct.rb: Test that initialize is overridable [#11708]
+Mon Sep 17 04:37:10 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Dec 16 10:49:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * range.c (range_step): fixed integer overflow. [ruby-dev:31763]
- * parse.y (block_command, block_call): fix `&.` calls after
- block_call. [Feature #11537]
+Fri Sep 7 17:06:16 2007 Vincent Isambart <vincent.isambart@gmail.com>
-Wed Dec 16 00:53:45 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * eval.c (rb_thread_start_0): should unset time_thread_alive_p.
+ [ruby-talk:257219], [ruby-core:11542], [ruby-dev:31253]
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler): Acquire
- TimeoutMutex only when accessing @timeout_info for avoiding
- potential deadlock. [Bug #11742] [ruby-dev:49387]
+Fri Sep 7 16:39:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Dec 16 00:39:27 2015 Jake Worth <jakeworth82@gmail.com>
+ * array.c (rb_ary_subseq): need integer overflow check.
+ [ruby-dev:31736]
- * doc/extension.rdoc: [DOC] fix double-word typo. [Fix GH-1153]
+ * array.c (rb_ary_splice): ditto. [ruby-dev:31737]
-Wed Dec 16 00:25:41 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * array.c (rb_ary_fill): ditto. [ruby-dev:31738]
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
- TimeoutMutex should be acquired when accessing @timeout_info.
- To avoid deadlock, interrupt() calls are delayed.
- Due to the mutex, it is safe to treat ary without ary.dup.
- [Bug #11742] [ruby-dev:49387]
+ * string.c (rb_str_splice): integer overflow for length.
+ [ruby-dev:31739]
-Tue Dec 15 23:13:10 2015 Naohisa Goto <ngotogenome@gmail.com>
+Fri Sep 7 16:33:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c: Delete excess semicolon after RUBY_ALIAS_FUNCTION().
- Suppress "syntax error: empty declaration" warnings by
- Oracle Solaris Studio 12.x on Solaris. [Bug #11821]
+ * include/ruby/defines.h (flush_register_windows): call "ta 0x03"
+ even on Linux/Sparc. [ruby-dev:31674]
- * hash.c: ditto, after NOINSERT_UPDATE_CALLBACK().
+Fri Sep 7 16:09:39 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Tue Dec 15 18:04:04 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * ext/win32ole/win32ole.c (ole_type_progid, reg_enum_key,
+ reg_get_val, ole_wc2mb): fix the bug. Thanks, arton.
+ [ruby-dev:31576]
- * NEWS: added news about EBCDIC encoding
+Fri Sep 7 15:50:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Dec 15 17:57:57 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * eval.c (mnew): should preserve noex as safe_level.
- * enc/ebcdic.h, enc/trans/ebcdic.trans,
- test/ruby/test_transcode.rb: Fixed encoding name
- to the correct one in the IANA registry (IBM037)
- and added an alias (ebcdic-cp-us)
+ * eval.c (rb_call0): tighten security check condition..
-Tue Dec 15 16:19:26 2015 Takashi Kokubun <takashikkbn@gmail.com>
+Fri Sep 7 15:43:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/erb.rb: Render erb with array buffer for function call optimization.
- [fix GH-1143]
- * lib/rdoc/erb_partial.rb: ditto.
- * template/verconf.h.tmpl: ditto.
+ * ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc().
-Tue Dec 15 13:50:05 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 7 15:42:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_str_oct): [DOC] mention radix indicators.
- [ruby-core:71310] [Bug #11648]
+ * process.c (detach_process_watcher): should not pass the pointer
+ to an auto variable to the thread to be created. pointed and
+ fix by KUBO Takehiro <kubo at jiubao.org> [ruby-dev:30618]
-Tue Dec 15 12:20:30 2015 Takashi Kokubun <takashikkbn@gmail.com>
+Fri Sep 7 15:40:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/erb.rb: Simplify regexp to optimize erb scanner.
- [fix GH-1144]
+ * sample/test.rb, test/ruby/test_system.rb(valid_syntax?): keep
+ comment lines first.
-Tue Dec 15 11:56:24 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Aug 22 12:40:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/uri/common.rb: make code block for rdoc.
- [ci skip][fix GH-1152] Patch by @Tonkpils
+ * hash.c (rb_hash_delete_key): delete the entry without calling block.
-Tue Dec 15 11:55:08 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * hash.c (rb_hash_shift): should consider iter_lev too.
- * ext/zlib/zlib.c: fix a typo.
- [ci skip][fix GH-1149] Patch by @crismali
+ * hash.c (delete_if_i): use rb_hash_delete_key() so that the block
+ isn't called twice. [ruby-core:11556]
-Tue Dec 15 09:14:14 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+Sun Arg 12 03:56:30 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * tool/transcode_tablegen.rb: detailed documentation
- for transcode_tblgen function [ci skip]
+ * lib/rinda/tuplespace.rb: fix Rinda::TupleSpace keeper thread bug.
+ the thread is started too early. [ruby-talk:264062]
-Mon Dec 14 22:11:11 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * test/rinda/test_rinda.rb: ditto.
- * enc/ebcdic.h: new dummy encoding EBCDIC-US
- * enc/trans/ebcdic.trans: transcodings between EBCDIC-US
- and iso-8859-1 [with code from Andrea Ribuoli]
- * test/ruby/test_transcode.rb: tests for above
- * tool/transcode_tablegen.rb: additional argument for
- method transcode_tblgen
+Wed Aug 22 12:31:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 17:04:14 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * configure.in (ac_cv_func_isinf): set yes also on OpenSolaris.
+ [ruby-Bugs-12859]
- * ext/socket/lib/socket.rb: use safe navigation operator.
- [fix GH-1142] Patch by @mlarraz
- * lib/drb/extservm.rb: ditto.
- * lib/net/http.rb: ditto.
- * lib/net/http/response.rb: ditto.
- * lib/scanf.rb: ditto.
- * lib/uri/generic.rb: ditto.
+Wed Aug 22 12:30:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 17:03:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/rexml/encodings/{ISO-8859-15,CP-1252}.rb: fixed invalid syntax.
- * bootstraptest/runner.rb: use safe navigation operator.
- [fix GH-1142] Patch by @mlarraz
- * test/openssl/test_pair.rb: ditto.
- * test/ruby/test_econv.rb: ditto.
- * test/ruby/test_settracefunc.rb: ditto.
- * test/thread/test_queue.rb: ditto.
+Wed Aug 22 12:29:36 2007 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Dec 14 14:33:35 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/README: fixed a typo.
- * lib/xmlrpc.rb: added documentation for parser details.
- [ci skip][fix GH-1124] Patch by @jrafanie
+Wed Aug 22 12:13:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 11:46:52 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/extmk.rb (extmake): save all CONFIG values.
- * enum.c: fix a typo in documentation.
- [ci skip][fix GH-1140] Patch by @jutaz
- * io.c: ditto.
- * iseq.c: ditto.
- * numeric.c: ditto.
- * process.c: ditto.
- * string.c: ditto.
- * vm_trace.c: ditto.
+ * ext/extmk.rb (extmake): remove mkmf.log at clean, and extconf.h at
+ distclean, respectively.
-Mon Dec 14 11:41:59 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/extmk.rb: remove rdoc at clean, and installed list file at
+ distclean, respectively.
- * lib/cgi.rb: fix a typo in documentation.
- [ci skip][fix GH-1140] Patch by @jutaz
+Wed Aug 22 11:49:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 11:31:00 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * sprintf.c (rb_f_sprintf): should not check positional number as
+ width. [ruby-core:11838]
- * compile.c: fix typos.
- [ci skip][fix GH-1140] Patch by @jutaz
- * dir.c: ditto.
- * gc.c: ditto.
- * io.c: ditto.
- * node.h: ditto.
- * thread_pthread.c: ditto.
- * vm_insnhelper.c: ditto.
- * vsnprintf.c: ditto.
+Wed Aug 22 11:47:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 11:27:01 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * bignum.c (rb_big_aref): check for Bignum index range.
+ [ruby-dev:31271]
- * enc/iso_2022_jp.h: fix typos.
- [ci skip][fix GH-1140] Patch by @jutaz
- * enc/utf_16_32.h: ditto.
- * enc/utf_7.h: ditto.
+Wed Aug 22 11:41:44 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 14 11:25:57 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * dln.c (conv_to_posix_path): removed.
- * benchmark/bm_app_aobench.rb: fix typos.
- [ci skip][fix GH-1140] Patch by @jutaz
- * benchmark/bm_vm_thread_pipe.rb: ditto.
+ * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): return
+ VALUE instead of a pointer to static buffer.
-Sun Dec 13 23:46:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ruby.c (push_include_cygwin): fixed buffer overflow.
+ [ruby-dev:31297]
- * parse.y (trace_lex_state): trace lex_state changes if yydebug is
- set, and send the messages to rb_stdout.
+ * ruby.c (ruby_init_loadpath): not convert built-in paths.
- * parse.y (rb_parser_printf): store YYPRINTF messages per lines
- so that lex_state traces do not mix.
+Wed Aug 22 11:39:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * tool/ytab.sed: add parser argument to yy_stack_print too.
+ * intern.h (is_ruby_native_thread): removed since declared as an int
+ function in ruby.h already.
-Sun Dec 13 20:41:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Aug 22 11:00:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (build_lex_state_name, trace_lex_state): lex_state is
- now bit flags and can be set 2 bits or more.
+ * lib/mkmf.rb (init_mkmf): should remove mkmf.log too.
-Sun Dec 13 20:26:30 2015 Yuki Yugui Sonoda <yugui@yugui.jp>
+Wed Aug 22 10:57:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_syntax.rb: fix typo in test
+ * ext/openssl/ossl_config.c (ossl_config_set_section): do not
+ initialize aggregations with dynamic values. [ruby-talk:259306]
-Sun Dec 13 20:12:14 2015 Yuki Yugui Sonoda <yugui@yugui.jp>
+Wed Aug 22 10:55:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parse_percent): Allow %-literals in labeled arg as
- r51624 did for parentheses.
- Fixes [ruby-core:72084] [Bug #11812].
+ * eval.c (get_backtrace): check the result more.
+ [ruby-dev:31261] [ruby-bugs-12398]
-Sun Dec 13 20:02:15 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Aug 22 10:36:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ChangeLog: fix a typo
+ * bignum.c (rb_big_lshift, rb_big_rshift): separated functions
+ to get rid of infinite recursion. fixed calculation in edge
+ cases. [ruby-dev:31244]
-Sun Dec 13 19:54:26 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * numeric.c (rb_fix_lshift, rb_fix_rshift): ditto.
- * test/lib/envutil.rb: move envutil's assertions under Test::Unit::Assertion.
- * test/lib/test/unit/assertions.rb: ditto.
+Wed Aug 22 10:29:45 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 19:24:20 2015 Yuki Yugui Sonoda <yugui@yugui.jp>
+ * bignum.c (rb_big_pow): refine overflow check. [ruby-dev:31242]
- * parse.y (lex_state_name): Make it return the correct names.
- Add new names to follow r51617; Indices ffs(2) returns are 1-origin.
+Wed Aug 22 10:26:59 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Dec 13 18:40:45 2015 Yuki Yugui Sonoda <yugui@yugui.jp>
+ * time.c (time_succ): Time#succ should return a time object in the
+ same timezone mode to the original. [ruby-talk:260256]
- * parse.y: debug output of lex_state transition if PARSER_DEBUG
+Wed Aug 22 10:24:00 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Dec 13 18:49:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c (fix_pow): integer power calculation: 0**n => 0,
+ 1**n => 1, -1**n => 1 (n: even) / -1 (n: odd).
- * io.c (parse_mode_enc): preserve encoding of mode string in
- warnings.
+ * test/ruby/test_fixnum.rb (TestFixnum::test_pow): update test
+ suite. pow(-3, 2^64) gives NaN when pow(3, 2^64) gives Inf.
- * io.c (io_encname_bom_p): check BOM prefix only, not including
- UTF prefix.
+Wed Aug 22 10:23:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (parse_mode_enc): warn BOM with non-UTF encoding.
+ * lib/base64.rb (Base64::b64encode): should not specify /o option
+ for regular expression. [ruby-dev:31221]
- * io.c (parse_mode_enc): fix buffer overflow.
+Wed Aug 22 10:20:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 18:35:57 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * sprintf.c (rb_f_sprintf): more checks for format argument.
+ [ruby-core:11569], [ruby-core:11570], [ruby-core:11571],
+ [ruby-core:11573]
- * ext/fiddle/function.c (initialize): check all arguments first.
- reported by Marcin 'Icewall' Noga of Cisco Talos.
+Wed Aug 22 10:13:45 2007 pegacorn <subscriber.jp AT gmail.com>
- * ext/fiddle/conversions.h (PTR2NUM): use signed integer to make
- Fixnum for negative values.
+ * ext/digest/digest.c (rb_digest_instance_update,
+ rb_digest_instance_finish, rb_digest_instance_reset,
+ rb_digest_instance_block_length): %s in rb_raise() expects char*.
+ [ruby-dev:31222]
-Sun Dec 13 18:33:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl.h: include ossl_pkcs5.h. [ruby-dev:31231]
- * pack.c (pack_pack): always check index range against the
- receiver array length, which can be shortened by elements
- conversion. reported by Marcin 'Icewall' Noga of Cisco Talos.
+ * ext/openssl/ossl_pkcs5.h: new file for PKCS5. [ruby-dev:31231]
-Sun Dec 13 18:28:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_x509name.c (ossl_x509name_to_s): use ossl_raise()
+ instead of rb_raise(). [ruby-dev:31222]
- * ext/psych/psych_emitter.c (start_document): should not exceed
- tags array range.
+ * ext/sdbm/_sdbm.c: DOSISH platforms need io.h. [ruby-dev:31232]
- * ext/psych/psych_emitter.c (start_document): ensure string before
- encoding conversion.
+ * ext/syck/syck.h: include stdlib.h for malloc() and free().
+ [ruby-dev:31232]
-Sun Dec 13 18:26:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/syck.h (syck_parser_set_input_type): prototype added.
+ [ruby-dev:31231]
- * ext/tk/tkutil/tkutil.c (tk_hash_kv): check types of array
- argument. reported by Marcin 'Icewall' Noga of Cisco Talos.
+ * win32/win32.c: include mbstring.h for _mbspbrk(). [ruby-dev:31232]
- * ext/tk/tkutil/tkutil.c (cbsubst_table_setup): check length of
- argument arrays for each access, as callback methods can modify
- them. reported by Marcin 'Icewall' Noga of Cisco Talos.
+ * win32.h (rb_w32_getcwd): prototype added. [ruby-dev:31232]
- * ext/tk/tkutil/tkutil.c (cbsubst_table_setup): check types of
- argument elements. reported by Marcin 'Icewall' Noga of Cisco
- Talos.
+Wed Aug 22 10:11:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 18:19:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bignum.c (rb_cstr_to_inum): check leading non-digits.
+ [ruby-core:11691]
- * ext/win32ole/win32ole.c (ole_vstr2wc): check argument type, vstr
- must be a String here. reported by Marcin 'Icewall' Noga of
- Cisco Talos.
+Wed Aug 22 10:07:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 16:41:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bignum.c (rb_big_neg): SIGNED_VALUE isn't in 1.8.
- * configure.in (BOOTSTRAPRUBY): make BASERUBY full path before
- building ruby to get rid of unexpectedly invoking built ruby.
- [ruby-core:72065] [Bug #11807]
+ * bignum.c (bigtrunc): do not empty Bignum. [ruby-dev:31229]
- * configure.in (BOOTSTRAPRUBY): use MINIRUBY but not BASERUBY
- unless cross compiling. [ruby-core:72065] [Bug #11807]
+Wed Aug 22 10:02:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Dec 13 14:17:19 2015 Akinori MUSHA <knu@iDaemons.org>
+ * numeric.c (fix_pow): 0**2 should not raise floating point
+ exception. [ruby-dev:31216]
- * test/test_shellwords.rb (TestShellwords): Add many more tests
- for handling whitespace characters and frozenness.
+Wed Aug 22 10:01:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 14:16:09 2015 Akinori MUSHA <knu@iDaemons.org>
+ * win32/win32.c (CreateChild): enclose command line except for
+ command.com which can not handle quotes. [ruby-talk:258939]
- * lib/shellwords.rb (Shellwords#shellsplit): Document that this
- method does not treat shell metacharacters as such.
+Wed Aug 22 09:58:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 12:17:43 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb (link_command, cc_command, cpp_command): do not expand
+ ::CONFIG which is an alias of MAKEFILE_CONFIG.
- * lib/shellwords.rb (shellescape): duplicate frozen literal
- * test/test_shellwords.rb (test_stringification): new test
+Wed Aug 22 09:55:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 11:47:35 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * struct.c (rb_struct_init_copy): disallow changing the size.
+ [ruby-dev:31168]
- * object.c (rb_inspect): check the default internal encoding as
- String#inspect do.
- [ruby-dev:49415] [Bug #11787]
+Wed Aug 22 09:54:28 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sun Dec 13 11:38:12 2015 Akinori MUSHA <knu@iDaemons.org>
+ * random.c: documentation fix. srand(0) initializes PRNG with '0',
+ not with random_seed.
- * lib/shellwords.rb: Turn on frozen-string-literal after fixing
- shellsplit.
+Wed Aug 22 09:53:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 10:44:44 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * bcc32/{Makefile.sub,setup.mak}: remove surplus slash from srcdir.
- * KNOWNBUGS.rb: Fixed typo, made more explicit [ci skip]
+Wed Aug 22 09:46:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 10:26:47 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * sprintf.c (rb_f_sprintf): sign bit extension should not be done
+ if FPLUS flag is specified. [ruby-list:39224]
- * ext/openssl/ossl_ssl.c (ssl_npn_select_cb_common): fix parsing
- protocol list.
- The protocol list from OpenSSL is not null-terminated.
- patched by Kazuki Yamaguchi [Bug #11810] [ruby-core:72082]
+Wed Aug 22 09:41:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Dec 13 06:40:30 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * array.c (rb_ary_initialize): should call rb_ary_modify() first.
+ [ruby-core:11562]
- * lib/ostruct.rb: Have OpenStruct#dig raise if argument is not a
- symbol
- nor a string. See [#11762]
+Wed Aug 22 09:40:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 13 00:05:42 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * parse.y (yylex): return non-valid token for an invalid
+ instance/class variable name. a patch from from Yusuke ENDOH
+ <mame AT tsg.ne.jp>. [ruby-dev:31095]
- * vm_insnhelper.c (vm_call_method_missing): method_missing should
- not be refined.
- [ruby-core:72080] [Bug #11809]
+Wed Aug 22 09:39:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 12 23:00:17 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * parse.y (dsym): return non-null NODE even if yyerror(). based on a
+ patch from from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:31085]
- * ext/nkf/nkf-utf8/nkf.c: Merge nkf 2.1.4.
+Wed Aug 22 09:38:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 12 18:52:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (proc_exec_v, rb_proc_exec): preserve errno.
- * object.c (rb_obj_dig): raise TypeError if an element does not
- have #dig method. [ruby-core:71798] [Bug #11762]
+Wed Aug 22 09:00:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 12 17:59:07 2015 Yuichiro Kaneko <yui-knk@ruby-lang.org>
+ * eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occured
+ in at_exit blocks. [ruby-core:11263]
- * test/ruby/test_regexp.rb: Add test cases for `$KCODE` and `$=` warning
- [Misc #11770][ruby-dev:49398]
+Wed Aug 22 08:52:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 12 17:11:57 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * variable.c (rb_path2class): get rid of dangling pointer caused by
+ optimized out value.
- * doc/NEWS-0.2.2: add description about incompatible change in Hash
- duplicated key overriding policy. [Bug #10315] [Bug #11501]
+Wed Aug 22 08:51:20 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Dec 12 07:44:38 2015 Eric Wong <e@80x24.org>
+ * ext/dl/lib/dl/win32.rb: seems that dl doesn't accept void argument.
+ fixed [ruby-bugs:PR#5489].
- * io.c (do_io_advise): do not raise on ENOSYS
- * test/ruby/test_io.rb (test_advise): do not skip on Errno::ENOSYS
- (test_advise_pipe): ditto
- [ruby-core:72066] [Feature #11806]
+Wed Aug 22 08:49:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 12 07:05:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (darwin): prohibit loading extension libraries to
+ miniruby.
- * enc/windows_1252.c: separate from ISO-8859-1 to fix 0x80..0x9e
- range. [ruby-core:64049] [Bug #10097]
+Wed Aug 22 08:34:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 11 23:33:40 2015 Yusuke Endoh <mame@ruby-lang.org>
+ * eval.c (rb_kill_thread): renamed in order to get rid of conflict
+ with a BeOS system function. [ruby-core:10830]
- * sample/trick2015/: added the award-winning entries of TRICK 2015.
- See https://github.com/tric/trick2015 for the contest outline.
+Wed Aug 22 08:32:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 11 17:59:05 2015 Eric Wong <e@80x24.org>
+ * process.c (ruby_setreuid, ruby_setregid): rename to get rid of name
+ clash.
+Wed Aug 22 08:27:53 2007 Shugo Maeda <shugo@ruby-lang.org>
- * insns.def (opt_case_dispatch): avoid converting Infinity
- * test/ruby/test_optimization.rb (test_opt_case_dispatch_inf): new
- [ruby-dev:49423] [Bug #11804]'
+ * lib/net/imap.rb (ResponseParser#next_token): fixed
+ error message. (backported from HEAD)
-Fri Dec 11 16:48:57 2015 Eric Wong <e@80x24.org>
+ * lib/net/imap.rb (ResponseParser#parse_error): fixed
+ the condition not to refer @token.symbol unexpectedly.
+ Thanks, Dick Monahan. (backported from HEAD)
- * hash.c (rb_num_hash_start): avoid pathological behavior
- [ruby-core:72028] [Feature #11405]
+Wed Aug 22 08:26:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Dec 11 11:58:46 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * marshal.c (w_extended): erroneous check condition when dump
+ method is defined. [ruby-core:10646]
- * NEWS: Mentioned rubygems-2.5.1
+Mon Jun 18 11:29:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 11 11:52:39 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * intern.h, ext/thread/thread.c: moved prototype of rb_thread_status()
+ to get rid of error in C++. [ruby-list:43615]
- * lib/rubygems: Update to RubyGems 2.5.1
- * test/rubygems: ditto.
+Sun Jun 10 13:47:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 11 11:38:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_beginendblock.rb (test_should_propagate_signaled):
+ get rid of invoking shell. [ruby-dev:30942]
- * compile.c (iseq_compile_each, ibf_load_object_hash): rehash
- case-dispatch hash to reduce collisions.
- http://d.hatena.ne.jp/ku-ma-me/20151210
+Sat Jun 9 10:40:00 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Fri Dec 11 03:44:43 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * stable version 1.8.6-p36 released.
- * object.c (rb_inspect): dump inspected result with rb_str_escape()
- instead of raising Encoding::CompatibilityError. [Feature #11801]
+Fri Jun 8 17:50:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c (rb_str_escape): added to dump given string like
- rb_str_inspect without quotes and always dump in US-ASCII
- like rb_str_dump.
+ * eval.c (rb_thread_cancel_timer): fix undefined function
-Thu Dec 10 14:59:59 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 30 05:17:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_gc.rb (test_expand_heap): relax condition (1->2).
+ * eval.c (rb_eval): get rid of SEGV at ZSUPER in a block
+ [ruby-dev:30836]
-Thu Dec 10 14:15:59 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed May 30 04:29:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * cont.c: fix a double word typo.
- [Bug #11313][ruby-core:69749]
+ * eval.c (thread_timer): timer thread should not receive any
+ signals. submitted by Sylvain Joyeux. [ruby-core:08546]
-Thu Dec 10 14:13:34 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed May 30 04:18:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/tk/lib/multi-tk.rb: fix typos.
- [Bug #11764][ruby-core:71800]
+ * eval.c (rb_eval_cmd): just return if no exceptions.
+ [ruby-dev:30820]
-Thu Dec 10 11:33:34 2015 Eric Wong <e@80x24.org>
+Tue May 29 11:01:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (iseq_compile_each): reduce needless rb_str_dup
- [ruby-core:72018] <5668DB6E.8000101@ruby-lang.org>
+ * win32/win32.c (rb_w32_opendir): store attributes of the second
+ entries or later too.
-Thu Dec 10 09:32:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (rb_w32_opendir, rb_w32_readdir): eliminate magic
+ numbers.
- * lib/mkmf.rb, lib/shellwords.rb: disable frozen-string-literal.
- [ruby-core:72011] [Bug #11800]
+Thu Jun 7 20:10:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 10 06:33:39 2015 Eric Wong <e@80x24.org>
+ * eval.c, intern.h, ext/thread/thread.c: should not free queue
+ while any live threads are waiting.
+ [ruby-dev:30653]
- * marshal.c (memsize_dump_arg): remove NULL check
- (memsize_load_arg): ditto
+Thu Jun 7 14:53:46 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Dec 10 05:53:18 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (method_inspect): show proper class name.
+ [ruby-talk:248647], Thanks Calamitas.
- * tool/mkconfig.rb: rbconfig must not be frozen-string-literal to
- expand CONFIG hash. [ruby-core:72006] [Bug #11798]
+Sun May 27 05:24:56 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Dec 10 05:03:51 2015 Eric Wong <e@80x24.org>
+ * runruby.rb: eliminate uninitialized variable.
+ [ruby-core:11255]
- * ext/socket/ifaddr.c (ifaddr_mark): remove empty function
- (ifaddr_type): pass zero to rb_data_type_t.function.dmark
+Sun May 27 05:19:03 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Dec 10 04:49:16 2015 Eric Wong <e@80x24.org>
+ * eval.c (mnew): call of super via a method object should work again.
+ [ruby-talk:248647], Thanks Calamitas.
- * proc.c (bm_free): remove, use default free
- (method_data_type): use RUBY_TYPED_DEFAULT_FREE
+ * test/ruby/test_method.rb (TestMethod::test_method_super): test for
+ above fix.
-Thu Dec 10 02:01:41 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 07:29:53 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
- * compile.c (iseq_compile_each): do not add debug information
- without --debug or --debug=frozen-string-literal option
- because String#dup slows down with debug information.
- [Feature #11725]
+ * process.c (proc_exec_v): terminate timer thread in advance.
+ [ruby-dev:30581], Thanks H. Holon.
- * NEWS: apply about it.
+Wed May 23 06:51:46 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
- * test/ruby/test_rubyoptions.rb: catch up this fix with refactoring.
+ * lib/cgi.rb (CGI#[]): get rid of exceptions being raised.
+ [ruby-dev:30740], Thanks Kentaro KAWAMOTO.
-Thu Dec 10 00:06:56 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 05:49:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.c: rename methods
- RubyVM::InstructionSequence#to_binary_format -> #to_binary
- RubyVM::InstructionSequence.from_binary_format -> .load_from_binary
- RubyVM::InstructionSequence.from_binary_format_extra_data ->
- .load_from_binary_extra_data
+ * ext/extmk.rb, ext/purelib.rb, lib/mkmf.rb, runruby.rb: clear default
+ load path to get rid of load pre-installed extensions/libraries.
+ [ruby-core:11017]
- * iseq.c: fix document of iseq.to_binary.
- [Fix GH-1134]
+Wed May 23 06:14:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sample/iseq_loader.rb: catch up this change.
+ * win32/win32.c (move_to_next_entry): loc also must move forward.
+ [ruby-talk:251987]
- * test/lib/iseq_loader_checker.rb: ditto.
+Wed May 23 05:55:04 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Dec 9 17:02:03 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (init_stdhandle): stderr should be without buffering,
+ but mswin32 use buffering when stderr is not connected to tty.
- * regparse.h (SET_NTYPE): get rid of breaking strict aliasing.
- patch by Zarko Todorovski in [ruby-core:71953]. [Bug #11790]
+Wed May 23 05:35:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 9 16:10:37 2015 Koichi Sasada <ko1@atdot.net>
+ * bignum.c (rb_big_pow): truncate all zero BDIGITs. [ruby-dev:30733]
- * vm.c (rb_vm_cref_in_context): Module#define_method in non-class
- expression should be public.
- [Bug #11754]
+Wed May 23 05:17:33 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_method.rb: add a test.
+ * ext/iconv/iconv.c (iconv_s_conv): rdoc fix.
-Wed Dec 9 14:45:27 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 05:10:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_mark_stacked_objects): fix typo.
- reported by XIE Zhibang. [Bug #11763]
+ * eval.c (rb_thread_priority): rdoc fix; the initial value is
+ inherited from the creating thread. [ruby-core:10607]
-Wed Dec 9 14:37:51 2015 Shugo Maeda <shugo@ruby-lang.org>
+Wed May 23 04:22:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/syntax/refinements.rdoc: remove outdated description.
+ * dir.c (do_stat, do_lstat, do_opendir): should not warn ENOTDIR.
+ [ruby-talk:248288]
-Wed Dec 9 09:58:09 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 03:50:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/**/*.c (*_memsize): same as r52986 for extensions.
+ * lib/mkmf.rb (libpathflag): not to append RPATHFLAG to current
+ directory.
-Wed Dec 9 09:46:19 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/mkmf.rb (init_mkmf): add current directory to default
+ library path with highest priority. [ruby-core:10960]
- * .gitignore: ignored ISeq binary format.
+ * lib/mkmf.rb (LINK_SO): LIBPATH to be placed before DLDFLAGS.
-Wed Dec 9 09:34:41 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 03:33:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * *.c (*_memsize): do not check ptr.
- NULL checking is finished Before call of memsize functions.
- See r52979.
+ * lib/monitor.rb (ConditionVariable#wait, mon_enter, mon_exit_for_cond):
+ ensures Thread.critical to be false. [ruby-talk:248300]
-Wed Dec 9 09:25:29 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed May 23 03:25:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/net/smtp/test_response.rb: use Test::Unit. We should use Test::Unit
- without rubygems and rdoc.
+ * util.c (ruby_strtod): exponent is radix 10. [ruby-talk:248272]
-Wed Dec 9 06:26:23 2015 Colin Kelley <colindkelley@gmail.com>
+Wed May 23 03:12:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/uri/generic.rb: enable frozen_string_literal
- (split_userinfo): remove explicit .freeze for string literals
- (check_path): ditto
- (query): ditto
- (fragment): ditto
- (to_s): ditto
- [ruby-core:71910] [Bug #11759]
+ * configure.in (LDFLAGS): prepend -L. instead appending it to
+ XLDFLAGS. [ruby-core:10933]
-Wed Dec 9 06:25:47 2015 Eric Wong <e@80x24.org>
+ * configure.in (Makefile): remove $U for automake from MISSING.
+ [ruby-talk:248171]
- * test/uri/test_generic.rb (to_s): new test
- [ruby-core:71820]
+Wed May 23 02:09:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Dec 9 02:18:52 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (rb_yield_0): should not clear state on TAG_NEXT when
+ it's invoked from within lambda body. [ruby-talk:248136]
- * compile.c (ibf_dump_memsize): should check NULL.
+ * eval.c (proc_invoke): handle TAG_NEXT which would be caused by
+ next in the lambda body as well.
-Wed Dec 9 01:46:35 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Wed May 23 01:55:49 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c (rb_str_init): now accepts new option parameter `encoding'.
- [Feature #11785]
+ * win32/win32.c (rb_w32_fclose, rb_w32_close): need to save errno
+ before calling original fclose()/close().
-Wed Dec 9 00:52:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 23 01:42:29 2007 Shugo Maeda <shugo@ruby-lang.org>
- * file.c (rb_stat_wr, rb_stat_ww): call get_stat only once and
- reduce checking struct. patch by Yuki Kurihara in
- [ruby-core:71949]. [Misc #11789]
+ * lib/net/imap.rb (disconnect): call shutdown for
+ SSLSocket. Thanks, Technorama Ltd.
-Wed Dec 9 00:24:33 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 23 01:28:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (iseq_ibf_dump): dump extra data just string length.
+ * error.c (rb_notimplement), io.c (pipe_open): removed definite
+ articles and UNIX manual section from messages. [ruby-dev:30690]
- * sample/iseq_loader.rb: add using
- RubyVM::InstructionSequence.from_binary_format_extra_data method
- (commented out).
+ * io.c (pipe_open): raise NotImplementedError for command "-" on
+ platforms where fork(2) is not available. [ruby-dev:30681]
-Mon Dec 9 00:21:19 2015 Yuki Nishijima <mail@yukinishijima.net>
+Wed May 23 00:03:42 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0.rc1
+ * ext/socket/socket.c (s_recv, s_recvfrom): some systems (such as
+ windows) doesn't set fromlen if the socket is connection-oriented.
+ reported by Bram Whillock in [ruby-core:10512] [ruby-Bugs#9061]
-Wed Dec 9 00:17:49 2015 Koichi Sasada <ko1@atdot.net>
+Sat Mar 24 23:40:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (ibf_load_setup): cast to int.
+ * node.h (struct rb_thread.locals): explicit as struct.
+ [ruby-core:10585]
-Wed Dec 9 00:13:09 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c, node.h (enum rb_thread_status, struct rb_thread,
+ rb_curr_thread, rb_main_thread): prefixed. [ruby-core:10586]
- * compile.c (ibf_setup_load): rename to ibf_load_setup().
+ * file.c (chompdirsep): made an unprefixed name static.
- * compile.c (iseq_load_setup): check binary format.
+ * io.c (io_fread): ditto.
-Tue Dec 8 23:30:07 2015 Naohisa Goto <ngotogenome@gmail.com>
+Tue May 22 23:27:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/io/console/test_io_console.rb (run_pty): Avoid waiting twice
- for a process. Fix Errno::ECHILD in TestIO_Console#test_close and
- TestIO_Console#test_sync.
+ * eval.c (ruby_cleanup): exit by SystemExit and SignalException in END
+ block. [ruby-core:10609]
-Tue Dec 8 23:05:47 2015 Koichi Sasada <ko1@atdot.net>
+ * test/ruby/test_beginendblock.rb (test_should_propagate_exit_code):
+ test for exit in END block. [ruby-core:10760]
- * compile.c (iseq_ibf_dump): fix for clang type checker.
+ * test/ruby/test_beginendblock.rb (test_should_propagate_signaled):
+ test for signal in END block.
-Tue Dec 8 23:04:02 2015 Koichi Sasada <ko1@atdot.net>
+Tue May 22 23:14:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.c (iseq_s_load): fix mysterious bug.
+ * eval.c (rb_provided): check for extension library if SOEXT is
+ explicitly given. [ruby-dev:30657]
-Tue Dec 8 22:31:58 2015 Koichi Sasada <ko1@atdot.net>
+Tue May 22 21:29:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * introduce new ISeq binary format serializer/de-serializer
- and a pre-compilation/runtime loader sample.
- [Feature #11788]
+ * bignum.c (rb_big2str0): round up for the most significant digit.
+ [ruby-core:10686]
- * iseq.c: add new methods:
- * RubyVM::InstructionSequence#to_binary_format(extra_data = nil)
- * RubyVM::InstructionSequence.from_binary_format(binary)
- * RubyVM::InstructionSequence.from_binary_format_extra_data(binary)
+Tue May 22 20:53:02 2007 Akinori MUSHA <knu@iDaemons.org>
- * compile.c: implement body of this new feature.
+ * ext/thread/thread.c (remove_one): Preserve List invariants;
+ submitted by: MenTaLguY <mental AT rydia.net>
+ in [ruby-core:10598] and [ruby-bugs:PR#9388].
- * load.c (rb_load_internal0), iseq.c (rb_iseq_load_iseq):
- call RubyVM::InstructionSequence.load_iseq(fname) with
- loading script name if this method is defined.
+Tue Mar 20 15:37:24 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
- We can return any ISeq object as a result value.
- Otherwise loading will be continue as usual.
+ * distruby.rb: Add zip generation.
- This interface is not matured and is not extensible.
- So that we don't guarantee the future compatibility of this method.
- Basically, you shouldn't use this method.
+Fri Mar 16 21:48:11 2007 Akinori MUSHA <knu@iDaemons.org>
- * iseq.h: move ISEQ_MAJOR/MINOR_VERSION (and some definitions)
- from iseq.c.
+ * ext/dl/dl.c (rb_ary2cary): Fix a bug in type validation;
+ submitted by sheepman <sheepman AT sheepman.sakura.ne.jp>
+ in [ruby-dev:30554].
- * encoding.c (rb_data_is_encoding), internal.h: added.
+Fri Mar 16 18:28:06 2007 Akinori MUSHA <knu@iDaemons.org>
- * vm_core.h: add several supports for lazy load.
- * add USE_LAZY_LOAD macro to specify enable or disable of
- this feature.
- * add several fields to rb_iseq_t.
- * introduce new macro rb_iseq_check().
+ * ext/etc/etc.c (etc_getgrgid): Fix a bug in Etc::getgrgid()
+ always returning the (real) group entry of the running process;
+ reported by: UEDA Hiroyuki <ueda AT netforest.ad.jp>
+ in [ruby-dev:30586].
- * insns.def: some check for lazy loading feature.
+Fri Mar 16 16:33:58 2007 Akinori MUSHA <knu@iDaemons.org>
- * vm_insnhelper.c: ditto.
+ * ext/thread/thread.c (unlock_mutex_inner): Make sure that the
+ given mutex is actually owned by the caller; submitted by:
+ Sylvain Joyeux <sylvain.joyeux AT m4x.org> in [ruby-core:10598].
- * proc.c: ditto.
+Fri Mar 16 16:21:35 2007 Akinori MUSHA <knu@iDaemons.org>
- * vm.c: ditto.
+ * ext/thread/thread.c (wait_condvar, lock_mutex): Fix a problem in
+ ConditionVariable#wait that occurs when two threads that are
+ trying to access the condition variable are also in concurrence
+ for the given mutex; submitted by: Sylvain Joyeux
+ <sylvain.joyeux AT m4x.org> and MenTaLguY <mental AT rydia.net>
+ in [ruby-core:10598].
- * test/lib/iseq_loader_checker.rb: enabled iff suitable
- environment variables are provided.
+Fri Mar 16 16:17:27 2007 Akinori MUSHA <knu@iDaemons.org>
- * test/runner.rb: enable lib/iseq_loader_checker.rb.
+ * test/thread/test_thread.rb: Add a test script for the `thread'
+ library. This should result in failure as of now with
+ ext/thread; submitted by: Sylvain Joyeux <sylvain.joyeux AT
+ m4x.org> in [ruby-core:10598].
- * sample/iseq_loader.rb: add sample compiler and loader.
+Wed Mar 14 12:30:00 2007 Shigeo Kobayashi <shigeo@tinyforest.jp>
- $ ruby sample/iseq_loader.rb [dir]
+ * ext/bigdecimal/bigdecimal.c: BigDecimal("-.31") is now
+ treated as ("-0.31") not as ("0.31").
- will compile all ruby scripts in [dir].
- With default setting, this compile creates *.rb.yarb files
- in same directory of target .rb scripts.
+Tue Mar 13 04:04:04 2007 Akinori MUSHA <knu@iDaemons.org>
- $ ruby -r sample/iseq_loader.rb [app]
+ * stable version 1.8.6 released.
- will run with enable to load compiled binary data.
+Tue Mar 13 02:54:17 2007 Akinori MUSHA <knu@iDaemons.org>
-Tue Dec 8 21:21:16 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * lib/cgi.rb (CGI::header): IIS >= 5.0 does not need the nph
+ assumption any more; submitted by MIYASAKA Masaru <alkaid AT
+ coral.ocn.ne.jp> in [ruby-dev:30537].
- * NEWS: mention about Enumerator::Lazy#grep_v.
- [ruby-core:71845] [Feature #11773]
+Mon Mar 12 11:07:44 2007 Akinori MUSHA <knu@iDaemons.org>
-Tue Dec 8 17:36:36 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * ext/openssl/ossl_asn1.c (Init_ossl_asn1): Let rdoc know about
+ externally defined modules; submitted by Technorama
+ Ltd. <oss-ruby AT technorama.net> in [ruby-bugs:PR#4704].
- * string.c: removed unused variable
+ * ext/openssl/ossl_bn.c (Init_ossl_bn): Ditto.
-Tue Dec 8 16:23:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_cipher.c (Init_ossl_cipher): Ditto.
- * enumerator.c (lazy_grep_v): add Enumerator::Lazy#grep_v as well
- as Enumerable, to enumerate lazily.
- [ruby-core:71845] [Feature #11773]
+ * ext/openssl/ossl_digest.c (Init_ossl_digest): Ditto.
-Tue Dec 8 14:27:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_hmac.c (Init_ossl_hmac): Ditto.
- * error.c (name_err_local_variables): new method
- NameError#local_variables for internal use only.
- [Feature #11777]
+ * ext/openssl/ossl_pkey.c (Init_ossl_pkey): Ditto.
-Tue Dec 8 14:20:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_pkey_dh.c (Init_ossl_dh): Ditto.
- * marshal.c (w_objivar): skip internal instance variables in
- T_OBJECT too.
+ * ext/openssl/ossl_pkey_dsa.c (Init_ossl_dsa): Ditto.
-Tue Dec 8 12:58:04 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): Ditto.
- * test/io/console/test_io_console.rb (test_getpass): s.getpass
- should be tested. Narrow ensure block. This reverts r52911.
- [Bug #11780] [ruby-dev:49412]
+ * ext/openssl/ossl_rand.c (Init_ossl_rand): Ditto.
-Tue Dec 8 10:40:21 2015 Eric Wong <e@80x24.org>
+ * ext/openssl/ossl_ssl.c (Init_ossl_ssl): Ditto.
- * benchmark/bm_vm2_case_lit.rb: new benchmark
- * compile.c (case_when_optimizable_literal): add nil/true/false
- * insns.def (opt_case_dispatch): ditto
- * vm.c (vm_redefinition_check_flag): ditto
- * vm.c (vm_init_redefined_flag): ditto
- * vm_core.h: ditto
- * object.c (InitVM_Object): define === explicitly for nil/true/false
- * test/ruby/test_case.rb (test_deoptimize_nil): new test
- * test/ruby/test_optimization.rb (test_opt_case_dispatch): update
- (test_eqq): new test
- [ruby-core:71923] [Feature #11769]
- Original patch by Aaron Patterson <tenderlove@ruby-lang.org>
+Mon Mar 12 01:23:50 2007 Akinori MUSHA <knu@iDaemons.org>
-Tue Dec 8 10:19:02 2015 Jake Worth <jakeworth82@gmail.com>
+ * ext/dl/sym.c (rb_dlsym_inspect): Use "0x%x" rather for pointers.
+ This might not be very right but it is commonly used in other
+ parts of the code; submitted by sheepman <sheepman AT
+ sheepman.sakura.ne.jp> in [ruby-dev:30532].
- * lib/optparse.rb: fix double word typo in the document.
- [Misc #10608] [Fix GH-1126]
+ * ext/dl/ptr.c (rb_dlptr_inspect): Ditto.
-Tue Dec 8 09:03:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dl/lib/dl/import.rb (DL::Importable::Internal::import,
+ DL::Importable::Internal::callback): Avoid race condition for an
+ instance variable; submitted by sheepman <sheepman AT
+ sheepman.sakura.ne.jp> in [ruby-dev:30530].
- * ext/date/date_core.c (d_lite_lshift): should check the argument
- before negation.
+Sun Mar 11 19:04:29 2007 Akinori MUSHA <knu@iDaemons.org>
-Tue Dec 8 08:56:16 2015 Eric Wong <e@80x24.org>
+ * misc/README: Add a note about ruby-electric.el.
- * insns.def (opt_case_dispatch): check Float#=== redefinition
- * test/ruby/test_optimization.rb (test_opt_case_dispatch): new
- [ruby-core:71920] [Bug #11784]
+ * misc/ruby-mode.el (ruby-non-block-do-re): Fix
+ ruby-non-block-do-re. [ruby-core:03719]
-Tue Dec 8 03:56:05 2015 Koichi Sasada <ko1@atdot.net>
+ * misc/inf-ruby.el: Synchronize the comment section with trunk.
- * test/lib/iseq_loader_checker.rb: add iseq dumper/loader checker.
- If you enable this checker (remove `#' in test/runner.rb),
- you can see comparison results between an original iseq disassembed
- result and dumped and loaded iseq disassembed result.
+ * misc/README, misc/rdebug.el: Add rdebug.el, Emacs ruby-debug
+ interface based on rubydb3x.el; submitted by Martin Nordholts
+ <enselic AT gmail.com> in [ruby-bugs:PR#9023].
- There are several bugs around there, because of inexact stack depth
- calculation. Now, I leave these bugs because they are not critical
- and difficult to solve completely.
+Sun Mar 11 17:51:46 2007 Akinori MUSHA <knu@iDaemons.org>
- * test/runner.rb: require test/lib/iseq_loader_checker.rb but
- disabled at default (commented out).
+ * ext/dl/mkcallback.rb (mkfunc): Make sure that a callback
+ function is found in the function table before trying to call
+ it; submitted by sheepman <sheepman AT sheepman.sakura.ne.jp>
+ in [ruby-dev:30524].
-Tue Dec 8 03:45:47 2015 Eric Wong <e@80x24.org>
+Sun Mar 11 17:30:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/extension.rdoc: warn about kwargs performance in C
- [Feature #11339] [ci skip]
+ * eval.c (error_handle): no message when exiting by signal.
-Tue Dec 8 03:44:51 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (ruby_cleanup): re-send signal. [ruby-dev:30516]
- * iseq.c (iseq_load): disable peephole optimization option
- because apply it multiple times change the sequence.
- (iseq != peephole_optimize(load(iseq.to_a)))
+ * eval.c (rb_thread_interrupt): instantiate SignalException.
-Tue Dec 8 03:43:21 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (rb_thread_signal_raise): now takes signal number instead
+ of signal name.
- * compile.c (rb_iseq_build_from_ary): do not allocate table
- if table_size is 0.
+ * intern.h (rb_thread_signal_raise, ruby_default_signal): prototypes.
-Tue Dec 8 03:30:34 2015 Eric Wong <e@80x24.org>
+ * signal.c (esignal_init): takes a signal number and an optional
+ signal name.
- * ext/socket/unixsocket.c (unix_send_io): document args
- (unix_recv_io): ditto
- * test/socket/test_unix.rb (test_fd_passing_class_mode): added
+ * signal.c (interrupt_init): pass SIGINT always.
-Tue Dec 08 02:21:35 2015 Koichi Sasada <ko1@atdot.net>
+ * signal.c (ruby_default_signal): invoke system default signal
+ handler.
- * iseq.c (iseq_translate): at the end of constructing an iseq,
- call RubyVM::InstructionSequence.translate(iseq) if this method
- is defined. If the return value is also an object of
- RubyVM::InstructionSequence, then use it instead of created one.
+ * signal.c (rb_signal_exec, trap): handle SIGTERM. [ruby-dev:30505]
- For example, this method is useful to test iseq dumper/loader
- such as RubyVM::InstructionSequence#to_a and rb_iseq_load().
+Tue Mar 6 19:03:42 2007 Akinori MUSHA <knu@iDaemons.org>
- Because this method is for such internal experimental usage,
- the interface is not matured. For example, this interface has
- no extensibility. Two or more translators can not run
- simultaneously.
+ * ext/digest/lib/md5.rb (MD5::new, MD5::md5): Do not modify
+ Digest::MD5.
- So that we don't guarantee future compatibility of this method.
- Basically, do not use this method.
+ * ext/digest/lib/sha1.rb (SHA1::new, SHA1::sha1): Ditto.
-Tue Dec 8 01:57:13 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/shell/process-controller.rb: fix thread synchronization
+ problem for [ruby-dev:30477].
- * ext/psych/*: update psych to 2.0.16
- * test/psych/*: ditto
+ * ext/digest/lib/md5.rb (MD5::new, MD5::md5): Catch up with
+ Digest's API changes; noted by: Kazuhiro Yoshida <moriq AT
+ moriq.com> in [ruby-dev:30500].
-Mon Dec 7 23:45:20 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/digest/lib/sha1.rb (SHA1::new, SHA1::sha1): Ditto.
- * string.c: introduce String#+@ and String#-@ to control
- String mutability.
- [Feature #11782]
+ * time.c (time_to_s): Back out the format changes; discussed
+ in [ruby-dev:30495].
-Mon Dec 7 23:39:49 2015 Ben Miller <bjmllr@gmail.com>
+ * ext/tk/sample/irbtkw.rbw: fails to exit process.
- * parse.y: add heredoc <<~ syntax. [Feature #9098]
+Mon Mar 5 20:26:10 2007 Akinori MUSHA <knu@iDaemons.org>
-Mon Dec 7 23:06:16 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * time.c (time_to_s): Correct the wrong format which did not
+ really conform to RFC 2822; pointed out by: OHARA Shigeki <os at
+ iij.ad.jp> in [ruby-dev:30487].
- * prelude.rb (IO#read_nonblock): [DOC] add missing options to
- call-seq. [ruby-core:71627] [Bug #11730]
+Sun Mar 4 23:53:27 2007 Minero Aoki <aamine@loveruby.net>
-Mon Dec 7 15:50:50 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * lib/fileutils.rb (mv): could not move a directory between
+ different filesystems. [ruby-dev:30411]
- * .gitignore: added cygruby*.def for Cygwin
+Sun Mar 4 23:46:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 6 19:52:31 2015 Eric Wong <e@80x24.org>
+ * file.c (rb_file_s_utime): allow nil to set the current time.
- * include/ruby/intern.h (rb_autoload): deprecate
- * internal.h (rb_autoload_str): declare
- * load.c (rb_mod_autoload): use rb_autoload_str
- * variable.c (rb_autoload): become compatibility wrapper
- (rb_autoload_str): hoisted out from old rb_autoload
- [ruby-core:71369] [Feature #11664]
+ * lib/fileutils.rb (touch): ditto, and added :mtime and :nocreate
+ options. fixed: [ruby-talk:219037]
-Sun Dec 6 18:25:22 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Mar 4 23:19:00 2007 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/webrick/test_cgi.rb (TestWEBrickCGI#test_cgi): gave up the test
- of binary path info test on Windows because the test had passed
- occasionally as the comment said.
+ * util.c (push_element): should return a int value.
-Sun Dec 6 15:25:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Mar 4 01:06:55 2007 Akinori MUSHA <knu@iDaemons.org>
- * ext/io/console/console.c (console_getpass): add IO#getpass
- method.
+ * lib/set.rb (Set#^, Set#&): Correct documentation. Those methods
+ return sets, not arrays; noted by Oliver Frank Wittich <nietz AT
+ mangabrain.de>.
-Sun Dec 6 08:39:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat Mar 3 21:41:31 2007 Akinori MUSHA <knu@iDaemons.org>
- * ext/json/json.gemspec: bump version to json 1.8.3. CRuby already contained
- upstream changes.
+ * eval.c (stack_check): Unset inline to fix build with GCC 3.4.6;
+ submitted by: NISHIMATSU Takeshi <t_nissie AT yahoo.co.jp> in
+ [ruby-list:43218].
+ cf. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24556
- https://github.com/ruby/ruby/commit/4d059bf9f5f10f3d3088de49fc87e5555db7770d
- https://github.com/flori/json/commit/d4c99de78905d96c3f301f48b2c789943bb3f098
+Sat Mar 3 19:07:05 2007 Akinori MUSHA <knu@iDaemons.org>
- * ext/json/lib/json/version.rb: ditto.
+ * ext/thread/thread.c (push_list): Use ALLOC().
-Sat Dec 5 17:48:25 2015 Lars Kanis <lars@greiz-reinsdorf.de>
+ * ext/thread/thread.c (rb_mutex_alloc): Ditto.
- * tool/fake.rb: Fix cross build when srcdir is an absolute path.
+ * ext/thread/thread.c (rb_condvar_alloc): Ditto.
- * Makefile.in: PREP dependency is needed when cross build too, not
- "-r$(arch)-fake" to be used before created. [Fix GH-1125]
+Sat Mar 3 18:56:40 2007 Akinori MUSHA <knu@iDaemons.org>
-Sat Dec 5 17:26:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * NEWS: Add a note for String#intern.
- * hash.c (env_str_new, env_path_str_new): make default string
- UTF-8 for the case conversion is not possible. [Bug #8822]
+Sat Mar 3 18:36:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (get_env_cstr): convert non-ASCII string to UTF-8 string.
+ * eval.c (rb_provided): return true only for features loaded from
+ .rb files, and not search actual library type. [ruby-dev:30414]
- * hash.c (ruby_setenv): use wide char version to put environment
- variable to deal with non-ASCII value.
+ * eval.c (rb_feature_p): check loading_tbl if the given ext is
+ empty. [ruby-dev:30452]
-Sat Dec 5 09:56:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_feature_p): fix possible buffer overrun.
- * ruby_atomic.h (ATOMIC_CAS): old value to be swapped should be
- same as the destination. immediate value may need type
- promotion.
+Sat Mar 3 16:30:39 2007 Akinori MUSHA <knu@iDaemons.org>
- * ruby_atomic.h (ATOMIC_SIZE_CAS): fix the argument order of
- InterlockedCompareExchange64. new value and then old value is
- the last.
+ * env.h (SCOPE_CLONE): Introduce a new scope flag to prevent a
+ local_tbl region from getting freed many times; submitted by
+ Chikanaga Tomoyuki <chikanag AT nippon-control-system.co.jp> in
+ [ruby-dev:30460].
-Sat Dec 5 09:23:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (proc_invoke): Ditto.
- * random.c (fill_random_seed): fix the size to be filled, not the
- size of element, but the whole size of array.
+ * gc.c (obj_free): Ditto.
-Sat Dec 5 06:03:54 2015 Eric Wong <e@80x24.org>
+ * parse.y (top_local_setup_gen): Ditto.
- * vm.c (ruby_vm_verbose_ptr): make static
- (ruby_vm_debug_ptr): ditto
+Sat Mar 3 16:09:27 2007 Akinori MUSHA <knu@iDaemons.org>
-Sat Dec 5 00:56:29 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * object.c (rb_obj_ivar_set): RDoc updated according to a
+ suggestion from Brian Candler <B.Candler AT pobox.com>.
+ [ruby-core:10469]
- * include/ruby/ruby.h (RB_OBJ_TAINT): follow-up of r52881.
- Turn into void expression not to use unexpected result.
- Fix "operands have incompatible types" error with
- Oracle Solaris Studio 12.x on Solaris.
+Sat Mar 3 15:41:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 4 19:52:52 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * parse.y (stmt, arg): should not omit lhs of OP_ASGN1 even if
+ empty. [ruby-dev:30452]
- * enc/iso_8859_13.c: Added three missing lower/upper-case
- character pairs (from Kimihito Matsui)
+Thu Mar 1 04:08:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 4 18:57:57 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * mkconfig.rb (patchlevel): read from version.h.
- * enc/iso_8859_4.c: Added missing lower/upper-case character
- pair (U+014A and U+014B, LATIN CAPITAL/SMALL LETTER ENG)
- (from Kimihito Matsui)
+Thu Mar 1 03:42:09 2007 Akinori MUSHA <knu@iDaemons.org>
-Fri Dec 4 16:48:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/digest/digest.c (get_digest_base_metadata): Allow inheriting
+ Digest::Base subclasses, which was unintentionally made
+ impossible while restructuring Digest classes.
- * string.c (rb_obj_as_string): fstring should not be infected.
- re-apply r52872 and fix a typo.
- TODO: other frozen strings also may not be.
+Wed Feb 28 22:10:55 2007 Akinori MUSHA <knu@iDaemons.org>
-Fri Dec 4 15:21:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * doc/NEWS-1.8.0: Rename NEWS to NEWS-1.8.0. This is way too old
+ NEWS.
- * lib/rubygems: Update to RubyGems 2.5.0+ HEAD(fdab4c4).
- this version includes #1396, #1397, #1398, #1399
- * test/rubygems: ditto.
+ * NEWS: Add NEWS, a document file to keep user visible feature
+ changes between releases.
-Fri Dec 4 11:22:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (ac_cv_func_fcntl): fcntl support for MinGW.
- * thread.c (rb_thread_setname): name must be ascii-compatible, as
- pthread APIs do not accept legacy wide char strings.
+ * missing/flock.c: workaround for MinGW.
-Thu Dec 3 15:39:21 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/openssl/extconf.rb: no need to check unistd.h and sys/time.h.
+ they are already checked at configure.
+ reported by KOBAYASHI Yasuhiro [ruby-list:43225]
- * lib/scanf.rb: fixed double words typo.
- [ci skip][fix GH-1123] Patch by @jwworth
+ * lib/mkmf.rb ($DEFLIBPATH): default library paths ($(topdir), etc)
+ should be the first elements of library paths list.
+ reported by KOBAYASHI Yasuhiro [ruby-list:43225]
-Thu Dec 3 15:37:56 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/{dbm,gdbm}/test_{dbm,gdbm}.rb: shouldn't use host_os. use
+ target_os instead. reported by KOBAYASHI Yasuhiro [ruby-list:43225]
- * test/ruby/test_mixed_unicode_escapes.rb: fixed typo.
- [fix GH-1122] Patch by @davydovanton
- * test/ruby/test_object.rb: ditto.
- * test/socket/test_tcp.rb: ditto.
+ * mkconfig.rb (RbConfig): add CONFIG['PATCHLEVEL']
-Thu Dec 3 15:33:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * common.mk: new target dist
- * sprintf.c (rb_str_format): fix wrong shifting position in
- Rational conversion when not at the beginning of the result.
- [ruby-core:71806] [Bug #11766]
+ * distruby.rb: new file
-Thu Dec 3 14:22:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (--enable-auto-image-base): avoid the neccessity to
+ rebase the shared libs as much as possible;
+ submitted by Corinna Vinschen <spam at vinschen.de> in
+ [ruby-talk:240964].
- * range.c (range_to_s): should be infected by the receiver.
- str2 infects by appending. [ruby-core:71811] [Bug #11767]
+Wed Feb 28 20:51:32 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Dec 3 11:57:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * pack.c (pack_unpack): properly ignore non-base64 octets such as
+ UTF-8 encoded BOMs; submitted by SOUMA Yutaka <holon@radastery.jp>
+ to fix [ruby-core:10437]
- * configure.in: separate SET_CURRENT_THREAD_NAME, which can set
- the name of current thread only, and SET_ANOTHER_THREAD_NAME,
- which can set the name of other threads.
+Tue Feb 27 21:50:10 2007 WATANABE Hirofumi <eban@ruby-lang.org>
- * thread.c (rb_thread_setname): use SET_ANOTHER_THREAD_NAME. OS X
- is not possible to set another thread name.
+ * util.c (__crt0_glob_function): use ruby_glob() instead of rb_globi().
- * thread_pthread.c (native_set_thread_name, thread_timer): use
- SET_CURRENT_THREAD_NAME.
+ * configure.in (ac_cv_func_setrlimit): workaround for djgpp.
-Wed Dec 02 22:57:46 2015 Koichi Sasada <ko1@atdot.net>
+Tue Feb 27 20:49:19 2007 Akinori MUSHA <knu@iDaemons.org>
- * vm_core.h, iseq.h: remove rb_iseq_t::variable_body.
- Fields in rb_iseq_t::variable_body are contained by
- rb_iseq_t::body::mark_ary (hidden Array object).
+ * lib/base64.rb (Base64::b64encode): Fix documentation; submitted
+ by David Symonds <dsymonds@gmail.com> in [ruby-core:10432].
- Index 0 to 2 of mark_ary are reserved by these objects.
+ * regex.c (calculate_must_string, slow_search, re_search): Silence
+ warnings regarding char * vs. unsigned char * mismatch;
+ submitted by Lyle Johnson <lyle.johnson@gmail.com>
+ in [ruby-core:10416].
- * iseq.c: catch up this fix.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_load): Ditto.
- * compile.c (rb_iseq_original_iseq): trivial rewrite.
+ * ext/digest/sha1/sha1ossl.c (SHA1_Finish): Ditto.
-Wed Dec 2 17:19:02 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/digest/rmd160/rmd160ossl.c (RMD160_Finish): Ditto.
- * iseq.h: introduce ISEQ_ORIGINAL_ISEQ() and
- ISEQ_ORIGINAL_ISEQ_ALLOC() macro.
+ * ext/digest/digest.c (rb_digest_base_finish,
+ rb_digest_base_update): Ditto.
- * compile.c: use them to access original iseq buffer.
+ * ext/nkf/nkf.c (rb_str_resize, rb_nkf_kconv, rb_nkf_guess1,
+ rb_nkf_guess2): Ditto.
- * iseq.c: ditto.
+ * ext/thread/thread.c (wait_list_cleanup, rb_mutex_try_lock):
+ Eliminate rb_thread_critical switching where unnecessary;
+ implied by shugo in [ruby-dev:30412].
- * vm_core.h: rename iseq field to support this fix.
+ * ext/thread/thread.c (set_critical): Merge in
+ thread_exclusive_ensure().
-Wed Dec 2 17:10:32 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/thread/thread.c: Consistently use 0 and 1 for
+ rb_thread_critical values.
- * iseq.h: introduce ISEQ_FLIP_CNT_INCREMENT() macro.
+ * ext/thread/thread.c: Use xmalloc()/xfree() instead of
+ malloc()/free(); pointed out by shugo in [ruby-dev:30412].
- * compile.c (iseq_compile_each): use it.
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::initialize):
+ Initialize @workdir properly to silence a warning under -w.
+ Submitted by <tommy at tmtm.org> in [ruby-dev:30400].
- * vm_core.h: rename flip_cnt field to support this fix.
+Sun Feb 25 02:50:51 2007 Akinori MUSHA <knu@iDaemons.org>
-Wed Dec 2 17:05:15 2015 Koichi Sasada <ko1@atdot.net>
+ * defines.h: Pull the RUBY_MBCHAR_MAXSIZE definition from trunk,
+ which is necessary for dir.c to compile on djgpp and emx.
- * iseq.h: introduce ISEQ_COVERAGE() and ISEQ_COVERAGE_SET() macro.
+Sat Feb 24 17:04:01 2007 Tadayoshi Funaba <tadf@dotrb.org>
- * compile.c: use them.
+ * lib/date/format.rb: updated based on date2 4.0.3.
- * iseq.c: ditto.
+Sat Feb 24 17:01:02 2007 Minero Aoki <aamine@loveruby.net>
- * iseq.c (rb_iseq_coverage): added.
+ * ext/racc/cparse/cparse.c (cparse_params_mark): remove useless
+ rb_gc_mark. Thanks Tomoyuki Chikanaga. [ruby-dev:30405]
- * thread.c (update_coverage): use rb_iseq_coverage().
+Sat Feb 24 16:53:09 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_core.h: rename coverage field name to support this fix.
+ * signal.c (sighandler): need to tell to be interrupted to main
+ context when handler is installed.
-Wed Dec 2 17:00:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.[ch] (rb_win32_interrupted): new function to listen
+ interrupt.
- * encoding.c (enc_name, rb_enc_name_list_i, rb_enc_aliases_enc_i):
- make fstring instead of making each copies.
+ * win32/win32.c (set_pioinfo_extra): new function for VC++8 SP1
+ workaround. [ruby-core:10259]
-Wed Dec 2 16:32:08 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/win32.c (NtInitialize): call above function.
- * iseq.h: introduce ISEQ_COMPILE_DATA() macro.
+Fri Feb 23 13:04:43 2007 Akinori MUSHA <knu@iDaemons.org>
- * compile.c, iseq.c: use ISEQ_COMPILE_DATA().
+ * numeric.c (fix_cmp, fix_equal): Remove FIX2LONG() to optimize.
+ suggested in
+ http://t-a-w.blogspot.com/2007/02/making-ruby-faster.html.
+ [ruby-talk:240223]
- * vm_core.h: rename compile_data field to support this fix.
+Fri Feb 23 12:47:13 2007 James Edward Gray II <james@grayproductions.net>
-Wed Dec 2 16:27:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): Make the
+ Content-Length parameter optional for responses in
+ xmlrpc/client.rb; suggested by Daniel Berger
+ <Daniel.Berger@qwest.com> and approved by the maintainer.
- * encoding.c (enc_m_loader): defer finding encoding object not to
- be infected by marshal source. [ruby-core:71793] [Bug #11760]
+ * lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): Add DateTime
+ support to xmlrpc; approved by the maintainer.
- * marshal.c (r_object0): enable compatible loader on USERDEF
- class. the loader function is called with the class itself,
- instead of an allocated object, and the loaded data.
+Mon Feb 19 18:33:30 2007 Akinori MUSHA <knu@iDaemons.org>
- * marshal.c (compat_allocator_table): initialize
- compat_allocator_tbl on demand.
+ * ext/socket/socket.c (unix_peeraddr): wrong syscall name in error
+ message for #peeraddr. a patch from Sam Roberts
+ <sroberts at uniserve.com>. [ruby-core:10366]
- * object.c (rb_undefined_alloc): extract from rb_obj_alloc.
+Mon Feb 19 18:27:42 2007 Akinori MUSHA <knu@iDaemons.org>
-Wed Dec 2 15:12:43 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * configure.in, defines.h, eval.c (rb_feature_p, rb_provided,
+ load_wait, search_required, rb_require_safe), ext/extmk.rb: Fix
+ a bug where a statically linked extension cannot be autoloaded.
+ [ruby-dev:30023] / [ruby-dev:30239]
- * configure.in: Fixed double negative comments.
- [Bug #11698][ruby-core:71506]
+Thu Feb 15 20:31:07 2007 Akinori MUSHA <knu@iDaemons.org>
-Wed Dec 2 14:55:01 2015 yui-knk <spiketeika@gmail.com>
+ * lib/uri/ftp.rb: Revert the previous change pending discussion.
- * test/ruby/test_string.rb: removed non executing tests.
- [Misc #11757][ruby-dev:49397]
+Fri Feb 16 11:18:21 2007 Eric Hodel <drbrain@segment7.net>
-Wed Dec 2 11:23:06 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/.document: Apply patch for irb, e2mmap and README by Hugh Sasse
+ <hgs at dmu.ac.uk> from [ruby-core:10135]
- * lib/csv.rb: enable frozen_string_literal.
- [fix GH-1116] Patch by @marshall-lee
+ * lib/prettyprint.rb: Suppress RDoc for PrettyPrint test suite.
-Wed Dec 2 10:36:25 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Feb 15 18:10:09 2007 Akinori MUSHA <knu@iDaemons.org>
- * ext/bigdecimal/bigdecimal.c: Fix double word typo.
- [ci skip][fix GH-1120] Patch by @jwworth
+ * dir.c (glob_helper): Fix the function declaration.
-Wed Dec 2 07:43:51 2015 Eric Wong <e@80x24.org>
+Thu Feb 15 16:55:33 2007 Akinori MUSHA <knu@iDaemons.org>
- * ext/openssl/ossl_ssl.c (mSSLExtConfig): make static
- (eSSLError): ditto
- (ID_callback_state): ditto
- (ossl_ssl_ex_vcb_idx): ditto
- (ossl_ssl_ex_store_p): ditto
- (ossl_ssl_ex_ptr_idx): ditto
- * ext/openssl/ossl_ssl.h: remove extern declarations for
- mSSLExtConfig and eSSLError
+ * version.h: Branch off ruby_1_8_6 from ruby_1_8 in preparation
+ for the forthcoming 1.8.6 release.
-Wed Dec 2 07:41:08 2015 Eric Wong <e@80x24.org>
+Thu Feb 15 16:44:14 2007 Akinori MUSHA <knu@iDaemons.org>
- * missing/explicit_bzero.c (explicit_bzero): fixup r52839
- for compilers with "weak" attribute
+ * lib/uri/generic.rb (URI::Generic::userinfo): Considering how
+ `scheme://user:@...', `scheme://:password@...' and
+ `scheme://:@...' are parsed, an empty user name or password
+ should be allowed and represented as it is.
-Wed Dec 2 06:47:25 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Thu Feb 15 11:46:05 2007 KIMURA Koichi <hogemuta@gmail.com>
- * missing/explicit_bzero.c: add ruby_explicit_bzero_hook_unused
- for preventing optimization. Inspired from OpenBSD.
+ * dir.c, win32/win32.c, win32/dir.h, ruby.h, intern.h: Bring
+ encoding aware globbing support in from trunk. Dir.[] and
+ Dir.glob() can now take many patterns in an array. Minor fixes
+ will follow.
-Tue Dec 1 23:36:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Feb 15 11:00:26 2007 Akinori MUSHA <knu@iDaemons.org>
- * thread.c (rb_thread_setname): allow to reset thread name.
+ * lib/uri/generic.rb (URI::Generic::userinfo): should support
+ empty password. [ruby-core:10290]
-Tue Dec 1 23:14:04 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/uri/generic.rb (URI::Generic::set_password): password can be
+ cleared by nil. [ruby-core:10290]
- * thread.c (rb_thread_setname): check the argument if valid
- string. [ruby-core:71774] [Bug #11756]
+ * lib/uri/common.rb (escape): regard second string argument as a
+ character set properly. [ruby-dev:27692]
-Tue Dec 1 17:13:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/uri/ftp.rb: Attempt to conform to RFC 1738 with regard to
+ relative/absolute paths.
- * string.c (rb_string_value_cstr): should not raise on frozen
- string.
+ * lib/uri: Lovely RDOC patches from mathew (metaATpoboxDOTcom).
-Tue Dec 1 09:35:29 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Thu Feb 15 10:57:38 2007 Tietew <tietew@tietew.net>>
- * missing/explicit_bzero.c: add a few comment.
+ * lib/cgi.rb (CGI::unescapeHTML): invalid decoding for single
+ unescaped ampersand. a patch from Tietew
+ <tietew+ruby-dev at tietew.net> in [ruby-dev:30292].
+ fixed: [ruby-dev:30289]
-Tue Dec 1 09:31:19 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Thu Feb 15 10:48:40 2007 MenTaLguY <mental@rydia.net>
- * missing/explicit_bzero.c: add disabling optimization on gcc.
+ * ext/thread/thread.c: Handle interrupted waits correctly.
+ [ruby-bugs:PR#8663]
-Tue Dec 1 07:50:33 2015 Eric Wong <e@80x24.org>
+Wed Feb 14 19:22:15 2007 Akinori MUSHA <knu@iDaemons.org>
- * missing/explicit_bzero.c: new file. define explicit_bzero.
- Fixup r52806
+ * ext/digest/lib/digest.rb (Digest::self.const_missing): Drop
+ autoloads for sha2 classes in favor of handling in
+ const_missing(), to work around a problem exposed on OS X.
-Thu Oct 22 12:54:43 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Feb 13 02:21:12 2007 Sam Roberts <sroberts@uniserve.com>
- * thread_pthread.c (register_ubf_list): renamed from
- add_signal_thread_list.
- * thread_pthread.c (unregister_ubf_list): renamed
- from remove_signal_thread_list.
- * thread_pthread.c (ubf_wakeup_all_threads): renamed from
- ping_signal_thread_list.
- * thread_pthread.c (ubf_wakeup_thread): renamed from
- ubf_select_each.
- * thread_pthread.c (ubf_threads_empty): renamed from
- check_signal_thread_list().
- * thread_pthread.c (ubf_list_lock): renamed from
- signal_thread_list_lock.
+ * io.c (rb_f_syscall): Fix buffer overflow with syscall
+ arguments. [ruby-bugs:PR#8541]
- * thread_pthread.c (register_ubf_list): large simplification
- by using ccan/list.h.
- bonus: removed malloc() and exit(EXIT_FAILURE).
- * thread_pthread.c (unregister_ubf_list): ditto.
- * thread_pthread.c (ubf_threads_empty): ditto.
- * thread_pthread.c (ubf_wakeup_all_threads): ditto.
+Sun Feb 11 07:46:45 2007 Akinori MUSHA <knu@iDaemons.org>
- * thread_pthread.c (print_signal_list): removed.
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): Properly parse
+ a quoted-string in a Content-Disposition value.
-Thu Oct 22 08:03:49 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 06:27:54 2007 Akinori MUSHA <knu@iDaemons.org>
- * test/ruby/test_rand.rb (TestRand#test_default_seed): add
- srand case.
+ * configure.in, ext/thread/extconf.rb, lib/thread.rb: Add a
+ configure option `--disable-fastthread', to choose the original,
+ pure ruby version of the "thread" library instead of the new,
+ much faster implementation in ext/thread.
-Thu Oct 22 06:33:38 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 06:22:20 2007 Akinori MUSHA <knu@iDaemons.org>
- * random.c (InitVM_Random): move Random::DEFAULT initialization
- bits to Init_Random_default.
- * random.c (Init_Random_default): renamed from Init_RandomSeed2.
- * random.c (Init_RandomSeedCore): renamed from Init_RandomSeed.
+ * ext/Setup: Add thread except for platforms without threads
+ support.
-Thu Oct 22 06:20:48 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 06:15:16 2007 Akinori MUSHA <knu@iDaemons.org>
- * random.c (Init_RandomSeed): move all Random::DEFAULT
- construction bits to Init_RandomSeed2. Random::DEFAULT
- and Ruby internal hashes are no longer shared their seed.
- * random.c (Init_RandomSeed2): ditto. And, kill evil
- rb_obj_reveal() stuff.
+ * ext/thread/lib/thread.rb: Add a replacement of thread.rb that
+ loads this extension.
- * random.c (init_hashseed): add MT argument.
- * random.c: (init_siphash): ditto.
+Sun Feb 11 05:39:47 2007 Akinori MUSHA <knu@iDaemons.org>
- * test/ruby/test_rand.rb (TestRand#test_default_seed): new
- test for Random::DEFAULT::seed.
+ * lib/thread.rb: Remove an ineffective part of the code.
-Thu Oct 22 05:23:48 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 05:32:54 2007 Akinori MUSHA <knu@iDaemons.org>
- * random.c (init_hashseed, init_siphash): extract initialize
- functions.
+ * ext/thread/thread.c (rb_thread_exclusive): Implement
+ Thread.exclusive.
-Thu Oct 22 01:01:34 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 05:26:51 2007 Akinori MUSHA <knu@iDaemons.org>
- * configure.in: sort AC_CHECK_HEADERS() by alphabetical order.
+ * ext/thread/thread.c: Get rid of use of a dummy function.
-Thu Oct 22 00:19:07 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Feb 11 01:45:31 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * random.c (init_randomseed): remove "initial" argument. It never
- be used from outside of this function.
+ * ext/thread/thread.c (Init_thread): Define missing aliases:
+ Queue#enq and SizedQueue#enq.
-Thu Oct 22 00:12:33 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Feb 10 09:27:35 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * lib/securerandom.rb (SecureRandom::gen_random): use /dev/urandom
- for initialize OpenSSL's rand.
+ * ext/win32ole/win32ole.c (ole_variant2val): fix compile error
+ on VC++.
-Wed Oct 21 12:10:04 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Feb 10 07:41:52 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * ext/openssl/ossl_rand.c (ossl_rand_bytes): RAND_bytes could
- be return -1 as an error. Therefore, added error handling.
- * ext/openssl/ossl_pkey_dsa.c (dsa_generate): ditto.
+ * ext/win32ole/win32ole.c (ole_variant2val): fix the bug when
+ SAFEARRAY pointer is NULL.
-Wed Oct 21 09:04:09 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Feb 10 00:13:11 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * include/ruby/util.h: remove a warning suppression C4723
- (potential divide by zero) for VisualC++. It's meaningless.
- Before r26197, there is ruby_div0() in this place and it
- actually made divide by zero. But now it's just garbage.
+ * ext/tk/lib/tk.rb: fix typo (TkConfigMethod::__confinfo_cmd,
+ __conv_keyonly_opts).
-Wed Oct 21 08:23:36 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Fri Feb 9 20:44:53 2007 Akinori MUSHA <knu@iDaemons.org>
- * random.c: random_raw_seed don't use GRND_NONBLOCK. GRND_NONBLOCK
- mean the result might not have an enough cryptic strength and
- easy predictable. That's no good for SecureRandom.
+ * ext/thread: Make style fixes (mostly de-K&R'ism) to match the
+ rest of the source code.
-Sun Oct 18 17:26:53 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/thread: Make USE_MEM_POOLS an extconf option.
- * common.mk: add a rule for explicit_bzero.o.
- * configure.in: detect explicit_bzero and memset_s.
- * include/ruby/missing.h: add explicit_bzero.
- * random.c (init_randomseed): use explicit_bzero() instead of
- memset(). memset could be eliminated by compiler optimization.
+Fri Feb 9 20:43:01 2007 Akinori MUSHA <knu@iDaemons.org>
-Mon Nov 30 18:46:44 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/thread: Import the "fastthread" implementation by MenTaLguY
+ in the original form. This module is not hooked into the build
+ yet since it needs some style fixes and adjustments.
- * ext/readline/extconf.rb: call dir_config("libedit")
- if --enable-libedit is specified. [Bug #11751]
- patched by John Hein
+Fri Feb 9 15:46:09 2007 Akinori MUSHA <knu@iDaemons.org>
-Mon Nov 30 08:44:29 2015 Eric Wong <e@80x24.org>
+ * ext/bigdecimal: Synchronize with trunk. Better function
+ prototypes, removal of a useless method `!=', and document
+ updates.
- * variable.c: remove spurious #define for globals
- [ruby-core:71735] [Feature #11749]
+Tue Feb 06 22:06:45 2007 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Nov 29 09:13:03 2015 Conor Landry <clandry94@gmail.com>
+ * ext/nkf/nkf-utf8/{nkf.c,utf8tbl.c}:
+ imported nkf 2007-01-28.
+ * Fixed: can't decode MIME encode JIS string.
+ * Fixed: Fullwitdh-halfwidth conversion.
+ * Support DoCoMo's and Softbank's EMOJI
+ * Support CP932, CP5022x, eucJP-ms UDC
+ * Support UTF-32 encoding
+ * Support beyond BMP
+ [ruby-dev:29700] [ruby-dev:29922] [ruby-dev:30144]
- * NEWS: [DOC] Various grammar corrections and clarifications to
- increase readability. [Fix GH-1115]
+Wed Jan 31 14:52:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Nov 28 19:33:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_iterate): need to PUSH_ITER in proper order.
+ [ruby-core:10125]
- * parse.y (parser_here_document): store dispatched result of
- on_tstring_content at the last fragment of a here document.
+ * test/ruby/test_iterator.rb (TestIterator::test_block_given_within_iterator):
+ add new test. [ruby-core:10125]
-Fri Nov 27 19:19:44 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Tue Jan 30 14:58:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/net/http.rb (connect): detect closed connection and reconnect
- If the server closes a keep-alive http connection, the client socket
- reaches EOF. To avoid an EOFError, detect the closed connection and
- reconnect.
- Added test to ensure HTTP#post succeeds even if the
- keep-alive-connection has been closed by the server.
- by Kristian Hanekamp <kris.hanekamp@gmail.com>
- https://github.com/ruby/ruby/pull/1089 fix GH-1089
+ * string.c (rb_str_sub_bang): calling rb_str_modify() should be just
+ before actually modifying the string.
+ fixed: [ruby-dev:30211] (originally reported by zunda)
-Thu Nov 26 21:36:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jan 30 12:05:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (iseq_peephole_optimize): enable tail call
- optimization for specialized indexers.
+ * mkconfig.rb: autoconf 2.61 support. [ruby-core:10016]
- * compile.c (iseq_compile_each): blockiseq should be NULL, but not
- Qnil.
+Sat Jan 27 15:20:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Nov 26 17:22:53 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * parse.y (dyna_var_lookup): should not alter dvar->val not to
+ destroy living value. [ruby-core:10076]
- * regcomp.c, regenc.c, regexec.c, regint.h, enc/unicode.c:
- Merge Onigmo 58fa099ed1a34367de67fb3d06dd48d076839692
- + https://github.com/k-takata/Onigmo/pull/52
+ * parse.y (dyna_init): ditto.
-Thu Nov 26 09:50:02 2015 yui-knk <spiketeika@gmail.com>
+Fri Jan 26 12:03:39 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/coverage/test_coverage.rb: Added test-case for Coverage.restart.
- [Misc #11732][ruby-dev:49379]
+ * ext/tk/lib/tk.rb (TkConfigMethod#__confinfo_cmd,
+ __conv_keyonly_optkeys): make them private [ruby-dev:30074].
-Thu Nov 26 09:46:36 2015 yui-knk <spiketeika@gmail.com>
+ * ext/tk/lib/tk/txtwin_abst.rb: fix typo [ruby-dev:30073].
- * test/coverage/test_coverage.rb: Added test-case for Coverage.peek_result
- without Coverage.start. [Misc #11726][ruby-core:71622]
+ * ext/tk/lib/tk/canvas.rb (TkCanvas#scan_dragto): lack of an argument.
-Thu Nov 26 07:22:55 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/canvas.rb: clarify the including module name
+ [ruby-dev:30080].
- * test/openssl/test_ssl.rb (test_copy_stream): new test
+ * ext/tk/lib/tk/scrollable.rb: change primary name of modules
+ [ruby-dev:30080].
-Wed Nov 25 21:23:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jan 24 18:05:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (copy_stream_body): try to_io conversion before read,
- readpartial, and write methods. [ruby-dev:49008] [Bug #11199]
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): fix
+ regexp font-lock bug. [ruby-talk:235758]
-Wed Nov 25 10:55:21 2015 Shugo Maeda <shugo@ruby-lang.org>
+Tue Jan 23 11:02:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (argf_getpartial): should not resize str if the second
- argument is not given.
- [ruby-core:71668] [Bug #11738]
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest::read_line):
-Tue Nov 24 23:56:25 2015 Naohisa Goto <ngotogenome@gmail.com>
+Tue Jan 23 18:26:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * configure.in: On Solaris, it is safe to define _LARGEFILE_SOURCE
- when _FILE_OFFSET_BITS=64 is defined (= when 32-bit compile).
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): use == instead
+ of ===. [ruby-dev:30176]
-Tue Nov 24 10:00:10 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Tue Jan 23 10:48:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/rubygems/installer.rb: Fix two double-word typos.
- [ci skip][fix GH-1108] Patch by @jwworth
+ * hash.c: added documentation for Hash about how it uses eql? and
+ hash methods for the keys. [ruby-core:09995]
-Tue Nov 24 09:17:02 2015 Alexander von Gluck IV <kallisti5@unixzen.com>
+Mon Jan 22 14:57:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * beos: Drop support for BeOS now that Haiku is stable.
- [Fix GH-1112]
+ * ext/socket/socket.c: fix errors in socket sample code.
+ [ruby-core:09992]
-Tue Nov 24 09:16:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jan 13 23:54:48 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * internal.h (rb_gc_for_fd): move to export, as referred by
- ext/socket.
+ * ext/win32ole/win32ole.c (ole_free, ole_type_free,
+ olemethod_free, olevariable_free, oleparam_free,
+ ole_event_free): fix memory leak. [ruby-core:09846]
-Tue Nov 24 09:04:29 2015 David Rodriguez <deivid.rodriguez@gmail.com>
+Fri Jan 12 11:13:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c: [DOC] add a missing period to File docs, to terminate
- the sentence and separate from the next sentence. [Fix GH-1111]
+ * ext/etc/etc.c (etc_getpwuid, etc_getgrgid): fix to correctly
+ convert uid/gid from VALUE. (backport of r11521)
-Tue Nov 24 08:30:06 2015 JuanitoFatas <katehuang0320@gmail.com>
+Wed Jan 10 18:57:57 2007 Minero Aoki <aamine@loveruby.net>
- * NEWS: Fix the issue number of `Struct#dig`, which should be
- [Feature #11688]. [Fix GH-1110]
+ * ext/strscan/strscan.c (strscan_do_scan): should set kcode option
+ before match. [ruby-dev:29914]
-Tue Nov 24 07:56:54 2015 Eric Wong <e@80x24.org>
+ * test/strscan/test_stringscanner.rb: test it.
- * ext/socket/init.c (rsock_s_accept): handle ENOMEM
+ * re.c: export kcode_set_option and kcode_reset_option (with "rb_"
+ prefix).
-Tue Nov 24 07:50:15 2015 Eric Wong <e@80x24.org>
+ * intern.h: ditto.
- * dir.c (dir_initialize): use rb_gc_for_fd for ENOMEM
- * ext/socket/init.c (rsock_socket): ditto
- * ext/socket/socket.c (rsock_socketpair): ditto
- * internal.h (rb_gc_for_fd): prototype
- * io.c (rb_gc_for_fd): remove static
- [ruby-core:71623] [Feature #11727]
+Tue Jan 9 17:45:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Nov 24 06:46:27 2015 Eric Wong <e@80x24.org>
+ * file.c (rb_find_file): should not call fpath_check() with NULL.
+ fixed: [ruby-core:09867]
- * io.c (rb_gc_for_fd): new helper function
- (ruby_dup): use rb_gc_for_fd
- (rb_sysopen): ditto
- (rb_fdopen): ditto
- (rb_pipe): ditto
- [ruby-core:71623] [Feature #11727]
+Tue Jan 9 03:54:38 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Nov 24 05:13:35 2015 Eric Wong <e@80x24.org>
+ * string.c (rb_str_upto): String#upto from empty string makes
+ inifinite loop. [ruby-core:09864]
- * ext/fiddle/function.c (struct nogvl_ffi_call_args):
- new struct for GVL release
- (nogvl_ffi_call): new function
- (function_call): adjust for GVL release
- [ruby-core:71642] [Feature #11607]
- * ext/fiddle/closure.c (struct callback_args):
- new struct for GVL acquire
- (with_gvl_callback): adjusted original callback function
- (callback): wrapper for conditional GVL acquire
- * ext/fiddle/depend: add dependencies
- * ext/fiddle/extconf.rb: include top_srcdir for internal.h
- * internal.h (ruby_thread_has_gvl_p): expose for fiddle
- * vm_core.h (ruby_thread_has_gvl_p): moved to internal.h
- * test/fiddle/test_function.rb (test_nogvl_poll): new test
+Sun Jan 7 12:13:26 2007 Eric Hodel <drbrain@segment7.net>
-Mon Nov 23 19:53:12 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_class_comment):
+ Look for class and module comments above rb_define_class and
+ rb_define_module. Patch by Daniel Berger <djberg96 at gmail.com>
- * configure.in: On Solaris, with gcc, "-std=iso9899:1999"
- in $ansi_options is often also needed in CPPFLAGS,
- because some feature definitions vary depending on such
- standards options.
+Sun Jan 7 10:32:12 2007 Eric Hodel <drbrain@segment7.net>
-Mon Nov 23 12:54:39 2015 Hamish Morrison <hamishm53@gmail.com>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constants):
+ Properly handle escaping of : in comments.
+ * test/rdoc/parsers/test_parse_c.rb:
+ Test RDoc::C_Parser#do_classes and Rdoc::C_Parser#find_class_comment.
- * configure.in: remove obsolete workarounds for Haiku.
+Sun Jan 7 09:33:02 2007 Tadayoshi Funaba <tadf@dotrb.org>
- * dln.c, file.c, io.c: remove obsolete Haiku workarounds.
+ * lib/date/format.rb: updated based on date2 4.0.1.
- * thread_pthread.c: add stack bounds detection for Haiku.
+Wed Jan 3 11:36:51 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
- * signal.c: get stack pointer from signal context on Haiku.
- [ruby-core:67923] [Bug #10811] [Fix GH-1109]
+ * io.c (ruby_dup): start GC on ENOMEM as well.
-Mon Nov 23 11:44:11 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Jan 1 06:13:11 2007 Eric Hodel <drbrain@segment7.net>
- * gems/bundled_gems: bump version to minitest-5.8.3
+ * lib/rdoc/parsers/c_parser.rb: Make Rdoc accessible. Update constant
+ value information.
-Mon Nov 23 08:55:00 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Jan 1 06:13:11 2007 Eric Hodel <drbrain@segment7.net>
- * ChangeLog: fix wrong reference for r52714
+ * ext/bigdecimal/bigdecimal.c: Update constant comments to provide
+ values for RDoc.
-Sun Nov 22 22:23:37 2015 Rei Odaira <Rei.Odaira@gmail.com>
+Mon Jan 1 06:05:55 2007 Eric Hodel <drbrain@segment7.net>
- * gc.c (rb_raw_obj_info): fix compile errors when USE_RGENGC
- is 0.
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constansts):
+ Allow RDoc comment to give friendly value for rb_define_const. Patch
+ by Daniel Berger <djberg96 at gmail.com>, [ruby-patches-7499].
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constansts): Fix
+ whitespace handling in constant comments.
-Sun Nov 22 21:58:09 2015 Naohisa Goto <ngotogenome@gmail.com>
+Sun Dec 31 00:31:16 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/cmath.rb: methods which has suffix '!' are now deprecated.
- Re-apply r52469 made by Kazuki Tanaka, with fixing bug about
- mathn.rb compatibility. [ruby-core:68528] [Feature #10974]
+ * lib/date.rb, lib/date/format.rb: updated based on date2 4.0.
-Sun Nov 22 19:36:51 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Dec 14 18:29:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/ossl.c: fix brew command for installation of openssl.
- [ci skip][fix GH-1107] Patch by @arthurnn
+ * ext/readline/readline.c: NetBSD editline does not have
+ rl_username_completion_function() and rl_completion_matches().
+ a patch from Takahiro Kambe <taca at back-street.net>.
+ [ruby-dev:30008]
-Sun Nov 22 17:59:50 2015 Naohisa Goto <ngotogenome@gmail.com>
+Thu Dec 14 18:20:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * configure.in: On Solaris, add -D_XOPEN_SOURCE=n only when both
- AC_TRY_CPP and AC_TRY_COMPILE pass, because some options
- (e.g. -std=iso9899:1999) are not set when running C preprocessor
- or building ext.
+ * lib/irb/locale.rb (IRB::Locale::puts): typo fixed. a patch from
+ NAKAMURA Usaku <usa@ruby-lang.org>. [ruby-dev:30012]
-Sun Nov 22 16:53:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Dec 11 11:58:36 2006 Akinori MUSHA <knu@iDaemons.org>
- * compile.c (iseq_peephole_optimize): remove unreachable code
- chunk after jump/leave.
+ * ext/digest/sha2/lib/sha2.rb: Moved one level up from under
+ the superfluous subdirectory digest/.
- * parse.y: move dead code elimination of logical operation to
- compile.c. not to warn logical operation of literal constants.
+Mon Dec 11 11:46:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Nov 22 16:37:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * variable.c (rb_define_const): typo fixed.
- * compile.c (iseq_peephole_optimize): eliminate always/never
- branches after a literal object and when the value is used after
- the branch.
+Mon Dec 11 09:36:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Nov 22 01:23:43 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * string.c (rb_str_aset): index double decode problem.
+ [ruby-core:09695]
- * configure.in: Add -D_XOPEN_SOURCE=500 (or 600 or 700) on Solaris
- if available, mainly for enabling some features in sockets.
+Sat Dec 9 21:39:24 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 22 00:17:22 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * eval.c (ruby_cleanup): keep the exception till after END blocks.
+ [ruby-core:09675]
- * test/socket/test_socket.rb (test/socket/test_socket.rb): skip
- the test when Socket::SO_TIMESTAMP is not defined. Fix error
- on Solaris 10. [Bug #11728] [ruby-dev:49377]
+Sat Dec 9 11:22:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Nov 21 18:57:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/irb/locale.rb (IRB::Locale::search_file): ues File.exist?
+ instead of File.exists?. a patch from Yutaka Kanemoto
+ <kinpoco at gmail.com> in [ruby-dev:30000].
- * ruby.c (need_argument): move frozen-string-literal-debug option
- from --enable to --debug. [Feature #11725]
+Thu Dec 7 09:29:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ruby.c (proc_options): fix pointer overrun. do not advance argv
- until it is valid.
+ * lib/weakref.rb (WeakRef::__setobj__): should support
+ marshaling. [ruby-talk:228508]
-Sat Nov 21 13:59:09 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/delegate.rb (Delegator::marshal_load): need to call
+ __setobj__.
- * ext/digest/sha1/extconf.rb: OpenSSL's struct name for SHA1 is
- SHA_CTX. http://openssl.org/docs/man0.9.8/crypto/SHA1.html
+Wed Dec 6 23:56:14 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 21 13:31:52 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * Makefile.in, common.mk (NULLCMD): moved for platforms that empty
+ command does not run. fixed: [ruby-dev:29994]
- * ext/digest/*/*.[ch]: include ruby.h before digest.h to avoid
- including ext/digest/extconf.h. [Bug #3231]
- https://msdn.microsoft.com/library/36k2cdd4.aspx
+Wed Dec 6 17:17:26 2006 WATANABE Hirofumi <eban@ruby-lang.org>
- * ext/digest/*/extconf.rb: remove ext/digest from include search path
- to avoid confusion of cl.exe.
+ * configure.in (SITE_DIR): fixed to emtpy RUBY_SITE_LIB in config.h on
+ NetBSD. fixed: [ruby-dev:29358]
- * ext/digest/*/*.[ch]: explicitly specify def.h's path.
+Tue Dec 5 00:59:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Nov 21 13:05:16 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * misc/ruby-mode.el (ruby-parse-partial): need to parse "/=" as
+ self assignment operator, not regex. [ruby-talk:227324]
- * ext/openssl/ossl.h: LibreSSL doesn't have and need e_os2.h.
+Mon Dec 4 10:48:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Nov 21 09:18:10 2015 Koichi Sasada <ko1@atdot.net>
+ * ruby.h (OFFT2NUM): use LONG2NUM() if sizeof(long) equals to
+ sizeof(off_t).
- * thread_sync.c: reduce the specification of Queue#close.
- * Queue#close accepts no arguments.
- * deq'ing on closed queue returns nil, always.
- [Feature #10600]
+Mon Dec 4 10:43:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/thread/test_queue.rb: catch up this fix.
+ * parse.y (dyna_init_gen): dvar initialization only if dvar is
+ assigned inner block. [ruby-talk:227402]
-Sat Nov 21 08:44:21 2015 Koichi Sasada <ko1@atdot.net>
+Mon Dec 4 08:32:49 2006 Shugo Maeda <shugo@ruby-lang.org>
- * compile.c (iseq_compile_each): add debug information to NODE_STR
- strings as default.
- [Feature #11725]
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): should quote
+ boundary. JVN#84798830
- * insns.def (freezestring): add new instruction to support adding
- debug information for dynamically constructed strings.
+Sat Dec 2 07:09:04 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * compile.c (iseq_compile_each): support adding debug information
- for NODE_DSTR with freezestring instruction.
+ * ext/openssl/ossl_ocsp.c: OpenSSL::OCSP::OSCPError should be
+ subclass of OpenSSL::OpenSSLError. [ruby-dev:29980]
- * error.c (rb_error_frozen): change the debug information ID name
- id_debug_created_info and this field should have a 2 element array
- containing path and line information.
+Fri Dec 1 17:01:49 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * defs/id.def: ditto.
+ * gc.c (ruby_init_stack): decrease "stack level too deep" in Windows.
+ merge from trunk.
- * test/ruby/test_rubyoptions.rb: catch up this fix.
+Fri Dec 1 16:31:53 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/ruby/test_iseq.rb: now frozen strings are not same.
+ * ext/tk/tcltklib.c: shouldn't run the killed thread at callback.
+ [ruby-talk: 227408]
-Sat Nov 21 04:34:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Nov 27 17:18:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * symbol.c (rb_str_intern): should not freeze the receiver itself
- unexpectedly. [ruby-core:71611] [Bug #11721]
+ * sprintf.c (rb_f_sprintf): need not to truncate string if no
+ width specifier given for %s. [ruby-dev:29952]
-Fri Nov 20 23:15:18 2015 Naotoshi Seo <sonots@gmail.com>
+Sun Nov 26 16:36:46 2006 URABE Shyouhei <shyouhei@ruby-lang.org>
- * lib/logger.rb: expose logger mutex
- [fix GH-541] Patch by @arthurnn
+ * version.h: addition of RUBY_PATCHLEVEL.
+ * version.c: ditto.
-Fri Nov 20 15:05:28 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Fri Nov 24 10:17:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * Added missing reference of GitHub
+ * bignum.c (bignorm): avoid segmentation. a patch from Hiroyuki
+ Ito <ZXB01226@nifty.com>. [ruby-list:43012]
-Fri Nov 20 14:57:01 2015 Trevor Rowe <trevorrowe@gmail.com>
+Thu Nov 23 10:38:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/net/http.rb: Fixed regression for Net::HTTP::PUT with "Expect-100"
- header. [fix GH-949]
- * test/net/http/test_http.rb: added test.
+ * eval.c (rb_mod_define_method): set implicit visibility only when
+ it's called for the target class (ruby_cbase).
-Fri Nov 20 14:39:56 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Nov 22 16:00:49 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/net/http.rb: set hostname before call ossl_ssl_set_session.
- [Bug #11401][ruby-core:70152][fix GH-964] Patch by @mkarnebeek
+ * ext/tk/extconf.rb: support --with-X11/--without-X11 option.
-Fri Nov 20 12:53:19 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/README.tcltklib: add description about --with-X11-* option
+ [ruby-talk:225166] and --with-X11/--without-X11 option.
- * array.c: clarify docs for take_while/drop_while samples.
- [ci skip][fix GH-1028] Patch by @leriksen
+ * ext/tk/tkutil/extconf.rb: able to be called manually
+ [ruby-talk:225950].
-Fri Nov 20 12:48:04 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Nov 15 23:22:54 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c: remove mention of :UNIX in getaddrinfo().
- It's typically not a support option.
- [ci skip][fix GH-990] Patch by @eam
+ * file.c (test_grpowned, rb_stat_grpowned): should honor
+ supplementary group IDs. [ruby-core:09546]
-Fri Nov 20 12:44:06 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Nov 9 03:15:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/rss/syndication.rb: Add nodoc marker for #validate_sy_updatePeriod.
- [ci skip][fix GH-1105] Patch by @davydovanton
+ * eval.c (BEGIN_CALLARGS): ruby_block may be NULL even when
+ ITER_PRE.
-Fri Nov 20 09:05:21 2015 Koichi Sasada <ko1@atdot.net>
+Tue Nov 7 18:34:34 2006 Akinori MUSHA <knu@iDaemons.org>
- * vm.c (rb_vm_cref_replace_with_duplicated_cref): added.
+ * ext/digest/lib/digest/hmac.rb: Keep this out of the 1.8 tree
+ until we reach a consensus that HMAC should be put under Digest.
- CREFs should not be shared by methods between `using'.
- [Bug #11247]
+Tue Nov 7 18:05:01 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * vm_insnhelper.c (vm_cref_replace_with_duplicated_cref): ditto.
+ * ext/tk/lib/tk/itemconfig.rb: minor bug fix.
- * vm.c (vm_cref_dup): should copy refinements correctly.
+Mon Nov 6 20:11:20 2006 Kouhei Sutou <kou@cozmixng.org>
- * eval.c: use rb_vm_cref_replace_with_duplicated_cref().
+ * lib/rss/0.9.rb (RSS::Rss): removed needless include.
- * eval_intern.h: add a decl. of
- rb_vm_cref_replace_with_duplicated_cref().
+Mon Nov 6 15:41:55 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * vm_eval.c (eval_string_with_cref): do not need to pass
- scope's CREF because VM can find out CREF from stack frames.
+ * ext/tk/lib/tk/itemconfig.rb: ext/tk/lib/tk/itemconfig.rb: bug
+ fix on 'itemconfiginfo' method, and modify to make it easy to
+ override 'itemconfiginfo' method.
- * test/ruby/test_refinement.rb: add a test.
+ * ext/tk/lib/tkextlib/tile/treeview.rb : support Tile 0.7.8.
-Fri Nov 20 06:52:53 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tkextlib/version.rb : [new] add Tk::Tkextlib_RELEASE_DATE
+ to get the information from scripts.
- * .gitattributes: new file for git users
- [ruby-core:71578] [Feature #11713]
+ * ext/tk/lib/tk.rb: load 'tkextlib/version.rb', and update RELEASE_DATE
-Thu Nov 19 22:35:31 2015 Tanaka Akira <akr@fsij.org>
+ * ext/tk/lib/tkextlib/SUPPORT_STATUS: update.
- * ext/socket/ancdata.c: Check buffer full and ignore MSG_TRUNC flag.
- buffer fullness is more robust to detect the message is too big for
- the buffer.
- AIX 7.1 recvmsg doesn't set MSG_TRUNC for rflags when MSG_PEEK is
- given.
+ * ext/tk/sample/editable_listbox.rb: [new] the listbox with editable
+ items. It's one of the example about usage of Place geometry manager.
-Thu Nov 19 21:55:11 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/sample/tktextio.rb: improve the functions of TkTextIO class.
+ Those are required by 'irbtkw.rbw'.
- * gc.c (gc_start): force to invoke GC by GC.start
- even if it is GC.disable'd.
+ * ext/tk/sample/irbtkw.rbw: [new] IRB on Ruby/Tk. It doesn't need any
+ real console. IRB works on a text widget without I/O blocking. That
+ is, thread switching on IRB will work properly, even if on Windows.
- * test/ruby/test_gc.rb: add a test.
+Sun Nov 5 19:53:49 2006 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Nov 19 20:08:59 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/date.rb: updated based on date2 3.9.7.
- * gc.c: trivial performance improvements.
+Sat Nov 4 13:13:57 2006 Shugo Maeda <shugo@ruby-lang.org>
- name modified
- vm1_gc_short_lived* 1.015
- vm1_gc_short_with_complex_long* 1.014
- vm1_gc_short_with_long* 1.000
- vm1_gc_short_with_symbol* 1.016
- vm1_gc_wb_ary* 1.002
- vm1_gc_wb_ary_promoted* 0.996
- vm1_gc_wb_obj* 1.045
- vm1_gc_wb_obj_promoted* 1.014
- vm3_gc 1.021
+ * lib/net/imap.rb: accept NOMODSEQ. [ruby-core:9002]
+ (backported from HEAD)
- * gc.c (gc_writebarrier_generational): reorder parameters to optimize
- register passing function call.
+Fri Nov 3 00:16:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (gc_writebarrier_incremental): ditto.
+ * ext/socket/socket.c (ruby_getnameinfo__aix): AF_INET6 workaround
+ for AIX. a patch from Yutaka Kanemoto <kinpoco AT gmail.com>.
+ [ruby-dev:29744]
- * gc.c (rb_gc_writebarrier): remove LIKELY().
- LIKELY() seems to move related functions not better places.
+Thu Nov 2 15:43:39 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Nov 19 19:45:05 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (primary): should set NODE even when compstmt is NULL.
+ merge from trunk. fixed: [ruby-dev:29732]
- * ruby.c (ruby_prog_init): [DOC] ARGV does not contain the name of
- the executable. [ruby-core:71561] [Bug #11711]
+Thu Nov 2 14:48:30 2006 Akinori MUSHA <knu@iDaemons.org>
-Thu Nov 19 15:53:21 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/set.rb (Set#^): Fix XOR operation against a container that
+ holds duplicate values. [issue: #6444]
- * signal.c: should also clear ruby_disable_gc.
- [Bug #11692]
+Wed Nov 1 02:41:38 2006 Akinori MUSHA <knu@iDaemons.org>
-Thu Nov 19 15:31:45 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/digest/lib/digest/hmac.rb (Digest::HMAC::update): Minor
+ optimization.
- * compile.c (iseq_compile_each): T_IMEMO/iseq objects should be
- wrap with ISeq wrappers. [Bug #11676]
+ * ext/digest/digest.c (rb_digest_instance_equal): Allow comparing
+ a digest instance with another of a different class.
-Thu Nov 19 15:16:12 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Nov 1 01:05:13 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/rubygems: Update to RubyGems 2.5.0+ HEAD(c6b4946).
- this version includes #1114, #1314, #1322, #1375, #1383, #1387
- * test/rubygems: ditto.
+ * eval.c (rb_call0): fixed bug of zsuper with both of opt and rest.
+ fixed: [ruby-list:42928]
-Thu Nov 19 14:14:37 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * test/ruby/test_super.rb: add tests to check above bug.
- * win32/win32.c (finish_overlapped_socket): return value of this
- function should be only 0 or SOCKET_ERROR.
+Tue Oct 31 17:03:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Nov 19 14:12:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (time_dup): duplicate the class of original time.
+ [ruby-core:09357]
- * compile.c (iseq_tailcall_optimize): apply tail call optimization
- before conversion to specialized instructions. when looking
- back from `leave` instruction, `send` instructions have been
- translated already.
+ * lib/time.rb (Time::make_time, Time::rfc2822, Time::httpdate):
+ should respect subclasses. [ruby-core:09357]
-Thu Nov 19 13:57:58 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Oct 30 23:40:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/win32.c (finish_overlapped_socket): ignore EMSGSIZE when input,
- because POSIX platforms just do so. fixes test errors revealed by
- r52647.
+ * Makefile.in (miniruby): add XLDFLAGS.
-Thu Nov 19 02:52:30 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * configure.in (aix): use -bE option for miniruby. [ruby-dev:29698]
- * ext/socket/ancdata.c (bsock_recvmsg_internal): stretch the buffer size
- only when vmaxdatlen is nil.
+ * dir.c (glob_helper): get rid of possible memory leak.
-Thu Nov 19 02:20:11 2015 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (cmdglob, rb_w32_cmdvector, rb_w32_opendir,
+ rb_w32_get_environ): not to use GC before initialization.
- * test/socket/test_socket.rb (test_udp_recvmsg_truncation): rflags is
- nil on Solaris 10 which have no HAVE_STRUCT_MSGHDR_MSG_CONTROL.
- Reported by Naohisa Goto. [ruby-core:71557] [Bug #11709]
+Mon Oct 30 19:29:20 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Nov 19 01:48:05 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * bignum.c (rb_big2str0): use better approximation.
- * configure.in: add -static-libgcc for mingw automatically if available.
+Mon Oct 30 18:35:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Nov 19 00:53:26 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * bignum.c (rb_big2str0): wrong allocation length. a patch from
+ U.Nakamura <usa at garbagecollect.jp> [ruby-dev:29710]
- * ext/extmk.rb (--extflags): new option to pass EXTLDFLAGS to children,
- especially exts.mk.
+Mon Oct 30 12:34:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * common.mk (EXTMK_ARGS): use above option.
+ * eval.c (rb_eval): fix commit miss. [ruby-dev:29707]
-Wed Nov 18 22:50:43 2015 Koichi Sasada <ko1@atdot.net>
+Mon Oct 30 12:20:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_method.c (rb_class_clear_method_cache): should clear all
- RCLASS_CALLABLE_M_TBLs of all sub-classes (T_ICLASS).
+ * bignum.c (rb_big2str0): a bug in length adjustment.
- RCLASS_CALLABLE_M_TBL() caches complemented method entries.
- It should be cleared when the modules are cleared.
- On previous version clears only for direct children.
- It is enough for normal modules because corresponding T_ICLASSes
- are direct children.
+Mon Oct 30 11:15:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- However, refinements create complex data structure. So that
- we need to clear all children (and descendants).
- [ruby-core:71423] [Bug #11672]
+ * sprintf.c (rb_str_format): should preserve leading zero
+ information for negative %b and %x. [ruby-talk:221347]
- * vm_method.c (rb_clear_method_cache_by_class): rb_mKernel
- doesn't call rb_class_clear_method_cache, so that
- clear child T_ICLASSes.
+Thu Oct 26 21:05:58 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * test/ruby/test_refinement.rb: enable disabled test.
+ * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_verify): should clear error.
+ (fix http://bugs.debian.org/394336)
-Wed Nov 18 21:09:08 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): ditto.
- * vm_method.c (prepare_callable_method_entry): use
- RCLASS_CALLABLE_M_TBL() instead of accessing a filed directly.
+Thu Oct 26 15:21:10 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Nov 18 17:08:18 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/digest/digest.c (Init_digest): typo.
- * method.h: introduce the following field and macros.
+Wed Oct 25 17:23:28 2006 Akinori MUSHA <knu@iDaemons.org>
- * rb_method_definition_t::complemented_count to count shared method
- entries because of complemented method entries and separate from
- alias_count.
+ * ext/digest, test/digest/test_digest.rb: Merge from trunk:
+ - Introduce versioning in Digest::Base API, and prefix C
+ constants with RUBY_ and C type names with rb_ to avoid name
+ clash in writing extensions.
+ - Introduce Digest::Class and Digest::Instance for ease of
+ implementing subclasses and add-ons.
+ - Digest::Instance module requires and assumes that any instance
+ be resettable and clonable. An instance method #new() is
+ added so digest instances work just like digest classes.
+ - The constructor does no longer take an initial string to feed;
+ digest() and hexdigest() now do, instead. This allows digest
+ classes to take their own hashing parameters.
+ - Make some changes to digest() and hexdigest() class methods,
+ which now take extra arguments, which are passed through to
+ the constructor in an internal call.
+ - Add #digest_length/size/length() and #block_length(),
+ - Add the Digest::SHA2 class to wrap up SHA2 variants: SHA256,
+ SHA384 and SHA512, hoping this module would make a decent
+ example of a digest subclass written in Ruby.
+ - Rip BubbleBabble support out of the base class and have a
+ separate module named digest/bubblebabble.
+ - Remove RD documents in favor of newly written and embedded
+ RDoc documentation.
- Shared `def' only by complemented method entries should not prevent
- method re-definition warning.
+Wed Oct 25 08:03:23 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * METHOD_ENTRY_COMPLEMENTED(me) to represent complemented method entry.
- * METHOD_ENTRY_COMPLEMENTED_SET(me) to check it as complemented me.
+ * lib/date/format.rb: updated based on date2 3.9.6.
+ [ruby-core:09323]
- * vm_insnhelper.c (aliased_callable_method_entry): should also
- check me->def->complemented_count.
+Sun Oct 22 14:48:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_method.c (method_definition_addref_complement): add to count
- complemented method entries number.
+ * signal.c (ruby_signal): don't set SA_RESTART. a backport from
+ the HEAD. [ruby-talk:220937] [ruby-talk:147220]
- * vm_method.c (rb_method_definition_release): release `def' iff
- alias_count == 0 and complemented_count == 0.
+ * signal.c (Init_signal): avoid duplicated installation of SIGCHLD
+ handler.
- * test/ruby/test_module.rb: add a test.
+Sun Oct 22 16:47:56 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 18 17:06:19 2015 Koichi Sasada <ko1@atdot.net>
+ * string.c (rb_str_substr): should be infected with only original
+ string, but not the shared string. fixed: [ruby-core:09152]
- * gc.c (rb_raw_obj_info): fix trivial issues.
+ * string.c (rb_str_new4): keep shared string untainted when orignal
+ string is tainted. fixed: [ruby-dev:29672]
- * support SPECIAL_CONSTs.
- * fix IMEMO/ment outputs.
+Sun Oct 22 05:20:34 2006 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-Wed Nov 18 11:32:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: alloca is broken; use C_ALLOCA instead.
+ [ruby-dev:29416]
- * compile.c (iseq_peephole_optimize): eliminate always/never
- branches after a literal object. this sequence typically
- appears by defined? operator for a method call on a local
- variable.
+Fri Oct 20 10:47:43 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Nov 18 10:33:06 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/mkmf.rb: fixed the bug of handling COMMON_MACROS.
- * ext/socket/ancdata.c (bsock_recvmsg_internal): stretch the buffer size
- when EMSGSIZE occurs on non HAVE_STRUCT_MSGHDR_MSG_CONTROL platforms
- (such as, Windows). fixes a test error revealed by r52625.
+Fri Oct 20 08:42:38 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 18 10:12:36 2015 Eric Wong <e@80x24.org>
+ * common.mk (NULLCMD): dummy command.
- * ext/socket/ancdata.c (bsock_recvmsg_internal): use 4096 as
- default size to match pre-r52610, which also maps to a common
- page size.
+ * bcc32/Makefile.sub (post-install-*): Borland make cannot ignore
+ command-less double-colon rules. [ruby-dev:29676]
-Wed Nov 18 10:05:25 2015 Shugo Maeda <shugo@ruby-lang.org>
+Fri Oct 20 00:37:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/syntax/refinements.rdoc: update documentation to reflect
- recent changes.
- [ci skip] [ruby-core:71466] [Misc #11681] Patch by James Adam
+ * bcc32/Makefile.sub ($(LIBRUBY_SO)): execute pre-link hook.
-Wed Nov 18 09:50:21 2015 Naotoshi Seo <sonots@gmail.com>
+ * ext/extmk.rb: workaround for Borland make.
- * test/logger/test_logdevice.rb: Fix tests of logger to make it work on
- windows (windows can not remove opened file) [Bug #11702]
+Wed Oct 18 23:02:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 18 06:59:52 2015 Eric Wong <e@80x24.org>
+ * array.c (rb_ary_shift): shorten copy size. fixed: [ruby-list:42907]
- * ext/socket/ancdata.c (bsock_recvmsg_internal): grow buffer
- on unspecified maxdatlen
- [ruby-core:71517] [Bug #11701]
- * ext/socket/lib/socket.rb (Socket#recvmsg): nil default for dlen
- (Socket#recvmsg_nonblock): ditto
- * test/socket/test_socket.rb (test_recvmsg_udp_no_arg): new test
+ * signal.c (Init_signal): handle SIGTERM. fixed: [ruby-list:42895]
-Tue Nov 17 19:50:06 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * win32/win32.c (rb_w32_utime): allow NULL to set the current time.
+ [ruby-talk:219248]
- * win32/win32.c (fstat): declare for mingw.
+Wed Oct 18 00:55:33 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 17 19:02:59 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * parse.y (parser_yylex): use particular enums. [ruby-core:09221]
- * configure.in (BASERUBY): use Kernel#print instead of Kernel#p because
- the baseruby may output CRLF as end of line.
+Mon Oct 16 08:30:43 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 17 15:34:34 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
- * NEWS: Added update from Unicode 7.0.0 to 8.0.0 [ci skip]
+ * mkconfig.rb: *OBJS are not needed for extension libraries.
-Tue Nov 17 15:30:30 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
- * enc/unicode/casefold.h, name2ctype.h: Change Unicode
- Version for regular expressions from 7.0.0 to
- 8.0.0 (with help from Kimihito Matsui) [Feature #11563]
+ * {bcc32,wince,win32}/Makefile.sub (config.status): fixed typo,
+ missing comma.
-Tue Nov 17 14:36:00 2015 Kenichi Kamiya <kachick1@gmail.com>
+Sun Oct 15 01:03:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/ostruct.rb (dig): Implement OpenStruct#dig
- [Feature #11688]
+ * lib/test/unit/collector/dir.rb (Collector::Dir#collect): append base
+ directory but not prepend.
-Tue Nov 17 14:04:14 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): do not
+ join with dot. fixed: [ruby-core:09179]
- * ext/socket/lib/socket.rb (Socket#recvmsg{,_nonblock}): default values
- of clen must be nil.
+Sat Oct 14 23:39:50 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/socket/ancdata.c (bsock_sendmsg_internal): handle nil of clen.
- fixes test errors introduced at r52602.
+ * parse.y (singleton): no need to re-create NODE_SELF() again.
+ [ruby-core:09177]
-Tue Nov 17 13:43:46 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Sat Oct 14 23:25:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/socket/lib/socket.rb: UNIXSocket is not always exists. fixes
- install error on Windows, introduced at r52601.
+ * parse.y (parser_warning, parser_warn): some error message may
+ contain format specifiers. a patch from Akinori MUSHA <knu at
+ iDaemons.org>. [ruby-dev:29657]
-Tue Nov 17 11:27:23 2015 Eric Wong <e@80x24.org>
+ * ext/bigdecimal/bigdecimal.c (VpException): ditto.
- * ext/socket/lib/socket.rb (Socket#recvfrom_nonblock):
- UDPSocket#recvfrom_nonblock):
- update doc for `exception: false` and destination buffer
- [ruby-core:69542] [Feature #11229]
- [ruby-core:69543] [Feature #11242]
+ * ext/dl/handle.c (rb_dlhandle_initialize): ditto.
-Tue Nov 17 11:25:05 2015 Eric Turner <ericturnerdev@gmail.com>
+ * ext/gdbm/gdbm.c (rb_gdbm_fatal): ditto.
- * array.c (rb_ary_dig), hash.c (rb_hash_dig): [DOC] Update
- comments describing dig methods. [Fix GH-1103]
+Sat Oct 14 08:24:45 2006 Akinori MUSHA <knu@iDaemons.org>
- * struct.c (rb_struct_dig): [DOC] add rdoc.
+ * ext/digest/lib/digest/hmac: Back out the addition of digest/hmac
+ for now because the API is too premature for a stable branch.
-Tue Nov 17 11:22:22 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
- * NEWS: Small grammatical fix [ci skip]
+Sat Oct 14 00:55:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 17 10:12:30 2015 Eric Wong <e@80x24.org>
+ * bcc32/Makefile.sub (post-install-ext): no longer needed.
- * ext/socket/lib/socket.rb (Socket.accept_loop): avoid exceptions
- (Socket.udp_server_recv): ditto
+ * bcc32/configure.bat: get rid of a quirk of Borland make, which
+ sets empty macro in command line to "1".
-Tue Nov 17 09:59:00 2015 Eric Wong <e@80x24.org>
+Fri Oct 13 22:50:43 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * ext/socket/ancdata.c (bsock_sendmsg_internal): avoid arg parsing
- [ruby-core:71439] [Feature #11339]
- (rsock_bsock_sendmsg): make private, adjust for above
- (rsock_bsock_sendmsg_nonblock): ditto
- * ext/socket/rubysocket.h: adjust prototypes
- (rsock_opt_false_p): remove
- * ext/socket/basicsocket.c (rsock_init_basicsocket):
- define private methods
- * ext/socket/lib/socket.rb (BasicSocket#sendmsg): new wrapper
- (BasicSocket#sendmsg_nonblock): ditto
+ * lib/date.rb: updated based on date2 3.9.5.
-Tue Nov 17 09:45:18 2015 Eric Wong <e@80x24.org>
+Fri Oct 13 22:33:28 2006 Minero Aoki <aamine@loveruby.net>
- * ext/socket/ancdata.c (bsock_recvmsg_internal): avoid arg parsing
- (rsock_bsock_recvmsg): adjust for above change
- (rsock_bsock_recvmsg_nonblock): ditto
- [ruby-core:71439] [Feature #11339]
- * ext/socket/rubysocket.h: adjust prototypes for above
- * ext/socket/basicsocket.c (rsock_init_basicsocket):
- adjust private methods
- * ext/socket/lib/socket.rb (BasicSocket#recvmsg): wrapper method
- (BasicSocket#recvmsg_nonblock): ditto
+ * lib/fileutils.rb (FileUtils.cp_r): dereference_root=true is
+ default in Ruby 1.8. This line is wrongly removed in last commit.
-Tue Nov 17 08:36:34 2015 Eric Wong <e@80x24.org>
+Fri Oct 13 18:19:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/socket/init.c (rsock_s_accept_nonblock): avoid parsing args
- [ruby-core:71439] [Feature #11339]
- * ext/socket/rubysocket.h: adjust prototype
- * ext/socket/socket.c (sock_accept_nonblock): make private
- * ext/socket/tcpserver.c (tcp_accept_nonblock): ditto
- * ext/socket/unixserver.c (unix_accept_nonblock): ditto
- * ext/socket/lib/socket.rb (Socket#accept_nonblock):
- implement as wrapper, move RDoc
- (TCPServer#accept_nonblock): ditto
- (UNIXServer#accept_nonblock): ditto
+ * object.c: Class#inherited RDoc added. a patch from Daniel
+ Berger <djberg96 at gmail.com> [ruby-core:08942]
-Tue Nov 17 08:25:57 2015 Eric Wong <e@80x24.org>
+Fri Oct 13 02:30:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c (sock_connect_nonblock):
- avoid argument parsing in C.
- [ruby-core:71439] [Feature #11339]
- * ext/socket/lib/socket.rb (Socket#connect_nonblock):
- new wrapper for private method, move RDoc
+ * lib/test/unit/collector/dir.rb (Collector::Dir#collect): prepend
+ base directory to load path.
-Tue Nov 17 08:16:09 2015 Eric Wong <e@80x24.org>
+ * lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): should
+ use the given File-like interface, but not File directly.
- * ext/socket/init.c (rsock_s_recvfrom_nonblock):
- avoid arg parsing with C API
- [ruby-core:71439] [Feature #11339]
- * ext/socket/basicsocket.c (bsock_recv_nonblock):
- adjust for above change, make private
- * ext/socket/socket.c (sock_recvfrom_nonblock): ditto
- * ext/socket/udpsocket.c (udp_recvfrom_nonblock): ditto
- * ext/socket/lib/socket.rb (BasicSocket#recv_nonblock):
- new wrapper for private method, move RDoc
- (Socket#recvfrom_nonblock): ditto
- (UDPSocket#recvfrom_nonblock): ditto
+ * test/testunit/collector/test_dir.rb (TestDir::FileSystem): implement
+ File-like methods correctly.
-Mon Nov 16 21:27:54 2015 Naohisa Goto <ngotogenome@gmail.com>
+Fri Oct 13 01:48:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/dtrace/helper.rb (Dtrace::TestCase#trap_probe): dtrace buffer
- size is set as 8m on Solaris (default 4m). [Bug #11697]
+ * lib/date.rb (Date::self.complete_hash): need to check if g is
+ nil before dereference. [ruby-core:09116]
-Mon Nov 16 20:03:14 2015 Naotoshi Seo <sonots@gmail.com>
+Fri Oct 13 00:34:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/logger.rb: Add Logger#reopen
+ * object.c (rb_mod_cvar_defined): wrong id check. a patch from
+ Mauricio Fernandez <mfp at acm.org>. [ruby-core:09158]
-Mon Nov 16 18:21:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * object.c (rb_mod_cvar_get): typo fixed. [ruby-core:09168]
- * object.c (rb_obj_dig): dig in nested structs too.
+ * object.c (rb_mod_cvar_set): ditto.
- * struct.c (rb_struct_dig): new method Struct#dig.
- [Feature #11688]
+Wed Oct 11 22:21:41 2006 Akinori MUSHA <knu@iDaemons.org>
-Mon Nov 16 17:41:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/digest: Merge from trunk; metadata location changed,
+ Digest::Base#reset() added, Digest::Base#equal() changed, and
+ digest/hmac added with some modifications made for ruby 1.8.
- * compile.c (iseq_peephole_optimize): optimize tail calls on aref
- and aset specialized instructions.
+Tue Oct 10 17:24:12 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * compile.c (iseq_peephole_optimize): optimize replaced leave
- instruction copied to jump instruction too.
+ * {bcc32,win32,wince}/Makefile.sub (config.status): shouldn't use
+ copy command instead of install. use -run install.
-Mon Nov 16 16:39:38 2015 Akinori MUSHA <knu@iDaemons.org>
+Tue Oct 10 16:49:16 2006 Akinori MUSHA <knu@iDaemons.org>
- * lib/set.rb: Enable frozen_string_literal.
+ * ext/digest/digest.c (hexdigest_str_new, bubblebabble_str_new):
+ Perform StringValue() checks properly.
- * lib/set.rb: Move << out of the begin block that ensures pop.
+ * ext/digest/digest.c: Use RSTRING_{PTR,LEN} macros.
-Mon Nov 16 16:28:30 2015 Akinori MUSHA <knu@iDaemons.org>
+Tue Oct 10 13:49:53 2006 Akinori MUSHA <knu@iDaemons.org>
- * lib/set.rb (Hash#flatten!, #add?, #delete?, #collect!, #reject!,
- #select!, #^, #classify): Micro-optimize some methods for
- performance and readability.
+ * ext/digest: Merge from trunk; apply all changes since the
+ initial import, except for the removal of compatibility stub
+ libraries (md5.rb and sha1.rb).
-Mon Nov 16 16:17:58 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Oct 9 23:46:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ChangeLog: fixed accidentally commit.
+ * lib/parsedate.rb: documentation patch from Konrad Meyer
+ <konrad.meyer@gmail.com>. [ruby-doc:1238]
-Mon Nov 16 16:10:51 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/open3.rb, lib/ping.rb: ditto.
- * mkconfig.rb: Add some high-level documentation.
- [ci skip][fix GH-1081] Patch by @ulfalizer
+Mon Oct 9 22:56:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Nov 16 15:59:14 2015 yui-knk <spiketeika@gmail.com>
+ * lib/rexml/encoding.rb (REXML::Encoding::check_encoding): spaces
+ are allowed around equal sign. [ruby-core:09032]
- * proc.c: Add call-seq of `Method#super_method`
- [ci skip][fix GH-1094]
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser): ditto.
-Mon Nov 16 15:58:39 2015 Kenichi Kamiya <kachick1@gmail.com>
+Sat Oct 7 23:53:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * struct.c: Standardize a method signature of Struct#[]=.
- [ci skip][fix GH-1095]
+ * string.c (rb_str_scan): small documentation fix.
+ [ruby-core:09007]
-Mon Nov 16 15:42:36 2015 Akinori MUSHA <knu@iDaemons.org>
+Sat Oct 7 23:44:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/set.rb (#>=, #>, #<=, #<): Make use of Hash#>=, #>, #<, and
- #<= when comparing against an instance of the same kind.
+ * bignum.c (rb_big_rshift): a bug in right shift of negative
+ bignums. [ruby-core:09020]
-Mon Nov 16 15:37:11 2015 Naotoshi Seo <sonots@gmail.com>
+Sat Oct 7 00:27:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/logger.rb: Support symbol and string log level setting
+ * class.c (rb_include_module): remove unnecessary check.
+ [ruby-talk:218402]
-Mon Nov 16 15:33:11 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Fri Oct 6 04:30:30 2006 Akinori MUSHA <knu@iDaemons.org>
- * tool/rbinstall.rb: fix wrong permission for gem specification without
- zlib runtime. [Bug #11685][ruby-dev:49343]
+ * sample/openssl/c_rehash.rb: Use digest/md5 instead of obsolete md5.
-Mon Nov 16 12:11:11 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Oct 4 18:47:25 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/webrick/httpauth/basicauth.rb: fix a typo.
- [ci skip][fix GH-1099] Patch by @jwworth
- * lib/webrick/httpauth/digestauth.rb: ditto.
+ * ext/tk/lib/tkextlib/*: bugfix and update
+ (see ext/tk/ChangeLog.tkextlib).
-Sun Nov 15 18:28:43 2015 Kenichi Kamiya <kachick1@gmail.com>
+Wed Oct 4 17:25:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_method.c (set_method_visibility): should fail if the receiver
- is frozen. [ruby-core:71489] [Bug #11687]
+ * eval.c (rb_call): check protected visibility based on real self,
+ not ruby_frame->self. [ruby-talk:217822]
-Sat Nov 14 22:15:07 2015 Tanaka Akira <akr@fsij.org>
+Wed Oct 4 08:52:30 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/lib/socket.rb: Specify frozen_string_literal: true.
+ * test/optparse/test_getopts.rb: changed the class name of test case
+ to get rid of conflict with test_optparse.rb.
-Sat Nov 14 21:44:56 2015 Tanaka Akira <akr@fsij.org>
+Tue Oct 3 23:32:27 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/time.rb: Use "<<" to reduce string allocation.
+ * lib/test/unit/testcase.rb (Test::Unit::TestCase.suite): test name
+ must be string. fixed: [ruby-core:08978]
-Sat Nov 14 17:45:49 2015 Tanaka Akira <akr@fsij.org>
+Mon Oct 2 23:47:55 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/tsort.rb: Specify frozen_string_literal: true.
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::COLLECTORS):
+ base directory should be lower precedence. fixed: [ruby-dev:29622]
-Sat Nov 14 17:25:15 2015 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): typo.
- * lib/resolv-replace.rb: Specify frozen_string_literal: true.
+ * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
+ load expanded path. fixed: [ruby-dev:29621]
-Sat Nov 14 17:00:13 2015 Tanaka Akira <akr@fsij.org>
+Mon Oct 2 15:49:19 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/time.rb: Specify frozen_string_literal: true.
+ * instruby.rb: batfile should be CRLF'ed.
-Sat Nov 14 16:43:02 2015 Tanaka Akira <akr@fsij.org>
+Mon Oct 2 01:24:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/open3.rb: Specify frozen_string_literal: true.
+ * common.mk (test-all): separate directory where running test cases
+ from source tree.
-Sat Nov 14 05:04:09 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/autorunner.rb (options): added --basedir, --workdir
+ and --load-path options.
- * node.h: remove old comments.
+ * lib/test/unit/collector/dir.rb (recursive_collect, collect_file):
+ base directory support.
-Sat Nov 14 04:55:36 2015 Koichi Sasada <ko1@atdot.net>
+Sun Oct 1 23:56:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * refactoring CREF related code.
+ * Makefile.in, common.mk, ext/extmk.rb, win{32,ce}/Makefile.in: keep
+ LIBRUBY_SO unless need to be removed.
- * eval_intern.h: remove unused setter functions.
- CREF_CLASS_SET()
- CREF_NEXT_SET()
- CREF_SCOPE_VISI_COPY()
+Sun Oct 1 23:12:19 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval_intern.h: rename flags:
- * NODE_FL_CREF_PUSHED_BY_EVAL_ -> CREF_FL_PUSHED_BY_EVAL
- * NODE_FL_CREF_OMOD_SHARED_ -> CREF_FL_OMOD_SHARED
- and use IMEMO_FL_USER1/2.
+ * lib/optparse.rb (OptionParser#make_switch): pass arguments directly.
- * vm.c (vm_cref_new): accept push_by_eval parameter.
+Sat Sep 30 15:12:25 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * vm.c (vm_cref_new_use_prev): added for rb_vm_rewrite_cref().
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.4.
- * vm_insnhelper.c (vm_cref_push): accept pushed_by_eval parameter.
+Fri Sep 29 12:11:04 2006 WATANABE Hirofumi <eban@ruby-lang.org>
- * vm_insnhelper.h: remove unused macros:
- COPY_CREF_OMOD() and COPY_CREF().
+ * jcode.rb (succ!): call original succ! if $KCODE == 'n'.
+ fixed: [ruby-talk:216845]
- * vm_eval.c, insns.def: catch up this fix.
+Fri Sep 29 11:43:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 14 02:58:03 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb (try_func): revert fallback checking undeclared function.
+ fixed: [ruby-core:08949]
- * vm.c (vm_define_method): refactoring.
- * get CREF in this function.
- * cbase is no longer needed (CREF_CLASS(cref) is enough).
+Fri Sep 29 09:56:56 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c: RubyVM::FrozenCore.define_method only accept 2 args.
+ * ext/extmk.rb: extout is needed for also clean.
+ fixed: [ruby-core:08944]
-Sat Nov 14 02:34:43 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/optparse.rb (OptionParser::Switch#conv_arg): unsplat by
+ Proc#call if no conversion is given.
- * vm.c (vm_define_method): do not use current CREF immediately,
- but check CREF in environment or methods. Methods defined in methods
- should be public.
- [Bug #11571]
+Thu Sep 28 23:59:31 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c (rb_scope_module_func_check): check CREF in env or me.
- if CREF is contained by `me', then return FALSE.
+ * node.h (struct thread): declare win32_exception_list on cygwin and
+ win32 regardless if it is implemented. Provisional fix for
+ [ruby-core:08917].
- * test/ruby/test_method.rb: add a test.
+Thu Sep 28 20:53:16 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Nov 14 02:19:16 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/tmpdir.rb: use return value of getdir.call for length.
- * method.h: constify rb_cref_t::scope_visi;
+Wed Sep 27 01:04:49 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval_intern.h (CREF_SCOPE_VISI_COPY): catch up this fix.
+ * lib/mkmf.rb (try_func): check function pointer first and macro next.
- * vm_method.c: ditto.
+ * lib/mkmf.rb (have_type): simplified with typedef and sizeof.
-Sat Nov 14 01:53:52 2015 Naohisa Goto <ngotogenome@gmail.com>
+Tue Sep 26 23:57:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * pack.c (pack_unpack, AVOID_CC_BUG): Very ugly workaround for
- optimization bug of Oracle Solaris Studio 12.4 on Solaris
- with -xO4 optimization option. [Bug #11684]
+ * lib/optparse.rb (OptionParser#getopts): use strings as key.
+ fixed: [ruby-dev:29614]
-Fri Nov 13 23:00:23 2015 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Tue Sep 26 15:31:26 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: unset LD_PRELOAD on mingw. msys2 child processes
- crash at make test-all with LD_PRELOAD.
- [ruby-core:71461] [Bug #11680]
+ * {win32,wince}/Makefile.sub (CPP): check predefined value.
-Fri Nov 13 14:00:43 2015 Zachary Scott <zzak@ruby-lang.org>
+Tue Sep 26 07:55:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/ossl_pkey.c: Merge ruby/openssl@b9ea8ef [Bug #10735]
+ * array.c (rb_ary_shift): should not move memory region if array
+ body is shared. a patch from Kent Sibilev <ksruby at gmail.com>.
+ [ruby-core:08922]
-Fri Nov 13 13:09:16 2015 Zachary Scott <zzak@ruby-lang.org>
+Mon Sep 25 22:26:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/ossl_ssl.c: Merge ruby/openssl@81e1a30
+ * file.c (rb_path_end): skip root directory. fixed: [ruby-core:08913]
- * test/openssl/test_ssl.rb: ditto
+ * lib/mkmf.rb (init_mkmf): set default $LDFLAGS. Patch by Michal
+ Suchanek <hramrach at centrum.cz>. [ruby-talk:216256]
-Fri Nov 13 13:05:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Sep 25 08:14:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * prelude.rb (Thread.exclusive): warn as deprecated.
+ * array.c (rb_ary_shift): should clear shifting top element.
+ [ruby-talk:216055]
-Fri Nov 13 10:36:39 2015 Victor Nawothnig <Victor.Nawothnig@gmail.com>
+ * array.c (rb_ary_shift): avoid creating shared object if array
+ size is small.
- * parse.y (new_unless): optimize constant condition for `unless`
- as well as `if`. [Fix GH-1092]
+Mon Sep 25 08:11:35 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Nov 13 10:08:41 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * random.c (rb_f_rand): RDoc typo fix. a patch from Frederick
+ Cheung <fred at 82ask.com>. [ruby-talk:216047]
- * ext/psych/psych.gemspec: bump version to 2.0.15
+Sun Sep 24 22:28:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 12 18:44:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * runruby.rb: extension library scripts moved into common directory.
- * parse.y (parser_magic_comment): should match exactly.
- [ruby-core:71460] [Bug #11679]
+Sun Sep 24 14:59:50 2006 Tanaka Akira <akr@fsij.org>
-Thu Nov 12 16:16:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * node.h (struct thread): ia64 support is broken by sandbox patch.
- * template/prelude.c.tmpl: enable tail call optimization.
+Sun Sep 24 12:11:16 2006 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Nov 12 14:17:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.3.
- * parse.y (parser_yylex): ANDDOT at the head of the line denote
- line continuation from previous one to support fluent interface,
- as well as single dot.
+Sat Sep 23 23:24:57 2006 why the lucky stiff <why@ruby-lang.org>
-Thu Nov 12 13:49:50 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * eval.c (rb_thread_save_context, rb_thread_restore_context):
+ sandbox hook to save and restore sandbox state.
- * lib/rubygems: Update to RubyGems 2.5.0+ HEAD(db78980).
- this version includes #1367 , #1373 , #1375
- * test/rubygems: ditto.
+ * eval.c (thread_no_ensure): added THREAD_NO_ENSURE thread flag.
-Thu Nov 12 10:53:41 2015 Eric Wong <e@80x24.org>
+ * eval.c (rb_thread_kill_bang): Thread#kill! uses the above flag
+ to circumvent ensure, in order to prevent endless loops.
+ [ruby-core:08768]
- * benchmark/bm_io_nonblock_noex2.rb: new benchmark based
- on bm_io_nonblock_noex.rb
- * io.c (io_read_nonblock): move documentation to prelude.rb
- (io_write_nonblock): ditto
- (Init_io): private, internal methods for prelude.rb use only
- * prelude.rb (IO#read_nonblock): wrapper + documentation
- (IO#write_nonblock): ditto
- [ruby-core:71439] [Feature #11339]
+ * eval.c (rb_thread_kill): fix Thread#kill docs, which returns
+ the thread object in all cases.
-Wed Nov 11 18:30:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * node.h: expose the rb_jmpbuf_t and rb_thread_t structs, along
+ with the thread flags. used by the sandbox extension.
- * sprintf.c (rb_str_format): look up the key, then get default
- value and raise KeyError if the returned value is nil.
- [ruby-dev:49338] [Ruby trunk - Bug #11677]
+ * ruby.h: extern rb_eThreadError, so sandbox can swap it.
-Wed Nov 11 17:38:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Sep 23 21:34:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_eval.c (local_var_list_add): skip internal local variable
- name by its type but not if it has a name. internal local
- variable names are just unique per frame, not globally.
- [ruby-core:71437] [Bug #11674]
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): CGI content
+ may be empty. a patch from Jamis Buck <jamis at 37signals.com>.
-Wed Nov 11 14:14:33 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat Sep 23 08:35:53 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * transcode.c: fix a typo
- [ci skip][fix GH-1091] Patch by @jwworth
+ * lib/rdoc/ri/ri_options.rb: prevent NameError. [ruby-dev:29597]
-Wed Nov 11 11:58:38 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sat Sep 23 01:04:20 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/net/ftp.rb (initialize): Connections are in passive mode per
- default now. The default mode can be changed by
- Net::FTP.default_passive=.
- [ruby-core:71146] [Feature #11612]
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.2.
- * lib/net/ftp.rb (default_passive=, default_passive): new methods.
+Fri Sep 22 02:06:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 11 09:03:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * .cvsignore: ignore timestamp files and installed list file.
- * sprintf.c (rb_str_format): respect default value of a hash. no
- longer raises KeyError unless the default value of the hash is
- nil. [ruby-core:71354] [Bug #11661]
+Fri Sep 22 01:36:34 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 10 20:35:12 2015 Tanaka Akira <akr@fsij.org>
+ * instruby.rb: include FileUtils unconditionally.
- * lib/open-uri.rb: Remove indicator for "frozen_string_literal: true".
+Thu Sep 21 22:56:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/pp.rb: Ditto.
+ * common.mk (no-install): not install rdoc actually.
- * lib/prettyprint.rb: Ditto.
+ * common.mk (install-doc, no-install-doc): use instruby.rb.
- * lib/resolv.rb: Ditto.
+ * instruby.rb: rdoc installation.
- * lib/securerandom.rb: Ditto.
+ * ext/extmk.rb: expand ruby executable names.
- * lib/tmpdir.rb: Ditto.
+Thu Sep 21 13:55:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/unicode_normalize/tables.rb: Ditto.
+ * ext/etc/etc.c (etc_getpwuid): uid integer should be wraped in
+ uid_t value. [ruby-core:08897]
- * test/net/ftp/test_buffered_socket.rb: Ditto.
+ * ext/etc/etc.c (etc_getpwuid): uid_t may be bigger than plain
+ 'int' type.
- * test/net/ftp/test_mlsx_entry.rb: Ditto.
+Wed Sep 20 23:17:41 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/open-uri/test_open-uri.rb: Ditto.
+ * common.mk (pre-install-doc): create data directory before install.
- * test/open-uri/test_ssl.rb: Ditto.
+ * lib/mkmf.rb (dir_re): fixed typo.
- * test/pathname/test_pathname.rb: Ditto.
+ * lib/mkmf.rb (install_dirs): remove extra slash.
- * test/test_pp.rb: Ditto.
+Wed Sep 20 09:53:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/test_prettyprint.rb: Ditto.
+ * {bcc32,win32,wince}/Makefile.sub (INSTALLED_LIST): need to define
+ this macro to install.
- * tool/transcode-tblgen.rb: Ditto.
+Wed Sep 20 09:43:10 2006 Shugo Maeda <shugo@ruby-lang.org>
- * ext/pathname/lib/pathname.rb: Ditto.
+ * lib/net/imap.rb: allow extra spaces in responses.
+ Thanks, Tom Soderlund. (backported from HEAD)
-Tue Nov 10 18:42:24 2015 Aleksandrs Ledovskis <aleksandrs@ledovskis.lv>
+Wed Sep 20 09:25:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * defs/id.def, parse.y: Switch internal token name to reflect
- current form of safe-call operator. [Fix GH-1090]
+ * ext/gdbm/gdbm.c: add RDoc documentation. a patch from Peter
+ Adolphs <futzilogik at users dot sourceforge dot net>.
+ [ruby-doc:1223]
-Tue Nov 10 18:25:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Sep 19 01:28:00 2006 Minero Aoki <aamine@loveruby.net>
- * hash.c (rb_hash_to_proc): use rb_func_proc_new to make light
- weight proc. [Feature #11653]
+ * lib/fileutils.rb: backport from HEAD (rev 1.71).
-Tue Nov 10 18:23:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/fileutils.rb (FileUtils.cp_r): new option
+ :remove_destination.
- * proc.c (cfunc_proc_t): add room for me.
+Tue Sep 19 00:42:15 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * proc.c (cfunc_proc_new): generalise for cfunc proc without env.
+ * object.c (rb_obj_ivar_defined, rb_mod_cvar_defined): new methods,
+ Kernel#instance_variable_defined? and Module#class_variable_defined?.
+ [ruby-dev:29587]
- * proc.c (rb_func_proc_new, rb_func_lambda_new): new functions to
- make proc/lambda without env from cfunc.
+ * lib/date/format.rb (Date::Bag#method_missing): use new method,
+ instance_variable_defined? to check if an instance variable is
+ defined. fixed: [ruby-dev:29554]
+ -- This didn't fix anything.
-Tue Nov 10 17:32:35 2015 Naohisa Goto <ngotogenome@gmail.com>
+Sun Sep 17 23:44:58 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bootstraptest/test_fork.rb ([ruby-dev:37934]): :NPROC (RLIMIT_NPROC)
- is not supported on some platforms (e.g. Solaris 10).
+ * lib/rdoc/rdoc.rb (RDoc::RDoc#document): scan only files modified
+ after the previous generation.
-Tue Nov 10 16:57:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 17 17:42:13 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (rb_hash_to_proc): new method Hash#to_proc.
- [Feature #11653]
+ * common.mk (install-doc): reverted.
-Tue Nov 10 14:34:09 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * instruby.rb: stores file name list without destdir prefix.
- * time.c (rb_time_timespec_new): swap utc and localtime
- to generate gmt flag by INT_MAX - gmtoff.
+ * lib/rdoc/generators/ri_generator.rb: do not chdir twice.
-Tue Nov 10 14:01:59 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Sep 16 23:14:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * hash.c (rb_hash_{le,lt,ge,gt}): new methods, Hash#<=, Hash#<,
- Hash#>=, Hash#>, to test if all elements of a hash are also
- included in another hash, and vice versa.
- [ruby-core:68561] [Feature #10984]
+ * ext/pty/pty.c (establishShell): remove remaining unused line.
-Tue Nov 10 11:25:29 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Sep 16 16:40:44 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (rb_timespec_now): added. [Feature #11558]
+ * Makefile.in, common.in, instruby.rb, ext/extmk.rb, lib/mkmf.rb:
+ use instruby.rb to install extensions instead of ext/extmk.rb.
- * time.c (rb_time_timespec_new): added. [Feature #11558]
+ * instruby.rb: store installed list into the file.
-Tue Nov 10 06:17:17 2015 Eric Wong <e@80x24.org>
+ * ext/dbm/extconf.rb: allow multiple candidates for dbm-type.
- * variable.c (rb_autoload_load): allow recursive calls
- [ruby-core:71345] [Bug #11658]
- * test/ruby/test_autoload.rb (test_autoload_while_autoloading):
- new test by: Hiroshi Shirosaki <h.shirosaki@gmail.com>
- [ruby-core:71390]
+ * ext/io/wait/extconf.rb: suspicious checking_for.
-Tue Nov 10 00:36:46 2015 Tanaka Akira <akr@fsij.org>
+ * ext/pty/pty.c (establishShell): parent pid is not used.
- * lib/resolv.rb (Resolv::DNS::Message::MessageEncoder#put_labels):
- Prevent overflow of pointer to labels.
- Patch by Hannes Georg. [ruby-core:71248] [Bug #11632]
+ * ext/pty/pty.c (freeDevice): not used.
-Tue Nov 10 00:25:41 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+ * ext/pty/pty.c (get_device_once): removed garbage right brace.
- * gems/bundled_gems: update to power_assert 0.2.6.
+ * lib/mkmf.rb (checking_for): improved the messages.
-Mon Nov 9 21:48:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 14 16:11:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_eval.c (rb_check_funcall_default): split from
- rb_check_funcall to return the given fallback value.
+ * string.c (rb_str_intern): raise SecurityError only when $SAFE
+ level is greater than zero. [ruby-core:08862]
- * object.c (rb_obj_dig): use rb_check_funcall_default so that tail
- call optimization will be possible. [Feature #11643]
+ * parse.y (rb_interned_p): new function to check if a string is
+ already interned.
-Mon Nov 9 21:27:23 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * object.c (str_to_id): use rb_str_intern().
- * array.c (rb_ary_dig): new method Array#dig.
+Wed Sep 13 18:43:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * hash.c (rb_hash_dig): new method Hash#dig.
+ * README.EXT: English adjustment. [ruby-core:08851] and
+ [ruby-core:08852]
- * object.c (rb_obj_dig): dig in nested arrays/hashes.
- [Feature #11643]
+Wed Sep 13 18:25:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Nov 9 18:00:47 2015 Yuki Nishijima <mail@yukinishijima.net>
+ * misc/ruby-mode.el (ruby-parse-partial): better here-doc support.
+ a patch from Marshall T. Vandegrift <llasram at gmail.com>.
+ [ruby-core:08804]
- * gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0.beta3
+Wed Sep 13 16:43:36 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Nov 9 17:38:14 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * string.c (rb_str_intern): prohibit interning tainted string.
- * test/runner.rb: use official repository for coverage tool.
- * Makefile.in: ditto.
- * common.mk: ditto.
- * .gitignore: ignored third party repositories.
+Wed Sep 13 01:14:21 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Nov 9 17:29:09 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/optparse.rb (OptionParser#getopts): works with pre-registered
+ options. [ruby-core:08826]
- * compile.c (iseq_compile_each): Dynamic string literals should be
- frozen.
- [ruby-core:57574] [Feature #8976]
+Sun Sep 10 20:27:13 2006 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Nov 9 15:56:07 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.1.
- * common.mk: Use ruby organization url for simplecov repository.
+Tue Jan 10 09:18:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 8 16:24:09 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * eval.c (stack_extend): fixed prototype.
- * NEWS: describe addition of File::TMPFILE
+ * eval.c (rb_require_safe): prevent extension from loading twice.
+ fixed: [ruby-dev:29523]
-Sun Nov 8 15:19:17 2015 Masaki Matsushita <glass.saga@gmail.com>
+Sat Sep 9 23:50:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * file.c: Add O_TMPFILE.
+ * bignum.c (rb_big_mul0): bignum multiplication without
+ normalization.
-Sun Nov 8 14:24:43 2015 windwiny <windwiny.ubt@gmail.com>
+ * bignum.c (rb_big_pow): use rb_big_mul0(). [ruby-dev:29547]
- * method.h (METHOD_ENTRY_{VISI,BASIC,FLAGS}_SET): suppress
- shift-op-parentheses warnings. [Fix GH-1082]
+Sat Sep 9 14:08:38 2006 Eric Hodel <drbrain@segment7.net>
-Sun Nov 8 14:01:22 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/test/unit/testcase.rb (Test::Unit::TestCase#run): Rescue
+ Exception in Test::Unit::TestCase#run. [ruby-core:08783]
- * ext/psych/psych_emitter.c: backport 5bd7744 from tenderlove/psych.
- support backward compatibility of Ruby 2.0
+Sat Sep 9 04:55:59 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 8 10:55:10 2015 Anton Davydov <antondavydov.o@gmail.com>
+ * lib/pstore.rb: open all in binary mode, and get rid of the quirk of
+ msvcrt. fixed: [ruby-dev:29518]
- * io.c (rb_io_gets_m): Update IO#gets doc for characters more than
- 1 byte. [Fix GH-1085]
+Sat Sep 9 04:54:42 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 8 10:37:58 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * Makefile.in, win32/Makefile.sub (MINIRUBY): append MINIRUBYOPT.
- * lib/uri/ftp.rb: fix a typo.
- [fix GH-1084][ci skip] Patch by @windwiny
+ * mkconfig.rb, ext/extmk.rb, lib/mkmf.rb, win32/mkexports.rb: suppress
+ warnings with $VERBOSE.
-Sun Nov 8 08:10:31 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/extmk.rb: Proc#call does not pass the block in 1.8.
- * vm_trace.c (exec_hooks_precheck): check need_clean everytime
- to clean-up unused hooks.
+ * win32/resource.rb: add more info.
- * vm_trace.c (list->need_clean): use as boolean value.
+Fri Sep 8 10:03:59 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sun Nov 8 01:31:27 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookies): new
+ method to parse multiple cookies per Set-Cookie header.
+ Thanks to Aaron Patterson <aaron_patterson at speakeasy.net>.
+ [ruby-core:08802]
- * lib/net/http.rb (Net::HTTP#initialize):
- default value of Net::HTTP#open_timeout is now 60 (was nil).
+Fri Sep 8 08:59:30 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 7 12:18:05 2015 Eric Wong <e@80x24.org>
+ * win32/Makefile.sub, win32/configure.bat win32/setup.mak: program
+ name transform.
- * string.c (id_to_s): remove redundant variable
- (rb_obj_as_string): trade id_to_s for idTo_s
- (rb_str_equal): replace rb_intern(...) with pre-defined ID
- (rb_str_cmp_m): ditto
- (rb_str_match): ditto
- (str_upto_each): ditto
- (rb_str_sum): ditto
- (Init_String): remove id_to_s initialization
+Fri Sep 8 01:33:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Nov 7 11:40:05 2015 Eric Wong <e@80x24.org>
+ * ruby.h (RSTRING_PTR): add migration macro.
- * thread.c (rb_cThreadShield): make static
+ * ruby.h (RARRAY_PTR): ditto.
-Sat Nov 7 09:51:38 2015 Koichi Sasada <ko1@atdot.net>
+Thu Sep 7 23:27:05 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_trace.c (rb_threadptr_exec_event_hooks_orig):
- maintain trace_running counter on internal events.
+ * file.c (path_check_0, fpath_check): disable path check on cygwin.
+ [ruby-talk:213074]
- This patch is made by Takashi Kokubun <takashikkbn@gmail.com>.
- [Bug #11603] https://github.com/ruby/ruby/pull/1059
+Wed Sep 06 12:05:19 2006 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Nov 7 03:32:27 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): fix regexp for euc-jp
+ [ruby-dev:29344]
- * include/ruby/ruby.h (RSTRUCT_PTR): need a close parenthesis.
+ * ext/nkf/lib/kconv.rb (Kconv::toeuc): remove -m0 [ruby-dev:29505]
-Sat Nov 7 01:32:06 2015 Naohisa Goto <ngotogenome@gmail.com>
+Tue Sep 5 06:47:22 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * dir.c (dir_fileno, dirfd): support of Dir#fileno on Solaris 10.
- Solaris 10 does not have dirfd, but the file descriptor of a
- directory is stored in the d_fd or dd_fd member in the DIR struct.
- Note that Solaris 11 has dirfd(3C).
+ * time.c (time_to_s): variable declaration after an execution
+ statement.
- * configure.in: checks for DIR.d_fd and DIR.dd_fd on Solaris 10.
+Tue Sep 5 05:56:51 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 6 23:13:53 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * numeric.c (flo_hash): improve collision. fixed: [ruby-dev:29352]
- * array.c: clarifies Array#reject! documentation.
- [fix GH-894][ci skip] Patch by @GxSplinter
+Tue Sep 5 05:49:41 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 6 20:18:25 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (path_check_0): check if sticky bit is set on parent
+ directories for executable path. fixed: [ruby-dev:29415]
- * test/runner.rb: extracted test helper.
- * test/lib/zombie_hunter.rb: ditto.
+Tue Sep 5 05:03:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Nov 6 18:07:47 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * numeric.c (fix_plus): addition in Fixnum will never overflow
+ long. a patch from Ondrej Bilka <neleai at seznam.cz>.
+ [ruby-core:08794]
- * include/ruby/ruby.h (rb_array_const_ptr, rb_struct_const_ptr):
- Suppress pointer type mismatch warnings occurred with old version
- of Fujitsu C Compiler (fcc) on Solaris 10. The warnings cause
- failure of TestMkmf::TestConvertible. [Bug #11644] [ruby-dev:49326]
- * include/ruby/ruby.h (FIX_CONST_VALUE_PTR): macro for the above,
- only effective with fcc.
+ * numeric.c (fix_minus): ditto.
-Fri Nov 6 12:39:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bignum.c (rb_big_pow): eagerly truncate resulting bignum.
+ [ruby-core:08794]
- * defs/id.def (token_ops), parse.y (parser_yylex): change DOTQ
- from ".?" to "&.". [ruby-core:71363] [Feature #11537]
+Mon Sep 4 23:15:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Nov 6 09:01:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (time_to_s): make it conform to RFC2822 date format.
+ [ruby-dev:29467]
- * parse.y (kwd_append): fix segv after invalid keyword argument,
- preceding keyword list is NULL when syntax error is there.
- [ruby-core:71356] [Bug #11663]
+Mon Sep 4 21:43:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 6 06:59:37 2015 Eric Wong <e@80x24.org>
+ * ext/dbm/extconf.rb: create makefile according to the result of check
+ for dbm header. fixed: [ruby-dev:29445]
- * test/ruby/test_autoload: hoist out ruby_impl_require
+Mon Sep 4 21:42:35 2006 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Nov 5 13:03:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.
- * defs/id.def (token_ops): gather associations between IDs,
- operators, and parser tokens.
+Mon Sep 4 21:14:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 5 10:17:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (time_strftime): include nul character. fixed: [ruby-dev:29422]
- * ext/socket/socket.c (make_addrinfo): use RARRAY_ASET for
- write-barrier.
+Mon Sep 4 16:29:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/tk/tcltklib.c ({call,eval,invoke}_queue_handler): ditto.
+ * lib/cgi.rb (CGI::out): specify -m0 -x option for nkf.
+ [ruby-dev:29284]
- * ext/tk/tkutil/tkutil.c (ary2list, ary2list2): ditto.
+Mon Sep 4 16:13:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Nov 5 10:09:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (pipe_open): command name should not contain null bytes.
+ [ruby-dev:29421]
- * ext/**/*.c: prefer RARRAY_AREF to indexing RARRAY_CONST_PTR.
- pointed out by hanmac.
- https://github.com/ruby/ruby/commit/3553a86#commitcomment-14187670
+ * process.c (proc_spawn): ditto.
-Wed Nov 4 17:33:24 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * process.c (proc_spawn_n): ditto.
- * lib/debug.rb: Add documentation for #thread_list_all.
- [Misc #11580][ci skip]
+ * process.c (rb_f_system): ditto.
-Wed Nov 4 15:45:59 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Sep 3 15:32:44 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c: fix documentation for rb_define_class{_id}_under.
- [fix GH-991][ci skip] Patch by @kachick
+ * lib/mkmf.rb: get rid of nil.to_s.
-Wed Nov 4 15:40:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Sep 3 06:24:38 2006 Tanaka Akira <akr@fsij.org>
- * method.h: fix typo. Patch by @davydovanton
- [fix GH-1076][ci skip]
+ * ext/socket/socket.c (ruby_connect): sockerrlen should be socklen_t.
-Wed Nov 4 15:39:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Sep 3 04:40:42 2006 Tanaka Akira <akr@fsij.org>
- * hash.c: use correct grammar. Patch by @tveastman
- [fix GH-1079][ci skip]
+ * ext/socket/extconf.rb: check arpa/inet.h for ntohs.
-Wed Nov 4 11:38:23 2015 Jake Worth <jakeworth82@gmail.com>
+ * ext/socket/socket.c: include arpa/inet.h if available.
- * process.c (proc_getsid): [DOC] Fix double word 'for' and typo.
- [Fix GH-1080]
+Sun Sep 3 02:34:55 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Wed Nov 4 06:01:52 2015 Eric Wong <e@80x24.org>
+ * lib/drb/unix.rb (DRbUNIXSocket#close): don't get path if client mode.
+ [ruby-dev:29417]
- * include/ruby/ruby.h (struct RObject): hide iv_index_tbl type
- [ruby-core:71306] [Feature #11647]
+Sun Sep 3 01:45:17 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Tue Nov 3 06:48:58 2015 Eric Wong <e@80x24.org>
+ * lib/drb/acl.rb (ACLEntry#initialize): examine whether '*' is
+ included before IPAddr.new. [ruby-dev:29406]
- * variable.c (find_class_path): remove cast for rb_class_ivar_set
- (rb_ivar_set): ditto
- (rb_cvar_set): ditto
+Sat Sep 2 13:23:01 2006 Tanaka Akira <akr@fsij.org>
-Tue Nov 3 06:18:21 2015 Eric Wong <e@80x24.org>
+ * common.mk (ia64.o): use the compiler driver to assemble ia64.s
+ to use appropriate ABI.
- * variable.c (rb_global_tbl): convert to id_table
+Sat Sep 2 03:36:22 2006 Tanaka Akira <akr@fsij.org>
-Tue Nov 3 01:58:46 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * common.mk, configure.in, defines.h, eval.c, gc.c, main.c,
+ numeric.c, ruby.h, ia64.s: backport IA64 HP-UX support.
- * parse.y (NO_QCALL): fix type mismatch of operands that causes
- compile error with Oracle Solaris Studio on Solaris.
- [Bug #11645] [ruby-dev:49327]
+Fri Sep 1 13:52:57 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sun Nov 1 17:14:36 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/font.rb: TkFont#current_configinfo() doesn't work
+ on Tcl/Tk8.x.
- * id_table.c (mix_id_table_insert): do not touch list during
- list->hash transition because GC can run during transition.
+Thu Aug 31 12:46:55 2006 why the lucky stiff <why@ruby-lang.org>
-Sun Nov 1 11:07:31 2015 Eric Wong <e@80x24.org>
+ * eval.c (ruby_init): rename top_cref to ruby_top_cref and export,
+ along with ruby_cref, for use by the sandbox. [ruby-core:08762]
- * iseq.c (iseq_memsize): account for rb_call_cache entries
+ * node.h: ditto.
-Sun Nov 1 09:12:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Aug 29 19:10:10 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parser_yylex): ':' separated by a comment and a newline
- is not valid as symbol.
+ * hash.c (rb_hash_s_create): fixed memory leak, based on the patch
+ by Kent Sibilev <ksruby at gmail.com>. fixed: [ruby-talk:211233]
-Sat Oct 31 20:15:48 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Aug 28 11:36:02 2006 Eric Hodel <drbrain@segment7.net>
- * test/openssl/test_pair.rb: skipped tests if openssl doesn't support
- ECDH cipher.
+ * lib/rdoc/parsers/parse_rb.rb: Fix typo. Submitted by
+ <calamitas at gmail.com>. [ruby-core:08724]
-Sat Oct 31 14:58:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Aug 28 07:53:44 2006 Eric Hodel <drbrain@segment7.net>
- * man/ruby.1 (SYNOPSIS): remove extraneous space for -F option as
- it does not allow spaces before its argument.
- [ruby-core:71283] [Bug #11641]
+ * lib/rdoc/ri/ri_formatter.rb: Don't unescape HTML in HtmlFormatter.
+ Submitted by Kent Sibilev <ksruby at gmail.com>. [ruby-core:08392].
-Sat Oct 31 14:58:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Aug 28 07:25:45 2006 Eric Hodel <drbrain@segment7.net>
- * man/ruby.1 (SYNOPSIS): remove extraneous space for -F option as
- it does not allow spaces before its argument.
- [ruby-core:71283] [Bug #11641]
+ * file.c (File#size?): Fix documentation submitted by Rick Ohnemus.
+ ruby-Bugs-5529. [ruby-core:08725]
-Sat Oct 31 10:22:49 2015 yui-knk <spiketeika@gmail.com>
+Sat Aug 26 08:07:13 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * eval_error.c (undef_mesg_for): fix typo. Before this commit
- `ArgumentError: malformed format string - %$` was raised when
- `NameError#message` is called. [ruby-core:71282] [Bug #11640]
- [Fix GH-1077]
+ * lib/date.rb, lib/date/format.rb: updated based on date2 3.8.2.
-Fri Oct 30 21:12:45 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+Fri Aug 25 22:32:04 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gems/bundled_gems: update to power_assert 0.2.5.
+ * lib/rexml/source.rb (REXML::IOSource#initialize): encoding have to
+ be set with the accessor. fixed: [ruby-list:42737]
-Fri Oct 30 19:29:52 2015 Koichi Sasada <ko1@atdot.net>
+Fri Aug 25 17:15:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (newobj_slowpath): do not need to use flags hack (commit miss).
+ * stable version 1.8.5 released.
-Fri Oct 30 19:08:48 2015 Koichi Sasada <ko1@atdot.net>
+Fri Aug 25 17:02:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (heap_get_freeobj_from_next_freepage): not so UNLIKELY.
+ * gc.c (gc_sweep): typo fixed.
-Fri Oct 30 18:09:51 2015 Koichi Sasada <ko1@atdot.net>
+Tue Aug 22 18:47:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (newobj_slowpath): reduce 1 parameter to use only registers
- for performance.
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_method):
+ rdoc documents C module methods as instance methods. a patch in
+ [ruby-core:08536].
- On my laptop, 'N.times{x = []}' (where N = 29_000_000) is
- 1.86 sec -> 1.74 sec.
+Sat Aug 19 14:15:02 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Oct 30 12:53:21 2015 yui-knk <spiketeika@gmail.com>
+ * win32/Makefile.sub (config.status): include winsock2.h instead of
+ winsock.h when --with-winsock2 is specified.
+ fixed: [ruby-dev:29296]
- * test/ruby/test_call.rb: added test for safe navigation operator.
- [fix GH-1066]
+Sat Aug 19 11:28:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 30 12:47:34 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (rb_file_s_rename): use errno if set properly.
+ fixed: [ruby-dev:29293]
- * ChangeLog: fix wrong commit name.
+Sat Aug 19 11:09:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 30 12:36:16 2015 yui-knk <spiketeika@gmail.com>
+ * parse.y (then): remove semicolon warning. [ruby-dev:29299]
- * vm_method.c: added documentation of protected/private methods.
- [fix GH-1072]
- * test/ruby/test_module.rb: added testcase for method_defined?
- [fix GH-1071]
+Thu Aug 17 19:15:16 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 30 12:06:59 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_stat_[rRwWxX]): check for super user.
+ fixed: [ruby-core:08616]
- * variable.c (rb_class_ivar_set): rename as class specific ivar
- setter, and st_table is no longer involved.
+Thu Aug 17 14:47:06 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 30 11:36:33 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb: added rdoc by Daniel Berger. [ruby-core:08177]
- * variable.c (generic_ivar_remove): adjust type, set valp
- (rb_obj_remove_instance_variable): simplify call
- * test/ruby/test_object.rb (test_remove_instance_variable):
- expand for implementation details
+Thu Aug 17 00:39:05 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Fri Oct 30 10:37:56 2015 Eric Wong <e@80x24.org>
+ * lib/rinda/ring.rb (do_reply): Fix for RingServer fails to find a
+ TupleSpace when TupleSpace resides in the same ruby process with
+ RingServer. a patch from Kent Sibilev. [ruby-core:08453]
- * internal.h (rb_st_insert_id_and_value): update prototype
- * variable.c (rb_st_insert_id_and_value): reduce args
- (find_class_path): adjust call for less args
- (rb_ivar_set): ditto
- (rb_cvar_set): ditto
- * class.c (rb_singleton_class_attached): ditto
+Wed Aug 16 11:45:36 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 30 09:57:22 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * process.c (proc_setuid, proc_setgid, proc_seteuid, proc_setegid):
+ get rid of bogus implementations on Mac OS X.
- * gems/bundled_gems: update latest gems.
- test-unit-3.1.5 and minitest-5.8.2
+Tue Aug 15 19:10:18 2006 Eric Hodel <drbrain@segment7.net>
-Fri Oct 30 09:54:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_class_comment): Fix
+ broken class-level documentation.
- * lib/rubygems: Update to RubyGems HEAD(60d7972).
- this version contains pull requests number of #1343, #1356, #1357, #1363
- at https://github.com/rubygems/rubygems/pulls
- * test/rubygems: ditto.
+Wed Aug 16 11:09:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 30 07:38:29 2015 Koichi Sasada <ko1@atdot.net>
+ * ruby.c (set_arg0): fill argv other than the first with an empty
+ string instead of NULL.
- * insns.def (getinlinecache/setinlinecache): compare ic->ic_cref and
- current cref only when cached CREF list includes singleton class.
+Wed Aug 16 11:08:00 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Singleton classes have own namespaces, so that we need to check
- cref as a key (#10943).
+ * win32/win32.h: removed an excess macro. fixed: [ruby-dev:29258]
- However, if current CREF list does not include singleton class,
- no need to check CREF because it should be same name space.
+Tue Aug 8 23:49:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_insnhelper.c (vm_get_const_key_cref): add a function returns
- CREF only when it includes singleton class.
+ * lib/irb/extend-command.rb (IRB::ExtendCommandBundle): pacify
+ RDoc. a patch from Eric Hodel <drbrain at segment7.net>.
+ [ruby-core:08522]
- * vm_core.h: constify iseq_inline_cache_entry::ic_cref.
+Tue Aug 8 11:32:54 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Oct 30 06:43:50 2015 Koichi Sasada <ko1@atdot.net>
+ * Makefile.in, common.mk, configure.in: fix for platforms without
+ rm. patches from Yutaka kanemoto <kinpoco at gmail.com>.
+ [ruby-dev:29215]
- * vm_insnhelper.c (vm_env_cref): make it inline for performance.
+Mon Aug 7 17:56:59 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_insnhelper.c (rb_vm_get_cref): use NULL instead of 0.
+ * ext/bigdecimal/bigdecimal.c, ext/digest/rmd160/rmd160ossl.c,
+ ext/digest/sha1/sha1ossl.c, ext/readline/readline.c: move
+ incluion of config.h to pacify AIX. a patch from Yutaka
+ Kanemoto <kinpoco at gmail.com>. [ruby-dev:29197]
-Fri Oct 30 06:20:40 2015 Koichi Sasada <ko1@atdot.net>
+Mon Aug 7 15:55:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * insns.def: nobody set ic->ic_value.value to Qundef.
+ * ext/syck/syck.c (syck_move_tokens): should avoid negative
+ memmove. [ruby-list:42625]
-Fri Oct 30 06:15:50 2015 Koichi Sasada <ko1@atdot.net>
+Mon Aug 7 14:37:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm.c: add ifndef guard for VM_CHECK_MODE.
+ * configure.in, common.mk: AIX link issue. a patch from Yutaka
+ Kanemoto <kinpoco at gmail.com>. [ruby-dev:29190]
-Fri Oct 30 06:13:10 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/socket/socket.c: AIX socket support. [ruby-dev:29190]
- * vm_insnhelper.c (vm_check_frame_detail): should require me for
- VM_FRAME_FLAG_BMETHOD type frame.
+Mon Aug 7 12:05:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Oct 29 18:42:30 2015 Koichi Sasada <ko1@atdot.net>
+ * dln.c, eval.c, gc.c, regex.c, ruby.h: shut up AIX alloca
+ warning. a patch from Yutaka Kanemoto <kinpoco at gmail.com>.
+ [ruby-dev:29191]
- * gc.c (gc_mark_ptr): specify NOINLINE so that gc_mark() can return
- immediately when obj is not a markable object.
+Sun Aug 6 20:40:41 2006 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Oct 29 18:05:22 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/date/format.rb (str[fp]time): %[EO]U didn't denote %U.
- * encoding.c (rb_enc_check_str): add for performance.
- This function only accepts T_STRING (and T_REGEXP).
+Sat Aug 5 17:07:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- This patch improves performance of a tiny_segmenter benchmark
- (num=2) 2.54sec -> 2.42sec on my machine.
- https://github.com/chezou/TinySegmenter.jl/blob/master/benchmark/benchmark.rb
+ * parse.y (top_local_setup): local_vars[-1] should point
+ ruby_scope itself to protect local_tbl from garbage collection.
+ [ruby-dev:29049]
- * encoding.c: add ENC_DEBUG and ENC_ASSERT() macros.
+Sat Aug 5 13:54:03 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * internal.h: add a decl. of rb_enc_check_str().
+ * lib/date/format.rb (str[fp]time): "%\n" means "\n".
- * string.c (rb_str_plus): use rb_enc_check_str().
+Fri Aug 4 15:21:00 2006 Eric Hodel <drbrain@segment7.net>
- * string.c (rb_str_subpat_set): ditto.
+ * lib: Merge RDoc and .document from HEAD.
+ * lib/drb/ssl.rb: Close socket on SSLError [ruby-core:7197]
-Thu Oct 29 17:16:40 2015 Koichi Sasada <ko1@atdot.net>
+Fri Aug 4 19:13:41 2006 Keiju Ishitsuka <keiju@ruby-lang.org>
- * internal.h: export rb_wb_(un)protected_newobj_of()
- because some extensions include internal.h.
+ * lib/irb/{init.rb,ruby-lex.rb,slex.rb}: can't input '\c' for
+ [ruby-core: 7122].
-Thu Oct 29 16:42:19 2015 Koichi Sasada <ko1@atdot.net>
+Fri Aug 4 14:02:14 2006 James Edward Gray II <james@grayproductions.net>
- * gc.c (rb_imemo_new): should not pass FL_WB_PROTECTED flag.
+ * lib/date/format.rb (__strptime, strftime): allow multi-line patterns
+ in Date#strftime the same as Time#strftime accepts.
+ fixed: [ruby-core:08466]
- * gc.c (rb_wb_protected_newobj_of): add more assertions.
+Fri Aug 4 13:56:51 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (rb_wb_unprotected_newobj_of): ditto.
+ * pack.c (pack_pack): check argument overrun for 'P'. based on a
+ patch by rucila <rucila at yahoo.cojp>. fixed: [ruby-dev:29182]
-Thu Oct 29 16:20:26 2015 Koichi Sasada <ko1@atdot.net>
+Tue Aug 1 17:44:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c: introduce rb_wb_unprotected_newobj_of() and
- rb_wb_protected_newobj_of(), pass the WB_PROTECTED
- information explicitly.
+ * win32/win32.c (init_stdhandle): assign standard file handles.
- * internal.h: use introduced functions by NEWOBJ_OF().
- `flag' is immediate value, so that C compilers can
- solve them at compile time.
+Tue Aug 1 12:24:58 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/ruby.h: add a comment about that.
+ * eval.c (Init_Binding): fix old commit miss.
-Thu Oct 29 14:52:03 2015 Koichi Sasada <ko1@atdot.net>
+Mon Jul 31 17:08:20 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c: add rb_objspace::flags::has_hook to represent hook availability.
+ * win32/win32.c (exit_handler): new function; release winsock and
+ environment work area.
- * gc.c: add gc_event_hook_available_p(objspace) to check that flag.
+ * win32/win32.c (NTInitialize): setup exit_handler.
- * gc.c (newobj_of): use gc_event_hook_available_p() instead of
- checking gc_event_hook_needed_p(objspace, RUBY_INTERNAL_EVENT_NEWOBJ).
- for performance.
+ * win32/win32.c (StartSockets): use exit_handler.
- * gc.c (newobj_init): add UNLIKELY() for FL_WB_PROTECTED flag.
+ * win32/win32.c (rb_w32_getenv): use GetEnvironmentStrings() instead
+ of GetEnvironmentVariable(), because the latter cannot distinguish
+ wheather a null environment variable exists or not.
+ fixed: [ruby-talk:205123]
- * gc.c (newobj_init): change parameters order (trivial change).
+Mon Jul 31 16:15:13 2006 Tanaka Akira <akr@fsij.org>
-Thu Oct 29 14:45:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_process.rb (TestProcess#test_rlimit_nofile):
+ setrlimit may fail with EINVAL.
+ reported by MIYAMUKO Katsuyuki. [ruby-dev:29174]
- * vm_core.h (rb_thread_struct): move forward declarations before
- used.
+Mon Jul 31 13:38:22 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Oct 29 14:07:54 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/webrick/httprequest.rb (WEBrick::HTTPReuqest#parse_uri): improve
+ for the value of IPv6 address in the Host: header field.
- * gc.c (gc_mark_ptr): remove debug code for #11244.
+Mon Jul 31 09:22:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Oct 29 10:08:33 2015 Eric Wong <e@80x24.org>
+ * ruby.h: use ifdef (or defined) for macro constants that may or
+ may not be defined to shut up gcc's -Wundef warnings.
+ [ruby-core:08447]
- * variable.c (struct autoload_state): usable as wait-queue head
- (struct autoload_data_i): remove 2 words of overhead
- (autoload_i_mark): remove marking for thread
- (autoload_reset): adjust for struct changes
- (rb_autoload): ditto
- (rb_autoloading_value): ditto
- (rb_autoload_load): ditto
- (const_update): ditto
+Sun Jul 30 23:26:22 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Oct 29 08:48:05 2015 Eric Wong <e@80x24.org>
+ * eval.c (rb_call0): trace call/return of method defined from block.
+ fixed: [ruby-core:08329]
- * variable.c (struct autoload_data_i): add waitq_head
- (struct autoload_state): new struct
- (autoload_require): save result in autoload_state for use
- in autoload_reset
- (autoload_reset): wake up other waiters with open-coded
- wait-queues
- (rb_autoload_load): add ensure autoload_const_set happens
- atomically w.r.t. autoload-triggered "require"
- [ruby-core:70075] [ruby-core:71239] [Bug #11384]
+ * eval.c (rb_trap_eval): make the current thread runnable to deal with
+ exceptions which occurred within the trap. fixed: [ruby-dev:27729]
-Wed Oct 29 00:39:50 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/cgi/session.rb, lib/cgi/session/pstore.rb: suppress warnings.
+ fixed: [ruby-talk:204896]
- * test/rubygems/test_gem_commands_server_command.rb
- (test_handle_options_port): change port from http to discard.
- Solaris does not include "http 80/tcp" in its default
- /etc/inet/services. AFAIK, discard (9/tcp) is older than http
- and it is expected that all OS can resolve the service name.
- [Bug #10004] [ruby-core:63518]
+Sat Jul 29 06:12:06 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Oct 28 23:52:48 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/tk/lib/multi-tk.rb: freeze ip_name for security reason.
- * probes_helper.h (RUBY_DTRACE_HOOK): add RB_GC_GUARD, though paranoic.
+Sat Jul 29 01:23:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Oct 28 15:36:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/logger.rb: improves the amount of documentation that Rdoc
+ picks up when processing logger.rb by moving the require
+ statement back before the comment block. a patch from Hugh
+ Sasse <hgs at dmu.ac.uk>. [ruby-core:08422]
- * error.c (rb_name_err_new): store the receiver directly.
+Thu Jul 27 22:21:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * error.c (name_err_receiver): return directly stored receiver.
- [Feature #10881]
+ * time.c (time_to_s): fixed format mismatch.
- * error.c (name_err_mesg_to_str): quote the name if unprintable.
+Thu Jul 27 21:19:54 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * object.c (check_setter_id): use rb_check_id to convert names.
+ * math.c (domain_check): a new function to check domain error
+ explicitly for systems that return NaN like FreeBSD.
+ [ruby-core:07019]
- * variable.c (uninitialized_constant): use NameError::message to
- keep the receiver of uninitialized constant. [Feature #10881]
+ * math.c (math_acos, math_asin, math_acosh, math_atanh, math_log,
+ math_log10, math_sqrt): use domain_check().
- * error.c (rb_name_err_new): new function to create NameError
- exception instance. [Feature #10881]
+ * math.c (math_sqrt): fix documentation flaw.
-Wed Oct 28 13:29:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 27 18:12:12 2006 WATANABE Hirofumi <eban@ruby-lang.org>
- * parse.y (new_attr_op_assign): fix op_assign type, which is
- already an ID since r52284. [Feature #11537]
+ * time.c: need to declare time_utc_offset.
-Tue Oct 27 23:14:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 27 17:01:01 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * defs/id.def: enable anonymous IDs not to expose internal IDs for
- frozen-string-literal-debug by Marshal.dump.
+ * io.c (io_close): always calls "close" method of the receiver.
+ [ruby-core:6911] [ruby-core:8112]
-Tue Oct 27 17:06:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 27 16:49:01 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * defs/id.def: move internal IDs for frozen-string-literal-debug.
+ * time.c (time_to_s): use +0900 style timezone string for local time.
+ [ruby-dev:29143]
-Tue Oct 27 16:41:05 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 27 16:41:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * error.c (rb_error_frozen_object): use rb_attr_get instead of
- rb_ivar_get to get rid of warnings for string objects created
- when frozen-string-literal-debug is disabled.
+ * ext/openssl/ossl.h: move <ruby.h> inclusion point to shut up
+ Solaris compiler. [ruby-core:08114]
-Tue Oct 27 16:18:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 26 22:20:59 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/logger.rb (Logger::Period#previous_period_end): as weekly
- rotation shifts the log file on Sundays, the end date of the
- previous period should be Saturdays. fix r45072.
- [ruby-dev:49314] [Bug #11622]
+ * configure.in: add support for as and ASFLAGS. [ruby-dev:29138]
-Tue Oct 27 16:12:37 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Jul 26 22:13:45 2006 Minero Aoki <aamine@loveruby.net>
- * vm_dump.c (rb_print_backtrace): our addr2line doesn't work on sparc.
- http://rubyci.s3.amazonaws.com/unstable11s/ruby-trunk/log/20151027T043311Z.log.html.gz
+ * lib/net/http.rb: sync with HEAD (rev 1.132).
-Tue Oct 27 12:00:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/http.rb (Net::HTTP#post, request_post, request): should
+ set Content-Type: x-www-form-urlencoded by default.
- * lib/logger.rb (Logger::Period#next_rotate_time): get rid of
- adding to mday not to exceed the days of the month.
- [ruby-core:71185] [Bug #11620]
+ * lib/net/http.rb (Net::HTTPHeader#content_type): should return
+ nil when there's no Content-Type.
-Mon Oct 26 22:43:03 2015 yui-knk <spiketeika@gmail.com>
+ * lib/net/http.rb (Net::HTTPHeader#sub_type): should return nil
+ when there's no sub Content-Type (e.g. "Content-Type: text").
- * test/ruby/test_module.rb (test_method_defined): Add test cases
- for `public/protected/private _method_defined?`
- These methods accept string as argument, so add string argument
- cases. [Fix GH-1067]
+ * lib/net/http.rb (Net::HTTPHeader#type_params): wrongly failed
+ when there's no Content-Type.
-Mon Oct 26 22:23:30 2015 SimonDKnight <simondknight@hotmail.com>
+Wed Jul 26 18:35:38 2006 Minero Aoki <aamine@loveruby.net>
- * lib/racc/rdoc/grammar.en.rdoc: Grammatical errors fixed.
- [Fix GH-1070]
+ * ext/strscan/strscan.c: sync with HEAD (rev 1.25).
-Mon Oct 26 18:36:43 2015 Shota Fukumori (sora_h) <her@sorah.jp>
+ * ext/strscan/strscan.c (strscan_do_scan):
+ StringScanner.new("").scan(//) should return "". [ruby-Bugs:4361]
- * vm_method.c(rb_method_entry_make):
- [DOC] [ci skip] Remove a needless space from comment
- [Fixes GH-1069] Patch by @yui-knk
+Wed Jul 26 18:14:19 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Oct 26 17:30:13 2015 Ryan Hosford <tad.hosford@gmail.com>
+ * ext/pty/pty.c (getDevice): retry once after GC on failure.
+ [ruby-core:08282]
- * lib/fileutils.rb: rename tailing to trailing.
- [Misc #11548]
+Wed Jul 26 17:28:16 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Oct 26 17:11:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * sprintf.c (rb_f_sprintf): prepend ".." to %u for negative bignum,
+ but not "-". fixed: [ruby-core:08167]
- * parse.y (call_op, call_op2): fix values on ripper. [Feature #11537]
+Wed Jul 26 16:39:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Oct 26 12:55:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c (rb_str_scan): add string modification check.
+ [ruby-core:7216]
- * parse.y (call_op2): separate from call_op and also allow "::",
- while dot_or_colon should not allow ".?". [Feature #11537]
+Wed Jul 26 16:06:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Oct 26 01:03:23 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): check
+ multipart boundary end. a patch from Fujioka <fuj at rabbix.jp>
+ [ruby-dev:28470]
- * thread_pthread.c: fix compile errors when
- USE_SLEEPY_TIMER_THREAD is disabled.
+Wed Jul 26 01:02:59 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Oct 25 10:12:05 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: suppress warnings by automake 1.8 or later.
- * symbol.c (op_tbl): add DOTQ for ripper. [Feature #11537]
+Tue Jul 25 00:30:06 2006 Eric Hodel <drbrain@segment7.net>
-Sat Oct 24 22:51:18 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/prettyprint.rb: RD to RDoc conversion by Hugh Sasse.
- * configure.in: fixed build failure of Haiku.
- [fix GH-984] Patch by @kallisti5
- * ext/socket/getaddrinfo.c: ditto.
- * ext/socket/getnameinfo.c: ditto.
- * ext/socket/rubysocket.h: ditto.
+Tue Jul 25 14:49:51 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Oct 24 21:16:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (configuration): typo.
- * test/fileutils/test_fileutils.rb (test_uptodate): relax error
- message format. [Feature #9025], [ruby-core:71178] [Bug #11617]
+Tue Jul 25 13:14:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Oct 24 21:06:43 2015 Shota Fukumori (sora_h) <her@sorah.jp>
+ * process.c (rb_proc_times): rename hz to hertz to avoid name
+ crash on AIX. [ruby-dev:29126]
- * lib/mkmf.rb: Revert r45640 because it may lead to link
- with different libruby. [Bug #9760]
+Mon Jul 24 22:03:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Oct 24 15:42:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (backtrace): skip frames successive on node and method name.
- * bootstraptest/test_method.rb: relax error message format.
+Mon Jul 24 17:55:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/ruby/test_arity.rb (err_mess): ditto.
- [Feature #9025], [ruby-core:71178] [Bug #11617]
+ * process.c (rb_f_system): add security check. [ruby-talk:202947]
-Sat Oct 24 12:47:47 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * process.c (rb_f_system): move signal right before fork to avoid
+ signal handler intervention.
- * vm_insnhelper.c: improved error message for "wrong number
- of arguments", distinguishing given and expected argument
- numbers clearly. [Feature #9025]
+Mon Jul 24 15:51:52 2006 Tanaka Akira <akr@fsij.org>
-Sat Oct 24 11:57:59 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/readline/readline.c (readline_readline): rl_deprep_term_function
+ may be NULL with libedit. reported by Ryan Davis. [ruby-dev:29070]
- * vm_insnhelper.c: remove the typedef redeclaration of
- vm_call_handler.
+Mon Jul 24 15:19:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Oct 24 07:29:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_call0): revert last change. [ruby-dev:29112]
+ [ruby-core:08374]
- * lib/forwardable.rb (def_instance_delegator, def_single_delegator):
- match backtraces against ::Forwardable in case the target class
- is a subclass of BasicObject and does not include Kernel.
- [ruby-core:71176] [Bug #11616]
+Sun Jul 23 22:59:49 2006 Tanaka Akira <akr@fsij.org>
-Sat Oct 24 04:10:13 2015 Koichi Sasada <ko1@atdot.net>
+ * test/socket/test_unix.rb: disabled on cygwin.
+ reported by Kouhei Yanagita. [ruby-dev:29080]
- * iseq.c (make_compile_option_value): include frozen_string_literal*
- in a made option value.
+Fri Jul 21 21:21:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_opts.h: forgot to add OPT_FROZEN_STRING_LITERAL_DEBUG
- at last commit.
+ * eval.c (rb_call0): include funcalled methods in caller list.
+ fixed: [ruby-core:08290]
-Sat Oct 24 03:58:02 2015 Koichi Sasada <ko1@atdot.net>
+Fri Jul 21 12:11:00 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby.c: introduce --enable-frozen-string-literal-debug option.
- If this option is enabled, the modify error will be:
- can't modify frozen String (RuntimeError) =>
- can't modify frozen String, created at test.rb:3 (RuntimeError)
+ * ext/extmk.rb, lib/mkmf.rb (with_destdir): remove drive letter before
+ prepending destdir on DOSISH.
- * iseq.h: add compile option frozen_string_literal_debug.
+Thu Jul 20 15:07:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c: catch up this fix.
+ * ruby.h: export classes/modules to implement sandbox.
+ [ruby-core:08283]
- * error.c (rb_error_frozen): ditto.
+Thu Jul 20 00:06:29 2006 Keiju Ishitsuka <keiju@ishitsuka.com>
- * iseq.c (set_compile_option_from_hash): ditto.
+ * lib/irb/completion.rb: support for completion of numeric
+ number. [ruby-dev: 29038]
- * test/ruby/test_rubyoptions.rb: add a test for this fix.
+Wed Jul 19 23:53:05 2006 Kouhei Sutou <kou@cozmixng.org>
-Sat Oct 24 02:02:24 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/parser.rb, lib/rss/utils.rb: added documents.
- * vm_insnhelper.c: introduce new call handler for simple ISeqs.
+Tue Jul 18 22:10:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- vm_call_iseq_setup_normal_0start() is simple, however it has
- some loops/conditions depends on ISeq::param.size and
- ISeq::local_size (in vm_push_frame(), inlined into this function).
+ * process.c (rb_f_system): block SIGCHLD during the process
+ execution, like glibc system(3) does. [ruby-talk:202361]
- There are many simple methods which has a few parameters and local
- variables. So that this patch introduces several special functions
- generated in vm_call_iseq_optimized.inc by
- tool/mk_call_iseq_optimized.rb.
+Tue Jul 18 23:12:14 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- This script makes
- vm_call_iseq_setup_normal_0start_Xparams_Ylocals()
- where X is 0 to 3 and Y is 1 to 6 (as current setting).
- In this case, X * Y = 24 functions are created.
+ * win32/win32.c (open_ifs_socket): should not use plain malloc.
- These functions creates fast method dispatch by inlining
- vm_push_frame() with immediate params/locals sizes.
+ * win32/win32.c (rb_w32_opendir): should not use plain realloc.
- On my laptop, we can have the following results.
+Tue Jul 18 18:05:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- vm2_method* 1.083 (8.3% faster)
- vm2_poly_method* 0.961 (3.4% slower)
+ * test/ruby/test_float.rb (TestFloat::test_strtod): update test to
+ conform strtod change.
- It shows 8.3% faster for inner loop method dispatch (hit inline
- cache), but 3.4% slower when inline cache miss because we need
- to find a suitable call handler.
+Tue Jul 18 15:49:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * common.mk: add a rule for vm_call_iseq_optimized.inc.
+ * pack.c (pack_unpack): propagate association array to copied
+ string. [ruby-core:08223]
- * tool/mk_call_iseq_optimized.rb: added.
+ * pack.c (pack_unpack): return referenced string itself if it has
+ same length as specified. a patch from <nobu at ruby-lang.org>
+ in [ruby-core:08225].
- * vm.c: include vm_call_iseq_optimized.inc.
+ * pack.c (pack_pack): taint 'p' packed strings.
-Sat Oct 24 01:58:50 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jul 18 14:03:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: define vm_call_handler.
+ * lib/webrick/httpserver.rb (WEBrick::HTTPServer::unmount): remove
+ inpect argument from sprintf. [ruby-dev:29039]
-Sat Oct 24 01:56:01 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jul 18 10:53:37 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_core.h, vm_insnhelper.h: move definition of VMDEBUG
- from vm_insnhelper.h to vm_core.h.
+ * object.c (rb_cstr_to_dbl): limit out-of-range message.
-Sat Oct 24 01:51:01 2015 Akinori MUSHA <knu@iDaemons.org>
+ * util.c (ruby_strtod): return end pointer even if ERANGE occurred.
+ fixed: [ruby-dev:29041]
- * NEWS: [DOC] In the new safe call syntax, arguments are evaluated
- only if a call is made.
+Mon Jul 18 00:43:05 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/syntax/calling_methods.rdoc: Fix a typo.
+ * util.c (ruby_strtod): stop at dot not followed by digits.
+ fixed: [ruby-dev:29035]
-Sat Oct 24 00:38:34 2015 Shugo Maeda <shugo@ruby-lang.org>
+Tue Jul 18 00:01:27 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/forwardable (def_instance_delegator, def_single_delegator):
- rescue ::Exception instead of Exception in case Exception is
- defined under the target class.
- [ruby-core:71175] [Ruby trunk - Bug #11615]
+ * ext/extmk.rb: remove LIBRUBY_SO if static linked extensions exist.
-Fri Oct 23 21:10:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jul 17 23:30:46 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * error.c (name_err_mesg_to_str): separate class names from the
- receiver description.
+ * configure.in (rb_cv_msvcrt): defaulted to msvcrt. Workaround for a
+ bug of cygwin 1.5.20.
- * vm_eval.c (make_no_method_exception, raise_method_missing): add
- format specifiers for class names.
+Mon Jul 17 13:43:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 18:10:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * pack.c (define_swapx): should not use plain malloc.
- * .gitignore: ignored environmental wrapper files.
+Mon Jul 17 12:58:41 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-Fri Oct 23 17:55:29 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * configure.in: should use ac_cv_lib_dl_dlopen=no on MinGW.
- * lib/irb.rb: Ignored assignment of STDOUT.sync = true
- when irb.rb loaded. It's affected to IDE such as Jetbrain.
- [fix GH-864] Patch by @os97673
+Sat Jul 15 23:50:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 23 16:35:08 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * eval.c (rb_require_safe): wait for another thread requiring the same
+ feature. fixed: [ruby-core:08229]
- * lib/ipaddr.rb, test/test_ipaddr.rb: Reject invalid address contained
- EOL string. Patch by @kachick [fix GH-942][Bug #11513]
+Sat Jul 15 01:27:13 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 23 16:03:26 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * dir.c (has_magic): glob names contain alphabets to enable case fold
+ search also for directories. fixed: [ruby-talk:201917]
- * file.c: fix indent style. [fix GH-977]
- * test/ruby/test_string.rb: indent. [fix GH-975]
- [ci skip] These patches are contributed from @yui-knk
+Sat Jul 15 01:09:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 15:46:09 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * st.c (malloc): use xmalloc/xcalloc instead of plain
+ malloc/calloc, to detect memory allocation failure. see
+ <http://www.nongnu.org/failmalloc/>.
- * string.c: Added method signature to include hash. It's inconsistency
- with `gsub` method signature.
- [ci skip][fix GH-1023] Patch by @danielevans
+ * gc.c (rb_memerror): should not raise empty nomem_error.
-Fri Oct 23 15:25:51 2015 Shugo Maeda <shugo@ruby-lang.org>
+Fri Jul 14 13:08:13 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/net/imap.rb: remove an empty comment line and -*-.
+ * ext/tk/lib/tk.rb: add methods for new features of latest Tcl/Tk8.5.
-Fri Oct 23 15:20:02 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/lib/tk/namespace.rb: ditto.
- * lib/net/ftp.rb (gettextfile, getbinaryfile): use the safe
- navigation operator.
+Fri Jul 14 02:30:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 13:51:33 2015 yui-knk <spiketeika@gmail.com>
+ * lib/monitor.rb: document patch from Hugh Sasse <hgs at dmu.ac.uk>.
+ [ruby-core:08205]
- * test_call.rb (test_safe_call): Add test cases for safe
- navigation operator assignment. [Fix GH-1064]
- Validate:
- * can assign an attribute which is `nil`
- * can "or assign" an attribute which is `nil`
+Fri Jul 14 01:09:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 11:58:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (then): error in warning action.
- * compile.c (iseq_peephole_optimize): optimize lengthy safe
- navigation method chain. [Feature #11537]
+Fri Jul 14 00:10:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 10:58:41 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * array.c (rb_ary_pop): may cause realloc oscillation. a patch
+ from MORITA Naoyuki <mlgetter at kidou.sakura.ne.jp>.
+ [ruby-dev:29028]
- * lib/matrix/eigenvalue_decomposition.rb (tridiagonalize): fix
- indentation to avoid a warning when the command line option -w of
- ruby is specified.
+Thu Jul 13 22:23:56 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/matrix/eigenvalue_decomposition.rb (hessenberg_to_real_schur):
- change the name of a block parameter to avoid a warning when the
- command line option -w of ruby is specified.
+ * ext/tk/lib/tk/composite.rb: improve handling of the classname on the
+ option database for the widget class which includes TkComposite.
-Fri Oct 23 10:49:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 13 20:32:19 2006 Kouhei Sutou <kou@cozmixng.org>
- * compile.c (iseq_compile_each): support safe navigation of simple
- attribute assignment. [Feature #11537]
+ * lib/rss/parser.rb: updated documents by a patch from
+ Hugh Sasse <hgs at dmu.ac.uk>. [ruby-core:8194]
- * parse.y (mlhs_node, lhs, attrset_gen): ditto. keep mid
- non-attrset as the sign of safe navigation.
+Wed Jul 12 13:54:09 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 07:17:11 2015 Eric Wong <e@80x24.org>
+ * parse.y (then): we'd like to reserve colon here for the future.
+ warning added.
- * test/io/wait/test_io_wait.rb (test_wait_eof): test return value
+Tue Jul 11 20:58:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 23 00:32:02 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ruby.h: export rb_cMethod. [ruby-talk:201259]
- * ext/openssl/ossl_ssl.c (ssl_npn_select_cb): explicitly raise error
- in ext/openssl instead of OpenSSL itself because LibreSSL
- silently truncate the selected protocol name by casting the length
- from int to unsigned char. [Bug #11369]
- Patch by Jeremy Evans <merch-redmine@jeremyevans.net>
+Tue Jul 11 19:13:33 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Fri Oct 23 00:49:45 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/lib/multi-tk.rb: remove restriction on the class of
+ pseudo-toplevel.
- * lib/un.rb (help): change the name of a block parameter to avoid
- a warning when the command line option -w of ruby is specified.
+Tue Jul 11 18:00:57 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Fri Oct 23 00:22:20 2015 Josef Simanek <josef.simanek@gmail.com>
+ * ext/tk/lib/multi-tk.rb: security fix.
- * string.c (rb_str_tr): [DOC] Escape backslash in String#tr
- documentation. [Fix GH-1063]
+Tue Jul 11 17:33:39 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Oct 23 00:19:04 2015 yui-knk <spiketeika@gmail.com>
+ * string.c (rb_str_dump): need to extend len for \b.
- * array.c (rb_ary_collect): [DOC] Fix space of code example of
- Array#map. [Fix GH-1062]
+Mon Jul 10 22:00:00 2006 Shigeo Kobayashi <shigek@ruby-lang.org>
-Thu Oct 22 18:52:53 2015 Akinori MUSHA <knu@iDaemons.org>
+ * ext/bigdecimal/bigdecimal.c: Allows '_' to appear within
+ digits. [ruby-dev:28872]
- * vm_eval.c (rb_f_loop): When a loop is stopped by a StopIteration
- exception, return what the enumerator has returned instead of
- nil. [ruby-core:71133] [Feature #11498]
+ * ext/bigdecimal/lib/bigdecimal/util.rb: Bug in to_r reported by
+ [ruby-list:42533] fixed.
-Thu Oct 22 18:25:10 2015 Shugo Maeda <shugo@ruby-lang.org>
+Mon Jul 10 19:22:19 2006 Tanaka Akira <akr@fsij.org>
- * lib/net/imap.rb (idle): add a new argument timeout for keep-alive.
- [ruby-core:63693] [Bug #10031]
+ * gc.c (gc_sweep): expand heap earlier.
+ reported by MORITA Naoyuki. [ruby-dev:28960]
-Thu Oct 22 15:30:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jul 10 18:59:34 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * compile.c (iseq_peephole_optimize): peephole optimization for
- branchnil jumps.
+ * ext/tk/lib/tk/font.rb: sorry. mistaken to patch.
- * compile.c (iseq_compile_each): generate save navigation operator
- code.
+Mon Jul 10 18:46:52 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * insns.def (branchnil): new opcode to pop the tos and branch if
- it is nil.
+ * ext/tk/tcltklib.c: make SEGV risk lower at exit.
- * parse.y (NEW_QCALL, call_op, parser_yylex): parse token '.?'.
- [Feature #11537]
+ * ext/tk/lib/tk.rb: ditto.
-Thu Oct 22 13:16:19 2015 Guilherme Reis Campos <guilhermekbsa@gmail.com>
+ * ext/tk/lib/multi-tk.rb: fail to call function-style methods on slave
+ interpreters. The strategy (MultiTkIp_PseudoToplevel_Evaluable) to
+ fix the problem is a little tricky. You may have to take care of
+ conflicting with it.
- * dir.c (ruby_brace_expand): glob brace expansion edge case fix.
- When there are closing braces '}' before a open brace '{' it
- must be ignored and considered as literal.
- [ruby-core:71138] [Bug #11609]
+ * ext/tk/lib/tk.rb: a little change for the pseudo-toplevel strategy.
-Thu Oct 22 13:13:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/font.rb: ditto.
- * io.c (argf_next_argv): check ARGV element type, and try
- conversion if necessary. [ruby-core:71140] [Bug #11610]
+ * ext/tk/lib/tk/msgcat.rb: ditto.
-Thu Oct 22 11:11:16 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/lib/tkextlib/itk/incr_tk.rb: ditto.
- * test/net/ftp/test_ftp.rb: add tests for getbinaryfile and
- gettextfile.
+ * ext/tk/sample/demos-en/widget: fail to call function-style methods
+ on sample scripts. To fix it, a strategy which similar to the way
+ on MultiTiIp is used. Please take care when re-write and re-run a
+ demo script on the Widget-Demo code viewer.
-Wed Oct 21 18:34:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/sample/demos-jp/widget: ditto.
- * parse.y (parser_magic_comment): allow a sole magic comment without
- indicators, neither other non-space comments. [Feature #8976]
+Mon Jul 10 13:58:40 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Oct 20 12:17:56 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * signal.c (ruby_nativethread_signal, posix_nativethread_signal,
+ sigsend_to_ruby_thread, install_nativethread_sighandler):
+ nativethread-support on signal handler. RE-backport from 1.9.
- * lib/prime.rb: Add basic argument checking to Prime.prime?
- [Bug #11606]
+ * ruby.h (HAVE_NATIVETHREAD_KILL): ditto.
-Tue Oct 20 12:17:50 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * eval.c (ruby_native_thread_kill): ditto.
- * lib/prime.rb: Optimize Integer#prime?
- Patch by Nick Slocum [Bug #10354]
+Mon Jul 10 10:54:14 2006 Ryan Davis <ryand@zenspider.com>
-Tue Oct 20 08:12:47 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * lib/rdoc/parsers/parse_f95.rb: massive overhaul from Yasuhiro
+ Morikawa including new file suffixes, function support, public
+ variables and constants, derived-types, defined operators and
+ assignments, namelists, and subroutine and function
+ arguments. Truly massive.
- * configure.in: pthread_getattr_np is broken on AIX.
- More specifically, the stack address and size returned are
- not correct.
+ * lib/rdoc/diagram.rb: diagrams are now cached.
-Tue Oct 20 05:54:46 2015 Eric Wong <e@80x24.org>
+ * lib/irb/completion.rb: fixed a crasher when completing against
+ an unnamed class/module.
- * ext/fiddle/closure.c (callback): static function
+ * lib/rdoc/parsers/parse_c.rb: private comment (--/++) support in
+ C-file rdoc.
-Mon Oct 19 10:33:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/debug.rb: minor clarification in help.
- * ext/socket/init.c (rsock_raise_socket_error): get rid of a glibc
- bug. [ruby-core:71100] [Bug #11600]
+ * lib/pp.rb: minor clarification on exception.
-Mon Oct 19 01:26:26 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Jul 10 09:29:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (rb_file_identical_p): not necessary to compare the paths after
- comparing the file indexes on Windows. designate by kosaki.
+ * eval.c (rb_clear_cache_for_undef): clear entries for included
+ module. fixed: [ruby-core:08180]
-Sun Oct 18 21:17:27 2015 Tanaka Akira <akr@fsij.org>
+Mon Jul 10 01:48:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/open-uri.rb: Specify frozen_string_literal: true.
+ * st.h (st_data_t): use pointer sized integer for st_data_t.
+ [ruby-dev:28988]
-Sun Oct 18 14:37:56 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Jul 9 18:06:47 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c (fill_random_bytes_urandom): add a comment why using
- O_NONBLOCK and O_NOCTTY.
+ * lib/mkmf.rb (try_constant): fix for value 1 at cross compiling.
-Sun Oct 18 13:24:17 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/mkmf.rb (create_makefile): prevent substitution of macro
+ definition. fixed: http://www.yotabanana.com/lab/20060624.html#p02
- * random.c (fill_random_bytes_syscall): use ATOMIC_SET() for
- updating try_syscall.
+Sun Jul 9 00:54:34 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Oct 18 13:03:52 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * eval.c (next_jump): deal with destination of next.
+ fixed: [ruby-core:08169]
- * include/ruby/backward/util.h: Good-by Borland-C.
+Fri Jul 7 00:38:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Oct 18 13:03:09 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * hash.c (rb_hash_default): should not call default procedure if
+ no key is given. [ruby-list:42541]
- * common.mk: add a comment how to use "make test-all"
+Fri Jul 7 00:29:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Oct 18 12:59:22 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * time.c (time_mload): a patch from Daniel Berger
+ <Daniel.Berger at qwest.com>. [ruby-core:08128]
- * common.mk: add comments how to use "make benchmark"
+Thu Jul 6 22:21:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Oct 18 12:58:15 2015 Tanaka Akira <akr@fsij.org>
+ * process.c (rb_proc_times): use sysconf(_SC_CLK_TCK) value prior to
+ HZ and CLK_TCK. fixed: [ruby-talk:200293]
- * lib/securerandom.rb: Specify frozen_string_literal: true.
+Thu Jul 6 22:17:21 2006 Minero Aoki <aamine@loveruby.net>
-Sun Oct 18 11:22:52 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/racc/cparse/cparse.c: sync with original code, rev 1.8.
- * dln.c: remove defined(__WATCOMC__).
+ * ext/racc/cparse/cparse.c: should mark CparseParams objects.
-Sun Oct 18 11:16:33 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/racc/parser.rb: sync with original code, rev 1.8.
- * lib/mkmf.rb: Good-by Borland-C.
+ * lib/racc/parser.rb: update coding style.
-Sun Oct 18 11:04:36 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Jul 3 19:04:38 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * numeric.c: Good-by Borland-C.
- * include/ruby/backward/rubyio.h: ditto.
- * include/ruby/backward/st.h: ditto.
- * include/ruby/backward/util.h: ditto.
- * include/ruby/backward/rubysig.h: ditto.
- * include/ruby/backward/classext.h: ditto.
- * dln.c: ditto.
- * gc.c: ditto.
- * win32/resource.rb: ditto.
- * win32/dir.h: ditto.
- * ext/tk/tcltklib.c: ditto.
- * NEWS: announce that Borland-C is no longer supported.
+ * ext/tk/tcltklib.c (ip_make_menu_embeddable): help to make a menu
+ widget embeddable (pack, grid, and so on) like as a general widget.
+ However, an embeddable menu may require to be definied some event
+ bindings for general use.
-Sun Oct 18 10:54:52 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/tk/lib/tk/event.rb: [bug fix] Tk.callback_break and
+ Tk.callback_continue don't work on MultiTkIp.
- * dln.c: simplify #ifdef. _WIN32 and __CYGWIN__ are exclusive.
- see include/ruby/defines.h
- * gc.c: ditto.
- * ext/sdbm/_sdbm.c: ditto.
+ * ext/tk/lib/multi-tk.rb: ditto.
-Sun Oct 18 10:42:19 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/tk/lib/tk.rb: lack of Tk.callback_return.
- * ruby.c (open_load_file): add a comment.
+ * ext/tk/lib/tk/menu.rb: improve creating clone menus.
-Sun Oct 18 10:12:46 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Jul 3 14:42:06 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (rb_file_identical_p): simplify ifdefs
+ * ext/etc/extconf.rb (PW_UID2VAL, PW_GID2VAL): defaulted to conversion
+ from int, and sys/types.h needs to be included before grp.h.
+ fixed: [ruby-dev:28938]
-Sun Oct 18 10:01:40 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Jul 3 01:14:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ChangeLog: Good-bye OS/2.
- * common.mk: ditto.
- * configure.in: ditto.
- * dln_find.c: ditto.
- * ext/Setup.emx: ditto.
- * ext/extmk.rb: ditto.
- * ext/socket/extconf.rb: ditto.
- * ext/zlib/extconf.rb: ditto.
- * file.c: ditto.
- * include/ruby/defines.h: ditto.
- * io.c: ditto.
- * lib/mkmf.rb: ditto.
- * missing/os2.c: ditto.
- * process.c: ditto.
- * ruby.c: ditto.
- * NEWS: announce OS/2 is no longer supported.
+ * string.c (rb_str_inspect): encode \b (\010) for escape.
+ [ruby-dev:28927]
-Sun Oct 18 08:50:15 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * string.c (rb_str_dump): ditto.
- * include/ruby/defines.h (DOSISH): add comments.
+Sun Jul 2 19:17:56 2006 Minero Aoki <aamine@loveruby.net>
-Sun Oct 18 08:26:51 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/racc/cparse/cparse.c: sync with original code (rev 1.7).
- * io.c (fptr_finalize): don't release gvl if fptr is not writable.
- writable fd may block on close(2) when it's on NFS. But readonly
- fd doesn't. [Bug #11559]
- result: make benchmark OPTS="-p bm_require_t -e ruby-trunk -e ruby-2.2.2"
- build-ruby: 0.171
- ruby 2.3.0dev(r52151): 0.659
- ruby 2.2.0p95 (r50295): 0.834
+ * ext/racc/cparse/cparse.c: use rb_catch instead of rb_iterate.
+ Giving a block to a Ruby-level method by rb_iterate is obsolete on
+ Ruby 1.9. Note that current cparse.c still includes one
+ rb_iterate call on Ruby 1.8, but it is not a problem (at least
+ just now).
-Sun Oct 18 09:32:58 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Jul 1 15:15:49 2006 Tanaka Akira <akr@m17n.org>
- * file.c (ruby_is_fd_loadable): this should be fail if st_mode is
- not regular file nor FIFO.
+ * test/socket/test_nonblock.rb: add timeout to send/receive
+ an empty UDP packet.
+ [ruby-dev:28820]
-Sun Oct 18 09:20:17 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Fri Jun 30 23:46:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ruby.c (open_load_file): use rb_thread_wait_fd() instead of reopen.
+ * configure.in: should test isinf for Solaris with GCC compiler.
+ a patch from <ville.mattila at stonesoft.com>. [ruby-core:07791]
-Sun Oct 18 05:11:22 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * configure.in: -shared patch from Andrew Morrow
+ <andrew.c.morrow at gmail.com>. [ruby-core:08100]
- * ruby.c (open_load_file): reset O_NONBLOCK after open.
- Even if S_ISREG() is true, the file may be file on FUSE filesystem
- or something. We can't assume O_NONBLOCK is safe.
- Moreover, we should wait if the path is point to FIFO. That's
- FIFO semantics. GVL should be transparent from ruby script.
- Thus, just reopen without O_NONBLOCK for filling the requirements.
- [Bug #11060][Bug #11559]
+Thu Jun 29 18:58:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ruby.c (loadopen_func): new for the above.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_version): fix patch
+ failure.
- * file.c (ruby_is_fd_loadable): new. for checks loadable file type
- of not.
- * file.c (rb_file_load_ok): use ruby_is_fd_loadble()
- * internal.h: add ruby_is_fd_loadble()
+Thu Jun 29 18:00:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * common.mk: now, ruby.o depend on thread.h.
+ * ext/bigdecimal/bigdecimal.c: add RDoc document. a patch from
+ mathew <meta at pobox.com>. [ruby-core:07050]
- * test/ruby/test_require.rb
- (TestRequire#test_loading_fifo_threading_success): new test.
- This test successful case that loading from FIFO.
+Wed Jun 28 15:47:14 2006 Eric Hodel <drbrain@segment7.net>
- * test/ruby/test_require.rb
- (TestRequire#test_loading_fifo_threading_raise): rename from
- test_loading_fifo_threading. You shouldn't rescue an exception
- if you test raise or not.
- Moreover, this case should be caught IOError because load(FIFO)
- should be blocked until given any input.
+ * lib/optparse.rb: RDoc patch from Robin Stocker <robin@nibor.org>
+ [ruby-core:08087]
-Sat Oct 17 13:55:32 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jun 28 19:04:34 2006 Tanaka Akira <akr@m17n.org>
- * file.c (rb_file_expand_path_internal): concatenate converted
- string to the result instead of making converted string and
- append it.
+ * test/socket/test_unix.rb: test_seqpacket_pair removed.
+ [ruby-dev:28846]
- * string.c (rb_str_cat_conv_enc_opts): from rb_str_conv_enc_opts,
- separate function to concatenate with transcoding.
+Tue Jun 27 23:03:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Oct 17 13:19:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c: RDoc update for =~ method. a patch from Alex Young
+ <alex at blackkettle.org>. [ruby-core:08068]
- * ruby.c (load_file): unify each preparations and clean-ups by
- merging load_file_internal and load_file_internal2, and remove
- nested rb_protect and rb_ensure.
+Tue Jun 27 22:47:18 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Oct 17 05:28:32 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * ext/tk/tcltklib.c: forgot to update TCLTKLIB_RELEASE_DATE.
- * test/ruby/test_symbol.rb (test_symbol_fstr_leak): add a warm-up
- code and check RSS to avoid false positive on AIX and false
- negative on Mac OS X. [Bug #10686]
+ * ext/tk/lib/tk.rb (tk_tcl2ruby): [bug fix] sometimes fail to convert
+ a tcl string to a ruby object if the tcl string includes "\n".
-Fri Oct 16 15:54:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 27 16:04:05 2006 WATANABE Hirofumi <eban@ruby-lang.org>
- * file.c (rb_file_load_ok): open in non-blocking mode withoout
- releasing GVL. don't care about others than regular files and
- directories. [ruby-dev:49272] [Bug #11559]
+ * win32/win32.h: define isascii on MinGW for msvcrt compatibility.
- * ruby.c (load_file_internal): ditto.
+ * configure.in: set ac_cv_header_sys_time_h=no on MinGW
+ for msvcrt compatibility.
-Thu Oct 15 23:56:03 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 27 11:36:02 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * proc.c (rb_sym_to_proc): make void env.
+ * ext/etc/etc.c (setup_passwd, setup_group): allow bignum uid, gid and
+ so on. [ruby-talk:199102]
-Thu Oct 15 13:37:23 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 26 13:37:27 2006 Eric Hodel <drbrain@segment7.net>
- * proc.c (rb_sym_to_proc): move from string.c and create a Proc
- with no environments. [ruby-core:71088] [Bug #11594]
+ * lib/rdoc: Merge from HEAD.
+ Add options to limit the ri search path.
-Thu Oct 15 01:57:03 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Tue Jun 27 00:54:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/objspace/test_objspace.rb
- (test_trace_object_allocations_start_stop_clear): clear object
- allocation table first to get rid of erroneous detection for obj3.
- [ruby-dev:49095] [Bug #11271]
+ * util.c (powersOf10): constified.
-Thu Oct 15 01:53:38 2015 Benoit Daloze <eregontp@gmail.com>
+Mon Jun 26 18:37:44 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/ostruct/test_ostruct.rb: Add tests for OpenStruct#respond_to.
- Patch by @jeremy in [GH-1041]: https://github.com/ruby/ruby/pull/1041
+ * ext/tk/tcltklib.c (ip_delete): fix SEGV when a slave-ip is
+ deleted on callback.
-Thu Oct 15 01:49:25 2015 Benoit Daloze <eregontp@gmail.com>
+Mon Jun 26 10:47:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/ostruct.rb: Finish defining OpenStruct attributes lazily.
- Patch by @sferik in [GH-1037]: https://github.com/ruby/ruby/pull/1037
- This commit is an addendum to https://github.com/ruby/ruby/pull/1033.
- It:
- 1. lazily defines attribute accessors for copied and marshaled objects,
- 2. returns nil when an attribute reader is not defined, and
- 3. defines respond_to_missing? to maintain the same respond_to? behavior
+ * io.c (pipe_open): avoid closing uninitialized file descriptors.
+ a patch from <tommy at tmtm.org> [ruby-dev:28600]
-Wed Oct 14 16:56:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 26 09:56:22 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: check for libunwind.h, which is not available in
- very old OS X SDK. [ruby-core:71080] [Bug #11591]
+ * win32/win32.[ch] (rb_w32_send, rb_w32_sendto): constified.
-Wed Oct 14 14:11:42 2015 Brian Black <bblack@veracode.com>
+Sun Jun 25 23:02:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.c (rb_insn_operand_intern): change kw in callinfo disasm from the
- number of keyword arguments to an ordered list of the keywords used.
- [Feature #11589]
+ * Makefile.in, mkconfig.rb: catch-up for latest autoconf.
-Wed Oct 14 13:58:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 24 06:35:00 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * parse.y (parser_nextc): send a warning to ripper, not to STDERR
- always.
+ * signal.c: revert last change.
- * parse.y (rb_warn1, rb_warning1): move argument conversions to
- callers. PRIsVALUE is not valid in String#%.
+ * ruby.h: ditto.
-Wed Oct 14 13:37:23 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * eval.c: ditto.
- * lib/racc/rdoc/grammar.en.rdoc: fix spell error.
- [fix GH-1053][ci skip] Patch by @Matrixbirds
+Thu Jun 22 11:52:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Oct 13 22:06:50 2015 Tanaka Akira <akr@fsij.org>
+ * lib/net/http.rb (Net::HTTPResponse): duplicated error 501;
+ HTTPInternalServerError should be error 500. [ruby-core:08037]
- * ext/socket/raddrinfo.c (rsock_fd_family): Check sa_len.
+Thu Jun 22 05:15:58 2006 Tanaka Akira <akr@m17n.org>
-Tue Oct 13 12:14:10 2015 Craig Davison <craig65535@gmail.com>
+ * ext/socket/socket.c (sock_s_socketpair): try GC only once.
+ [ruby-dev:28778]
- * ext/socket/rsock_addrinfo (rsock_addrinfo): specify address
- family. [Fix GH-1052]
+Wed Jun 21 21:28:32 2006 Tadayoshi Funaba <tadf@dotrb.org>
- * ext/socket/udpsocket.c (udp_connect, udp_bind, udp_send):
- address family by the receiver.
+ * lib/date.rb (jd_to_commercial): now works fine even if in
+ mathn-ized context.
-Sun Oct 11 07:09:19 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jun 21 17:32:31 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * vm_insnhelper.c (vm_push_frame): initialize other than sp (and ep)
- first for performance.
+ * signal.c (ruby_nativethread_signal, posix_nativethread_signal,
+ sigsend_to_ruby_thread, install_nativethread_sighandler):
+ nativethread-support on signal handler (backport from 1.9).
-Sun Oct 11 06:21:50 2015 Koichi Sasada <ko1@atdot.net>
+ * ruby.h (HAVE_NATIVETHREAD_KILL): ditto.
- * vm_eval.c, internal.h (rb_yield_1): added for performance which
- doesn't check Qundef.
+ * eval.c (ruby_native_thread_kill): ditto.
- * numeric.c (int_dotimes): use rb_yield_1.
+Wed Jun 21 08:39:54 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Oct 11 06:19:49 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): merge Date
+ and Time processing. [ruby-core:08033]
- * vm_insnhelper.c (vm_call_iseq_setup_normal): setup sp first
- for performance.
+Wed Jun 21 01:40:25 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Oct 11 05:29:51 2015 Koichi Sasada <ko1@atdot.net>
+ * parse.y (yylex, reswords): modifier token is no longer returned in
+ fname state. [ruby-dev:28775]
- * vm.c (invoke_block_from_c): split this function into several
- functions.
+Wed Jun 21 01:12:46 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: RSS::Element.def_corresponded_attr_writer
+ supported date type.
+
+Tue Jun 20 22:08:36 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rss/test_parser.rb: split parser tests into ...
+ * test/rss/test_parser_1.0.rb: ... RSS 1.0 parsing tests and ...
+ * test/rss/test_parser_2.0.rb: ... RSS 2.0 parsing tests.
+
+Tue Jun 20 21:19:06 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: provided default RSS::Element#children.
+
+ * lib/rss/0.9.rb: used default RSS::Element#children.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+
+Tue Jun 20 21:04:33 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: provided default RSS::Element#_tags.
+
+ * lib/rss/0.9.rb: used default RSS::Element#_tags.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+
+Tue Jun 20 20:47:07 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: hide RSS::Element.install_model.
+ (RSS::Element.install_have_child_element,
+ RSS::Element.install_have_children_element,
+ RSS::Element.install_text_element,
+ RSS::Element.install_date_element): call
+ RSS::Element.install_model internally.
+
+ * lib/rss/0.9.rb: followed new API.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/content.rb: ditto.
+ * lib/rss/dublincore.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/syndication.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
+
+Tue Jun 20 20:18:05 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: add check for OBJ_NAME_do_all_sorted.
+
+ * ext/openssl/ossl_cipher.c (ossl_s_ciphers): new method
+ OpenSSL::Cipher.ciphers. it returns all the cipher names.
+
+ * ext/openssl/lib/openssl/cipher.rb:
+ - add constants AES128, AES192, AES256. [ruby-dev:28610]
+ - reimplement without eval()
+
+ * ext/openssl/lib/openssl/digest.rb: reimplement without eval().
+
+ * test/openssl/test_cipher.rb, test_digest: fix about reimplemented
+ features.
+
+ * sample/openssl/cipher.rb: rewrite all.
+
+Sat Jun 19 11:21:46 2006 Eric Hodel <drbrain@segment7.net>
+
+ * lib/test/unit/assertions.rb: Merge RDoc from HEAD.
+
+Tue Jun 20 01:06:57 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb:
+ - cleanup validation mechanism. Now, #XXX_validation is
+ needless.
+ - changed internal variable name RSS::Element::MODEL to
+ RSS::Element::MODELS.
+ - RSS::Element.install_model requires uri.
+
+ * lib/rss/0.9.rb: followed new validation API.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/content.rb: ditto.
+ * lib/rss/dublincore.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/syndication.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
+
+Mon Jun 19 23:40:59 2006 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/lib/kconv.rb: remove default -m0 and fix document.
+
+ * ext/nkf/nkf-8/{nkf.c, config.h, utf8tbl.c, utf8tbl.h}:
+ imported nkf 2.0.7.
+
+Mon Jun 19 22:31:59 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb:
+ - provided default #to_s as RSS::Element#to_s.
+ - removed RSS::Element#other_element.
+ - RSS::Element#tag requires attributes as Hash instead of Array.
+
+ * lib/rss/0.9.rb: removed #to_s to use RSS::Element#to_s.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
+
+ * lib/rss/2.0.rb: removed #other_element.
+
+Mon Jun 19 22:09:16 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c(ole_invoke): support some kind of
+ method of word. [ruby-Bugs#3237]
+
+ * ext/win32ole/tests/test_word.rb: ditto.
+
+ * ext/win32ole/tests/testall.rb: ditto.
+
+Mon Jun 19 00:02:17 2006 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: automatically detected attributes.
+
+ * lib/rss/0.9.rb: removed #_attrs.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
+
+ * lib/rss/parser.rb: followed new internal API.
+
+Mon Jun 19 00:00:17 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: fix bug: initialize improper tables.
+
+Sun Jun 18 22:36:13 2006 Kouhei Sutou <kou@cozmixng.org>
- * vm_insnhelper.c (vm_yield_callee_setup_arg): remove this function
- because it is only delegation function.
+ * lib/rss/rss.rb: RSS::Element#initialize accepts initial
+ attributes.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/dublincore.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
-Sun Oct 11 03:48:46 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/utils.rb: added Utils.element_initialize_arguments? to
+ detect backward compatibility initial arguments.
- * gc.c (newobj_of_slowpass): fix typo (pass -> path).
- Pointed out by Yukihiro Matsumoto <matz@ruby-lang.org>.
+ * lib/rss/parser.rb: user initial attributes to initialize
+ RSS::Element.
- * gc.c (newobj_of_...): `of' is unnecessary.
+Sun Jun 18 18:24:42 2006 Kouhei Sutou <kou@cozmixng.org>
-Sat Oct 10 19:04:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/converter.rb: use NKF for Uconv fallback.
- * ext/socket/udpsocket.c (udp_connect, udp_bind): get open files
- inside ensure functions.
+Sun Jun 18 18:22:04 2006 Kouhei Sutou <kou@cozmixng.org>
-Sat Oct 10 18:35:12 2015 Koichi Sasada <ko1@atdot.net>
+ * test/rss/test_image.rb: shared name space configuration.
- * vm_insnhelper.c (vm_call_method0): do not propagate enable_fastpath,
- but pass dummy CC to prevent wrong caching.
+Sun Jun 18 18:13:25 2006 Kouhei Sutou <kou@cozmixng.org>
-Sat Oct 10 15:28:45 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/rss.rb: improved ignore_unknown_element
+ handling. RSS::NotExpectedTagError provides tag URI.
+ * lib/rss/parser.rb: ditto.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/content.rb: ditto.
+ * lib/rss/dublincore.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/syndication.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
- * import a github pull request
- https://github.com/ruby/ruby/pull/1050
- by Kazuho Oku <kazuho@natadeco.co>.
+ * test/rss/rss-assertions.rb: checked URI of not expected tag too.
+ * test/rss/test_parser.rb: ditto.
- This pull request has the following commits.
+Sun Jun 18 18:08:36 2006 Kouhei Sutou <kou@cozmixng.org>
- * gc.c: reduce # of args to 6 (max. of register args on x86-64) so
- that the `newobj_of_slowpass` can be called via TCO.
+ * lib/rss/rss.rb: changed empty namespace URI representation to ""
+ from nil.
+ * lib/rss/parser.rb: ditto.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
- * gc.c (newobj_of), string.c (str_duplicate): for performance,
- the hot functions must be inlined.
+Sun Jun 18 18:03:50 2006 Kouhei Sutou <kou@cozmixng.org>
- * gc.c: for performance, preceding arguments of `.*newobj_of.*`
- must be same, so that the arg registers can be reused in case of
- TCO.
+ * lib/rss/parser.rb: removed a guard for requiring open-uri.
-Sat Oct 10 08:52:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 18 18:01:26 2006 Kouhei Sutou <kou@cozmixng.org>
- * ext/socket/udpsocket.c (udp_connect, udp_bind, udp_send): fix
- memory leaks at closed socket.
+ * lib/rss/rss.rb: fixed typo: except -> expect
+ * lib/rss/parser.rb: ditto.
+ * test/rss/rss-assertions.rb: ditto.
+ * test/rss/test_parser.rb: ditto.
-Fri Oct 9 17:29:07 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sun Jun 18 17:52:39 2006 Kouhei Sutou <kou@cozmixng.org>
- * lib/net/ftp.rb (parse257): refactor.
+ * lib/rss/rss.rb: RSS::Element#calc_indent became to be deprecated.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/taxonomy.rb: ditto.
+ * lib/rss/trackback.rb: ditto.
-Fri Oct 9 16:42:26 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * test/rss/test_1.0.rb: removed RSS::Element.indent_size tests.
+ * test/rss/test_2.0.rb: ditto.
- * lib/net/imap.rb: use frozen_string_literal: true.
+Sun Jun 18 00:49:11 2006 Tanaka Akira <akr@m17n.org>
- * test/net/imap/test_imap.rb: ditto.
+ * ext/socket/socket.c (bsock_recv_nonblock): new method
+ BasicSocket#recv_nonblock.
+ (udp_recvfrom_nonblock): renamed from ip_recvfrom_nonblock.
+ IPSocket#recvfrom_nonblock is moved to UDPSocket#recvfrom_nonblock.
+ (unix_recvfrom_nonblock): removed.
+ UNIXSocket#recvfrom_nonblock is removed.
- * test/net/imap/test_imap_response_parser.rb: ditto.
+Sat Jun 17 22:17:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Oct 9 15:52:28 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/mathn.rb (Integer::prime_division): raise ZeroDivisionError
+ on zeros. [ruby-dev:28739]
- * lib/net/ftp.rb: use frozen_string_literal: true.
+Sat Jun 17 14:53:32 2006 Tanaka Akira <akr@m17n.org>
- * test/net/ftp/test_buffered_socket.rb: ditto.
+ * lib/pathname.rb: backport from 1.9.
+ (Kernel#Pathname): new method.
- * test/net/ftp/test_ftp.rb: ditto.
+Sat Jun 17 10:30:41 2006 Kouhei Sutou <kou@cozmixng.org>
- * test/net/ftp/test_mlsx_entry.rb: ditto.
+ * lib/rss/rss.rb (Hash#merge, Enumerable#sort_by): removed.
-Fri Oct 9 14:12:35 2015 Shota Fukumori (sora_h) <her@sorah.jp>
+ * lib/rss/rss.rb (RSS::RootElementMixin#to_xml): added.
+ [ruby-talk:197284]
- * ext/openssl/lib/openssl/ssl.rb: Revert r52082 because it was
- dropping TLS v1.1 support too. Supporting only TLS v1.2 is too
- early, because many popular websites still don't support it.
+ We can convert RSS version easily like the following:
+ rss10 = RSS::Parser.parse(File.read("1.0.rdf"))
+ File.open("2.0.rss", "w") {|f| f.print(rss10.to_xml("2.0"))}
- For instance, Servers where aws-sdk connects to still don't support
- TLS v1.2 and it became broken.
+ * test/rss/test_1.0.rb: added #to_xml test.
+ * test/rss/test_2.0.rb: ditto.
- We should consider more carefully about this.
+ * test/rss/rss-testcase.rb: added some helper methods that
+ generates sample RSS 2.0.
- [Fix GH-873] [Feature #11524]
+ * sample/rss/convert.rb: added a sample script to convert RSS format.
-Fri Oct 9 12:52:08 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sat Jun 17 10:23:22 2006 Kouhei Sutou <kou@cozmixng.org>
- * compile.c (iseq_compile_each): Dynamic string literals (e.g.,
- "#{x}") should not be frozen because they don't literally
- represent strings.
- https://twitter.com/shugomaeda/status/651937650027401216
- https://twitter.com/yukihiro_matz/status/651942882312482817
- https://twitter.com/yukihiro_matz/status/651980835181096960
+ * lib/rss/rss.rb (Kernel#funcall): removed.
+ * lib/rss/parser.rb (Kernel.URI): removed.
-Fri Oct 9 06:52:49 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/rss/maker/: supported
+ xxx.new_yyy do |yyy|
+ yyy.zzz = zzz
+ ...
+ end
+ style and this style became the style of the recommendation.
+
+ Old style
+ yyy = xxx.new_yyy
+ yyy.zzz = zzz
+ ...
+ is supported too but this style isn't recommended.
+ [ruby-talk:197284]
- * benchmark/prepare_require.rb: skip file creation if it already
- exist. Suggested by ko1.
+ * test/rss/test_*maker*.rb: used new recommended style.
-Fri Oct 9 06:18:04 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * benchmark/bm_require.rb: new benchmark for require.
- * benchmark/bm_require_thread.rb: new benchmark for conflicting
- require vs thread. like [Bug #11559]
- * prepare_require.rb: new file for preparing above tests.
- * prepare_require.rb: ditto.
+Sat Jun 17 09:03:47 2006 Kouhei Sutou <kou@cozmixng.org>
-Thu Oct 8 14:10:45 2015 Zachary Scott <zzak@ruby-lang.org>
+ * lib/rss, test/rss: backported from trunk. (2005-11-16 - now)
- * ext/openssl/lib/openssl/ssl.rb: Default to TLSv1.2 and drop TLS v1
- Patch provided by @claudijd [Fixes GH-873] [Feature #11524]:
- https://github.com/ruby/ruby/pull/873
+ * lib/rss/rss.rb (RSS::VERSION): 0.1.5 -> 0.1.6.
+ * test/rss/test_version.rb (RSS::TestVersion#test_version): ditto.
-Wed Oct 7 22:55:02 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/trackback.rb: added TrackBack prefix.
+ * lib/rss/maker/trackback.rb: ditto.
- * test/minitest/metametameta.rb (with_output): restore output to
- fix mixing test result output in worker responses.
+ * lib/rss/rss.rb : removed needless argument 'prefix'.
+ * lib/rss/parser.rb: ditto.
-Wed Oct 7 21:32:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/1.0.rb: added rdf:Bag.
- * string.c (str_duplicate): move from rb_str_resurrect to short
- circuit initialization.
+ * lib/rss/taxonomy.rb: implemented taxonomy module.
+ * test/rss/test_taxonomy.rb: added tests for taxonomy support.
-Wed Oct 7 20:43:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/1.0.rb: added convenience method 'resources'.
+ * lib/rss/taxonomy.rb: ditto.
+ * test/rss/rss-assertions.rb: added test for 'resources'.
+ * test/rss/test_taxonomy.rb: ditto.
- * string.c (rb_str_resurrect): fix resurrection of short enough to
- be embedded but not embedded string.
+ * lib/rss/rss.rb: fixed a indentation bug.
+ * lib/rss/taxonomy.rb: fixed <taxo:topic> #to_s bug.
+ * test/rss/test_taxonomy.rb: added a #to_s test.
-Wed Oct 7 20:17:29 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/maker/taxonomy.rb: implemented taxonomy module for RSS
+ Maker.
+ * lib/rss/taxonomy.rb: supported RSS Maker.
+ * lib/rss/maker.rb: added taxonomy module support.
- * gc.c (newobj_of): divide fast path and slow path
- to avoid register savings for fast path.
+ * lib/rss/rss.rb: adjusted to other element API.
+ * lib/rss/1.0.rb: adjusted to other element API but backward
+ compatibility is reserved.
+ * lib/rss/0.9.rb: ditto.
- This idea is given by Kazuho Oku <kazuho@natadeco.co>.
+ * test/rss/test_maker_taxo.rb: added test case for taxonomy module
+ for RSS Maker.
+ * test/rss/test_setup_maker_1.0.rb: added tests for taxo:topic.
-Wed Oct 7 17:30:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/rss/test_setup_maker_1.0.rb: added backward compatibility
+ test.
+ * test/rss/test_setup_maker_0.9.rb: ditto.
+ * test/rss/test_setup_maker_2.0.rb: ditto.
- * string.c (rb_str_times): optimize for the argument 0 and 1.
+ * test/rss/rss-testcase.rb: added convenience method for setting
+ up taxo:topic.
+ * test/rss/rss-assertions.rb: added assertion for taxo:topic.
-Wed Oct 7 01:20:46 2015 Koichi Sasada <ko1@atdot.net>
+ * sample/rss/blend.rb: followed new API.
- * gc.h, gc.c: introduce new debug function rb_obj_info_dump(VALUE obj)
- which prints the result of rb_raw_obj_info(..., obj).
+ * lib/rss/taxonomy.rb: changed class or module prefix to
+ Taxonomy from Taxo.
+ * lib/rss/maker/taxonomy.rb: ditto.
-Wed Oct 7 01:16:11 2015 Koichi Sasada <ko1@atdot.net>
+ * test/rss/test_taxonomy.rb: use #reject directory.
- * vm_args.c: remove an unused field args_info::calling.
+ * lib/rss/: use #__send__ instead of #send.
+ * test/rss/: ditto.
-Tue Oct 6 23:43:10 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/parser.rb: added entity handling type predicate.
+ * lib/rss/rexmlparser.rb: ditto.
+ * lib/rss/xmlparser.rb: ditto.
+ * lib/rss/xmlscanner.rb: ditto.
- * proc.c (rb_method_entry_min_max_arity): should support
- OPTIMIZED_METHOD_TYPE_CALL.
+ * lib/rss/xmlscanner.rb: more robust entity handling.
-Tue Oct 6 21:29:08 2015 Tanaka Akira <akr@fsij.org>
+ * test/rss/test_parser.rb: added an entity handling test.
- * lib/tmpdir.rb (Dir.tmpdir): return duplicated string to be
- modify safely even when $SAFE > 0.
+ * test/rss/test_2.0.rb: added RSS 2.0 tests.
+ * test/rss/rss-assertions.rb: extended XML stylesheet assertion.
+ * lib/rss/0.9.rb: added initialize method.
+ * test/rss/test_1.0.rb: cleanup.
-Tue Oct 6 19:24:38 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/image.rb: added Image prefix.
+ * lib/rss/maker/image.rb: ditto.
- * vm_insnhelper.c (vm_call_method0): use switch() for visibilities
- (for readability).
+ * lib/rss/rss.rb: improved type conversion.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/syndication.rb: ditto.
-Tue Oct 6 19:23:58 2015 Koichi Sasada <ko1@atdot.net>
+ * test/rss/test_2.0.rb: added type conversion tests.
+ * test/rss/test_accessor.rb: ditto.
+ * test/rss/test_to_s.rb: ditto.
+ * test/rss/test_syndication.rb: ditto.
+ * test/rss/test_setup_maker_2.0.rb: ditto.
+ * test/rss/test_setup_maker_1.0.rb: ditto.
+ * test/rss/test_setup_maker_0.9.rb: ditto.
+ * test/rss/test_maker_sy.rb: ditto.
+ * test/rss/test_maker_image.rb: ditto.
+ * test/rss/test_maker_2.0.rb: ditto.
+ * test/rss/test_maker_0.9.rb: ditto.
+ * test/rss/test_image.rb: ditto.
- * proc.c (Init_Proc): Proc#call and others should be public.
+ * test/rss/test_maker_1.0.rb: use assert instead of assert_equal.
-Tue Oct 6 18:51:51 2015 Koichi Sasada <ko1@atdot.net>
+ * test/rss/rss-assertions.rb: improved type conversion assertions.
- * method.h: IMEMO_FL_USER3 and IMEMO_FL_USER4 is not needed any more.
+ * lib/rss/rss.rb: added backward compatibility codes.
+ * lib/rss/parser.rb: ditto.
+ * test/rss/test_parser.rb: ditto.
+ * test/rss/test_2.0.rb: ditto.
-Tue Oct 6 18:47:45 2015 Koichi Sasada <ko1@atdot.net>
+Sat Jun 17 02:01:00 2006 Tanaka Akira <akr@m17n.org>
- * method.h: remove METHOD_ENTRY_SAFE(me) and related code
- because $SAFE = 3 and 4 is not available.
- Now, $SAFE is not checked on method dispatch at all.
+ * lib/pp.rb (Kernel#pretty_inspect): defined for pretty printed
+ string.
- * vm_eval.c, vm_insnhelper.c, vm_method.c: ditto.
+Sat Jun 17 00:23:58 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Oct 6 13:56:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (reswords): kDO_BLOCK was missing. fixed: [ruby-core:7995]
- * include/ruby/ruby.h: turn function macros into inline functions,
- for debuggers.
+Sat Jun 17 00:02:15 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * include/ruby/ruby.h: turn constant macros into enums, for
- debuggers.
+ * ext/win32ole/win32ole.c (ole_propertyput): support
+ PROPERTYPUTREF. [ruby-talk:183042]
-Tue Oct 6 13:48:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/win32ole/tests/test_propertyputref.rb: ditto.
- * method.h: typo fix. Patch by @davydovanton [fix GH-1032][ci skip]
+Thu Jun 15 23:02:47 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Tue Oct 6 06:54:34 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/win32ole/win32ole.c (fole_methods): The return value
+ of WIN32OLE#ole_methods should include PROPERTYPUTREF methods.
- * iseq.c (rb_iseq_free): free iseq::variable_body to avoid memory
- leak.
+ * ext/win32ole/win32ole.c (fole_put_methods): The return value
+ of WIN32OLE#ole_put_methods should include PROPERTYPUTREF methods.
-Tue Oct 6 06:32:52 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/win32ole/tests/test_ole_methods.rb: ditto.
- * proc.c: enable optimization of Proc#call.
- [Feature #11569]
+ * ext/win32ole/tests/testall.rb : ditto.
- * NEWS: write about this optimization and incompatibilities.
+Wed Jun 14 18:23:28 2006 Eric Hodel <drbrain@segment7.net>
- * test/ruby/test_backtrace.rb: catch up this fix.
+ * enum.c (enum_any): Documentation typo.
-Tue Oct 6 04:41:03 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jun 14 15:01:09 2006 Eric Hodel <drbrain@segment7.net>
- * vm_insnhelper.c: solve goto spaghetti.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#warn): Don't print
+ warnings when -q is set.
- Change all goto statement across blocks to tail call functions.
+Wed Jun 14 23:03:53 2006 Tanaka Akira <akr@m17n.org>
-Tue Oct 6 02:29:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: check sizeof(rlim_t).
+ check setrlimit.
- * string.c (rb_str_resurrect): optimize by short circuit to copy
- hidden string without checking length, encoding and so on.
+ * process.c (proc_getrlimit): new method Process.getrlimit.
+ (proc_setrlimit): new method Process.setrlimit.
-Mon Oct 5 23:08:17 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * ruby.h (NUM2ULL): new macro.
- * test/ruby/test_thread.rb (test_handle_interrupt_blocking): check if
- exception handling was postponed until sleep.
+Mon Jun 12 22:25:09 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Oct 5 22:25:49 2015 Tanaka Akira <akr@fsij.org>
+ * sprintf.c (rb_f_sprintf): adjust precision length to prevent
+ splitting multi-byte characters. [ruby-list:42389]
- * lib/pp.rb: Use frozen_string_literal: true.
+Sun Jun 11 23:20:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/prettyprint.rb: Ditto.
+ * lib/optparse.rb (OptionParser::Arguable#getopts): pass self to the
+ parser.
- * lib/resolv.rb: Ditto.
+Sun Jun 11 10:00:57 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/tmpdir.rb: Ditto.
+ * win32/win32.h (write): not need to define on bcc.
- * test/test_pp.rb: Ditto.
+Sun Jun 11 08:30:33 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/test_prettyprint.rb: Ditto.
+ * lib/optparse.rb (OptionParser#getopts): new methods.
- * tool/transcode-tblgen.rb: Ditto.
+Sat Jun 10 18:02:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Oct 5 20:39:32 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/bigdecimal/lib/bigdecimal/newton.rb (Newton::nlsolve): typo
+ fixed: raize -> raise. [ruby-talk:196608]
- * test/ruby/test_thread.rb: fix potential race condition.
- The thread could have a "sleep" status because it tries
- to acquire the mutex, but does not have it yet.
+Thu Jun 8 14:19:17 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Oct 5 15:39:30 2015 Zachary Scott <zzak@ruby-lang.org>
+ * win32/win32.[ch] (rb_w32_read, rb_w32_write): new functions.
+ use recv() and send() when fd is socket. fixed: [ruby-dev:28694]
- * numeric.c: [DOC] Overview for Numeric class by Joe Corcoran
- This patch was created at ROSSConf Berlin 2015 [Bug #11555]
+Wed Jun 7 16:22:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Oct 5 15:34:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/tempfile.rb (Tempfile::make_tmpname): put dot between
+ basename and pid. [ruby-talk:196272]
- * proc.c (proc_new): link ep to calling block.
- [ruby-core:70980] [Bug #11566]
+Wed Jun 7 14:53:04 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Oct 5 00:53:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (errmap): add some winsock errors.
- * dir.c (rb_dir_getwd): make ASCII-8BIT if filesystem encoding is
- US-ASCII, like as Dir.glob.
+Wed Jun 7 11:34:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Oct 4 23:39:09 2015 Tanaka Akira <akr@fsij.org>
+ * configure.in: add new configure option `--with-winsock2' for mingw.
- * enum.c (nmin_filter): Fix limit value.
- patch by Helder Pereira.
- [Bug #11471] [ruby-core:70477]
+ * win32/Makefile.sub (config.h): define USE_WINSOCK2 in config.h
+ instead of in CPPFLAGS.
-Sun Oct 4 15:11:48 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/socket/extconf.rb: determine whether to use winsock2 or not
+ by using with_config.
- * enc/euc_jp.c (mbc_case_fold): check given string is valid or not,
- and if invalid, return 1. [Bug #11486]
+Wed Jun 7 10:45:10 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Oct 4 10:09:57 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/{configure.bat, setup.mak, Makefile.sub, win32.h}: add
+ new configure option `--with-winsock2'.
- * dir.c (rb_dir_getwd): normalize OS path to UTF-8 on OS X.
+ * win32/win32.c (StartSockets): ditto.
-Sun Oct 4 00:09:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/extconf.rb: ditto.
- * template/ruby-runner.c.in: wrapper to set dynamic loading path
- environment variable. /bin/sh on Mac OS X 10.11 (El Capitan)
- clears DYLD_LIBRARY_PATH.
+ * win32/win32.c (open_ifs_socket): new function.
- it must:
- - do nothing even if current directory is not present
- - do not set other environment variables, e.g. PWD, SHLVL, etc
- - do not open other FDs, e.g. pipes for timer thread
+ * win32/win32.c (StartSockets, rb_w32_socket): use open_ifs_socket()
+ instead of socket().
+ ifs socket support is backported from trunk.
-Sun Oct 2 10:59:00 2015 schneems <richard.schneeman@gmail.com>
+Wed Jun 7 09:14:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/pathname/lib/pathname.rb: freeze string literals for
- reduced object allocation.
- [Feature #11375] [ruby-core:70043]
+ * eval.c (rb_call0): binding for the return event hook should have
+ consistent scope. [ruby-core:07928]
-Fri Oct 2 09:20:20 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * eval.c (EXEC_EVENT_HOOK): trace_func may remove itself from
+ event_hooks. no guarantee for arbitrary hook deletion.
+ [ruby-dev:28632]
- * common.mk, lib/unicode_normalize/tables.rb: Change Unicode
- Version for character normalization data from 7.0.0 to
- 8.0.0.
+Mon Jun 5 18:12:12 2006 Tanaka Akira <akr@m17n.org>
-Fri Oct 2 00:18:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/socket.c (sock_s_unpack_sockaddr_in): reject
+ non-AF_INET/AF_INET6 sockaddr.
+ (sock_s_unpack_sockaddr_un): reject non-AF_UNIX sockaddr.
+ [ruby-dev:28691]
- * proc.c (proc_mark): block.ep of Proc from Symbol is now NULL.
- [ruby-core:70961] [Bug #11560]
+Sun Jun 4 20:40:19 2006 Tanaka Akira <akr@m17n.org>
-Wed Sep 30 15:47:13 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/socket.c: fix sockaddr_un handling.
+ [ruby-dev:28677]
- * vm_args.c (vm_caller_setup_arg_block): bypass Symbol#to_proc
- call to optimize symbol block passing.
+Fri Jun 2 22:08:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 30 01:34:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/forwardable.rb: RDoc typo fix from Jan Svitok
+ <jan.svitok at gmail.com>. [ruby-core:07943]
- * parse.y (parser_free): fix memory leak at syntax error when
- warn-indent is enabled.
+Fri Jun 2 19:02:09 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Tue Sep 29 22:27:50 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/openssl/extconf.rb: use create_header.
- * parse.y: fix minor typo. [ci skip][fix GH-1038].
- Patch by @ltratt.
+ * ext/openssl/ossl.h, ext/openssl/openssl_missing.h:
+ include RUBY_EXTCONF_H.
-Tue Sep 29 16:53:53 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+Fri Jun 2 17:16:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * tool/unicode_norm_gen.tmpl, lib/unicode_normalize/tables.rb:
- get rid of many .freeze commands by using frozen_string_literal
- pragma.
+ * lib/mkmf.rb (CLEANINGS): remove extconf.h by distclean if created.
-Tue Sep 29 16:37:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 2 00:11:19 2006 Tanaka Akira <akr@m17n.org>
- * compile.c (compile_dstr_fragments): fix performance by omitting
- the first empty string only for keeping literal encoding if
- other literals are too. [ruby-core:70930] [Bug #11556]
+ * ext/socket/socket.c (s_recvfrom): alen may be zero with UNIXSocket
+ too. (tested on NetBSD 3.0)
+ (s_recvfrom_nonblock): extracted from sock_recvfrom_nonblock.
+ (sock_recvfrom_nonblock): use s_recvfrom_nonblock.
+ (ip_recvfrom_nonblock): new method: IPSocket#recvfrom_nonblock
+ (unix_recvfrom_nonblock): new method: UNIXSocket#recvfrom_nonblock
+ (s_accept_nonblock): extracted from sock_accept_nonblock.
+ (sock_accept_nonblock): use s_accept_nonblock.
+ (tcp_accept_nonblock): new method: TCPServer#accept_nonblock
+ (unix_accept_nonblock): new method: UNIXServer#accept_nonblock
- * string.c (rb_str_append_literal): append but keep encoding non
- US-ASCII.
+Thu Jun 1 19:12:37 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Sep 28 17:40:17 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * win32/win32.c (rb_w32_cmdvector): backslashes inside single-quotes
+ no longer has special meanings. fixed: [ruby-list:42311]
- * lib/net/ftp.rb (mtime): use usec instead of fractions to parse
- decimal fractions of a second correctly when the number of digits
- is not 6.
+Thu Jun 1 16:14:41 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Sep 28 16:07:08 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * win32/win32.c (rb_w32_getcwd): runtime's getcwd() will not success
+ if the length of the cwd is longer than MAX_PATH.
+ fixed [ruby-list:42335]
- * lib/net/ftp.rb (mtime): parse decimal fractions of a second as
- specified in RFC 3659.
+Thu Jun 1 11:29:14 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Sep 28 10:31:12 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * win32/win32.c (rb_w32_getcwd): set errno if not set.
+ fixed [ruby-list:42346]
- * test/test_forwardable.rb: Write basic tests for lib/forwardable.
- [fix GH-1035] Patch by @kachick
+Sat May 27 11:29:46 2006 nobuyoshi nakada <nobu@ruby-lang.org>
-Sun Sep 27 23:32:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/extmk.rb (extmake): remove extinit files if no statically linked
+ extensions.
- * class.c (rb_define_class, rb_define_class_id_under): refine
- error messages.
+Fri May 26 09:05:11 2006 nobuyoshi nakada <nobu@ruby-lang.org>
- * class.c (rb_define_module, rb_define_module_id_under): ditto,
- and make consistent with class.
+ * ruby.h, lib/mkmf.rb (create_header): clear command line options for
+ macros moved to extconf.h.
-Sun Sep 27 18:44:43 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/extmk.rb (extract_makefile, extmk): made RUBY_EXTCONF_H and
+ EXTSTATIC permanent.
- * ChangeLog: removed duplicated message.
+ * ext/{dbm,digest/*,socket,zlib}/extconf.rb: used $defs and $INCFLAGS.
-Sun Sep 27 15:46:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * {bcc32,win32,wince}/Makefile.sub (COMPILE_C, COMPILE_CXX): added
+ $(INCFLAGS).
- * ruby.c (process_options): add an option to enable/disable
- frozen-string-literal. [Feature #8976]
+ * lib/mkmf.rb (configuration): add $defs unless extconf.h was created.
- * compile.c (iseq_compile_each): override compile option by option
- given by pragma.
+Thu May 25 01:52:07 2006 nobuyoshi nakada <nobu@ruby-lang.org>
- * iseq.c (rb_iseq_make_compile_option): extract a function to
- overwrite rb_compile_option_t.
+ * lib/mkmf.rb (pkg_config): particular config commands support.
- * parse.y (parser_set_compile_option_flag): introduce pragma to
- override compile options.
+ * ext/extmk.rb: deal with $static set in extconf.rb.
- * parse.y (magic_comments): new pragma "frozen-string-literal".
- [Feature #8976]
+ * mkconfig.rb: merge multiple entries to an entry with multiple lines.
-Sun Sep 27 08:16:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb: allow a series of commands to link.
- * lib/ostruct.rb (delete_field): do not raise NameError for
- existing keys. [Fix GH-1033]
+ * win32/Makefile.sub: embed manifests.
-Sun Sep 27 00:34:31 2015 Zachary Scott <zzak@ruby-lang.org>
+ * win32/setup.mak: suffix OS name by runtime version.
- * lib/ostruct.rb: Move method definitions for getter/setter to be lazy
- Patch by @sferik in [GH-1033]: https://github.com/ruby/ruby/pull/1033
+Wed May 24 23:52:11 2006 nobuyoshi nakada <nobu@ruby-lang.org>
-Fri Sep 25 10:07:25 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * configure.in (ac_install_sh): ignore dummy install-sh.
+ [ruby-talk:193876]
- * lib/net/http.rb: removed unused variable. It's removed at r13648.
- [fix GH-1022] Patch by @nkondratyev
+Wed May 24 03:10:48 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Fri Sep 25 09:48:27 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/openssl/lib/openssl/ssl.rb
+ (OpenSSL::SSL::SocketForwarder#setsockopt,getsockopt): typo fixed.
- * gems/bundled_gems: upgrade to minitest-5.8.1
+Mon May 22 17:54:12 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Sep 25 09:47:12 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/socket/socket.c (sock_recvfrom_nonblock): use rb_read_pending
+ instead of rb_io_read_pending.
+ [ruby-dev:28663]
- * id_table.c: fix typo. [ci skip][fix GH-1031] Patch @davydovanton
+Mon May 22 17:30:04 2006 Tanaka Akira <akr@m17n.org>
-Fri Sep 25 07:54:05 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * rubyio.h (rb_io_set_nonblock): declared.
- * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_lock): skip
- this test on AIX. The issue is the same as on Solaris.
- [ruby-dev:47631]
+ * io.c (rb_io_set_nonblock): new function.
+ (io_getpartial): nonblocking read support.
+ (io_read_nonblock): new method: IO#read_nonblock.
+ (io_write_nonblock): new method: IO#write_nonblock.
-Thu Sep 24 17:25:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/socket.c
+ (sock_connect_nonblock): new method: Socket#connect_nonblock.
+ (sock_accept_nonblock): new method: Socket#accept_nonblock.
+ (sock_recvfrom_nonblock): new method: Socket#recvfrom_nonblock.
- * parse.y (paren_args): fix separator token at `foo::bar()` in
- ripper.
+ [ruby-core:7917]
-Thu Sep 24 00:00:17 2015 Rei Odaira <Rei.Odaira@gmail.com>
+Mon May 22 15:57:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * complex.c: ruby/config.h must be included before math.h
- because it defines _LARGE_FILES on AIX and _LARGE_FILES
- must be defined before sys/types.h is included from math.h.
- [Bug #11483]
+ * eval.c (umethod_bind): should not update original class.
+ [ruby-dev:28636]
-Wed Sep 23 22:22:38 2015 Zachary Scott <zzak@ruby-lang.org>
+Mon May 22 13:38:57 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/ossl_pkcs12*: Remove svn commit id macro
+ * eval.c (ev_const_get): should support constant access from
+ within instance_eval(). [ruby-dev:28327]
-Wed Sep 23 01:11:28 2015 Zachary Scott <zzak@ruby-lang.org>
+Thu May 18 17:51:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/*: Remove svn commit id macros to make sync easier
+ * time.c (time_timeval): should round for usec floating
+ number. [ruby-core:07896]
-Tue Sep 22 04:20:01 2015 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+ * time.c (time_add): ditto.
- * test/drb/test_drb.rb: Run Rinda/DRb tests on localhost. [Fix GH-1027]
- patch by voxik.
+Thu May 18 17:11:45 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/rinda/test_rinda.rb: ditto
+ * lib/cgi.rb (CGI::out): support utf-8. a patch from Fujioka
+ <fuj at rabbix.jp>. [ruby-dev:28649]
-Mon Sep 21 20:53:39 2015 tbpgr <tbpgr@tbpgr.jp>
+Thu May 18 00:42:12 2006 nobuyoshi nakada <nobu@ruby-lang.org>
- * test/win32ole/test_win32ole_event.rb: fix typo.
- swbemsink_avairable? => swbemsink_available? [Fix GH-1025]
+ * ext/extmk.rb, lib/mkmf.rb: use BUILD_FILE_SEPARATOR in Makefiles.
-Sun Sep 20 10:07:35 2015 Anton Davydov <antondavydov.o@gmail.com>
+Wed May 17 17:55:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * cont.c (rb_callcc): [DOC] append continuations example accros
- methods. [Fix GH-1026]
+ * dir.c (sys_warning): should not call a vararg function
+ rb_sys_warning() indirectly. [ruby-core:07886]
-Sun Sep 20 03:20:21 2015 Koichi Sasada <ko1@atdot.net>
+Wed May 17 08:17:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * iseq.c (rb_iseq_free): free rb_iseq_t::body::cc_entries.
+ * util.c (ruby_strtod): try to reduce errors using powersOf10
+ table. [ruby-dev:28644]
-Sun Sep 20 02:46:34 2015 Koichi Sasada <ko1@atdot.net>
+Tue May 16 15:34:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: split rb_call_info_t into several structs.
- * rb_call_info (ci) has compiled fixed information.
- * if ci->flag & VM_CALL_KWARG, then rb_call_info is
- also rb_call_info_with_kwarg. This technique reduce one word
- for major rb_call_info data.
- * rb_calling_info has temporary data (argc, blockptr, recv).
- for each method dispatch. This data is allocated only on
- machine stack.
- * rb_call_cache is for inline method cache.
+ * re.c (rb_reg_initialize): should not allow modifying literal
+ regexps. frozen check moved from rb_reg_initialize_m as well.
- Before this patch, only rb_call_info_t data is passed.
- After this patch, above three structs are passed.
+Tue May 16 09:20:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- This patch improves:
- * data locality (rb_call_info is now read-only data).
- * reduce memory consumption (rb_call_info_with_kwarg,
- rb_calling_info).
+ * re.c (rb_reg_initialize): should not modify untainted objects in
+ safe levels higher than 3.
- * compile.c: use above data.
+ * re.c (rb_memcmp): type change from char* to const void*.
- * insns.def: ditto.
+ * dir.c (dir_close): should not close untainted dir stream.
- * iseq.c: ditto.
+ * dir.c (GetDIR): add tainted/frozen check for each dir operation.
- * vm_args.c: ditto.
+Mon May 15 17:42:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_eval.c: ditto.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_symbol_arg):
+ typo fixed. a patch from Florian Gross <florg at florg.net>.
- * vm_insnhelper.c: ditto.
+Sat May 13 16:14:05 2006 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.h: ditto.
+ * lib/pp.rb (PP.mcall): new method.
+ (Struct#pretty_print): call Kernel#class and Struct#members even if
+ overridden.
+ (Struct#pretty_print_cycle): ditto.
+ [ruby-core:7865]
- * iseq.h: add iseq_compile_data::ci_index and
- iseq_compile_data::ci_kw_index.
+Thu May 11 19:57:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * tool/instruction.rb: introduce TS_CALLCACHE operand type.
+ * util.c (ruby_strtod): differ addition to minimize error.
+ [ruby-dev:28619]
-Sun Sep 20 02:18:10 2015 Tanaka Akira <akr@fsij.org>
+Fri Aug 11 15:39:25 2006 Eric Hodel <drbrain@segment7.net>
- * test/lib/envutil.rb: mkfifo command based File.mkfifo method
- definition removed.
+ * lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get
+ documented.
-Fri Sep 18 20:11:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu May 11 18:10:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * file.c (rb_file_s_mkfifo): implement File.mkfifo.
- [Feature #11536]
+ * util.c (ruby_strtod): should not raise ERANGE when the input
+ string does not have any digits. [ruby-dev:28629]
-Fri Sep 18 16:56:19 2015 Shugo Maeda <shugo@ruby-lang.org>
+Sun May 7 03:09:51 2006 Stephan Maka <stephan@spaceboyz.net>
- * NEWS: add Net::FTP#mlst and Net::FTP#mlsd.
+ * lib/resolv.rb (Resolv::DNS::Requester::ConnectedUDP#initialize):
+ Use AF_INET6 for nameservers containing colons.
-Fri Sep 18 07:39:22 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Sat May 6 00:38:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/objspace/objspace_dump.c (obj_type): add IMEMO types to the heap
- dump information.
+ * signal.c (trap): sig should be less then NSIG. Coverity found
+ this bug. a patch from Kevin Tew <tewk at tewk.com>.
+ [ruby-core:07823]
-Thu Sep 17 22:33:07 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu May 4 02:24:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * common.mk: fix command error with outside builddir.
+ * ext/syck/emitter.c (syck_scan_scalar): avoid accessing
+ uninitialized array element. a patch from Pat Eyler
+ <rubypate at gmail.com>. [ruby-core:07809]
-Thu Sep 17 17:42:09 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * array.c (rb_ary_fill): initialize local variables first. a
+ patch from Pat Eyler <rubypate at gmail.com>. [ruby-core:07810]
- * common.mk: separated test for test-framework from test-all task.
- They should be invoke at first before tests of test-all.
+ * ext/syck/yaml2byte.c (syck_yaml2byte_handler): need to free
+ type_tag. a patch from Pat Eyler <rubypate at gmail.com>.
+ [ruby-core:07808]
-Thu Sep 17 12:05:54 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed May 3 02:12:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/ruby/test_dir.rb (TestDir#test_fileno): s/?x/"x"/. Don't
- use tricky code, please.
+ * ext/socket/socket.c (make_hostent_internal): accept ai_family
+ check from Sam Roberts <sroberts at uniserve.com>.
+ [ruby-core:07691]
-Wed Sep 16 20:49:56 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+Mon May 1 12:23:19 2006 <sinara@blade.nagaokaut.ac.jp>
- * encindex.h: fix typo of last #endif comment. [ci skip]
+ * numeric.c (num_div): use floor rather than rb_Integer().
+ [ruby-dev:28589]
-Wed Sep 16 20:39:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c (flo_divmod): the first element of Float#divmod should
+ be an integer. [ruby-dev:28589]
- * variable.c (set_const_visibility): fail if the class/module is
- frozen. [ruby-core:70828] [Bug #11532]
+ * test/ruby/test_float.rb: add tests for divmod, div, modulo and remainder.
-Wed Sep 16 17:16:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Apr 29 22:42:08 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * vm_core.h (ENABLE_VM_OBJSPACE): enable per-VM object space on
- Windows by default, as rb_w32_sysinit() no longer depends on
- ruby_xmalloc.
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): should initialize
+ flag. [ruby-core:07785]
-Wed Sep 16 15:08:17 2015 Akinori MUSHA <knu@iDaemons.org>
+Fri Apr 28 10:53:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * doc/syntax/literals.rdoc (Strings): [DOC] Revise the character
- literal part.
+ * util.c (ruby_strtod): should not cut off 18 digits for no
+ reason. [ruby-core:07796]
-Wed Sep 16 14:55:33 2015 Akinori MUSHA <knu@iDaemons.org>
+ * util.c (ruby_strtod): fixed wrong conversion.
- * doc/syntax/literals.rdoc (Strings): [DOC] Document the full list
- of supported escape sequences in string literals.
+Thu Apr 27 01:38:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 16 14:49:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_fill): internalize local variable "beg" to
+ pacify Coverity. [ruby-core:07770]
- * string.c (rb_str_setbyte): keep the code range as possible.
+Wed Apr 26 16:59:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 16 13:23:48 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * pack.c (pack_unpack): now supports CRLF newlines. a patch from
+ <tommy at tmtm.org>. [ruby-dev:28601]
- * doc/syntax/literals.rdoc (Strings): mention about ?a literal.
+Tue Apr 25 18:00:05 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Sep 16 12:06:53 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/tk/tcltklib.c (delete_slaves): maybe increment the reference
+ count of a NULL Tcl_Obj [ruby-core:07759].
- * dir.c (glob_helper): check pathtype once again by lstat(2) if
- dp->d_type is DT_UNKNOWN. XFS may return DT_UNKNOWN.
+Tue Apr 25 07:55:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 16 03:49:19 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/jcode.rb (String::tr_s): should have translated non
+ squeezing character sequence (i.e. a character) as well. thanks
+ to Hiroshi Ichikawa <gimite at gimite.ddo.jp> [ruby-list:42090]
- * test/ruby/test_thread.rb (TestThread#test_mutex_synchronize):
- insert waste loop for invoking preemptive thread context switch.
- [Bug #11496]
+Tue Apr 25 00:08:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Sep 15 19:38:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * regex.c (re_compile_pattern): should check if c is not a
+ multibyte character. a patch from KIMURA Koichi
+ <kimura.koichi at canon.co.jp>. [ruby-dev:28598]
- * gc.c (rb_objspace_alloc, rb_objspace_free): define always
- regardless ENABLE_VM_OBJSPACE, and free heap pages.
+Fri Apr 21 15:19:13 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Sep 15 15:15:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/tcltklib.c (lib_eventloop_ensure): refer freed pointer
+ [ruby-core:07744] and memory leak.
- * win32/win32.c (rb_w32_sysinit, rb_w32_readdir): compare by
- encoding index to get rid of encoding initialization before VM
- object space allocation.
+Fri Apr 21 12:14:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * dir.c (fundamental_encoding_p, push_glob): compare by encoding
- index immediately.
+ * ext/socket/socket.c: document update patch from Sam Roberts
+ <sroberts at uniserve.com>. [ruby-core:07701]
- * enc/{ascii,us_ascii,utf_8}.c: set encoding indexes of
- fundamental built-in encodings so that usable as well as
- allocated rb_encoding before rb_enc_init().
+Wed Apr 19 13:55:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * encindex.h: separate encoding index constants from internal.h.
+ * parse.y (arg): too much NEW_LIST()
-Tue Sep 15 13:13:13 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (SETUP_ARGS0): remove unnecessary access to nd_alen.
- * array.c (rb_ary_sort_bang, rb_ary_sort): [DOC] correct block
- return values, which may be a negative or positive integer, not
- only -1 or +1.
+Wed Apr 19 11:57:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Sep 15 12:49:10 2015 Jason Barnabe <jason.barnabe@gmail.com>
+ * eval.c (rb_eval): use ARGSCAT for NODE_OP_ASGN1.
+ [ruby-dev:28585]
- * array.c (rb_ary_sort_bang, rb_ary_sort): [DOC] Correct
- description of array sort block return values. And also fix up
- the grammar a bit. [Fix GH-1020]
+ * parse.y (list_concat): revert last change.
-Tue Sep 15 12:44:32 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (arg): use NODE_ARGSCAT for placeholder.
- * util.c (ruby_qsort): use BSD-style qsort_r if available.
+Wed Apr 19 11:13:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Sep 14 19:26:34 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/getoptlong.rb (GetoptLong::get): RDoc update patch from
+ mathew <meta at pobox.com>. [ruby-core:07738]
- * lib/net/ftp.rb (parse_mlsx_entry): parse pathnames including
- space correctly.
+Wed Apr 19 10:13:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Sep 14 11:12:10 2015 Anton Davydov <antondavydov.o@gmail.com>
+ * variable.c (rb_const_set): raise error when no target klass is
+ supplied. [ruby-dev:28582]
- * lib/racc/rdoc/grammar.en.rdoc: [DOC] fix typo, "convertion" to
- "conversion". [Fix GH-1016]
+Wed Apr 19 09:49:36 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Sep 13 11:03:13 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * parse.y (list_concat): should not modify nodes other than
+ NODE_ARRAY. [ruby-dev:28583]
- * include/ruby/ruby.h: prefix RUBY or RB to global symbols to get
- rid of name conflicts with other headers.
+Tue Apr 18 17:40:37 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * include/ruby/encoding.h, include/ruby/intern.h: ditto.
+ * ext/tk/lib/multi-tk.rb: add a binding to a container for a slave IP.
-Sun Sep 13 09:38:51 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/lib/tk.rb: update RELEASE_DATE.
- * lib/net/ftp.rb (size, modify, create, type, unique, perm, lang,
- media_type, charset): new methods to return standard facts.
+ * ext/tk/tcltklib.c: forget to reset a Tcl interpreter.
-Sat Sep 12 19:43:49 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/stubs.c: fix potential bugs about handling rb_argv0.
- * vm_insnhelper.c (vm_call_iseq_setup_normal): do not clear local
- variables here. vm_push_frame() clears.
+Tue Apr 18 00:11:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_insnhelper.c (vm_call_iseq_setup_tailcall): ditto.
+ * eval.c: block_unique should be 1, not frame_unique.
+ [ruby-dev:28577]
- * vm_insnhelper.c (vm_push_frame): move check code to
- vm_check_frame().
+Fri Aug 11 15:39:25 2006 Eric Hodel <drbrain@segment7.net>
- Reorder initialization timing to reuse same values (sp).
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_body): Make RDoc
+ ignore C function prototypes. Patch by Tilman Sauerbeck
+ <tilman at code-monkey.de>. [ruby-core:8574]
+ * lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get
+ documented.
- * compile.c (rb_iseq_compile_node): use
- iseq_set_exception_local_table() for ISEQ_TYPE_DEFINED_GUARD.
+Mon Apr 10 01:03:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Sep 12 23:06:51 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * prec.c (prec_prec_f): documentation patch from
+ <gerardo.santana at gmail.com>. [ruby-core:07689]
- * lib/net/ftp.rb (file?, directory?, appendable?, creatable?,
- deletable?, enterable?, renamable?, listable?, directory_makable?,
- purgeable?, readable?, writable?): new methods.
+Sat Apr 8 02:34:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Sep 12 21:27:22 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * bignum.c (rb_big_pow): second operand may be too big even if
+ it's a Fixnum. [ruby-talk:187984]
- * lib/net/ftp.rb (FACT_PARSERS): support system dependent facts
- UNIX.mode, UNIX.owner, UNIX.group, UNIX.ctime, and UNIX.atime.
+Sat Apr 8 02:12:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Sep 12 19:08:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * README.EXT: update symbol description. [ruby-talk:188104]
- * win32/win32.c (rb_w32_dup2): should return the new fd on
- success, while msvcrt returns 0 wrongly.
+Thu Apr 6 23:28:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Sep 12 18:14:11 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * COPYING: explicitly note GPLv2. [ruby-talk:187922]
- * lib/net/ftp.rb (parse_mlsx_entry, mlst) raise an FTPProtoError
- when parsing failed.
+Thu Apr 6 11:18:37 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Sep 12 18:00:35 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/lib/tk/panedwindow.rb: lack of arguments. [ruby-core:7681]
- * lib/net/ftp.rb (TIME_PARSER): use "Z" instead of "+00:00" to
- get UTC time. Thanks, Wilson Bilkovich.
+Thu Apr 6 01:04:47 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Sep 12 17:55:24 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/tk/tcltklib.c: fix SEGV when embedding to an application.
+ [ruby-core:7600]
- * lib/net/ftp.rb (mlst, mlsd): support new commands MLST and MLSD
- specified in RFC 3659.
+ * ext/tk/tcltklib.c: fix SEGV at exit. [ruby-talk:186489]
-Sat Sep 12 16:14:31 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/tkutil/tkutil.c: follow to changing specification of
+ instance_eval on ruby-1.9.x.
- * file.c: access()/eaccess() wrapping methods check more than just uid.
- [fix GH-1007][ci skip] Patch by @eam
+ * ext/tk/lib/tk.rb: ditto.
-Sat Sep 12 16:07:01 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/multi-tk.rb: ditto.
- * README.md: improve markdown rendering for readability.
- [fix GH-1015][ci skip] Patch by @Matrixbirds
+ * ext/tk/lib/tk.rb: remove warning about redefinition of methods.
-Sat Sep 12 14:30:03 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/variable.rb: remove warning about unseting Tcl
+ variables.
- * process.c (save_redirect_fd): make saved FDs close-on-exec not
- to be inherited.
+Wed Mar 29 20:54:44 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * process.c (run_exec_dup2): restore close-on-exec flags too.
+ * ext/win32ole/win32ole.c (fole_getproperty): WIN32OLE#[] should accept
+ multi arguments.
- * win32/win32.c (fcntl): implement F_GETFD, F_SETFD, and
- F_DUPFD_CLOEXEC.
+ * ext/win32ole/tests/testWIN32OLE.rb (test_setproperty_bracket): ditto.
-Sat Sep 12 05:35:24 2015 Eric Wong <e@80x24.org>
+Wed Mar 29 10:07:44 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * rational.c (string_to_r_strict): preserve encoding in exception
+ * ext/nkf/nkf-utf8/nkf.c (nkf_each_char_to_hex, encode_fallback_subchar,
+ e2w_conv): support C90 compiler.
-Fri Sep 11 20:23:35 2015 Koichi Sasada <ko1@atdot.net>
+Wed Mar 29 06:48:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: remove rb_call_info_t::aux.opt_pc.
+ * eval.c (backtrace): reports aliased method names in a generated
+ backtrace. a patch from "U.Nakamura" <usa at garbagecollect.jp>.
+ [ruby-dev:28471]
- * vm_insnhelper.c: introduce shortcut functions for opt_pc == 0
- because opt_pc is always 0 on shortcut function.
+Mon Mar 27 22:19:09 2006 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Sep 11 17:49:36 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/nkf/nkf-utf8/{nkf.c, utf8tbl.c, config.h}: imported nkf 2.0.6.
+ * Add --ic / --oc option and mapping tables.
+ * Add fallback option.
+ * Add --no-best-fit-chars option.
+ * Fix some bugs.
- * iseq.c: disable ISeq.load. It enabled accidentally at r51794.
+ * ext/nkf/nkf.c (nkf_split_options): added for parse option string.
-Fri Sep 11 11:15:12 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/nkf/lib/kconv.rb (Kconv.to*): add -m0.
+ Note that Kconv.to* still imply -X.
- * lib/net/ftp.rb (size, mdtm, system): parse responses according to
- RFC 959 and 3659, where reply codes must be followed by SP.
+Mon Mar 27 03:17:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/net/ftp.rb (system): remove LF from the return value.
+ * eval.c (rb_call0): insecure calling should be checked for non
+ NODE_SCOPE method invocations too.
-Thu Sep 10 22:48:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_alias): should preserve the current safe level as
+ well as method definition.
- * parse.y (literal_concat_gen, evstr2dstr_gen): keep literal
- encoding beginning with an interpolation same as the source file
- encoding. [ruby-core:70703] [Bug #11519]
+Fri Mar 24 23:14:30 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Sep 10 22:15:51 2015 Joe Rafaniello <jrafanie@redhat.com>
+ * eval.c (yield_under_i): pass self again for instance_eval().
+ [ruby-dev:28466]
- * process.c (rb_f_spawn): Be more specific regarding "other
- values" by having "non-zero positive integers" Add nil, the
- default value, as a possible value and what it means.
+Fri Mar 24 17:20:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- Try to use more consistent language.
- [Fix GH-1008]
+ * process.c (rb_f_sleep): remove description about SIGALRM which
+ is not valid on the current implementation. [ruby-dev:28464]
-Thu Sep 10 15:16:02 2015 Shugo Maeda <shugo@ruby-lang.org>
+Thu Mar 23 10:47:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/net/ftp.rb (getmultiline): refactor.
+ * eval.c (method_missing): should support argument splat in
+ super. [ruby-talk:185438]
-Thu Sep 10 12:17:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Mar 20 12:05:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c (iseq_build_from_ary_body): register cdhash to the
- iseq constant body instead of compile time mark array, not to
- get GCed. [ruby-core:70708] [Feature #8543]
+ * configure.in: Solaris SunPro compiler -rapth patch from
+ <kuwa at labs.fujitsu.com>. [ruby-dev:28443]
-Wed Sep 9 18:16:14 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Mar 20 09:40:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/rubygems/stub_specification.rb (Gem::StubSpecification#data):
- should not change the value of $. when `require`ing gems.
- this fixed test failures introduced by r51813.
+ * configure.in: remove enable_rpath=no for Solaris.
+ [ruby-dev:28440]
-Wed Sep 9 16:55:45 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Mar 17 19:08:49 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * ruby.c (usage, enable_option, disable_option, process_options): new
- option `--disable-did_you_mean`.
+ * ext/openssl/ossl_ssl.c, ext/openssl/ossl_nsspki.c: fix typo.
+ [ruby-core:07571]
- * gem_prelude.rb: now requires did_you_mean gem by default if available.
+Wed Mar 15 16:54:21 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Sep 9 13:38:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (create_makefile): support libraries without *.so.
- * tool/extlibs.rb (do_patch): let "patch" command change the
- working directory and open the patch file there, instead of
- spawn options, so that proper error message will be shown by the
- command not just "chdir" or "open".
+Wed Mar 15 16:35:43 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Sep 9 11:33:05 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/openssl/ossl_ssl.c, ext/openssl/ossl_nsspki.c: should use
+ "rb_str_new(0, 0)" to make empty string.
- * common.mk (update-gems): use BASERUBY instead of RUNRUBY.
+Sat Mar 11 14:24:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 9 11:08:59 2015 Zachary Scott <zzak@ruby-lang.org>
+ * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::wrap): removed
+ space before argument parenthesis. [ruby-talk:183630]
- * lib/delegate.rb: Remove backtrace cleaning for delegated methods
- This patch was provided by Rafael Franca and greatly improves
- performance when an exception is raised. [Bug #11461]
+ * ruby.1: a clarification patch from David Lutterkort
+ <dlutter at redhat.com>. [ruby-core:7508]
-Wed Sep 9 10:05:41 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat Mar 4 15:26:40 2006 Tanaka Akira <akr@m17n.org>
- * test/rubygems/test_config.rb: fix broken tests for Windows platform.
+ * gc.c (id2ref): fix symbol test.
-Wed Sep 9 07:46:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat Mar 4 01:08:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/rubygems: Update to RubyGems HEAD(fe61e4c112).
- this version contains new feature that warn invalid SPDX license
- identifiers. https://github.com/rubygems/rubygems/pull/1249
- and #1032, #1023, #1332, #1328, #1306, #1321, #1324
- * test/rubygems: ditto.
+ * lib/rdoc/ri/ri_paths.rb (RI::Paths): adding paths from rubygems
+ directories. a patch from Eric Hodel <drbrain at segment7.net>.
+ [ruby-core:07423]
-Tue Sep 8 23:17:36 2015 Yuki Nishijima <mail@yukinishijima.net>
+Thu Mar 2 19:44:18 2006 Tanaka Akira <akr@m17n.org>
- * gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0.beta2.
+ * gc.c: align VALUE with sizeof(RVALUE) globally.
+ (is_pointer_to_heap): check alignment out of loop.
+ (id2ref): avoid collision between symbols and objects.
+ (rb_obj_id): ditto. moved from object.c.
+ [ruby-talk:178364] [ruby-core:7305]
-Tue Sep 8 23:09:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Mar 2 18:58:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (rb_io_s_popen): do not wait the child process during being
- killed. [ruby-core:70671] [Bug #11510]
+ * eval.c (rb_thread_fd_writable): should not re-schedule output
+ from KILLED thread (must be error printing).
-Tue Sep 8 22:18:04 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Mar 2 17:57:49 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * gems/bundled_gems: revert because ruby trunk never be able to install
- the did_you_mean gem. retry after enough test.
+ * gc.c: commited magic for reducing RVALUE size on windows. (24->20byte)
+ [ruby-core:7474]
-Tue Sep 8 21:48:22 2015 Yuki Nishijima <mail@yukinishijima.net>
+Thu Mar 2 12:59:14 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * gems/bundled_gems: Automatically install the did_you_mean gem
- as a bundled gem. [Feature #11252]
+ * win32/win32.c (filetime_to_unixtime): should set tm_isdst to -1.
+ stat() didn't treat daylight saving time property on WinNT.
+ [ruby-talk:182100]
-Tue Sep 8 17:17:48 2015 Koichi Sasada <ko1@atdot.net>
+Thu Mar 2 08:02:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: remove rb_call_info_t::blockiseq.
+ * gc.c (add_heap): heap_slots may overflow. a patch from Stefan
+ Weil <weil at mail.berlios.de>.
- * insns.def (send, invokesuper): pass blockiseq explicitly.
+Wed Mar 1 00:24:31 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * compile.c: catch up this fix.
+ * lib/rdoc/parsers/parse_rb.rb (read_escape): could not handle /\^/.
+ merged Mr. Ishizuka's lib/irb/ruby-lex.rb 's patch rev 1.29.
+ [ruby-talk:181631] [ruby-dev:28404]
- * iseq.c: ditto.
+Tue Feb 28 09:32:17 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_args.c: ditto.
+ * lib/drb/extservm.rb (invoke_service_command): cannot invoke command
+ if command name is quoted on mswin32. [ruby-dev:28400]
- * iseq.c (ISEQ_MINOR_VERSION): 2->3 because instruction spec was
- changed.
+Mon Feb 27 00:19:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Sep 8 15:01:19 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * ruby.h (SYM2ID): should not cast to signed long.
+ [ruby-core:07414]
- * lib/net/ftp.rb (list): fetch all the lines before yielding a block
- to allow other commands in the block. [Feature #11454]
- Patched by Srikanth Shreenivas.
+Fri Feb 24 20:07:23 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Tue Sep 8 12:05:00 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * test/drb/drbtest.rb (add_service_command): quote pathnames in the
+ server's command line for space contained directory names.
+ Thanks, arton. [ruby-dev:28386]
- * win32/win32.c (rb_w32_read_reparse_point): return correct required
- buffer size for IO_REPARSE_TAG_MOUNT_POINT.
+Fri Feb 24 12:11:08 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Sep 8 00:14:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * instruby.rb: install *.exe.manifest and *.dll.manifest if exist.
+ It's for VC++8.
- * process.c (rb_execarg_parent_start1): raise with the target path
- name when open() failed.
+Fri Feb 24 11:33:52 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Mon Sep 7 23:45:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bcc32/Makefile.sub (HAVE_HYPOT): bcc32 has hypot().
- * process.c (rb_exec_fail): raise with the target directory name
- when chdir() failed. pointed out by sorah.
+Fri Feb 24 11:19:58 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Sep 7 22:05:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (time_new_internal): add prototype to tell the compiler
+ arugments types.
- * win32/win32.c (insert): should use plain strdup() instead of
- ruby_strdup() at startup time, and plain free()ed in cmdglob().
+ * win32/win32.c (NtInitialize): need to set a handler for VC++8.
-Mon Sep 7 16:49:30 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Feb 24 08:19:16 2006 NARUSE, Yui <naruse@ruby-lang.org>
- * vm_core.h (rb_vm_struct): define objspace always regardless
- ENABLE_VM_OBJSPACE.
+ * test.rb: Removed. Obsolete by test/nkf.
-Mon Sep 7 15:54:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/.document: enabled documents in nkf and kconv
- * ruby_atomic.h (ATOMIC_VALUE_CAS): fix typo.
- TODO: make arguments of all CAS macros consistent.
+ * ext/nkf/nkf.c ext/nkf/lib/kconv.rb: Add rdoc.
-Sun Sep 6 16:07:22 2015 Eric Wong <e@80x24.org>
+Thu Feb 23 22:39:59 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * ccan/list/list.h: suppress unused argument warnings
- [ccan commit 6aaca17e07588997417a73fac19dcf0ff17ed81b]
+ * bcc32/Makefile.sub: use borlndmm.dll if possible. bcc32's RTL internal
+ memory manager cannot handle large memory block properly.
+ ex: 10000.times { "" << "." * 529671; GC.start } # crash
+ [ruby-dev:28230]
-Sat Sep 5 11:39:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Feb 23 13:20:28 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * lib/rss/rss.rb (Time#w3cdtf): fix zero-trimmed width of fraction
- digits. [ruby-core:70667] [Bug #11509]
+ * eval.c (SETUP_ARGS0): fixed memory corruption. [ruby-dev:28360]
-Sat Sep 5 08:28:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Feb 21 02:18:46 2006 NAKAMURA Usaku <usa@ruby-lang.org>
- * hash.c (rb_hash_equal, rb_hash_eql): [DOC] the orders of each
- hashes are not compared. [Bug #11508]
+ * configure.in (mingw): have link. [ruby-list:41838]
-Fri Sep 4 23:26:22 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/Makefile.sub (config.h): ditto.
- * include/ruby/win32.h: fix macro name for VC runtime version,
- RT_VER is only in Makefile.
+Tue Feb 21 02:07:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Sep 4 17:46:17 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * parse.y (f_arglist): should set command_start = Qtrue for
+ command body. [ruby-talk:180648]
- * doc/contributing.rdoc: fix configuration option.
- [ci skip] [fix GH-1009]
+Mon Feb 20 17:37:26 2006 Tanaka Akira <akr@m17n.org>
-Fri Sep 4 04:46:54 2015 Koichi Sasada <ko1@atdot.net>
+ * mkconfig.rb: alias RbConfig for Config.
- * iseq.c (iseq_memsize): functions for wrapper object should have
- iseqw_ prefix.
+Mon Feb 20 12:27:53 2006 Kent Sibilev <ksruby@gmail.com>
-Thu Sep 3 21:12:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rational.rb (Integer::gcd): small typo fix.
+ [ruby-core:07395]
- * lib/cgi/session.rb (create_new_id): use SHA512 instead of MD5.
- pointed out by SARWAR JAHAN.
+Mon Feb 20 01:05:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Sep 3 20:29:18 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rational.rb (Integer::gcd): replaced by gcd4 in
+ [ruby-core:07390]. [ruby-core:07377]
- * gc.c (rb_raw_obj_info): iseq->body->location.first_lineno is Fixnum.
+Mon Feb 20 00:57:02 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Sep 3 17:54:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl.h (OSSL_Debug): should not use __func__.
+ [ruby-dev:28339]
- * vm_eval.c (raise_method_missing): "names" should be singular.
- pointed out by Filip Bartuzi.
+Sun Feb 19 04:46:29 2006 Guy Decoux <ts@moulon.inra.fr>
-Thu Sep 3 17:50:09 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c: initial value for block_unique must be 1.
+ [ruby-talk:180420]
- * gc.c (rb_raw_obj_info): should support IMEMO/iseq.
+Sat Feb 18 23:58:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Sep 3 10:07:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/tracer.rb (Tracer::Tracer.add_filter): turn on tracer mode
+ only when caller() level size is one. [ruby-core:07389]
- * vm_eval.c (raise_method_missing): refine error messages when a
- symbol is not given. [Fix GH-1013]
+ * lib/rdoc/parsers/parse_rb.rb: need not to require "tracer".
+ [ruby-core:07389]
-Wed Sep 2 18:49:55 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * sample/rtags.rb: ditto.
- * ext/psych/*: merge psych master(8737e5b). It contains following fixes.
- https://github.com/tenderlove/psych/pull/242
- https://github.com/tenderlove/psych/pull/246 [ruby-list:50219]
- * test/psych/*: ditto.
+Sat Feb 18 12:18:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 2 18:04:13 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb (FileUtils::fu_world_writable): make it
+ private. [ruby-core:07383]
- * vm_insnhelper.h (GET_PC_COUNT): remove unused macro.
+Sat Feb 18 00:22:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Sep 2 17:18:37 2015 Chris Schneider <chris@christopher-schneider.com>
+ * lib/tracer.rb: merged a minor clarification patch from Daniel
+ Berger <Daniel.Berger at qwest.com>. [ruby-core:07376]
- * process.c (proc_detach): [DOC] fix typo "intent" as "intend" in
- rdoc. [Fix GH-1011]
+Fri Feb 17 11:18:42 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Wed Sep 2 16:58:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * util.c (ruby_strtod): Float("1e") should fail. [ruby-core:7330]
- * file.c (rb_realpath_internal): use filesystem encoding if the
- argument is in ASCII encodings.
+ * pack.c (EXTEND32): unpack("l") did not work where sizeof(long) != 4.
+ [ruby-talk:180024]
- * win32/file.c (rb_readlink): needs the result encoding.
+ * pack.c (pack_unpack): fixed integer overflow on template "w".
+ [ruby-talk:180126]
-Tue Sep 1 18:37:15 2015 Koichi Sasada <ko1@atdot.net>
+Fri Feb 17 09:39:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/thread/test_queue.rb: catch up last commit.
+ * eval.c (rb_thread_wait_for): sleep should always sleep for
+ specified amount of time. [ruby-talk:180067]
-Tue Sep 1 18:16:32 2015 Koichi Sasada <ko1@atdot.net>
+Thu Feb 16 01:10:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * thread_sync.c (queue_do_close): ignore multiple close to allow
- multiple producers.
- https://bugs.ruby-lang.org/issues/10600#note-14
+ * eval.c (backtrace): frame->orig_func may not be initialized.
+ [ruby-core:07367]
-Tue Sep 1 18:06:26 2015 Koichi Sasada <ko1@atdot.net>
+Wed Feb 15 16:52:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * thread_tools.c: rename thread_tools.c to thread_sync.c.
+ * eval.c (rb_eval): NODE_OP_ASGN1 should allow splat in its
+ argument list. [ruby-core:07366]
-Mon Aug 31 17:04:45 2015 Koichi Sasada <ko1@atdot.net>
+ * parse.y (arg): avoid unnecessary extra argument.
+ [ruby-core:07366]
- * class.c (move_refined_method): should insert a write barrier
- from an original class to a created (cloned) method entry.
+ * eval.c (rb_eval): honor visibility on OP_ASGN1 and
+ OP_ASGN2. [ruby-core:07366]
- * test/ruby/test_refinement.rb: add a test.
+Wed Feb 15 10:09:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Aug 30 02:42:22 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * eval.c (yield_under_i): should not pass self as an argument to
+ the block for instance_eval. [ruby-core:07364]
- * ext/openssl/ossl_ssl.c (ossl_ssl_method_tab): Only add SSLv3 support
- if the SSL library supports it. Thanks Kurt Roeckx <kurt@roeckx.be>
- [Bug #11376]
+Wed Feb 15 09:20:35 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/extconf.rb: check for SSLv3 support in the SSL
- implementation.
+ * eval.c (rb_obj_instance_eval): should be no singleton classes for
+ true, false, and nil. [ruby-dev:28186]
- * test/openssl/test_ssl.rb (class OpenSSL): Skip tests that need SSLv3
- if there is no support.
+Tue Feb 14 18:48:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Aug 28 16:05:09 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * eval.c (DMETHOD_P): accessing wrong frame. [ruby-dev:28181]
- * lib/rdoc/*: Update rdoc master(cfffed5)
- https://github.com/rdoc/rdoc/pull/337
- https://github.com/rdoc/rdoc/pull/367
+ * eval.c (proc_invoke): preserve FRAME_DMETH flag.
-Fri Aug 28 10:16:20 2015 Koichi Sasada <ko1@atdot.net>
+Tue Feb 14 15:13:51 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * vm.c (hook_before_rewind): prevent kicking :return event while
- finishing vm_exec func because invoke_block_from_c() kick a :return
- event for bmethods.
- [Bug #11492]
+ * ext/zlib/zlib.c: supress warning on test/zlib. [ruby-dev:28323]
- * test/ruby/test_settracefunc.rb: add a test.
+Tue Feb 14 14:01:17 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 27 18:05:42 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * time.c (search_time_t): support non 32bit time_t environments.
- * lib/webrick/server.rb: use IO::NULL instead of '/dev/null'
- * test/ruby/test_string.rb: ditto.
+ * win32/Makefile.sub (config.h): VC++8 has ``long long'' type.
-Thu Aug 27 15:24:57 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/Makefile.sub (config.h): VC++8's time_t is 64bit value.
- * compile.c (iseq_set_sequence): rename variable names
- to make it readable.
+ * win32/win32.c (rb_w32_utime): drop read-only attribute before
+ changing file time.
-Thu Aug 27 07:45:34 2015 Koichi Sasada <ko1@atdot.net>
+ all changes are backported from CVS HEAD.
- * thread_tools.c: add Queue#close(exception=false) and
- SizedQueue#close(exception=false).
- [Feature #10600]
+Tue Feb 14 11:21:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- Trying to deq from a closed empty queue return nil
- if exception parameter equals to false (default).
+ * io.c (argf_forward): should not use frame->argv.
+ [ruby-core:07358]
- If exception parameter is truthy, it raises
- ClosedQueueError (< StopIteration).
- ClosedQueueError inherits StopIteration so that you can write:
+Mon Feb 13 18:08:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- loop{ e = q.deq; (using e) }
+ * eval.c (rb_call0): argument update propagation. [ruby-dev:28044]
- Trying to close a closed queue raises ClosedQueueError.
+ * env.h: remove argv member from struct FRAME.
- Blocking threads to wait deq for Queue and SizedQueue will be
- restarted immediately by returning nil (exception=false) or
- raising a ClosedQueueError (exception=true).
+Mon Feb 13 13:27:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- Blocking threads to wait enq for SizedQueue will be
- restarted by raising a ClosedQueueError immediately.
+ * eval.c (eval): should push class from binding if supplied.
+ [ruby-core:07347]
- The above specification is not proposed specification, so that
- we need to continue discussion to conclude specification this
- method.
+Mon Feb 13 00:04:00 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * test/thread/test_queue.rb: add tests originally written by
- John Anderson and modify detailed behavior.
+ * lib/erb.rb (ERB::Compiler): add instance variable @insert_cmd to
+ change <%='s behavior. (backported 1.15 - 1.16)
-Wed Aug 26 10:52:02 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Feb 11 02:04:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
- * re.c (rb_memsearch_wchar, rb_memsearch_qchar): test matching
- till the end of string. [ruby-core:70592] [Bug #11488]
+ * eval.c (eval): no need to push ruby_class. [ruby-dev:28176]
- * test/ruby/test_m17n.rb (test_include?, test_index): add tests by
- Tom Stuart.
+Sat Feb 11 01:57:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Aug 26 09:26:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_f_autoload): check if ruby_cbase is nil (during
+ instance_eval for objects cannot have singleton classes,
+ e.g. fixnums and symbols). [ruby-dev:28178]
- * id_table.c (list_table_extend, hash_table_extend): remove C99
- features. [ruby-dev:49239] [Bug #11487]
+Tue Feb 7 23:03:24 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Tue Aug 25 06:34:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/zlib/zlib.c: should not access ruby objects in finalizer.
+ [ruby-dev:28286]
- * win32/win32.c (w32_symlink): implement symlink().
+Mon Feb 6 16:02:51 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-Mon Aug 24 16:01:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_thread_flock): ERROR_NOT_LOCKED is not an error on Cygwin.
+ In such situation, flock() should return 0.
- * encoding.c (rb_locale_encindex): find encoding index without
- making a string object every time. [ruby-core:58160] [Bug #9080]
+Mon Feb 6 00:41:08 2006 Tanaka Akira <akr@m17n.org>
-Sat Aug 22 15:43:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ruby.h (RSTRUCT_LEN, RSTRUCT_PTR): defined for source level
+ compatibility with ruby 1.9.
- * vm_eval.c (check_funcall_failed, check_funcall_missing): cache
- results of respond_to? and respond_to_missing?, and search a
- public method only for compatibility with rb_respond_to.
+Sun Feb 5 21:05:34 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sat Aug 22 08:23:32 2015 Koichi Sasada <ko1@atdot.net>
+ * numeric.c (fix_to_s): removed workaround for radix 2. Historically,
+ rb_fix2str could only handle radix 8, 10, 16. (Rev1.37) But for now,
+ it can handle radix 2..36. [ruby-Bugs#3438] [ruby-core:7300]
- * ext/thread/thread.c: move definitions of Queue, SizedQueue
- and ConditionalVariables to thread_tools.c. In other words,
- such classes are built-in.
- [Feature #8919]
+Sun Feb 5 18:55:08 2006 Minero Aoki <aamine@loveruby.net>
- At first, I planned to embed only a Queue class.
- However, rubygems requires 'thread.rb' (rubygems are
- required at first, when launch MRI without --disable-gems).
- So most of people require 'thread.rb' as an embedded library.
+ * lib/net/http.rb: imported from trunk, rev 1.129
- Now, ext/thread/thread.c is empty, only for a dummy for
+ * lib/net/http.rb (add_field, get_fields): keep 1.8.2 backward
compatibility.
- * thread.c: move a definition of Mutex class to thread_tools.c.
+ * lib/net/https.rb: imported from trunk, rev 1.3.
+
+ * lib/net/https.rb: #use_ssl? definition moved from net/http.rb.
+
+Sun Feb 5 14:22:15 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/pstore.rb: should return default value if name is not found.
+ [ruby-core:7304]
+
+ * lib/pstore.rb: should raise PStore::Error if not in transaction.
+
+Sat Feb 4 22:51:43 2006 Tanaka Akira <akr@m17n.org>
+
+ * eval.c: apply the FreeBSD getcontext/setcontext workaround
+ only before FreeBSD 7-CURRENT.
+
+Sat Feb 4 21:19:23 2006 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (LK_ERR): ERROR_NOT_LOCKED is not an error.
+ In such situation, flock() should return 0.
+
+Sat Feb 4 15:56:37 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * numeric.c (fix_to_s): (2**32).to_s(2) fails with exception where
+ sizeof(int) == 4 < sizeof(long). [ruby-core:7300]
+
+Fri Feb 3 15:06:50 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/syck/syck.c (syck_move_tokens): should reset p->cursor or etc
+ even if skip == 0. This causes buffer overrun.
+ (ex: YAML.load('--- "..' + '\x82\xA0' * 511 + '"'))
+
+Thu Feb 2 23:51:18 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/syck/emitter.c (syck_emitter_write): should not set '\0' on
+ emitter's marker. if marker points to the end of buffer, this causes
+ buffer overrun. (ex: YAML.dump("." * 12288))
+
+Thu Feb 2 16:01:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): need not to protect $SAFE value.
+ [ruby-core:07177]
+
+Thu Feb 2 14:45:53 2006 Ville Mattila <ville.mattila@stonesoft.com>
+
+ * configure.in: The isinf is not regognized by autoconf
+ library guesser on solaris 10. [ruby-core:7138]
+
+Wed Feb 1 22:01:47 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * configure.in, hash.c (ruby_setenv): use setenv(3) and unsetenv(3)
+ where they are supported. modifing environ variable seems to
+ segfault solaris 10. [ruby-core:7276] [ruby-dev:28270]
+
+ * ruby.c (set_arg0): if use setenv(3), environ space cannot be used
+ for altering argv[0].
+
+Tue Jan 31 14:46:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (rb_struct_select): update RDoc description.
+ [ruby-core:7254]
+
+Tue Jan 31 11:58:51 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.
+
+ * ext/tk/lib/tk/namespace.rb: TkNamespace#eval was enbugged at the
+ last commit. Now it will return a proper object.
+
+Tue Jan 31 00:10:26 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/syck/rubyext.c (syck_resolver_transfer): workaround for SEGV.
+ ex: ruby -ryaml -e 'YAML.load("!map:B {}")' [ruby-core:7217]
+
+Sat Jan 28 07:56:57 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/rdoc/usage.rb: support "a:0:33" style caller[-1]. In this case
+ file name is "a:0". I don't know this really happens though...
+ [ruby-Bugs:3344]
+
+Wed Jan 25 22:29:04 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, dln.c, file.c, intern.h, missing.h (eaccess): use
+ system routine if provided. fixed: [ruby-core:07195]
+
+Sun Jan 22 23:27:13 2006 Go Noguchi <gonoguti@yahoo.co.jp>
+
+ * lib/test/unit/autorunner.rb (process_args): ignore arguments after
+ '--' so that test scripts can handle them. fixed: [ruby-dev:28258]
+
+Sun Jan 22 22:09:52 2006 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (POST_GETCONTEXT): define separately from PRE_GETCONTEXT on
+ IA64 to avoid reusing variable address.
+
+Sun Jan 22 20:03:35 2006 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (ruby_setjmp): define PRE_GETCONTEXT and POST_GETCONTEXT
+ instead of FUNCTION_CALL_MAY_RETURN_TWICE.
+ define PRE_GETCONTEXT to clear carry flag for workaround of
+ FreeBSD/i386 getcontext/setcontext bug.
+ [ruby-dev:28263]
+
+Sat Jan 21 00:36:47 2006 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): use only on SPARC and IA64
+ before gcc 4.0.3.
+ [ruby-dev:28247]
+
+Thu Jan 19 22:21:23 2006 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (mv): should remove file after copying.
+ [ruby-dev:28223]
+
+Wed Jan 18 23:37:06 2006 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): don't clobber %l7 of SPARC
+ if enable-shared.
+ (ruby_setjmp): call FUNCTION_CALL_MAY_RETURN_TWICE after getcontext
+ too.
+ reported by Pav Lucistnik and Marius Strobl.
+ http://lists.freebsd.org/pipermail/freebsd-sparc64/2006-January/003739.html
+
+Tue Jan 17 11:32:46 2006 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.mak (MAKE): workaround for nmake 8.
+
+Tue Jan 17 11:10:21 2006 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{Makefile.sub,setup.mak}: invoke .bat via shell. workaround
+ for nmake 8.
+
+Mon Jan 16 10:26:23 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/syck/emitter.c (syck_emit_seq, syck_emit_map, syck_emit_item):
+ should output complex key mark even if map's key is empty seq/map.
+ [ruby-core:7129]
+
+Sat Jan 14 05:37:06 2006 Tanaka Akira <akr@m17n.org>
+
+ * io.c (READ_DATA_PENDING, READ_DATA_PENDING_COUNT): defined
+ for DragonFly BSD 1.4.0.
+
+Sat Jan 14 03:43:24 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=
+ sizeof(void*).
+
+Fri Jan 13 19:14:56 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/rdoc/diagram.rb:
+ - properly quote bare element attributes
+ - terminates dangling elements (e.g. <img>, <br>, <link>, etc)
+ - converts "CVS" to the more HTML-friendly acronym element
+ - adds missing type attributes to style elements
+
+ based on Paul Duncan's patch <pabs@pablotron.org> [ruby-core:7028]
+
+ * lib/rdoc/generators/html_generator.rb: ditto.
+ * lib/rdoc/generators/template/html/hefss.rb: ditto.
+ * lib/rdoc/generators/template/html/html.rb: ditto.
+ * lib/rdoc/generators/template/html/kilmer.rb: ditto.
+
+Thu Jan 12 11:53:08 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/tkballoonhelp.rb: [bug fix] couldn't add to a widget
+ which is constructed with TkComposite module.
+ [new feature] support 'command' option which is called just before
+ popping up the balloon help.
+
+Wed Jan 11 15:00:00 2006 Ville Mattila <mulperi@iki.fi>
+
+ * io.c (READ_PENDING*): Support solaris 64-bit environments.
+ Solaris defines a opaque FILE struct when compiling 64 bit
+ binaries. This means that we dont have access to _ptr etc.
+ members anymore. The solution by Steven Lumos is to define
+ FILE64 that has needed members available. I've modified
+ the origanal patch a bit so that it compiles both with gcc
+ and now free sun studio 11 compiler and both amd64 and sparc.
+ NOTE! We have to 64 bit solaris FILE structure time to time
+ otherwise we'll get breakage.
+ [ruby-core:7106]
+
+Tue Jan 10 19:42:33 2006 Tanaka Akira <akr@m17n.org>
+
+ * gc.c (garbage_collect): mark ruby_current_node.
+ if an exception is raised in a finalizer called written in C by
+ rb_gc_call_finalizer_at_exit, ruby_set_current_source may use
+ collected ruby_current_node and mark_source_filename may corrupt
+ memory.
+
+Tue Jan 10 13:30:34 2006 akira yamada <akira@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_resolver_transfer): should be able to load
+ !ruby/object:Bignum syntax 1.8.3 dumped. [ruby-core:6159]
+
+Tue Jan 10 12:47:41 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/yaml/rubytypes.rb (Fixnum): Bignum could not be loaded in
+ ruby 1.8.3/1.8.4. [ruby-core:6115]
+
+ * lib/yaml/rubytypes.rb (Numeric): Subclass of Numeric could not
+ be dumped properly. [ruby-core:7047]
+
+Tue Jan 10 12:00:48 2006 Aaron Schrab <aaron @nospam@ schrab.com>
+
+ * lib/yaml/rubytypes.rb (Symbol#yaml_new): YAML loading of quoted
+ Symbols broken. [ruby-Bugs:2535]
+
+Mon Jan 9 19:54:35 2006 arton <artonx@yahoo.co.jp>
+
+ * ext/zlib/extconf.rb: zlib compiled DLL version 1.2.3 distributed by
+ http://www.zlib.net/ has zdll.lib. [ruby-dev:28209]
+
+Mon Jan 9 14:17:12 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/Makefile.sub (OPTFLAGS): I have experienced trouble on y- flag,
+ (VisualC++6) so use -O2b2xg- if $(MSC_VER) < 1400. [ruby-core:7040]
+
+Mon Jan 9 14:17:12 2006 Kero van Gelder <rubyforge @nospam@ kero.tmfweb.nl>
+
+ * lib/webrick/httpservlet/filehandler.rb: fixed typo. [ruby-core:7075]
+
+Sat Jan 7 15:40:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (singleton): get rid of segfault on syntax error.
+ fixed: [ruby-core:07070]
+
+Fri Jan 6 10:16:20 2006 Steven Lumos <steven@lumos.us>
+
+ * io.c (READ_DATA_PENDING): defined for 64bit Solaris on SPARC.
+ [ruby-core:7057]
+ (READ_DATA_PENDING_COUNT): ditto.
+ (READ_DATA_PENDING_PTR): ditto.
+
+Sun Jan 1 17:07:59 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_seekdir): should not segfault even if passed
+ the location which rb_w32_telldir didn't return. [ruby-core:7035]
+ (I think HEAD implementation is better. but binary compatibility)
+
+ * test/ruby/test_dir.rb: added.
+
+Sat Dec 31 22:57:00 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_save_context): should not recycle scope object used
+ in a thread. fixed: [ruby-dev:28177]
+
+Fri Dec 30 18:22:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (garbage_collect): mark objects refered from aborting threads.
+ [ruby-dev:28190]
+
+ * win32/Makefile.sub: VC++8 support.
+
+Fri Dec 30 14:24:53 2005 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dir.c (glob_helper): do not use TRUE for djgpp.
+
+Fri Dec 30 04:54:40 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (eaccess): workaround for VC++8 runtime.
+
+ * win32/win32.c (ioinfo): VC++8 support.
+
+Thu Dec 29 23:59:37 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_gc_mark_threads): leave unmarked threads which won't wake
+ up alone, and mark threads in the loading table. [ruby-dev:28154]
+
+ * eval.c (rb_gc_abort_threads), gc.c (gc_sweep): kill unmarked
+ threads. [ruby-dev:28172]
+
+Thu Dec 29 17:02:07 2005 Tanaka Akira <akr@m17n.org>
+
+ * test/ruby/envutil.rb (EnvUtil.rubybin): search "ruby" instead of
+ "miniruby". [ruby-dev:28140]
+
+Tue Dec 27 16:59:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/drb/drbtest.rb (DRbService::self.ext_service): increase
+ timeout limit. a patch from Kazuhiro NISHIYAMA
+ <zn at mbf.nifty.com>. [ruby-dev:28132]
+
+Tue Dec 27 08:29:18 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLSocket#post_connection_chech):
+ treat wildcard character in commonName. [ruby-dev:28121]
+
+Mon Dec 26 22:32:47 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval), gc.c (gc_mark_children), node.h (NEW_ALIAS,
+ NEW_VALIAS), parse.y (fitem): allow dynamic symbols to
+ NODE_UNDEF and NODE_ALIAS.
+ backported from trunk. fixed: [ruby-dev:28105]
+
+Mon Dec 26 08:50:36 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ev_const_get): fixed a bug in constant reference during
+ instance_eval. [yarv-dev:707]
+
+ * eval.c (ev_const_defined): ditto.
+
+ * lib/yaml.rb (YAML::add_domain_type): typo fixed. a patch from
+ Joel VanderWerf <vjoel at path.berkeley.edu>.
+ [ruby-talk:165285] [ruby-core:6995]
+
+Sat Dec 24 18:58:14 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * stable version 1.8.4 released.
+
+Fri Dec 23 10:30:23 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/digest/sha2/sha2.c (ULL): support AIX C. a patch from
+ Kailden <kailden at gmail.com>. [ruby-core:06984]
+
+Wed Dec 21 16:53:06 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * file.c (w32_io_info): should return handle because FileIndex is
+ valid only while file is open. [ruby-dev:28088]
+
+Wed Dec 21 14:53:26 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (test_kernel_open): use File.identical?.
+ [ruby-talk:171804]
+
+Tue Dec 20 22:41:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (eval_under_i): evaluate source in caller's frame.
+ [ruby-dev:28076]
+
+ * eval.c (rb_call_super): use original method name on exception.
+ [ruby-dev:28078]
+
+Tue Dec 20 13:11:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/syck/rubyext.c: fixed GC problem (backported HEAD 1.55 - 1.62)
+ [ruby-dev:27839]
+
+ * ext/syck/syck.h (S_FREE): small hack. no need to check if pointer is
+ NULL or not before S_FREE.
+
+ * st.c: uses malloc instead of xmalloc to avoid GC. syck uses st_insert
+ in gram.c to insert node from rb_syck_bad_anchor_handler into
+ SyckParser's hash table. if GC occurs in st_insert, it's not under
+ SyckParser's mark system yet. so RString can be released wrongly.
+ [ruby-dev:28057]
+
+Tue Dec 20 12:53:23 2005 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_emitter_reset): to ensure compatibility
+ with previous Ruby versions, documents are no longer headless.
+
+Tue Dec 20 01:46:48 2005 Tanaka Akira <akr@m17n.org>
+
+ * io.c (rb_f_backquote): fix a GC problem on
+ IA64 with gcc 4.0.3 20051216 (prerelease) -O3.
+
+Mon Dec 19 23:32:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_symname_p): fixed wrong validation. [ruby-dev:28047]
+
+Sat Dec 17 03:57:01 2005 Tanaka Akira <akr@m17n.org>
+
+ * bignum.c (rb_big_rshift): fix a GC problem on
+ IA64 with gcc 4.0.3 20051216 (prerelease).
+
+Sat Dec 17 03:30:23 2005 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (bmcall): fix a GC problem by tail call on
+ IA64 with gcc 4.0.3 20051216 (prerelease).
+
+Fri Dec 16 00:54:06 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * signal.c (Init_signal): revert C++ style comment.
+ [ruby-dev:28041]
+
+Thu Dec 15 12:35:14 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tmpdir.rb: merged RDoc patch from Eric Hodel <drbrain at
+ segment7.net>. [ruby-core:06894]
+
+Thu Dec 15 01:33:31 2005 Tanaka Akira <akr@m17n.org>
+
+ * ext/zlib/zlib.c (zstream_run): fix a GC problem by tail call on
+ x86_64 with gcc 4.0.3 20051111 (prerelease) (Debian 4.0.2-4)
+
+Wed Dec 14 12:11:46 2005 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * test/gdbm/test_gdbm.rb: specify pid for the argument of
+ Process.wait. workaround for Cygwin.
+
+Wed Dec 14 12:01:26 2005 Tanaka Akira <akr@m17n.org>
+
+ * marshal.c (r_object0): fix a GC problem for reading a bignum on
+ IA64 with gcc 3.3.5 (Debian 1:3.3.5-13).
+
+Tue Dec 13 12:23:47 2005 Tanaka Akira <akr@m17n.org>
+
+ * re.c (rb_reg_regcomp): fix a GC problem on x86_64 with
+ gcc 3.3.5 (Debian 1:3.3.5-13).
+
+Tue Dec 13 01:44:16 2005 Tanaka Akira <akr@m17n.org>
+
+ * array.c (rb_ary_diff): fix a GC problem on IA64 with
+ gcc 3.3.5 (Debian 1:3.3.5-13).
+ When rb_ary_push is called, there was no register which contains
+ `hash' but `&RHASH(hash)->tbl' instead.
+
+Tue Dec 13 00:08:09 2005 Tanaka Akira <akr@m17n.org>
+
+ * sprintf.c (rb_str_format): fix a GC problem.
+ [ruby-dev:28001]
+
+Mon Dec 12 15:54:56 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * test/openssl/test_ssl.rb (test_parallel): call GC.start to close
+ unused files. [ruby-dev:27981]
+
+Mon Dec 12 00:33:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/digest/digest.c (rb_digest_base_s_digest): add volatile to
+ protect temporary context object. [ruby-dev:27979]
+
+ * ext/iconv/iconv.c (Init_iconv): rb_gc_register_address() should
+ be called before actual variable initialization.
+ [ruby-dev:27986]
+
+Fri Dec 9 23:31:02 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rexml/encoding.rb (encoding=): give priority to particular
+ conversion to iconv. [ruby-core:06520]
+
+Thu Dec 8 02:07:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (umethod_bind): adjust invoking class for module method.
+ [ruby-dev:27964]
+
+Thu Dec 8 00:40:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (call_trace_func): klass parameter should be a
+ class/module that defines calling method. [ruby-talk:169307]
+
+Wed Dec 7 17:10:27 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * sprintf.c (rb_f_sprintf): [ruby-dev:27967]
+
+Wed Dec 7 15:31:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): integer overflow check added.
+
+ * sprintf.c (GETASTER): ditto.
+
+Wed Dec 7 01:02:04 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/README.macosx-aqua: [new document] tips to avoid the known
+ bug on platform specific dialogs of Tcl/Tk Aqua on MacOS X.
+
+ * ext/tk/tcltklib.c: fix bug on switching threads and waiting on the
+ deleted interpreter on vwait and tkwait command.
+
+ * ext/tk/lib/multi-tk.rb: kill the meaningless loop for the deleted Tk
+ interpreter.
+
+ * ext/tk/sample/demos-jp/image3.rb: [bug fix] wrong argument.
+
+ * ext/tk/sample/demos-en/image3.rb: ditto.
+
+ * ext/tk/sample/demos-jp/menu.rb: fix message for MacOS X.
+
+ * ext/tk/sample/demos-jp/menu8x.rb: ditto.
+
+ * ext/tk/sample/demos-en/menu.rb: ditto.
+
+Tue Dec 6 16:37:57 2005 Yuya Nishida <yuya@j96.org>
+
+ * eval.c (exec_under): avoid accessing ruby_frame->prev.
+ [ruby-dev:27948]
+
+Thu Dec 1 00:50:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_funcall2): allow to call protected methods.
+ fixed: [ruby-dev:27890]
+
+Wed Nov 30 23:52:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (NEWHEAP, ADD2HEAP): set count after pointer was set.
+ fixed: [ruby-dev:27896]
+
+Wed Nov 30 13:43:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-expr-beg): support $! at the end of
+ expression. [ruby-dev:27868]
+
+Mon Nov 28 18:55:43 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (init_inetsock_internal): remove setting
+ SO_REUSEADDR option on server socket on Cygwin.
+ fixed: [ruby-core:6765] ([ ruby-Bugs-2872 ])
+
+Mon Nov 28 13:08:54 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_strerror): remove all CR and LF. (avoid broken
+ error message on bccwin32 + winsock)
+
+Mon Nov 28 09:21:49 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/mkmf.rb (create_makefile): should not change sodir with
+ dir.gsub!. (bccwin32 failed to install third party exntesions)
+ [ruby-dev:27834]
+
+Sun Nov 27 00:56:13 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/wsdl/xmlSchema/complexContent.rb: missing
+ ComplexContent#elementformdefault method.
+
+Sat Nov 26 19:57:45 2005 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dln.c (conv_to_posix_path): should initialize posix.
+
+Thu Nov 24 21:05:58 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * configure.in (AC_CHECK_FUNCS): need to check link().
+ fixed: [ruby-dev:27814]
+
+Thu Nov 24 01:22:25 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * file.c (w32_io_info): CreateFile failed on Win9x if file was already
+ opened. (FILE_SHARE_READ was needed, but actually I don't understand
+ the flags of CreateFile well...)
+
+Wed Nov 23 20:59:01 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: add Tk.pkgconfig_list and Tk.pkgconfig_get
+ [Tk8.5 feature].
+
+ * ext/tk/lib/tk/text.rb: supports new indices modifires on a Text
+ widget [Tk8.5 feature].
+
+ * ext/tk/lib/tk/virtevent.rb: add TkNamedVirtualEvent.
+
+ * ext/tk/lib/tk/autoload.rb: ditto.
+
+ * ext/tk/lib/tk/event.rb: add :data key for virtual events [Tk8.5
+ feature].
+
+Wed Nov 23 18:55:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * file.c (w32_io_info): should not call GetFileInformationByHandle
+ for pipe.
+
+ * file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.
+
+ * file.c (w32_io_info): now can identify directory on WinNT.
+
+Wed Nov 23 03:40:49 2005 Guy Decoux <ts@moulon.inra.fr>
+
+ * re.c (KR_REHASH): should cast to unsigned for 64bit CPU.
+ [ruby-core:06721]
+
+Wed Nov 23 11:01:33 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * intern.h, file.c: failed to compile on windows.
+
+Wed Nov 23 07:26:44 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: check for X509V3_EXT_nconf_nid.
+
+ * ext/openssl/ossl_x509ext.c (MakeX509ExtFactory): should use
+ OPENSSL_malloc to allocate X509V3_CTX.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext): use
+ X509V3_EXT_nconf_nid to avoid SEGV (and to build extensions which
+ values are placed in separate section).
+
+ * test/openssl/test_x509ext.rb: new file.
+
+Wed Nov 23 01:22:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (test_identical): test if two files are identical.
+
+ * file.c (rb_f_test): support DOSISH systems where st_ino is not
+ reliable. fixed: [ruby-core:06672]
+
+ * win32.h, win32.c (rb_w32_osid): check the running platform.
+
+Tue Nov 22 23:52:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb: match incomplete (in current enconding) multibyte
+ string. http://inamode6.tokuhirom.dnsalias.org/show/1551
+
+Tue Nov 22 18:36:11 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (winnt_stat): set mapped errno instead of ENOENT.
+
+Tue Nov 22 14:46:57 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_file_s_basename): skip slashes just after UNC top slashes.
+
+ * test/ruby/test_path.rb (test_dirname, test_basename): follow new
+ spec. and add new tests.
+
+Tue Nov 22 13:18:32 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_stat): Dir.chdir('//server/shared');
+ p Dir.glob('*') should work on WinNT. (implemented our own
+ stat(2) on WinNT) [ruby-list:41552] [ruby-dev:27711]
+
+Tue Nov 22 02:31:53 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkextlib/tile.rb: bug fix (Tk::Tile::USE_TTK_NAMESPACE
+ is not defined).
+
+Tue Nov 22 01:45:21 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_basename): DOSISH_UNC is defined on cygwin but
+ DOSISH is not. fixed: [ruby-dev:27797]
+
+Mon Nov 21 22:50:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_path_skip_prefix, rb_file_s_basename): UNC without path
+ should not be splitted. fixed: [ruby-dev:27776] [ruby-dev:27786]
+
+ * parse.y (dsym): prohibit empty symbol literal by interpolation.
+ fixed: [ruby-talk:166529]
+
+Mon Nov 21 16:03:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/setup.mk: findstr doesn't exist on win9x.
+ fixed: [ruby-dev:27756]
+
+Sun Nov 20 22:34:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_symname_p): [ not followed by ] is not valid symbol.
+ fixed: [ruby-talk:166520]
+
+Sat Nov 19 19:57:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::ln): ln documentation fix.
+ [ruby-core:06661]
+
+Sat Nov 19 07:34:32 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/font.rb: remove dependency on Ruby's version (1.8
+ or 1.9).
+
+ * ext/tk/lib/tkextlib/ICONS/icons.rb: ditto.
+
+ * ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.
+
+Fri Nov 18 17:57:08 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_file_s_dirname): should use skipprefix for UNC path.
+ pointed out by nobu ([ruby-dev:27744]). fixed: [ruby-core:5076]
+
+Fri Nov 18 17:35:09 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: add restriction to access the entried
+ command table and manipulate other IPs (for reason of security).
+ Now, a IP object can be controlled by only its master IP or the
+ default IP.
+
+ * ext/tk/lib/remote-tk.rb: add restriction to manipulate.
+
+ * ext/tk/tcltklib.c (ip_is_slave_of_p): add TclTkIp#slave_of?(ip)
+ to check manipulability.
+
+ * ext/tk/lib/tk.rb: bug fix on handling of Tcl's namespaces.
+
+ * ext/tk/lib/tk/namespace.rb: ditto.
+
+Fri Nov 18 17:26:06 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_file_s_dirname): added checks for some patterns with drive
+ letter. fixed: [ruby-dev:27738]
+
+ * test/ruby/test_path.rb (test_dirname): added tests for above
+ patterns.
+
+Fri Nov 18 12:18:02 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.h (S_IFIFO): r,w = IO.pipe; r.stat.pipe? now
+ returns true on VisualC++6.
+
+Wed Nov 16 23:24:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (static-ruby): overridable.
+
+ * ext/extmk.rb (parse_args): force to link extensions statically only
+ if static is given for extstatic.
+
+ * ext/extmk.rb (RUBY, RUBYW): overridable.
+
+Tue Nov 15 23:46:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/find.rb (Find::find): should not ignore symbolic links to
+ non-existing files. [ruby-talk:165866]
+
+Tue Nov 15 16:23:26 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * array.c (rb_ary_fill): previous commit disabled this usage:
+
+ a = [0,1,2,3,4,5,6,7,8,9]
+ a.fill {|i| a[i] * 10} #=> [nil, nil, ...., nil]
+
+ previous commit has the advantage of early garbage collection, but
+ potensially this would break some script. so I reverted behavior.
+
+Tue Nov 15 16:04:10 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * array.c (rb_ary_fill): tail elements were vanished when the middle
+ part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) => [0,1,-1])
+
+ * test/ruby/test_array.rb (test_fill): added.
+
+Tue Nov 15 14:39:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fill): should adjust array length correctly when
+ an array is expanded in the fill process. [ruby-core:06625]
+
+Mon Nov 14 23:49:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_readlink): ERANGE will occur only on GPFS.
+ [ruby-dev:27699]
+
+Mon Nov 14 17:36:22 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_first): RDoc update from Daniel Berger
+ <djberg96@yahoo.com>. [ruby-core:06577].
+
+Fri Nov 11 10:31:44 2005 Zach Dennis <zdennis@mktec.com>
+
+ * ext/socket/socket.c: Socket Documentation. [ruby-core:6552]
+
+Fri Nov 11 08:20:56 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (OUTFLAG): keep trailing spaces. [ruby-dev:27666]
+
+ * mkconfig.rb: substitution refereces added.
+
+Fri Nov 11 07:44:18 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * configure.in: undef HAVE_LINK on BeOS. (link(2) always returns
+ EINVAL, and this causes error in test/fileutils.)
+
+ * file.c: overwride chown(2) and fchown(2) on BeOS. (these functions
+ should not change user/group id if -1 is passed as corresponding
+ argument, and this causes error in test/fileutils too)
+ [ruby-dev:27672]
+
+ * file.c (rb_file_s_link): checks HAVE_LINK.
+
+Tue Nov 8 15:32:27 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/drb/ssl.rb (DRb::SSLConfig#accept): fixed typo.
+ [ruby-dev:27560] [ruby-core:4627]
+
+Mon Nov 7 13:43:51 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/stubs.c (_nativethread_consistency_check): use simpler
+ (low cost) way to check whether the Tcl interpreter was compiled
+ with threads enabled of not.
+
+ * ext/tk/tcltklib.c: reduce warnings.
+
+ * ext/tk/tkutil/tkutil.c: ditto.
+
+Mon Nov 7 00:06:58 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/yaml.rb: removed :nodoc: to generate Kernel doc. [ruby-core:6324]
+
+Sun Nov 6 23:39:13 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (Iconv::BrokenLibrary): exception when detected a
+ bug of underlying library.
+
+Sun Nov 6 21:46:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tk/stubs.c (ruby_tcl_create_ip_and_stubs_init): should touch
+ interpreter after initialization is done. [ruby-dev:27638]
+
+Sun Nov 6 20:13:27 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_readlink): readlink(2) on AIX fails with ERANGE if
+ buffer size is less than required. fixed: [ruby-dev:27634]
+
+Wed Nov 2 20:25:28 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: ext/tk/extconf.rb: change the check parameter
+ for Win32.
+
+Wed Nov 2 20:14:53 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib: merge into ext/tk and remove.
+
+Wed Nov 2 19:03:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_rbUpdateObjCmd,
+ ip_rb_threadUpdateObjCmd): passed improper flags to DoOneEvent().
+
+ * ext/tk/tkutil.c: use rb_obj_respond_to() instead of rb_respond_to().
+
+Tue Nov 1 14:20:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): should call method_missing if super is
+ called from Kernel method.
+
+ * eval.c (exec_under): frame during eval should preserve external
+ information.
+
+Tue Nov 1 10:50:17 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: should check ERR_peek_last_error().
+ [ruby-dev:27597]
+
+ * ext/openssl/ossl.c (ossl_raise): ditto.
+
+Mon Oct 31 17:34:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: use proper option for Sun linker. A patch from
+ Shinya Kuwamura <kuwa at labs.fujitsu.com>. [ruby-dev:27603]
+
+Mon Oct 31 11:27:22 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/gdbm/test_gdbm.rb, test/sdbm/test_sdbm.rb (test_s_open_error):
+ skip on Win32/DOS platforms.
+
+Mon Oct 31 05:49:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must
+ not be empty. [ruby-talk:161220]
+
+ * test/openssl/test_cipher.rb: add test for Cipher#update("").
+
+Mon Oct 31 05:37:20 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- And define Mutex class under Thread (so now Mutex is Thread::Mutex).
- Because other thread related classes are also defined under Thread.
- We remain ::Mutex as Thread::Mutex. Only an inspect result is changed.
+ * lib/webrick/httpservlet/cgihandler.rb
+ (WEBrick::HTTPServlet::CGIHandler#do_GET): the value of Set-Cookie:
+ header field should be splited into each cookie. [ruby-Bugs:2199]
- * common.mk: add dependency from thread.o to thread_tools.c.
+ * lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookie): new method
+ to parse the value of Set-Cookie: header field.
-Sat Aug 22 05:31:37 2015 Koichi Sasada <ko1@atdot.net>
+ * test/webrick/test_cookie.rb, test/webrick/test_cgi.rb,
+ test/webrick/webrick.cgi: add some test for cookie.
- * vm_opts.h, iseq.c, iseq.h: add compile option to force frozen
- string literals.
- [Feature #11473]
+Mon Oct 31 03:19:36 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- This addition is not specification change, but to try frozen
- string literal world discussed on [Feature #11473].
+ * ext/readline/readline.c (readline_readline): type check.
+ [ruby-core:6089]
- You can try frozen string literal world using this magical line:
+ * numeric.c (fix_rshift): RDoc fix. [ruby-core:6351]
- RubyVM::InstructionSequence.compile_option =
- {frozen_string_literal: true}
+ * util.h (strtod): add #undef for platforms defines strtod()
+ macro. [ruby-dev:27563]
- Note that this is a global compilation option, so that you need to
- compile another script like that:
+Mon Oct 31 02:35:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- p 'foo'.frozen? #=> false
- RubyVM::InstructionSequence.compile_option =
- {frozen_string_literal: true}
- p 'foo'.frozen? #=> false, because this line is already compiled.
- p eval("'foo'.frozen?") #=> true
+ * test/ruby/test_float.rb (test_precision): test by assert_in_delta.
+ [ruby-dev:27575]
- Details:
- * String literals are deduped by rb_fstring().
- * Dynamic string literals ("...#{xyz}...") is now only frozen,
- not deduped. Maybe you have other ideas.
+Sat Oct 29 01:58:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- Now, please do not use this option on your productions :)
- Of course, current specification can be changed.
+ * ext/etc/etc.c: document update from mathew <meta@pobox.com>.
+ [ruby-core:06473]
- * compile.c: ditto.
+ * ext/fcntl/fcntl.c: ditto.
- * test/ruby/test_iseq.rb: add a test.
+Thu Oct 27 16:45:31 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Aug 22 02:53:12 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * string.c (scan_once): wrong condition to use mbclen2().
+ [ruby-dev:27535]
- * ext/psych/*: update to Psych 2.0.14
+Wed Oct 26 09:27:27 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * test/psych/*: ditto
+ * ext/syck/implicit.c (syck_type_id_to_uri): should return
+ newly allocated memory. otherwise, type_id will be freed
+ twice. [ruby-dev:27384] [ruby-core:6385]
-Fri Aug 21 19:58:48 2015 Koichi Sasada <ko1@atdot.net>
+Wed Oct 26 09:04:51 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * ext/objspace/objspace.c: add a new method ObjectSpace.count_symbols.
- [Feature #11158]
+ * ruby.h (Qfalse, Qtrue, Qnil, Qundef): make sure these immediate
+ values have VALUE type. there is an environment where sizeof(VALUE)
+ != sizeof(int) like IA64. if 32bit integer (Qtrue) is passed to ANYARGS
+ and received by 64bit integer (VALUE), upper bits may have garbage value.
+ [ruby-dev:27513]
- * symbol.c (rb_sym_immortal_count): added to count immortal symbols.
+Wed Oct 26 01:58:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * symbol.h: ditto.
+ * configure.in (RUBY_EXTERN): macro to export symbols in shared
+ library. [ruby-core:05528]
- * test/objspace/test_objspace.rb: add a test for this method.
+ * defines.h, {bcc32,win32,wince}/Makefile.sub (RUBY_EXTERN): moved to
+ configuration pass.
- * NEWS: describe about this method.
+ * ext/extmk.rb (extmake): RUBY_EXTERN for static linked extensions.
-Fri Aug 21 19:48:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 25 15:32:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/Makefile.sub ($(LIBRUBY_SO)): needs additional libraries
- for extension libraries to link statically.
- [ruby-core:70499] [Feature #9018]
+ * lib/rational.rb: applied documentation patch from Gavin Sinclair
+ <gsinclair@gmail.com>. [ruby-core:06364]
-Fri Aug 21 18:49:22 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/irb.rb (IRB::Irb::eval_input): handle prompts with newlines
+ in irb auto-indentation mode. [ruby-core:06358]
- * include/ruby/ruby.h, cont.c, vm_trace.c: add a new event
- fiber_switch. We need more discussion about this feature
- so that I don't write it on NEWS.
- [Feature #11348]
+Tue Oct 25 02:12:08 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_settracefunc.rb: add tests.
+ * lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::LABEL_LIST_RE):
+ reduce redundant backtrack. [ruby-talk:161771]
-Fri Aug 21 17:32:42 2015 Koichi Sasada <ko1@atdot.net>
+Tue Oct 25 00:27:35 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm_insnhelper.c (vm_invoke_block): we should not expect ci->argc is
- stable after invoking a block. [Bug #11451]
+ * lib/rinda/*: RDoc documentation from Eric Hodel
+ <drbrain@segment7.net> added.
- * test/ruby/test_yield.rb: add a test. This test script is given by
- Alex Dowad.
+Mon Oct 24 21:14:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 21 06:35:50 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * configure.in, io.c: use sys/syscall.h if syscall.h is not available.
+ [ruby-core:06247]
- * test/openssl/test_ssl_session.rb: Fix tests so that they take in to
- account OpenSSL installations that have SSLv3 disabled by default.
- Thanks Jeremy Evans <code@jeremyevans.net> for the patches.
- [Bug #11366] [Bug #11367]
+Mon Oct 24 20:49:45 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 20 22:19:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/Win32API/lib/win32/resolv.rb (get_info): support multiple DNS.
+ fixed: [ruby-list:40058], [ruby-dev:27479]
- * vm_method.c (basic_obj_respond_to): call respond_to_missing?
- only when redefined. [ruby-core:70460] [Bug #11465]
+Mon Oct 24 07:57:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Aug 20 14:13:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/canvas.rb (TkCanvasItemConfig::__item_val2ruby_optkeys):
+ typo fixed. [ruby-talk:162187]
- * vm_eval.c (check_funcall_respond_to): share the behavior with
- rb_obj_respond_to. [ruby-core:70460] [Bug #11465]
+ * ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):
+ ditto. [ruby-core:06359]
- * vm_method.c (vm_respond_to): extract from rb_obj_respond_to and
- merge r39881.
+Sun Oct 23 21:50:15 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Aug 20 08:53:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/enumerator/enumerator.c: applied documentation patch from
+ James Edward Gray II <james@grayproductions.net>.
+ [ruby-core:06348]
- * vm_method.c (rb_obj_respond_to): reuse found method entry
- instead of searching same entry repeatedly.
+Sun Oct 23 07:11:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Aug 20 08:31:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tcltklib/extconf.rb: improve messages [ruby-core:06325].
- * dir.c (replace_real_basename), win32/win32.c (opendir_internal):
- check reparse point tags and treat supported tags only as
- symbolic links. [ruby-core:70454] [Bug #11462]
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/entry.rb,
+ ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/image.rb,
+ ext/tk/lib/tk/itemconfig.rb, ext/tk/lib/tk/labelframe.rb,
+ ext/tk/lib/tk/listbox.rb, ext/tk/lib/tk/menu.rb,
+ ext/tk/lib/tk/radiobutton.rb, ext/tk/lib/tk/scale.rb,
+ ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tk/text.rb,
+ ext/tk/lib/tk/toplevel.rb: improve conversion of option values.
-Wed Aug 19 23:59:28 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * ext/tk/lib/tkextlib/*: ditto.
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): add OP_ALL to
- existing options rather than just setting it. Some vendors apply
- custom patches to their versions of OpenSSL that set default values
- for options. This commit respects the custom patches they've
- applied.
+ * ext/tk/lib/tkextlib/*: update to support ActiveTcl8.4.11.2.
- * test/openssl/test_ssl.rb (class OpenSSL): check that OP_ALL has been
- added to the options.
+ * ext/tk/lib/tkextlib/trofs/*: support Trofs 0.4.3.
-Wed Aug 19 23:55:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tkextlib/tile/*: support Tile 0.7.2.
- * process.c (rb_f_spawn): [DOC] elaborate environment variable
- values. [ruby-core:70456] [Bug #11463]
+ * ext/tk/lib/tkextlib/vu/*: support vu 2.3.0.
-Wed Aug 19 23:48:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tkextlib/tcllib/*: support Tcllib 1.8 (Tklib 0.3).
- * win32/win32.c (winnt_lstat): check reparse point tags and treat
- supported tags only as symbolic links.
- [ruby-core:70454] [Bug #11462]
+Sat Oct 22 23:54:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 18 20:05:49 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/extmk.rb, lib/mkmf.rb (with_config): support --with-extension
+ options. [ruby-dev:27449]
- * thread_pthread.c (reserve_stack): ensure the memory is really
- allocated. [Bug #11457]
+Sat Oct 22 13:26:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 18 17:19:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * object.c (sym_inspect), parse.y (parser_yylex, rb_symname_p): check
+ if valid as a symbol name more strictly. [ruby-dev:27478]
- * parse.y (IS_BEG): include labeled argument state, which was
- EXPR_LABELARG. [ruby-dev:49221] [Bug #11456]
+ * test/ruby/test_symbol.rb: tests for [ruby-core:03573].
-Tue Aug 18 16:16:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * time.c (rb_strftime): removed meaningless volatile modifiers, and
+ concatenate successive nul characters at once. [ruby-dev:27472]
- * include/ruby/ruby.h (RClass): define only in C, `__attribute__`
- between `struct` and the name can't compile with g++.
- [ruby-core:70297] [Bug #11426]
+Fri Oct 21 19:21:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Mon Aug 17 20:56:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * rubysig.h (CHECK_INTS): fixed typo. (I believe bit-or is improper)
- * parse.y: fix syntax error at do-block after a conditional
- operator. separate label-allowed and after-a-label states from
- others as bit flags. [ruby-dev:48790] [Bug #10653]
+Fri Oct 21 17:49:32 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Aug 17 11:57:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bin/erb (ERB::Main::run): typo fixed. [ruby-core:06337]
- * io.c (rb_io_each_codepoint): raise an exception at incomplete
- character before EOF when conversion takes place. [Bug #11444]
+Fri Oct 21 15:27:17 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sun Aug 16 17:33:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * bignum.c (bignew_1): convertion from `int' to `char' discards
+ upper bits, (ie. (char)0xff00 -> 0) so it's better to test if
+ nonzero and set 0 or 1 instead of simply casting ... as a flag usage.
+ (but I believe this won't cause actual bug in current implementation)
+ [ruby-dev:27055]
- * gems/bundled_gems: update latest version of bundled gems.
- It includes minitest-5.8.0 and test-unit 3.1.3.
+ * time.c: should use LONG_LONG instead of `long long'.
-Sun Aug 16 17:24:10 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+Thu Oct 20 09:37:15 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * gc.c (gc_mark_children): check if RCLASS_EXT is valid
- before marking. This fixes the following test failure
- introduced in r51126:
+ * lib/mkmf.rb (create_makefile): Borland make seems not to allow
+ empty dependency list. If this change is not good, please correct
+ it.
- make test-all TESTOPTS='--gc-stress ruby/test_refinement.rb'
+Thu Oct 20 07:55:09 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 15 10:51:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (create_makefile): get rid of a restriction
+ of Borland make. fixed: [ruby-dev:27460]
- * ext/win32/lib/win32/registry.rb (API#SetValue): data size should
- be in bytes, not in chars. [ruby-core:70365] [Bug #11439]
+Thu Oct 20 00:13:18 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Aug 15 10:15:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * rubysig.h (CHECK_INTS): fix typo.
- * io.c (rb_io_each_codepoint): read more data when read partially.
- [ruby-core:70379] [Bug #11444]
+Wed Oct 19 23:58:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 15 04:33:39 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb (create_makefile): do not create unnecessary empty
+ directories. fixed: [ruby-dev:27451]
- * hash.c (any_hash): skip rb_objid_hash for static syms
- (rb_num_hash_start): extract from rb_ident_hash
- (rb_objid_hash): call rb_num_hash_start
- (rb_ident_hash): ditto
- [ruby-core:70181] [Feature #11405]
+Wed Oct 19 19:26:15 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 15 04:16:13 2015 Eric Wong <e@80x24.org>
+ * parse.y (rb_gc_mark_parser): get rid of segfault with old yacc.
+ fixed: [ruby-dev:27439]
- * iseq.c (rb_iseq_mark): reduce NULL checks
+Wed Oct 19 08:28:32 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 14 18:50:57 2015 Eric Wong <e@80x24.org>
+ * file.c (rb_file_join): elements may contain null pointer strings.
+ report and fixed by Lloyd Zusman (hippoman): [ruby-core:06326]
- * method.h (METHOD_ENTRY_VISI_SET): cast visi to int
- (METHOD_ENTRY_FLAGS_SET): ditto
+Wed Oct 19 02:34:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 14 18:43:11 2015 Eric Wong <e@80x24.org>
+ * eval.c, gc.c, time.c: made internal symbols static. [ruby-dev:27435]
- * process.c (close_unless_reserved): add extra check
- (dup2_with_divert): remove
- (redirect_dup2): use dup2 without divert
- (before_exec_non_async_signal_safe): adjust call + comment
- (rb_f_exec): stop timer thread for all OSes
- (rb_exec_without_timer_thread): remove
- * eval.c (ruby_cleanup): adjust call
- * thread.c (rb_thread_stop_timer_thread): always close pipes
- * thread_pthread.c (struct timer_thread_pipe): add writing field,
- mark owner_process volatile for signal handlers
- (rb_thread_wakeup_timer_thread_fd): check valid FD
- (rb_thread_wakeup_timer_thread): set writing flag to prevent close
- (rb_thread_wakeup_timer_thread_low): ditto
- (CLOSE_INVALIDATE): new macro
- (close_invalidate): new function
- (close_communication_pipe): removed
- (setup_communication_pipe_internal): make errors non-fatal
- (setup_communication_pipe): ditto
- (thread_timer): close reading ends inside timer thread
- (rb_thread_create_timer_thread): make errors non-fatal
- (native_stop_timer_thread): close write ends only, always,
- wait for signal handlers to finish
- (rb_divert_reserved_fd): remove
- * thread_win32.c (native_stop_timer_thread): adjust (untested)
- (rb_divert_reserved_fd): remove
- * vm_core.h: adjust prototype
- [ruby-core:70386] [Bug #11336]
+Wed Oct 19 01:27:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 14 18:40:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * regex.c (re_compile_pattern): numeric literal inside character class
+ disabled succeeding backtrack. fixed: [ruby-list:41328]
- * ext/win32/lib/win32/registry.rb (API#SetValue): add terminator
- size, not 1 byte. [ruby-core:70365] [Bug #11439]
+Mon Oct 17 21:18:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Aug 13 22:49:42 2015 Juanito Fatas <katehuang0320@gmail.com>
+ * parse.y (parser_heap): byacc never free parser stack.
+ fixed: [ruby-dev:27428]
- * lib/timeout.rb (Timeout#timeout): freeze a string message to
- reduce string allocations. [Fix GH-996]
+Mon Oct 17 16:04:47 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 13 17:42:34 2015 Koichi Sasada <ko1@atdot.net>
+ * file.c (chmod_internal, lchmod_internal): fixed type of 2nd argument.
- * vm_core.h (rb_call_info_kw_arg_bytes): move the definition
- to iseq.h because this function is shared with iseq.c and compile.c.
+Sun Oct 16 22:16:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Aug 13 14:36:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/extmk.rb: omit non-existing directories.
- * object.c (rb_num_to_dbl): move from num2dbl_with_to_f in math.c.
+Sun Oct 16 14:30:05 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Thu Aug 13 09:01:25 2015 Eric Wong <e@80x24.org>
+ * lib/rinda/rinda.rb (Rinda::Tuple#initialize): check remote hash
+ tuple. fixed: [ruby-list:41227]
- * load.c (features_index_add): avoid repeat calculation
+ * test/rinda/test_rinda.rb: test it.
-Wed Aug 12 21:57:31 2015 Koichi Sasada <ko1@atdot.net>
+Sun Oct 16 03:38:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * id_table.c: IMPL() macro accept op as _opname instead of opname
- because jemalloc seems to replace the word `free' to `je_free'.
+ * rubysig.h (CHECK_INTS): prevent signal handler to run during
+ critical section. [ruby-core:04039]
-Wed Aug 12 21:51:11 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (load_wait): need not to call rb_thread_schedule()
+ explicitly. [ruby-core:04039]
- * id_table.c (mix_id_table_insert): fix memory leak.
+ * eval.c (rb_thread_schedule): clear rb_thread_critical.
+ [ruby-core:04039]
-Wed Aug 12 21:17:38 2015 Eric Wong <e@80x24.org>
+Sat Oct 15 19:56:38 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * iseq.c (iseq_memsize): reimplement for wrapper
- (param_keyword_size): extracted from iseq_memsize
- (iseqw_mark): new mark function
- (iseqw_data_type): new data type
- (iseqw_new): wrap as iseqw_data_type
- (iseqw_check): adjust for wrapper
- (Init_ISeq): remove iseqw_iseq_key initialization
- * test/objspace/test_objspace.rb: new test
- [ruby-core:70344] [Feature #11435]
+ * bin/erb: typo fixed, again. thanks, Doug Kearns.
-Wed Aug 12 21:15:27 2015 Eric Wong <e@80x24.org>
+Fri Oct 14 22:08:26 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_core.h (rb_call_info_kw_arg_bytes): extract from compile.c
- * compile.c (iseq_build_callinfo_from_hash): use above function
+ * win32/win32.c (ioctl): should set errno.
-Wed Aug 12 18:00:17 2015 Koichi Sasada <ko1@atdot.net>
+Fri Oct 14 16:57:32 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * class.c (move_refined_method): same as the last commit.
+ * lib/webrick/config.rb (Config::FileHandler): :UserDir should be nil.
+ It is harmful to permit the access to ~/public_html by default.
+ suggested by Hiroyuki Iwatsuki.
-Wed Aug 12 17:57:53 2015 Koichi Sasada <ko1@atdot.net>
+Thu Oct 13 23:29:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c, gc.c vm.c: use ID_TABLE_* instead of ST_*
- (such as ST_CONTINUE) for enum rb_id_table_iterator_result.
+ * parse.y (HEAPCNT): bison allocates indivisible size.
+ fixed: [ruby-core:06261]
-Wed Aug 12 17:05:36 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c, pack.c, ext/syck/rubyext.c, ext/syck/syck.h, missing/isinf.c:
+ get rid of warnings. fixed: [ruby-core:06247]
- * id_table.h: introduce ID key table.
- [Feature #11420]
+Wed Oct 12 12:52:57 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- This table only manage ID->VALUE table to reduce overhead of st.
+ * ext/openssl/ossl.c (Init_openssl): should call
+ OpenSSL_add_ssl_algorithms().
- Some functions prefixed rb_id_table_* are provided.
+Wed Oct 12 11:08:54 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * id_table.c: implement rb_id_table_*.
+ * file.c (rb_f_test): typo in RDoc comments.
- There are several algorithms to implement it.
+Tue Oct 11 21:41:58 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Now, there are roughly 4 types:
+ * eval.c (rb_obj_respond_to): check if obj responds to the given
+ method with the given visibility. [ruby-dev:27408]
- * st
- * array
- * hash (implemented by Yura Sokolov)
- * mix of array and hash
+ * eval.c (rb_respond_to): conform to Object#respond_to?. [ruby-dev:27411]
- The macro ID_TABLE_IMPL can choose implementation.
- You can see detailes about them at the head of id_table.c.
+Tue Oct 11 00:01:21 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- At the default, I choose 34 (mix of list and hash).
- This is not final decision.
- Please report your suitable parameters or
- your data structure.
+ * st.c (st_free_table): do not call free() but xfree().
+ [ruby-core:06205]
- * symbol.c: introduce rb_id_serial_t and rb_id_to_serial()
- to represent ID by serial number.
+Sat Oct 8 20:04:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * internal.h: use id_table for method tables.
+ * eval.c (Init_Binding): add Binding#dup method. [yarv-dev:666]
- * class.c, gc.c, marshal.c, vm.c, vm_method.c: ditto.
+ * parse.y (rb_parser_malloc, rb_parser_free): manage parser stack on
+ heap. [ruby-list:41199]
-Wed Aug 12 05:19:11 2015 Eric Wong <e@80x24.org>
+ * ext/iconv/charset_alias.rb: parse config.charset_alias file directly.
- * parse.y (rb_parser_compile_cstr): remove volatile arg
- (rb_parser_compile_string): ditto
- (rb_parser_compile_file): ditto
- (rb_parser_compile_string_path): ditto
- (rb_parser_compile_file_path): ditto
- [ruby-core:70323] [Misc #11431]
+Fri Oct 7 09:54:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Aug 11 22:59:57 2015 Tanaka Akira <akr@fsij.org>
+ * lib/cgi.rb (CGI::Cookie::parse): Cookies from Nokia devices may
+ not be parsed correctly. A patch from August Z. Flatby
+ (augustzf) in [ruby-Patches-2595]. [ruby-core:06183]
- * numeric.c (Init_Numeric): Fix document for Float::MIN and
- Float::EPSILON.
+Thu Oct 6 20:12:16 2005 Minero Aoki <aamine@loveruby.net>
-Tue Aug 11 15:22:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/strscan/strscan.c (strscan_free): remove useless code.
+ [ruby-dev:26368] [ruby-dev:27389]
+ (backported from trunk, rev 1.22)
- * include/ruby/ruby.h (ALLOCV_N): check integer overflow, as well
- as ruby_xmalloc2. pointed out by Paul <pawlkt AT gmail.com>.
+Wed Oct 5 04:42:38 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Tue Aug 11 14:57:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/xmlrpc/server.rb (XMLRPC::Server#initialize): should mount the
+ servlet on "/".
- * array.c (rb_ary_repeated_permutation): fix buffer size, ALLOCV_N
- already multiplies element size.
+Wed Oct 5 03:59:09 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Tue Aug 11 12:13:20 2015 Jeremy Evans <merch-redmine@jeremyevans.net>
+ * lib/xmlrpc/server.rb (XMLRPC::Server#serve): delete wrong call
+ of "join".
- * test/openssl/test_ssl.rb: Fix LocalJumpErrors being raised
- in OpenSSL tests. [ruby-core:70020][Bug #11368]
+Mon Oct 3 00:04:00 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Tue Aug 11 11:54:13 2015 Alexey Lipnyagov <liptonshmidt@gmail.com>
+ * pack.c (EXTEND16): [ruby-dev:27383]
- * string.c: Fix documentation for String#slice
- [ruby-core:70298][Bug #11427]
+Thu Sep 29 10:26:18 2005 Tanaka Akira <akr@m17n.org>
-Tue Aug 11 11:53:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dl/dl.c (rb_io_to_ptr): abolish sizeof(FILE).
+ [ruby-dev:27317]
- * parse.y (superclass): make superclass rule optional and allow
- any contents without a terminator. [EXPERIMENTAL]
+Thu Sep 29 07:22:05 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 11 10:58:42 2015 Juanito Fatas <juanitofatas@gmail.com>
+ * evalc. (rb_f_send): underscores need to be escaped.
+ fixed by Doug Kearns. [ruby-core:06053]
- * string.c: [DOC] Make #end_with? example doc symmetry
- with #start_with? [fix GH-992][ci skip]
+Thu Sep 29 00:57:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 11 10:51:19 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * eval.c (ev_const_get), variable.c (rb_const_get_0): retry only when
+ autoload succeeded.
- * test/ruby/test_array.rb: Add test for `Array#flatten` with level 1
- [fix GH-986] Patch @yui-knk
+ * variable.c (rb_autoload_load): now return true if autoload
+ succeeded. fixed: [ruby-dev:27331]
-Tue Aug 11 10:48:16 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Wed Sep 28 23:42:15 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * enum.c: added doc for Enumerable#zip
- [fix GH-985] Patch by @yui-knk
- * test/ruby/test_enum.rb: added tests for Enumerable#zip
- [fix GH-985] Patch @yui-knk
+ * file.c (apply2files): add prototype.
-Tue Aug 11 10:33:26 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * file.c (rb_stat_inspect): constified.
- * vm_method.c: typo fix [fix GH-993][ci skip] Patch by @0x0dea
- * test/ruby/test_refinement.rb: ditto.
+ * class.c (rb_mod_init_copy, rb_class_init_copy), file.c (rb_stat_init_copy),
+ numeric.c (num_init_copy), object.c (rb_obj_init_copy, Init_Object),
+ re.c (match_init_copy, rb_reg_init_copy), time.c (time_init_copy):
+ undocumented.
-Sun Aug 9 14:15:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 28 23:09:23 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm.c (Init_vm_objects, rb_vm_fstring_table): use frozen_strings
- table in rb_vm_t. [ruby-core:70274] [Bug #11423]
+ * lib/delegate.rb: document update from James Edward Gray II
+ <james@grayproductions.net>. [ruby-core:06027]
-Sat Aug 8 03:59:51 2015 Zachary Scott <zzak@ruby-lang.org>
+Wed Sep 28 15:14:19 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * object.c: [DOC] Improve grammar for Module#===
- Patch by @SkyBirdSoar in documenting-ruby/ruby#52:
- https://github.com/documenting-ruby/ruby/pull/52
+ * lib/webrick/cgi.rb (WEBrick::CGI#start): req.query_string should
+ refer the value of QUERY_STRING. [ruby-list:41186]
-Sat Aug 8 03:39:33 2015 Zachary Scott <zzak@ruby-lang.org>
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#query_string=):
+ add new method.
- * hash.c: [DOC] Improve description of symbol key syntax
- Patch by Raphael Das Gupta in documenting-ruby/ruby#51:
- https://github.com/documenting-ruby/ruby/pull/51
+Wed Sep 28 10:45:44 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Fri Aug 7 21:04:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c: cannot compile with Tcl/Tk8.0.x
+ [ruby-dev:27335].
- * parse.y (parser_params): turn in_def and in_single into bit
- flags and reduce the size by 2-words.
+Wed Sep 28 08:12:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parser_params): remove redundant prefixes.
+ * io.c (read_buffered_data): check if reached EOF. fixed: [ruby-dev:27334]
- * parse.y (yylex): non-pure parser has not been supported since
- merger of ripper. change argument types from void pointers.
+Wed Sep 28 07:56:52 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 7 17:07:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/yaml/basenode.rb (YAML::BaseNode::match_segment): fix typo.
+ [ruby-dev:27237], [ruby-core:05854]
- * proc.c (method_super_method): uncallable method entry does not
- have the defined class, use the owner instead.
- [ruby-core:70254] [Bug #11419]
+ * lib/yaml/tag.rb (Module#yaml_as): suppress warnings.
- * test/ruby/test_method.rb (test_super_method_unbound): add test
- by Akira Matsuda.
+ * lib/yaml/types.rb (YAML::PrivateType, YAML::DomainType): ditto.
-Thu Aug 6 10:49:57 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 28 03:23:35 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * node.c (rb_alloc_tmp_buffer): round up the size and check the
- range.
+ * rubysig.h: fixed build problem with --enable-pthread on platforms
+ which don't have setitimer().
- * ruby_atomic.h (ATOMIC_VALUE_EXCHANGE, ATOMIC_VALUE_CAS): add
- atomic operations for VALUE.
+Mon Sep 26 22:32:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Aug 6 08:15:49 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * eval.c (set_trace_func): add rb_secure(4) to prevent adding
+ tracing function.
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): move
- SSLSocket#sysclose to Ruby.
+Sun Sep 25 12:05:10 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * ext/openssl/ossl_ssl.c (ossl_ssl_close): ditto
+ * bin/erb: typo fixed.
-Thu Aug 6 07:57:21 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Sun Sep 25 01:46:43 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): move nonblock
- enable to SSLSocket#initialize and remove Nonblock module.
+ * misc/ruby-mode.el (ruby-calculate-indent): arrange deep-indent
+ closing parenthesis at same column as the opening.
-Thu Aug 6 07:53:47 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Sun Sep 25 00:42:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): move
- OpenSSL::SSL::SSLSocket#initialize to Ruby.
+ * misc/ruby-mode.el (ruby-expr-beg): deal with heredoc separately.
+ fixed: [ruby-list:41168]
- * ext/openssl/ossl_ssl.c: ditto
+ * misc/ruby-mode.el (ruby-calculate-indent): not to deepen indent
+ level for continuous line inside parentheses.
+ http://nabeken.tdiary.net/20050915.html#p02
-Thu Aug 6 02:25:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 25 00:18:11 2005 Tanaka Akira <akr@m17n.org>
- * node.c (rb_alloc_tmp_buffer): use NODE_ALLOCA to mark locations
- like as builtin alloca. [ruby-core:70251] [Bug #11418]
+ * eval.c (unknown_node): show more information. [ruby-dev:26196]
-Wed Aug 5 14:37:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Sep 24 08:56:01 2005 Minero Aoki <aamine@loveruby.net>
- * transcode.c (rb_econv_open0): rb_econv_t::source_encoding_name
- and rb_econv_t::destination_encoding_name should refer static
- strings always or NULL. [ruby-core:70247] [Bug #11416]
+ * lib/fileutils.rb (cd): no longer accept :noop option, related
+ code is useless (backported from trunk, rev 1.67).
+ [ruby-core:05858] [ruby-Bugs:2494]
-Tue Aug 4 16:53:43 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Sat Sep 24 08:38:07 2005 Minero Aoki <aamine@loveruby.net>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): extract callback
- lookup to private Ruby methods. This means we can keep the default
- DH callback logic hidden from consumers. Also, since the SSLSocket
- always has a context, we can remove conditionals about that
- instance.
+ * lib/fileutils.rb: fix visibility of FileUtils::NoWrite, Verbose,
+ DryRun (backported from trunk, rev 1.66). [ruby-core:05954]
- * ext/openssl/ossl_ssl.c: move callback lookup methods to private Ruby
- methods.
+ * test/fileutils/test_nowrite.rb: test it.
-Tue Aug 4 16:40:26 2015 Koichi Sasada <ko1@atdot.net>
+ * test/fileutils/test_dryrun.rb: new file.
- * test/ruby/test_module.rb: should not expect a method table ordering.
- [Feature #11414]
+ * test/fileutils/test_verbose.rb: new file.
-Tue Aug 04 15:30:04 2015 Koichi Sasada <ko1@atdot.net>
+Sat Sep 24 02:40:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c (rb_block_clear_env_self): clear by Qfalse instead of Qnil.
- [Bug #11409]
+ * lib/delegate.rb: document update from James Edward Gray II
+ <james@grayproductions.net>. [ruby-core:05942]
- * test/ruby/test_eval.rb: add tests for this issue,
- written by @0x0dea.
- https://github.com/ruby/ruby/pull/988
+Thu Sep 22 23:36:24 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 4 12:12:14 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb (find_executable0): default path if environment is not
+ set. [ruby-dev:27281]
- * variable.c: wrap long lines
+Thu Sep 22 16:33:12 2005 Shugo Maeda <shugo@ruby-lang.org>
-Tue Aug 4 09:32:30 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/readline/test_readline.rb (TestReadline::replace_stdio):
+ merged the patch of [ruby-dev:25232] instead of [ruby-dev:25223].
- * proc.c: Removing duplicate doc [fix GH-987][ci skip]
- Patch by @ronakjangir47
+Wed Sep 21 23:30:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 4 09:21:58 2015 Richard Schneeman <richard.schneeman+foo@gmail.com>
+ * lib/mkmf.rb (configuration): generalized nmake dependent code.
- * doc/contributing.rdoc: fixed wrong instructions with OS X
- [fix GH-989][ci skip] Patch by @schneems
+Wed Sep 21 09:07:55 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Aug 3 10:08:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * stable version 1.8.3 released.
- * re.c (rb_memsearch): should match only char boundaries in wide
- character encodings. [ruby-core:70220] [Bug #11413]
+Wed Sep 21 08:52:25 2005 why the lucky stiff <why@ruby-lang.org>
-Sun Aug 2 07:01:17 2015 Eric Wong <e@80x24.org>
+ * ext/syck/token.c: correctly compute identation of a block
+ scalar's parent node. [ruby-talk:150620]
- * ext/openssl/lib/openssl/buffering.rb (gets):
- avoid comparing fixnum with nil
- * test/openssl/test_pair.rb: test gets with limit when EOF is hit
- Thanks to Bar Hofesh <bar.hofesh@safe-t.com> for the bug report
- and testing.
- [ruby-core:70149] [Bug #11400]
+Wed Sep 21 08:20:24 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 1 17:13:15 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+ * README.EXT, README.EXT.ja: add new features.
- * lib/net/http/response.rb (Net::HTTPResponse::Inflater#finish):
- fix a bug that empty gzipped response body causes Zlib::BufError.
- [ruby-core:68846] [Bug #11058]
+Wed Sep 21 07:43:58 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/net/http/test_httpresponse.rb: tests for the above.
+ * lib/optparse.rb (default_argv, Arguable#options): defaults strings
+ to be parsed to Arguable instance.
-Sat Aug 1 17:05:18 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+Wed Sep 21 02:44:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/net/http/response.rb (Net::HTTPResponse#inflater):
- fix TypeError. An exception object might be nil.
- [ruby-core:68846] [Bug #11058]
+ * file.c (path_check_0): disallow sticky world writable directory
+ in PATH (and $LOAD_PATH). [ruby-dev:27226]
-Sat Aug 1 09:09:46 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * file.c (fpath_check): typo fixed.
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): Implement
- SSLContext#options and options= using SSL_CTX_set_options and
- SSL_CTX_get_options. This reduces the number of ivars we need and
- simplifies `ossl_sslctx_setup`.
+Tue Sep 20 22:29:49 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): Default `options`
- to SSL_OP_ALL
+ * test/wsdl/simpletype/rpc/test_rpc.rb, test/wsdl/ref/test_ref.rb,
+ test/wsdl/any/test_any.rb test/soap/wsdlDriver/test_calc.rb:
+ suppress deliberate warnings with $VERBOSE = nil.
-Sat Aug 1 06:54:36 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Tue Sep 20 21:26:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): OpenSSL declares these
- constants as longs, so we should follow that and use LONG2NUM.
- http://git.io/vOqxD
+ * ext/io/wait/lib/nonblock.rb: disable on platforms non-blocking flag
+ is not available. fixed: [ruby-dev:27187]
-Sat Aug 1 04:06:29 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Tue Sep 20 18:23:04 2005 Tanaka Akira <akr@m17n.org>
- * ext/openssl/ossl_ssl.c (ossl_call_tmp_dh_callback): change callback
- to return the Ruby dh (or ecdh) object that the caller cares about
- instead of doing rb_iv_get / set to communicate. This means we can
- remove an rb_iv_get call, and only use the set calls for their
- intended purpose (to prevent the object from being GC'd).
+ * eval.c (thread_mark): mark th->last_status. [ruby-dev:27179]
- * ext/openssl/ossl_ssl.c (ossl_tmp_dh_callback): ditto
- * ext/openssl/ossl_ssl.c (ossl_call_tmp_ecdh_callback): ditto
- * ext/openssl/ossl_ssl.c (ossl_tmp_ecdh_callback): ditto
+Tue Sep 20 18:20:33 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Aug 1 03:49:31 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/yaml.rb: require 'yaml/constants'. [ruby-core:5776]
- * ext/openssl/ossl_ssl.c (ossl_call_tmp_dh_callback): Similarly to the
- tmp_ecdh_callback, the SSLSocket instance always holds a reference
- to the SSLContext object (it's always set in `initialize`). The
- SSLContext holds a reference to the tmp_dh_callback. Ask the
- context for the callback instead of storing the callback in two
- places.
+Tue Sep 20 17:48:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Aug 1 03:43:10 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): add charset
+ information to content-type header.[ruby-core:5127]
- * ext/openssl/ossl_ssl.c (ossl_call_tmp_dh_callback): create an array
- and use `rb_apply` to clean up calls to `rb_protect`.
+ * lib/xmlrpc/server.rb (CGIServer::serve): ditto.
- * ext/openssl/ossl_ssl.c (ossl_tmp_dh_callback): ditto
+ * lib/xmlrpc/server.rb (ModRubyServer::serve): ditto.
-Sat Aug 1 03:27:12 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/xmlrpc/server.rb (WEBrickServlet::service): ditto.
- * ext/openssl/ossl_ssl.c (ossl_call_tmp_ecdh_callback): The SSL socket
- always holds a reference to the SSLContext object, which will have
- the callback object. Ask the context for the callback instead of
- storing the callback in two places.
+Tue Sep 20 17:34:46 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sat Aug 1 03:14:07 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * test/webrick/test_cgi.rb: set ENV["PATH"] to CGIEnvPath on
+ windows. bcc32's runtime is not installed into system directory,
+ so it cannot be found without this setting. [ruby-dev:27166]
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): convert
- `tmp_dh_callback` to Ruby, and call it when setting up an SSL
- connection. This allows us to move the "default" behavior to the
- reader method.
+Tue Sep 20 17:10:38 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/ossl_ssl.c: call the tmp_dh_callback instead of
- accessing the SSLContext's internals.
+ * test/dbm/test_dbm.rb (TestDBM::test_s_open_error): remove
+ test_s_open_error test to detect duplicate open.
+ [ruby-dev:27202]
-Fri Jul 31 23:34:27 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Tue Sep 20 17:08:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * .travis.yml: update libssl before running tests.
- Thanks to Chris Sinjakli <chris@sinjakli.co.uk> for figuring out the
- travis settings!
+ * io.c: PIPE_BUF is not defined on BeOS. use _POSIX_PIPE_BUF instead.
+ [ruby-dev:27185]
-Fri Jul 31 21:34:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Sep 20 16:53:53 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * load.c (rb_require_internal): use rb_load_internal0 not to raise
- a exception to be caught.
+ * test/readline/test_readline.rb (TestReadline::replace_stdio):
+ BSD seek support from [ruby-dev:25223]. fixed: [ruby-dev:27150]
-Thu Jul 30 13:19:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Sep 20 15:39:40 2005 why the lucky stiff <why@ruby-lang.org>
- * variable.c (rb_const_get_0): warn deprecated constant reference.
+ * ext/syck/emitter.c (syck_scan_scalar): prevent indicators from
+ appearing alone or at the end of plain scalars. [ruby-core:5826]
- * variable.c (rb_mod_deprecate_constant): mark constants to be
- warned as deprecated. [Feature #11398]
+ * ext/syck/emitter.c (syck_emit_scalar): treat typed scalar nodes
+ as complex keys.
-Thu Jul 30 11:53:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/syck.h: version 0.60.
- * thread.c (rb_thread_s_handle_interrupt): make identity hash, to
- compare masking classes just by their IDs.
+ * lib/yaml/basenode.rb (YAML::BaseNode#at): transform keys during
+ key searches.
-Thu Jul 30 11:52:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/rubyext.c: loading of binary-typed nodes. prevent
+ emission of plain strings that look like symbols, but which aren't.
- * load.c (rb_load_internal0): stop separating exits at loading
- from exits from execution. TAG_FATAL is the only case that
- `errinfo` is a Fixnum, and should continue to exit by JUMP_TAG
- but not raising as an ordinary exception.
- [ruby-core:70169] [Bug #11404]
+Tue Sep 20 05:50:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Thu Jul 30 10:42:27 2015 Alex Dowad <alexinbeijing@gmail.com>
+ * test/xmlrpc/test_webrick_server.rb (setup_http_server):
+ should not include 'webrick/https' unless 'use_ssl' because
+ it fails where openssl is not installed.
- * load.c (rb_load_internal0): extra check before returning
- TAG_RAISE when a non-local transfer of control happens while
- loading and parsing a Ruby source file.
- [ruby-core:70169] [Bug #11404]
+Tue Sep 20 00:34:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Jul 30 08:48:42 2015 Eric Wong <e@80x24.org>
+ * io.c (io_close): call rb_io_close() directly if io is a T_FILE
+ object. [ruby-dev:27156]
- * st.c (find_entry): constify st_table*
- (find_packed_index_from): ditto
- (find_packed_index): ditto
- (get_keys): ditto
- (get_values): ditto
+Mon Sep 19 19:09:08 2005 Minero Aoki <aamine@loveruby.net>
-Thu Jul 30 04:29:25 2015 Eric Wong <e@80x24.org>
+ * file.c (rb_file_chown): should accept nil. [ruby-dev:27171]
+ (backport from trunk, rev 1.208)
- * benchmark/bm_hash_aref_dsym.rb: new benchmark
- * benchmark/bm_hash_aref_dsym_long.rb: ditto
- * benchmark/bm_hash_aref_fix.rb: ditto
+Mon Sep 19 18:35:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jul 29 21:38:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dl/dl.c (rb_io_to_ptr): fix DragonFlyBSD support.
+ [ruby-dev:27151]
- * hash.c (any_hash), symbol.c (dsymbol_alloc): fix dynamic symbol
- hash value by restricting in Fixnum range, that is `long`.
+Mon Sep 19 14:17:04 2005 Minero Aoki <aamine@loveruby.net>
-Wed Jul 29 17:25:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/emitter.c (syck_emit): passing an int* value to the
+ long* parameter causes unaligned access on LP64 systems.
+ [ruby-dev:27161]
- * hash.c (rb_obj_hash): move in order to share with rb_any_hash.
+Mon Sep 19 13:44:03 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Wed Jul 29 16:00:22 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/win32ole/win32ole.c: avoid core dump with WIN32OLE_EVENT.
+ [ruby-dev:27133]
- * string.c (str_buf_cat): consider empty non-embed string case,
- not to loop infinitely. [ruby-core:70074] [Bug #11383]
+Mon Sep 19 10:36:06 2005 Minero Aoki <aamine@loveruby.net>
-Wed Jul 29 15:25:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/fileutils.rb (cp_r): default is :dereference_root=>true for
+ backward compatibility. [ruby-dev:27145]
- * vm_eval.c (send_internal): set method_missing_reason before
- invoking overriding method_missing method so that the default
- method_missing can achieve it properly.
- [ruby-core:68515] [Bug #10969]
+ * test/fileutils/test_fileutils.rb (test_cp_r): test it.
-Wed Jul 29 14:54:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Sep 19 09:57:39 2005 Minero Aoki <aamine@loveruby.net>
- * hash.c (rb_sym_hash): return same value as rb_any_hash() of
- Symbol. [Bug #9381]
+ * test/fileutils/test_fileutils.rb: backported from trunk (1.36).
+ (again) [ruby-dev:27145]
- * hash.c (rb_any_hash): fix Float hash. rb_dbl_hash() returns a
- Fixnum, but not a long. [Bug #9381]
+Mon Sep 19 07:45:37 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Jul 29 11:07:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_pkey.h, ossl_pkey_rsa.c, ossl_pkey_dsa.c:
+ an instance variable "private" is added to OpenSSL::PKey class.
+ this ivar is a flag that shows whether there is a private key
+ in the instance.
- * internal.h (LIKELY, UNLIKELY): make a boolean to enforce 1 or 0.
+ * ext/openssl/ossl_engine.c: (ossl_engine_load_privkey): set private
+ key flag.
-Wed Jul 29 10:44:43 2015 Alex Dowad <alexinbeijing@gmail.com>
+Mon Sep 19 06:41:32 2005 Minero Aoki <aamine@loveruby.net>
- * gc.c: document argument passed to finalizer proc.
- [fix GH-976][ci skip] Patch by @alexdowad
+ * lib/fileutils.rb: backported from trunk (rev 1.65):
-Wed Jul 29 10:36:58 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/fileutils.rb (rm_r): new option :secure.
- * io.c (rb_io_extract_modeenc): add option parameter `flags'
- to append extra oflags to normal mode.
- [Feature #11253] [ruby-core:69539]
+ * lib/fileutils.rb (rm_rf): new option :secure.
-Wed Jul 29 04:54:47 2015 Eric Wong <e@80x24.org>
+ * lib/fileutils.rb: new method #remove_entry_secure.
- * test/rubygems/test_gem_remote_fetcher.rb: pre-generate test key
- [ruby-core:70151] [Bug #11397]
+ * lib/fileutils.rb (cd): remove option :noop.
-Tue Jul 28 10:32:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/fileutils.rb (cp_r): new option :dereference_root.
- * internal.h (struct RClass): moved from ruby/ruby.h to hide the
- internals.
+ * lib/fileutils.rb (cp_r): new option :dereference_root.
-Tue Jul 28 08:48:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/fileutils.rb: new method #remove_entry.
- * configure.in (RUBY_TYPE_ATTRIBUTE): attribute declaration for
- types.
+ * lib/fileutils.rb: new method #chmod_R.
-Tue Jul 28 07:23:03 2015 Eric Wong <e@80x24.org>
+ * lib/fileutils.rb: new method #chown.
- * symbol.h (struct RSymbol): add hashval field
- * symbol.c (dsymbol_alloc): setup hashval field once
- * hash.c (rb_any_hash): return RSymbol->hashval directly
- * common.mk: hash.o depends on symbol.h
- Thanks to Bruno Escherl <bruno@escherl.net> for the bug report
- [ruby-core:70129] [Bug #11396]
+ * lib/fileutils.rb: new method #chown_R.
-Tue Jul 28 03:26:15 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/fileutils.rb: new method .commands.
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): raise a more
- helpful exception when verifying the peer connection and an
- anonymous cipher has been selected. [ruby-core:68330] [Bug #10910]
- Thanks to Chris Sinjakli <chris@sinjakli.co.uk> for the patch.
+ * lib/fileutils.rb: new method .options.
- * test/openssl/test_ssl.rb (class OpenSSL): test for change
+ * lib/fileutils.rb: new method .have_option?.
-Mon Jul 27 13:24:11 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb: new method .options_of.
- * template/id.h.tmpl (ID2ATTRSET): remove an unused macro.
+ * lib/fileutils.rb: new method .collect_method.
-Mon Jul 27 12:21:15 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/fileutils.rb: use module_function instead of single extend.
- * test/openssl/test_ssl.rb: run tests on non-Unix platforms.
+ * test/fileutils/test_fileutils.rb: backported from trunk (1.36).
-Sun Jul 26 19:21:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Sep 19 03:17:48 2005 Tanaka Akira <akr@m17n.org>
- * ext/openssl/ossl_ssl.c (ossl_ssl_alpn_protocol): fix condition
- to compile, needs ALPN to be available. [Feature #9390]
+ * file.c (rb_thread_flock): wrap the flock system call by
+ TRAP_BEG/TRAP_END to enable signals. [ruby-dev:27122]
-Sun Jul 26 11:29:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/socket.c (bsock_send): wrap the sendto and send system
+ call by TRAP_BEG/TRAP_END to enable signals when writing to a socket
+ which is full. [ruby-dev:27132]
- * signal.c (default_handler, Init_signal): discard SIGSYS, ENOSYS
- should raise a SystemCallError always instead.
+ * io.c (rb_io_syswrite): wrap the write system call by
+ TRAP_BEG/TRAP_END to enable signals when writing to a pipe which is
+ full. [ruby-dev:27134]
-Sun Jul 26 10:26:35 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Mon Sep 19 03:02:08 2005 Tanaka Akira <akr@m17n.org>
- * ext/openssl/ossl_ssl.c (ossl_call_servername_cb): set the ssl context
- object returned by the servername callback on to the socket as an
- instance variable. If the callback allocated a new context object
- and didn't keep a reference to it, it could be GC'd out from under
- the socket object.
+ * io.c (io_fwrite): wrap the write system call by TRAP_BEG/TRAP_END to
+ enable signals when writing to a pipe which is full.
- * test/openssl/test_ssl.rb (class OpenSSL): test for change.
+Sun Sep 18 02:10:47 2005 why the lucky stiff <why@ruby-lang.org>
-Sun Jul 26 10:07:26 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/yaml/rubytypes.rb: remove comments that are bungling up
+ the rdoc and ri output. output symbols as plain scalars.
- * test/openssl/test_ssl.rb (class OpenSSL): add test coverage around
- OpenSSL::SSL::SSLContext#servername_cb
+ * ext/syck/rubyext.c (syck_emitter_reset): emit headless
+ documents always.
-Sun Jul 26 09:10:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/syck/emitter.c (syck_scan_scalar): quote scalars with any
+ kind of surrounding line space, tabs or spaces alike.
- * gems/bundled_gems: update latest version of bundled power_assert.
+ * ext/syck/token.c: accept tabs as whitespace, not for indentation,
+ but strip from plain scalars.
-Sun Jul 26 08:49:28 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/yaml/test_yaml.rb: remove outdated tests.
- * test/rubygems/test_gem_remote_fetcher.rb: backport rubygems upstream
- change for OpenSSL key length. see detail to
- https://github.com/rubygems/rubygems/pull/1290
+Sat Sep 17 23:25:04 2005 sheepman <sheepman@sheepman.sakura.ne.jp>
-Sun Jul 26 08:33:03 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/mathn.rb (Rational::inspect): should preserve original
+ operand. [ruby-core:05806]
- * ext/openssl/lib/openssl/pkey.rb: implement DEFAULT_512 and
- DEFAULT_1024 constants in Ruby.
+Sat Sep 17 23:20:27 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): Ask PKey for the
- default DH callback since it already must check whether openssl has
- been compiled with DH support.
+ * lib/cgi.rb (CGI::Cookie): should handle multiple values for a
+ cookie name. [ruby-talk:156140]
- * ext/openssl/ossl_pkey_dh.c (OSSL_PKEY_BN): Remove C definitions of
- DEFAULT_512 and DEFAULT_1024
+Sat Sep 17 10:42:13 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/openssl/ossl_pkey_dh.c (Init_ossl_dh): ditto
+ * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string
+ should call Kernel.eval on caller's safe-level instead of slave's
+ safe-level (Of course, the given script should be evaluated on
+ slave's safe-level).
- * test/openssl/test_pkey_dh.rb (class OpenSSL): add test to ensure the
- Ruby definitions are the same as the C definitions were.
+Sat Sep 17 09:45:26 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Jul 26 08:14:59 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * string.c (rb_str_substr): should propagate taintness even for
+ empty strings. [ruby-dev:27121]
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): support
- specifically setting the tmp_dh_callback to nil.
+ * string.c (rb_str_aref): should infect result if range argument
+ is tainted. [ruby-dev:27121]
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): ditto
+Sat Sep 17 08:35:39 2005 Kouhei Sutou <kou@cozmixng.org>
- * test/openssl/test_pair.rb (module OpenSSL): add a test
+ * lib/rss/maker/base.rb (RSS::Maker::ItemsBase#normalize): fixed
+ strange RSS::Maker::Item#max_size behavior.
+ Thanks to Kazuhiko <kazuhiko@fdiary.net>.
-Sun Jul 26 07:47:14 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * test/rss/test_maker_1.0.rb (RSS::TestMaker10#test_items): ditto.
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): move the default
- tmp_dh_callback Ruby code and set it as a default in `initialize`.
+Fri Sep 16 23:09:20 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * ext/openssl/ossl_pkey_dh.c (static unsigned char DEFAULT_DH_512_GEN):
- move this constant to Ruby.
+ * ext/win32ole/win32ole.c (ole_search_event_at): bug fix
+ in ext/win32ole/sample/ienavi.rb.
- * ext/openssl/ossl_pkey_dh.c (static unsigned char DEFAULT_DH_1024_GEN):
- ditto
+ * ext/win32ole/win32ole/tests/testOLEEVENT.rb: ditto.
- * ext/openssl/ossl_pkey_dh.c (Init_ossl_dh): ditto
+Fri Sep 16 22:41:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/ossl_ssl.c (ossl_tmp_dh_callback): ditto
+ * file.c (rb_file_s_extname): empty string for path name ending with a
+ period. fixed: [ruby-core:05651]
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): tmp_dh_callback should
- always be set, so we can remove this conditional
+ * file.c (rb_file_join): smarter behavior at edge cases.
+ fixed: [ruby-core:05706]
-Sun Jul 26 06:22:24 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Fri Sep 16 18:34:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/openssl/test_pair.rb: add a test ensuring that the default DH
- callback is used when no DH callback is specified.
+ * ext/syck/node.c (syck_replace_str): was using return from the
+ void function. a patch from MIYAMUKO Katsuyuki
+ <miyamuko at mtb.biglobe.ne.jp>. [ruby-dev:27111]
-Sun Jul 26 04:08:27 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Fri Sep 16 14:48:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): add missing
- instance variables to squash warnings with alpn.
+ * ext/tk/lib/multi-tk.rb: fix typo on MultiTkIp#bg_eval_string
-Sun Jul 26 03:42:19 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Fri Sep 16 12:02:12 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb (module OpenSSL): move
- OpenSSL::SSL::SSLContext#initialize implementation to pure Ruby.
+ * ext/syck/rubyext.c (syck_resolver_transfer): remove C++ style
+ comment (//). [ruby-core:05793]
- * ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): ditto
+Fri Sep 16 00:14:14 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): ditto
+ * test/logger/test_logger.rb: unintentionally overwritten changes by
+ Usa. reverted.
-Sat Jul 25 21:03:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 16 00:06:18 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * random.c (fill_random_bytes_syscall): get rid of blocking when
- no entropy is available. based on the patch by mame in
- [ruby-core:70114]. [Bug #11395]
+ * lib/webrick/cgi.rb (WEBrick::CGI::Socket#initialize): should set
+ $stdout.binmode.
-Sat Jul 25 11:05:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 15 23:25:21 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * string.c (str_replace_shared_without_enc): fill the terminator
- of embedded strings in wide char encodings.
+ * lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.
-Sat Jul 25 06:38:36 2015 Koichi Sasada <ko1@atdot.net>
+ #nnn is a ticket number at http://dev.ctor.org/soap4r
- * vm_core.h: size should be unsigned.
- * rb_call_info_t::index
- * rb_iseq_constant_body::stack_max
- * rb_iseq_constant_body::local_size
- * rb_iseq_constant_body::param::size
- * rb_iseq_constant_body::local_table_size
- * rb_iseq_constant_body::is_size
- * rb_iseq_constant_body::callinfo_size
+ * SOAP
- * iseq.h: same for iseq_catch_table::size.
+ * allow to configure an envelope namespace of SOAP request. (#124)
+ TemporaryNamespace = 'http://www.w3.org/2003/05/soap-envelope'
+ @client.options["soap.envelope.requestnamespace"] =
+ TemporaryNamespace
+ @client.options["soap.envelope.responsenamespace"] =
+ TemporaryNamespace
+ @client.do_proc(...)
- * compile.c: catch up these fix.
+ * let SOAP request XML indent space configuable. see
+ "soap.envelope.no_indent" option. (#130)
- * iseq.c: ditto.
+ * let external CES configuable.
+ ex. client["soap.mapping.external_ces"] = 'SJIS'. $KCODE is used
+ by default. (#133)
+ external CES ::= CES used in Ruby object of client and server
+ internal CES ::= CES used in SOAP/OM
- * proc.c: ditto.
+ * add iso-8859-1 external CES support. (#106)
- * vm.c: ditto.
+ * fixed illegal 'qualified' handling of elements. it caused
+ ASP.NET inteoperability problem. (#144)
- * vm_args.c: ditto.
+ * added 'soap.envelope.use_numeric_character_reference' (boolean)
+ option to let query XML use numeric character reference in XML,
+ not plain UTF-8 character. !GoogleSearch server seems to not
+ allow plain UTF-8 character since 2005-08-15 update. (#147)
- * vm_eval.c: ditto.
+ * SOAP::Header::SimpleHeader (de)serialization throws an exception
+ on !SimpleHeader.on_(in|out)bound when header is a String. so we
+ could not use a simple single element headerItem. fixed. thanks
+ to emil. (#129)
- * vm_insnhelper.c: ditto.
+ * out parameter of rpc operation did not work. (#132)
-Sat Jul 25 06:00:09 2015 Koichi Sasada <ko1@atdot.net>
+ * follow HTTP redirect only if using http-access2. (#125) (#145)
- * vm_core.h: constify rb_iseq_constant_body::line_info_table.
+ * add a workaround for importing an WSDL whose path begins with
+ drive letter. (#115)
- * iseq.c: catch up this fix.
+ * WSDL
-Sat Jul 25 05:56:43 2015 Koichi Sasada <ko1@atdot.net>
+ * SOAP Data which is defined as a simpletype was not mapped
+ correctly to Ruby obj when using wsdl2ruby.rb generated classdef
+ file. (#123)
- * vm_core.h: constify rb_iseq_constant_body::param::opt_table and
- rb_iseq_constant_body::param::keyword.
+ * rpc/literal support. (#118)
- * compile.c: catch up this fix.
+ * re-implemented local element qualify/unqualify control. handles
+ elementFormDefault and form in WSDL. (#119)
-Sat Jul 25 04:47:01 2015 Koichi Sasada <ko1@atdot.net>
+ * Array of an element which has simpleType causes a crash. (#128)
- * vm_core.h: constify rb_iseq_constant_body::catch_table.
+ * prarmeterOrder may not contain return part so it can be shorter
+ than parts size. Thanks to Hugh. (#139)
- * compile.c (iseq_set_exception_table): catch up this fix.
+ * Samples
- * iseq.c: ditto.
+ * added !BasicAuth client sample. (#117)
- * vm.c (vm_exec): ditto.
+ * added Base64 client/server sample.
-Fri Jul 24 21:29:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * added Flickr SOAP interface client sample. (#122)
- * st.c (EQUAL, st_delete_safe): fix arguments order to compare
- function, searching key is the first and stored key is the
- second always.
+ * added !SalesForce client sample. (#135)
-Fri Jul 24 21:27:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * updated Thawte CA certificate for !GoogleAdWords sample.
- * string.c (fstr_update_callback): fstring must not be a shared
- string, or the content without RSTRING_FSTR may be freed.
- [ruby-dev:49188] [Bug #11386]
+ * updated a client script with the newer version made by Johan.
+ thanks!
-Fri Jul 24 20:09:43 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * shortened long file names. (#120)
- * test/rinda/test_rinda.rb (RingIPv6#prepare_ipv6): prevent to use
- IPv6 loopback interface for
- Rinda::TestRingFinger#test_make_socket_ipv6_multicast and
- Rinda::TestRingFinger#test_make_socket_ipv6_multicast_hops.
- The tests are skipped if there are no IPv6 devices other than the
- loopback device. [Bug #11394] [ruby-dev:49199]
+ * fixed typo in authheader sample. (#129)
- * test/rinda/test_rinda.rb (test_make_socket_ipv6_multicast): ditto
- for Rinda::TestRingServer#test_make_socket_ipv6_multicast.
+ * updated deprecated method usage. (#138)
- * test/rinda/test_rinda.rb (test_ring_server_ipv6_multicast): ditto
- for Rinda::TestRingServer#test_ring_server_ipv6_multicast.
+Thu Sep 15 23:02:57 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Fri Jul 24 16:35:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.h (rb_w32_stat): added prototype.
- * string.c (fstr_update_callback): pool bare strings only.
+Thu Sep 15 22:35:55 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c (rb_fstring): return the original string with sharing a
- fstring if it has extra attributes, not the fstring itself.
- [ruby-dev:49188] [Bug #11386]
+ * test/ruby/test_signal.rb (test_exit_action): skip the test using
+ fork on fork-less platforms.
-Fri Jul 24 16:35:34 2015 yui-knk <spiketeika@gmail.com>
+Thu Sep 15 11:39:18 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * file.c (rb_file_s_extname): [DOC] add an example.
+ * ext/tk/lib/tk/dialog.rb: If a dialog does not show up yet,
+ TkDialogObj#name raises an exception. [ruby-talk:156109]
- * test/ruby/test_path.rb (test_extname): add tests. [Fix GH-978]
- * path starts with dot ('.a.rb')
- * path includes dir name ('a/b/d/test.rb')
- * path includes dir name and dir name starts with dot
- ('.a/b/d/test.rb')
+Thu Sep 15 01:39:19 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Thu Jul 23 18:50:43 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rinda/tuplespace.rb (Rinda::TemplateEntry::initialize): pull
+ up method. Tabs converted to spaces.
- * vm_core.h: constify rb_iseq_constant_body::local_table and
- rb_iseq_param_keyword::table and
- rb_iseq_param_keyword::default_values.
+Thu Sep 15 00:18:24 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c: catch up this fix.
+ * lib/net/telnet.rb (Net::Telnet::waitfor): replace sysread with
+ readpartial. [ruby-talk:127641]
- * iseq.c: ditto.
+Wed Sep 14 22:40:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jul 23 17:30:43 2015 Koichi Sasada <ko1@atdot.net>
+ * dir.c (ruby_glob): glob function not using ruby exception system.
- * vm_core.h: constify rb_iseq_constant_body::iseq_encoded and
- rb_control_frame_t::pc.
+Wed Sep 14 01:26:03 2005 Minero Aoki <aamine@loveruby.net>
- * compile.c (rb_iseq_translate_threaded_code): catch up this fix.
+ * lib/net/https.rb: backported from trunk, rev 1.3.
+ [ruby-dev:25673] (again), [ruby-dev:26617] (again),
+ [ruby-dev:27062]
- * iseq.c: ditto.
+ * ext/openssl/lib/net/https.rb: removed.
- * vm_exec.c (vm_exec_core): ditto.
+ * ext/openssl/lib/net/protocols.rb: removed.
-Thu Jul 23 10:25:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/http.rb: #use_ssl?, #use_ssl are moved from net/https.
- * include/ruby/ruby.h: add raw FL macros, which assume always the
- argument object is not a special constant.
+Tue Sep 13 22:09:40 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * internal.h (STR_EMBED_P, STR_SHARED_P): valid only for T_STRING.
+ * lib/logger.rb (Logger): added formatter accessor to logger for
+ dictating the way in which the logger should format the messages it
+ displays. Thanks to Nicholas Seckar (cf. [ruby-talk:153391]) and
+ Daniel Berger.
- * string.c: deal with taint flags directly across String instances.
+ * lib/logger.rb (Logger): added VERSION constant.
-Thu Jul 23 09:05:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/logger.rb: removed document for LogDevice. It is an
+ implementation detail and is not a public interface.
- * parse.y (lambda_body): pop cmdarg stack for lookahead
- token. [ruby-core:70067] [Bug #11380]
+ * test/logger/test_logger.rb: added tests.
-Thu Jul 23 04:03:03 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Tue Sep 13 21:47:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/ossl_ssl.c: fix tests by not setting the instance
- variable on the frozen ssl instance.
+ * eval.c (BEGIN_CALLARGS): pop halfly pushed status.
+ fixed: [ruby-dev:26881]
-Thu Jul 23 03:32:26 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Tue Sep 13 16:26:45 2005 Minero Aoki <aamine@loveruby.net>
- * ext/openssl/ossl_ssl.c: add ECDH callback support. [Feature #11356]
+ * lib/net/http.rb: backported from trunk, rev 1.128.
+ [ruby-dev:25673] [ruby-dev:26617]
- * test/openssl/test_pair.rb: test for ECDH callback support
+ * lib/net/protocol.rb: backported from trunk, rev 1.78.
-Thu Jul 23 03:29:49 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/net/protocol.rb: new method #old_open to support net/smtp
+ and net/pop.
- * ext/openssl/ossl_ssl.c: add ALPN support. [Feature #9390]
+ * lib/net/smtp.rb: use #old_open.
- * ext/openssl/extconf.rb: detect ALPN support in OpenSSL
+ * lib/net/pop.rb: ditto.
- * test/openssl/test_ssl.rb: test for ALPN
+Tue Sep 13 12:33:05 2005 why the lucky stiff <why@ruby-lang.org>
-Wed Jul 22 23:44:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/yaml.rb: reworking YAML::Stream to use the new
+ emitter.
- * string.c (rb_str_reverse): reversed string is not a substring,
- and should not set coderange of the original string.
- [ruby-dev:49189] [Bug #11387]
+ * lib/yaml/stream.rb: ditto.
-Wed Jul 22 20:17:51 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/yaml/rubytypes.rb: added Object#yaml_new.
- * vm_core.h: modify layout of rb_iseq_constant_body.
+ * lib/yaml/tag.rb: the tag_subclasses? method now
+ shows up in the class. allow taguri to be set using an accessor.
+ continue support of Object#to_yaml_type.
- Move frequent accessing fields to upper part.
+ * ext/syck/rubyext.c: new emitter code. yaml_new and yaml_initialize
+ get called, should they be present. consolidated all the diaspora of internal
+ node types into the family below YAML::Syck::Node -- Map,
+ Seq, Scalar -- all of whom are SyckNode structs pointing to
+ Ruby data. moved Object#yaml_new into the node_import and made it the
+ default behavior. the target_class is always called wih yaml_new, prepended
+ a parameter, which is the klass. loaded nodes through GenericResolver show their style.
+ new Resolver#tagurize converts type ids to taguris.
-Wed Jul 22 19:57:47 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/syck/implicit.re: were 'y' and 'n' seriously omitted??
- * vm_core.h: remove unused declaration of
- iseq_compile_data_ensure_node_stack.
+ * ext/syck/emitter.c: renovated emitter, walks the tree in advance.
+ consolidated redundant block_styles struct into
+ the scalar_style struct. (this means loaded nodes can now
+ be sent back to emitter and preserve at least its very basic
+ formatting.)
-Wed Jul 22 19:52:45 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/syck/gram.c: headless documents of any kind allowed.
- * vm_core.h: separate rb_iseq_body into rb_iseq_constant_body and
- rb_iseq_variable_body (rb_iseq_t::variable_body).
+ * ext/syck/node.c: new syck_replace_str methods and syck_empty_*
+ methods for rewriting node contents, while keeping the ID
+ and other setup info. added syck_seq_assign.
- rb_iseq_variable_body can be modified after compilation.
+ * ext/syck/syck.h: reflect block_styles and new node functions.
- * compile.c: use rb_iseq_t::variable_body.
+Mon Sep 12 20:53:06 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * iseq.c: ditto.
+ * test/openssl/test_pkcs7.rb (test_enveloped): skip this test
+ to avoid a bug of PKCS7_enctypt() (only if ext/openssl is
+ compiled with OpenSSL-0.9.7d or earlier versions).
+ http://www.mail-archive.com/openssl-dev@openssl.org/msg17376.html
- * thread.c: ditto.
+Mon Sep 12 14:03:33 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jul 22 17:50:35 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/dbm/test_dbm.rb: remove locking test, which may not be
+ supported on some platforms. [ruby-dev:27030]
- * lib/matrix/eigenvalue_decomposition.rb: refine code style.
- [fix GH-959][ci skip] Patch by @bogdanvlviv
+Mon Sep 12 10:45:58 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jul 22 15:48:47 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/dl/dl.c (rb_io_to_ptr): merged a patch for DragonFly BSD
+ from Takahiro Kambe <taca at back-street.net>. [ruby-dev:27023]
- * test/ruby/test_range.rb: Add test case for Range#end with
- exclude_end true case. [fix GH-968] Patch by @yui-knk
+Sun Sep 11 22:05:51 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Wed Jul 22 09:45:31 2015 Maksim Sitnikov <sitnikovme@undev.ru>
+ * bin/erb (ERB::Main#run): set ERB#filename so that it is used
+ when reporting syntax/runtime errors. Tabs converted to spaces.
- * numeric.c (num_coerce): [DOC] fix doc for Numeric#coerce,
- missing '+'. [Fix GH-974]
+Sat Sep 10 10:17:03 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Jul 22 07:24:18 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_engine.c (ossl_engine_s_by_id):
+ OpenSSL::Engine.by_id calls given block before calling
+ ENGINE_init (block parameter is the return value of this method
+ itself). this functionality is useful to load dynamic shared
+ engines. the following code is a sample of loading a key using
+ OpenSC PKCS #11 module.
- * make rb_iseq_t T_IMEMO object (type is imemo_iseq).
+ require "openssl"
+ pkcs11 = OpenSSL::Engine.by_id("dynamic"){|e|
+ e.ctrl_cmd("SO_PATH", "/usr/lib/opensc/engine_pkcs11.so")
+ e.ctrl_cmd("LIST_ADD", "1")
+ e.ctrl_cmd("LOAD")
+ }
+ pkcs11.ctrl_cmd("PIN", "secret")
+ key = pkcs11.load_private_key
- All contents of previous rb_iseq_t is in rb_iseq_t::body.
- Remove rb_iseq_t::self because rb_iseq_t is an object.
+ * ext/openssl/ossl_engine.c (ossl_engine_ctrl_cmd): new method
+ OpenSSL::Engine#ctrl_cmd. it wraps ENGINE_ctrl_cmd_string.
- RubyVM::InstructionSequence is wrapper object points T_IMEMO/iseq.
- So RubyVM::ISeq.of(something) method returns different wrapper
- objects but they point the same T_IMEMO/iseq object.
+ * ext/openssl/ossl_engine.c (ossl_engine_get_cmds): new method
+ OpenSSL::Engine#cmds. it returms engine command definitions.
- This patch is big, but most of difference is replacement of
- iseq->xxx to iseq->body->xxx.
+Sat Sep 10 10:09:47 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- (previous) rb_iseq_t::compile_data is also located to
- rb_iseq_t::compile_data.
- It was moved from rb_iseq_body::compile_data.
+ * ext/openssl/ossl_asn1.c (asn1str_to_str): new function.
- Now rb_iseq_t has empty two pointers.
- I will split rb_iseq_body data into static data and dynamic data.
+ * ext/openssl/ossl_pkcs7.c: new class OpenSSL::PKCS7::RecipientInfo.
+ this class wraps PKCS7_RECIP_INFO struct.
- * compile.c: rename some functions/macros.
- Now, we don't need to separate iseq and iseqval (only VALUE).
+ * ext/openssl/ossl_pkcs7.c: OpenSSL::PKCS7::Signer is renamed to
+ OpenSSL::PKCS7::SignerInfo. ("Signer" remains as an alias of
+ SignerInfo.)
- * eval.c (ruby_exec_internal): `n' is rb_iseq_t (T_IMEMO/iseq).
+ * test/openssl/test_pkcs7.rb: new file.
- * ext/objspace/objspace.c (count_imemo_objects): count T_IMEMO/iseq.
+Sat Sep 10 10:05:51 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * gc.c: check T_IMEMO/iseq.
+ * ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): assume that
+ the argument is a DER string if Base64 decoding failed.
- * internal.h: add imemo_type::imemo_iseq.
+ * ext/openssl/ossl_ns_pki.c (ossl_spki_to_der): new method.
- * iseq.c: define RubyVM::InstructionSequence as T_OBJECT.
- Methods are implemented by functions named iseqw_....
+ * test/openssl/test_ns_spki.rb: add new file.
- * load.c (rb_load_internal0): rb_iseq_new_top() returns
- rb_iseq_t (T_IMEMO/iesq).
+Sat Sep 10 09:56:24 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * method.h (rb_add_method_iseq): accept rb_iseq_t (T_IMEMO/iseq).
+ * ext/openssl/lib/digest.rb: added SHA224, SHA256, SHA384 and SHA512.
+ these features are enabled if this library is compiled with
+ OpenSSL 0.9.8 or later.
- * vm_core.h (GetISeqPtr): removed because it is not T_DATA now.
+ * test/openssl/test_digest.rb: add test for new digests.
- * vm_core.h (struct rb_iseq_body): remove padding for
- [Bug #10037][ruby-core:63721].
+Sat Sep 10 09:51:30 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Jul 22 07:15:33 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl.c (ossl_raise): should use ERR_peek_last_error
+ to get last error on the current thread. And should report
+ errors on the stack while OpenSSL.debug is true.
- * ext/objspace/objspace.c (total_i): no need to skip singleton classes.
+ * ext/openssl/ossl.c (ossl_get_errors): new method for debugging
+ this library.
-Wed Jul 22 06:37:54 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): fix error message.
- * vm_core.h: constify rb_call_info_t::kw_arg,
- rb_control_frame_t::iseq and rb_control_frame_t::block_iseq.
+ * ext/openssl/ossl_x509req.c (ossl_x509req_set_attributes): get rid
+ of unused variable.
- * iseq.c (iseq_free): catch up this fix.
+ * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): should
+ set @time to avoid warning.
- * vm.c: ditto.
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths,
+ X509_STORE_add_cert, X509_STORE_add_crl): should raise error if
+ wrapped functions failed.
- * vm_dump.c: ditto.
+ * test/openssl/test_x509store.rb: add test for errors.
-Wed Jul 22 06:25:45 2015 Koichi Sasada <ko1@atdot.net>
+Fri Sep 9 22:13:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: constify rb_call_info_t::blockiseq and rb_block_t::iseq.
+ * eval.c (rb_call0): prohibit calling tainted method (>2) when
+ $SAFE == 0.
- * vm.c, vm_insnhelper.c: catch up this fix.
+Fri Sep 9 16:45:25 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.c (iseq_data_to_ary): constify the first iseq parameter.
+ * string.c (rb_str_times): make empty strings to keep taintness,
+ and a little improvement. [ruby-dev:26900]
- * vm_insnhelper.c (vm_make_proc_with_iseq): ditto.
+ * ext/iconv/iconv.c (iconv_try), ext/iconv/extconf.rb: get rid of meta
+ characters in command line option. fixed: [ruby-talk:155369]
-Wed Jul 22 06:17:35 2015 Koichi Sasada <ko1@atdot.net>
+Thu Sep 8 14:58:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * method.h: constify rb_method_iseq_t::iseqptr.
+ * merged a patch from Takahiro Kambe <taca at back-street.net> to
+ support DragonFly BSD. [ruby-dev:26984]
- * proc.c (rb_method_entry_min_max_arity): catch up this fix.
+Wed Sep 7 12:55:08 2005 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.c (def_iseq_ptr): constify.
+ * lib/open-uri.rb: abolish mod === tempfile to avoid a problem
+ [ruby-dev:26967].
-Wed Jul 22 03:37:39 2015 Koichi Sasada <ko1@atdot.net>
+Wed Sep 7 10:45:15 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (internal_object_p): Now a singleton classes appear by
- ObjectSpace.each_object. [Bug #11360]
+ * eval.c (rb_thread_switch): convert all exceptions to
+ SystemExit. fixed: [ruby-core:05724]
- * test/ruby/test_objectspace.rb: add a test about it.
+ * eval.c (rb_thread_terminated): show backtrace before propagate
+ exceptions to main thread.
-Tue Jul 21 21:21:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 7 08:35:04 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread.c (do_select): replace switch and goto with a loop to
- suppress maybe-uninitialized warnings by gcc6.
+ * Makefile.in, configure.in (MINIOBJS): miniruby on HP-UX can not load
+ extension libraries.
- * thread.c (set_unblock_function, rb_wait_for_single_fd): ditto.
+ * bignum.c (bignew_1, bigadd): K&R style argument actually can't be
+ defined as char.
-Tue Jul 21 20:32:33 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * missing/vsnprintf.c: ANSI compiler supports const keyword.
- * test/ruby/test_range.rb: Add test for Range#hash
- [fix GH-969] Patch by @yui-knk
+ * ext/digest/sha2/extconf.rb: reject platforms which has inttypes.h
+ but no 64bit integer.
-Tue Jul 21 19:43:20 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb (what_type?): guesstimate type.
- * compile.c: constify the first parameter (iseq).
- * iseq_add_mark_object()
- * iseq_add_mark_object_compile_time()
+ * ext/etc/etc.c (setup_passwd), ext/etc/extconf.rb: pw_age might be
+ char*. fixed: [ruby-core:05470]
- * iseq.c, iseq.h (rb_iseq_add_mark_object): ditto.
+Wed Sep 7 08:32:47 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 21 16:18:48 2015 Eric Wong <e@80x24.org>
+ * object.c (rb_mod_cvar_get, rb_mod_cvar_set): document fix from
+ sheepman <sheepman@sheepman.sakura.ne.jp>; a bug in visibility
+ description. [ruby-dev:26965]
- * test/socket/test_nonblock.rb: increase buffer sizes
- to OpenBSD limits. Thanks to Jeremy Evans <code@jeremyevans.net>
- [ruby-core:70058]
+ * sprintf.c (rb_f_sprintf): warn "too many argument" on verbose
+ mode (-v/-w); backported from 1.9. [ruby-dev:26963]
-Tue Jul 21 16:08:53 2015 Eric Wong <e@80x24.org>
+Mon Sep 5 17:03:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * load.c (ruby_dln_librefs): make static
+ * lib/ostruct.rb: a patch from Florian Gross <florgro at gmail.com>
+ merged to allow recursive inspect (and to_s) for OpenStruct.
+ [ruby-core:05532]
-Tue Jul 21 13:36:54 2015 yuuji.yaginuma <yuuji.yaginuma@gmail.com>
+Mon Sep 5 07:01:12 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * lib/optparse.rb (complete): [DOC] fix typo. [Fix GH-973]
+ * ext/openssl/openssl/lib/openssl/buffering.rb (Buffering#do_write):
+ should clear data from the buffer which already been output.
-Tue Jul 21 05:20:21 2015 Eric Wong <e@80x24.org>
+Fri Sep 2 23:51:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (nogvl_wait_for_single_fd): new function for Linux
- (maygvl_copy_stream_wait_read): Linux-specific version
- (nogvl_copy_stream_wait_write): use nogvl_wait_for_single_fd
- [ruby-core:70051] [Feature #11377]
+ * lib: do not use __send__ to access private methods. [ruby-dev:26935]
-Mon Jul 20 15:04:30 2015 Eric Wong <e@80x24.org>
+Fri Sep 2 03:29:00 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
- * parse.y (parser_initialize): avoid redundant zero-ing
+ * lib/irb/init.rb: make IRB -I option that is same befavior for ruby.
+ [ruby-dev:26872], [ruby-dev: 26920]
-Mon Jul 20 12:12:05 2015 Eric Wong <e@80x24.org>
+ * lib/irb/locale.rb: support to print help message when OS locale is
+ ja_JP.utf-8. [ruby-dev:26872]
- * parse.y (struct parser_params): pack: 88 => 256 bytes on 64-bit
- [ruby-core:70034] [Feature #11371]
+Thu Sep 1 17:11:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Jul 19 14:29:18 2015 windwiny <windwiny.ubt@gmail.com>
+ * eval.c (rb_call0): wrong condition for $SAFE restoration.
- * ext/pty/pty.c: [DOC] fix example typo, an old name at move from
- PTY.open. [Fix GH-972]
+Thu Sep 1 14:12:45 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Jul 18 21:29:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/multi-tk.rb: On Tcl8.5, MultiTkIp#invoke_hidden doesn't
+ work (gives wrong order of arguments).
- * thread.c (vm_check_ints_blocking): gather common statements at
- the end, and prefer LIKELY for Visual C optimization.
+ * ext/tk/lib/multi-tk.rb: add MultiTkIp#invoke_hidden_on_namespace
+ to support '-namespace' option of 'interp invokehidden' command
+ on Tcl8.5.
-Sat Jul 18 20:44:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Aug 31 14:43:15 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * load.c (rb_load_internal0): do not raise any exceptions but
- return the result tag state.
+ * win32/Makefile.sub (OPTFLAGS): default global optimization to
+ disabled for all VC++ versions. fixed: [ruby-dev:26897]
- * load.c (rb_load_protect): reduce nested EXEC_TAGs.
+Wed Aug 31 11:35:43 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Jul 18 19:52:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/gdbm/test_gdbm.rb (teardown): should remove GDBM temporary
+ file.
- * gc.c (run_finalizer): set and restore safe level here to reduce
- nested EXEC_TAGs.
+Wed Aug 31 10:30:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sat Jul 18 18:45:22 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (proc_detach, proc_setmaxgroups): missing argument type
+ declaration. (I recommend ANSI-style function)
- * eval.c (ruby_cleanup): error_handle() returns exit status to the
- system, not internal error state, do not convert the exit status
- again.
+Tue Aug 30 23:20:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jul 18 10:29:03 2015 Eric Wong <e@80x24.org>
+ * eval.c (rb_rescue2): initialization miss. fixed: [ruby-dev:26917]
- * test/ruby/test_process.rb: test thread+sigs work after failed exec
+ * lib/mkmf.rb (xsystem, xpopen): no longer expand by Config.
-Sat Jul 18 07:20:18 2015 Jeremy Evans <code@jeremyevans.net>
+ * lib/mkmf.rb (link_command, cc_command, cpp_command): expand
+ variables at once, and quote hdrdir. fixed: [ruby-core:05680]
- * test/socket/test_nonblock: use smaller buffer for sendmsg
- [ruby-core:70016] [Bug #11364]
+ * lib/mkmf.rb (libpathflag): quote paths.
-Sat Jul 18 07:04:24 2015 Eric Wong <e@80x24.org>
+Tue Aug 30 19:34:27 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * signal.c (trap_handler): cleanup to use RSTRING_GETMEM + memcmp
+ * ext/digest/md5/md5ossl.h, ext/digest/rmd160/rmd160ossl.h,
+ ext/digest/sha1/sha1ossl.h: include <stddef.h> to avoid
+ error in compilation with OpenSSL-0.9.8. [ruby-list:41068]
-Sat Jul 18 02:53:06 2015 Eric Wong <e@80x24.org>
+Mon Aug 29 19:54:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * io.c (argf_read_nonblock): support `exception: false'
- (io_nonblock_eof): new function
- (io_read_nonblock): use io_nonblock_eof
- (argf_getpartial): accept kwargs hash for `exception: false'
- * test/ruby/test_argf.rb (test_read_nonblock): new test
- * NEWS: add item for ARGF.read_nonblock
- [ruby-core:70000] [Feature #11358]
+ * lib/rdoc/usage.rb: improper exceptions. [ruby-dev:26870]
-Fri Jul 17 23:51:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc/usage.rb: support the case when non-ruby code exists before
+ shebang. (this is needed when ri.bat is executed on windows)
- * vm_eval.c (rb_eval_cmd): $SAFE=4 has been deprecated.
+Mon Aug 29 17:48:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Jul 17 22:18:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (method_arity): should return proper arity value.
+ [ruby-dev:26390]
- * compile.c (iseq_compile_each): use enum ruby_tag_type names.
+Mon Aug 29 01:19:57 2005 Tanaka Akira <akr@m17n.org>
- * vm_core.h (ruby_tag_type): move from eval_intern.h for compiling
- break/next/redo/return.
+ * lib/time.rb (Time.parse): extract fractional seconds using
+ Date._parse. [ruby-talk:153859]
-Fri Jul 17 15:39:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 27 20:20:01 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * include/ruby/encoding.h (ENC_CODERANGE_CLEAN_P): predicate that
- tells if the coderange is clean, that is 7bit or valid, and no
- needs to scrub.
+ * ext/curses/curses.c ({curses,window}_clrtoeol): added. suggested
+ by Reyn Vlietstra.
- * re.c (rb_reg_expr_str): use ENC_CODERANGE_CLEAN_P.
+ * ext/curses/curses.c: chtype in curses is not `char', rahter `long'.
+ [ruby-Bugs:2298]
- * string.c (enc_strlen, rb_enc_cr_str_buf_cat, rb_str_scrub):
+ * ext/curses/view.rb: String =~ String is deprecated.
+
+Wed Aug 24 10:53:28 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/logger/test_logger.rb (test_shifting_size): should close log
+ device before unlink, since some platform cannot unlink opened
+ file.
+
+Sun Aug 21 00:13:27 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/wsdl/xmlSchema/importer.rb (WSDL::XMLSchema::Importer#fetch): add
+ a workaround for importing an WSDL whose path begins with drive
+ letter. [ruby-dev:26242]
+
+Sat Aug 20 22:37:13 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb (write, shift_log?, shift_log): file shifting race
+ condition bug fixed. [ruby-dev:26764]
+
+ * test/logger/test_logger.rb: tests.
+
+Fri Aug 19 18:13:39 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb (Time.apply_offset): fix a problem with last day of
+ month. reported by Lucas Nussbaum. [ruby-talk:152866]
+
+Thu Aug 18 12:46:28 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * bcc32/Makefile.sub (COMMON_HEADERS): reverted 1.42.2.24.
+ I misunderstood, bccwin32 on ruby_1_8 uses winsock2 originally.
+ [ruby-dev:26806]
+
+ * win32/win32.h: include winsock2.h instead of winsock.h. (bcc32)
+
+Wed Aug 17 23:58:05 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_to_integer): argument constified.
+
+ * eval.c (terminate_process): take String message.
+
+ * eval.c (rb_thread_switch): propagate the exception caused thread
+ termination directly. fixed: [ruby-core:05552]
+
+Wed Aug 17 00:05:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_add_method): preserve safe level in the environment
+ where a method is defined .
+
+ * eval.c (rb_call0): restore preserved safe level in the method
+ execution.
+
+Mon Aug 15 00:38:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_rescue2): reduce PUSH_TAG() as well as NODE_RESCUE.
+ [ruby-dev:26800]
+
+ * range.c (range_check, range_init): reduce useless exceptions.
+
+Sat Aug 13 18:51:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_block_pass): distinguish current block from others.
+ fixed: [ruby-dev:26274]
+
+ * ext/stringio/stringio.c (strio_set_string): disallow nil.
+ http://www.rubyist.net/~nobu/t/20050811.html#c05
+
+Thu Aug 11 23:29:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c: keep holding string after closed.
+
+Thu Aug 11 13:01:48 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss: fixed sort bug. [ruby-list:41018]
+
+ * lib/rss/1.0.rb (RSS::RDF::Channel#setup_maker_attributes):
+ removed self.
+
+ * lib/rss/maker/base.rb (RSS::Maker::ItemsBase#<=>): use #date
+ instead of @date.
+ (RSS::Maker::Base::self.def_array_element): added #size.
+
+ * lib/rss/maker/1.0.rb
+ (RSS::Maker::RSS10::Channel#to_rss,
+ RSS::Maker::RSS10::Items::Item#to_rss): cleared dc_dates set
+ upped by using #date.
+
+ * lib/rss/maker/dublincore.rb
+ (RSS::Maker::ChannelBase, RSS::Maker::ItemsBase::ItemBase):
+ fixed opposite alias.
+
+ * test/rss/test_setup_maker_1.0.rb
+ (RSS::TestSetupMaker10::test_setup_maker_items_sort): added some
+ tests for RSS::Maker::ItemsBase#do_sort.
+
+Wed Aug 10 10:29:40 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: fix bug on handling __ruby2val_optkeys().
+
+ * ext/tk/lib/tk/itemconfig.rb: fix bug on handling
+ __item_ruby2val_optkeys().
+
+ * ext/tk/lib/tk/canvas.rb: didn't check __item_ruby2val_optkeys().
+
+ * ext/tk/lib/tkextlib/blt/component.rb: ditto.
+
+Tue Aug 9 15:12:04 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: remove dangerous 'rb_jump_tag's.
+
+ * ext/tk/lib/tk.rb: add __val2ruby_optkeys and __ruby2val_optkeys to
+ help to convert option values between ruby and tcl.
+
+ * ext/tk/lib/tk/itemconfig.rb: add __item_val2ruby_optkeys and
+ __item_ruby2val_optkeys to help to convert option values between
+ ruby and tcl.
+
+ * ext/tk/lib/tk/radiobutton.rb: use __ruby2val_optkeys for 'variable'
+ option (for the reason of backward compatibility).
+
+ * ext/tk/lib/tk/composite.rb: clarify the arguments of super().
+
+ * ext/tk/lib/tk/spinbox.rb: ditto.
+
+ * ext/tk/lib/tk/text.rb: ditto.
+
+ * ext/tk/lib/tk/validation.rb: ditto.
+
+ * ext/tk/lib/tkextlib/*: support to treat tkvariable-type
+ configure options.
+
+Tue Aug 9 20:30:19 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
+
+ * bignum.c (rb_big_coerce): allow bignum x bignum coercing.
+ [ruby-dev:26778]
+
+Mon Aug 8 20:43:02 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_method.rb: added. [ruby-dev:26761]
+
+Sun Aug 7 23:50:14 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_super.rb: added from HEAD. [ruby-dev:26743]
+
+Sun Aug 7 01:31:15 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (WIN32OLE_EVENT#on_event): should set
+ only one event handler.
+
+ * ext/win32ole/tests/testOLEEVENT.rb: ditto.
+
+ * ext/win32ole/tests/testOLEPARAM.rb: remove re-defined
+ test_ole_type_detail method.
+
+Sat Aug 6 12:35:24 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/{tk.rb,tk/itemconfig.rb}: configure creates
+ TkVariable if key name is 'variable' or 'textvariable'
+ by default. [ruby-dev:26749]
+
+ * ext/tk/lib/tk/{label,radiobutton}.rb: removed its own
+ {variable,textvariable} function.
+
+ * ext/tk/lib/tk/variable.rb: retains backward conpatibility.
+
+Fri Aug 5 12:50:32 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c: fixed memory leak when tk_funcall raised
+ exception. (copies argv into heap in tk_funcall instead of
+ caller)
+
+Fri Aug 5 12:42:57 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): need to convert path separetor
+ before invoking install command.
+
+Fri Aug 5 00:27:04 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c: refactoring - extract ruby string <->
+ tcl object conversion as get_str_from_obj and get_obj_from_str.
+
+Fri Aug 5 00:19:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * extmk.rb (extmake): needs to be wrapped in an Array.
+
+Thu Aug 4 18:38:36 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: cannot compile for Tcl7.6/Tk4.2.
+
+ * ext/tcltklib/tcltklib.c: add nativethread consistency check.
+
+ * ext/tcltklib/stubs.c: ditto.
+
+ * ext/tk/lib/tk.rb: forgot to define TclTkIp.encoding and encoding=
+ when Tcl is 7.6 or 8.0.
+
+ * ext/tk/lib/tk/wm.rb: support to make some methods as options of
+ root or toplevel widget. [ruby-talk:150336]
+
+ * ext/tk/lib/tk/root.rb: ditto.
+
+ * ext/tk/lib/tk/toplevel.rb: ditto.
+
+ * ext/tk/lib/tkextlib/SUPPRT_STATUS: update RELEASE_DATE
+
+Thu Aug 4 08:03:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): should not modify $mflags for each
+ extentions.
+
+Thu Aug 4 00:25:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk, Makefile.in, {bcc32,win32,wince}/Makefile.sub: integrated
+ macro definitions.
+
+ * bcc32/Makefile.sub: LIBRUBY_SO should use DLDOBJS, not EXTOBJS.
+
+ * {win32,wince}/Makefile.sub: separate config.h for compiler versions.
+
+Wed Aug 3 21:59:16 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: TkVariable#trace didn't work on
+ TkVariable retrived from TkVariable.new_hash.ref. [ruby-dev:26721]
+
+Wed Aug 3 08:22:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): revert [ruby-talk:111654]
+ changes at 2004-09-07. [ruby-dev:26656]
+
+Tue Aug 2 10:20:54 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c: use Tcl_[GS]etVar2Ex instead of
+ Tcl_Obj[GS]etVar2. (avoid Tcl_NewStringObj on supported platforms)
+
+ * ext/tcltklib/tcltklib.c: use ip_{get,set,unset}_variable2_core from
+ ip_{get,set,unset}_variable.
+
+ * ext/tcltklib/tcltklib.c: replaced Tcl_Panic with rb_bug.
+
+Tue Aug 2 01:41:28 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/ping.rb (Ping.pingecho): should rescue StandardError.
+ [ruby-dev:26677]
+
+Mon Aug 1 19:09:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c: refactoring - replaced rb_ivar_defined &
+ rb_ivar_get with single rb_attr_get call.
+
+Mon Aug 1 18:45:07 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c (Tcl_GetStringResult): refactoring - define
+ alternative macro on Tcl7.x or earlier.
+
+Mon Aug 1 13:57:35 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c (deleted_ip): refactoring - interpreter
+ deletion check. [ruby-dev:26664]
+
+Mon Aug 1 01:17:40 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (check_insecure_method): use private_methods and
+ protected_methods instead of respond_to? to check method visibility.
+ [ruby-dev:26616]
+
+ * test/drb/drbtest.rb: ditto.
+
+ * test/drb/ut_drb.rb: ditto.
+
+Mon Aug 1 00:07:32 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
+ * lib/irb/context.rb: fix `irb --readline` option. [ruby-list:40955]
+
+Fri Jul 29 09:59:38 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_yield_0): push yielded node instead of yielding.
+ fixed: [yarv-dev:549]
+
+Thu Jul 28 18:09:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/stubs.c: When --enable-tcltk-stubs, the initialize
+ routine creates a Tcl/Tk interpreter and deletes it. However,
+ init cost of Tk's MainWindow is not so small. And that makes it
+ impossible to use libraries written with Tcl functions only on
+ an environment without a graphical display. This changes support
+ delaying initalization of Tk_Stubs until the script needs Tk.
+
+ * ext/tcltklib/stubs.h: New file. Define prototypes and return
+ codes of functions on stubs.c.
+
+ * ext/tcltklib/tcltklib.c: Support delaying initalization of
+ Tk_Stubs until the script needs Tk.
+
+ * ext/tcltklib/tcltklib.c: Show friendly error messages for errors
+ on initialization.
+
+ * ext/tcltklib/tcltklib.c: Avoid SEGV on ip_finalize() when ruby is
+ exiting and $DEBUG is true. (Not fix. If you know the reason of
+ why, please fix it.)
+
+ * ext/tk/tkutil.c (ary2list, ary2list2): bug fix on handling of
+ encoding.
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string
+ don't work propery.
+
+ * ext/tk/lib/tk.rb: Forget extending Tk::Encoding module to Tk.
+ * ext/tk/lib/tk/variable.rb: TkVarAccess fails to initialize the
+ object for an element of a Tcl's array variable.
+
+Wed Jul 27 23:23:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (obj_free): make message format consistent with one from
+ gc_mark(). [ruby-talk:149668]
+
+Wed Jul 27 22:11:37 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * sample/rss/tdiary_plugin: removed. because the plugin
+ is imported in the tDiary plugin packages.
+
+Wed Jul 27 10:59:02 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_each): rewinddir(3) before iteration.
+ [ruby-talk:149628]
+
+Tue Jul 26 12:57:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/openssl_missin.c: include <openssl/engine.h> before
+ <openssl/x509_vfy.h> to avoid compilation error of mswin32.
+ suggested by NAKAMURA Usaku.
+
+Mon Jul 25 21:30:46 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * {bcc32,win32,wince}/Makefile.sub: moved CPPFLAGS only for ruby
+ source to XCFLAGS.
+
+Mon Jul 25 13:45:18 2005 NAJIMA Hiroki <najima@mickey.ai.kyutech.ac.jp>
+
+ * io.c: check HAVE_SYS_IOCTL_H before including the header.
+ [ruby-dev:26610]
+
+Mon Jul 25 14:10:02 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: fix en-bugged part in the last commit.
+
+Sat Jul 23 16:49:04 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_engine.c (ossl_engine_s_load): should check
+ OPENSSL_NO_STATIC_ENGINE.
+
+Fri Jul 22 21:06:08 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
+
+ * bignum.c (rb_big_eq): reduce isnan(). [ruby-dev:26600]
+
+ * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le): ditto.
+
+Fri Jul 22 15:02:39 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: moved copyright description to lib/rss.rb.
+
+ * lib/rss.rb: added for convenience.
+
+ * sample/rss/re_read.rb: added #to_s sample.
+
+ * sample/rss/blend.rb: use 'require "rss"' instead of
+ 'require "rss/*"'.
+ * sample/rss/list_description.rb: ditto.
+ * sample/rss/rss_recent.rb: ditto.
+ * sample/rss/tdiary-plugin/rss-recent.rb: ditto.
+
+ * sample/rss/tdiary-plugin/rss-recent.rb: 0.0.6 -> 0.0.7.
+
+Fri Jul 22 14:37:43 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb (RSS::Parser#initialize): accept HTTP/FTP
+ URI and local file path too.
+
+ * test/rss/test_parser.rb (RSS::TestParser#test_parse): test
+ for the above.
+
+Fri Jul 22 07:01:42 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tkutil.c (tk_conv_args): forget to revert thread_critical
+ and gc_disable when raise ArgumentError.
+
+ * ext/tk/lib/remote-tk.rb: RemoteTkIp doesn't need to include TkUtil.
+
+ * ext/tcltklib/tcltklib.c: add TclTkIp#has_mainwindow? method.
+
+ * ext/tk/lib/tk.rb: add Tk.has_mainwindow? method.
+
+ * ext/tk/lib/multi-tk.rb: add MultiTkIp#has_mainwindow? method.
+
+ * ext/tk/lib/remote-tk.rb: add RemoteTkIp#has_mainwindow? method.
+
+ * ext/tk/lib/multi-tk.rb: slave IP fail to exit itself when $SAFE==4.
+
+ * ext/tk/lib/multi-tk.rb: remove constants from MultiTkIp module to
+ avoid access from external.
+
+ * ext/tk/lib/multi-tk.rb: check_root flag is ignored on slave IPs'
+ mainloop.
+
+ * ext/tk/lib/multi-tk.rb: hang-up Tk.mainloop called on a slave IP
+ with $SAFE==4.
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp#bg_eval_proc doesn't work
+ properly.
+
+ * ext/tk/lib/multi-tk.rb: add MultiTkIp#set_cb_error(proc) and
+ cb_error(exc) to log errors at callbacks on safe slave IPs.
+
+ * ext/tk/lib/multi-tk.rb: fail to get an available slave IP object
+ when call Tk.mainloop in the block which is given to new_* method,
+ because cannot finish initialize while the root widget is alive.
+
+ * ext/tk/lib/multi-tk.rb: fail to control a slave IP when Tk.mainloop
+ runs on the IP.
+
+Wed Jul 20 19:20:37 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (S_ISREG): need to define S_ISREG before it is used first.
+
+Wed Jul 20 18:40:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * io.c (wsplit_p): patch for the environment where
+ fcntl(F_GETFL, O_NONBLOCK) is not supported. in that case,
+ set FMODE_WSPLIT without fcntl check. [ruby-dev:26566]
+
+Wed Jul 20 18:07:11 2005 Tanaka Akira <akr@m17n.org>
+
+ * io.c (rb_io_ctl): update FMODE_WSPLIT_INITIALIZED and FMODE_WSPLIT
+ by F_SETFL.
+
+Wed Jul 20 10:04:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_class_path): need to adjust snprintf() len for
+ teminating NUL. [ruby-dev:26581]
+
+Wed Jul 20 04:01:55 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/socket/socket.c: sorry, BeOS also uses HAVE_CLOSESOCKET,
+ so reverted.
+
+ * ext/socket/extconf.rb: should not define HAVE_CLOSESOCKET
+ on windows.
+
+Wed Jul 20 03:16:43 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/socket/socket.c: should not undef close() on win32.
+ it's defined to rb_w32_close(), otherwise handle leaks.
+ [ruby-Bugs-2131]
+
+Wed Jul 20 00:48:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (syserr_initialize): don't use str before StringValue()
+ check. [ruby-dev:26579]
+
+Tue Jul 19 22:47:29 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (syserr_initialize): add 1 byte for snprintf() size for
+ NUL at the end. [ruby-dev:26574]
+
+Tue Jul 19 16:39:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_inspect): replace sprintf() with "%s" format all
+ over the place by snprintf() to avoid integer overflow.
+
+Tue Jul 19 14:08:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c: rbtk_eventloop_depth is used as int.
+
+ * ext/tcltklib/tcltklib.c: rbtk_pending_exception is tested with
+ NIL_P, so should assign Qnil instead of 0 (Qfalse).
+
+ * ext/tcltklib/tcltklib.c (ip_invoke_real): fixed memory leak when
+ ip is deleted.
+
+Tue Jul 19 13:19:46 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: For symmetry, add TkVariable#string. It
+ returns a string even if the default value type of the TkVariable
+ object is not "string".
+
+Mon Jul 18 21:40:20 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * eval.c (rb_call0): make the pointer to NODE volatile
+ instead of NODE itself.
+
+Mon Jul 18 14:32:21 2005 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (rb_call0): make body volatile to avoid optimization problem.
+ [ruby-dev:26195]
+
+Mon Jul 18 12:23:27 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/io/wait/wait.c: wrong backport from trunk. fixed: [ruby-dev:26562]
+
+Mon Jul 18 09:36:25 2005 Tanaka Akira <akr@m17n.org>
+
+ * rubyio.h (FMODE_WSPLIT, FMODE_WSPLIT_INITIALIZED): new constant.
+
+ * io.c (wsplit_p): new function.
+ (io_fwrite): split writing data by PIPE_BUF if wsplit_p is true in
+ multi-threaded mode.
+ [ruby-dev:26540]
+
+Sun Jul 17 13:46:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/wait/extconf.rb, ext/io/wait/wait.c: Win32 platforms support.
+
+Fri Jul 15 23:59:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parsers/parse_c.rb (handle_class_module): handle a
+ module enclosed in a built-in module. fixed: [ruby-talk:148239]
+
+ * lib/rdoc/parsers/parse_c.rb (find_body): allow macros as methods.
+
+ * lib/rdoc/parsers/parse_c.rb (find_call_seq): allow :nodoc: modifier
+ in C. [ruby-core:04572]
+
+Fri Jul 15 18:00:01 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * bcc32/Makefile.sub (COMMON_HEADERS): ruby_1_8 is using winsock.h.
+ failed to compile ext/socket on bcc5.6.4. [ruby-dev:26193]
+
+Fri Jul 15 07:58:56 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
+ sockets should be non-blocking mode. [ruby-dev:26405]
+
+ * lib/webrick/utils.rb (WEBrick::Utils.set_non_blocking): new method.
+
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#read_chunked):
+ should call sock.read repeatedly until the preferred size data
+ is obtained.
+
+Thu Jul 14 18:27:16 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_strerror): should return correct message
+ for ENAMETOOLONG and ENOTEMPTY. (bcc32) [ruby-dev:26533]
+
+ * win32/win32.c (rb_w32_strerror): stripped CR LF on the tail.
+ (bcc32) [ruby-dev:26533]
+
+Thu Jul 14 00:45:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * LEGAL (ext/nkf/nkf-utf8): updated from nkf1.7 to nkf-utf8.
+
+Wed Jul 13 19:37:47 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_mkdir): should set EEXIST (not EACCES)
+ if file or directory already exists. (bcc32) [ruby-dev:26508]
+
+ * win32/win32.c (rb_w32_rmdir): should set ENOTDIR (not EINVAL)
+ if it is not directory. (bcc32, win32)
+
+ * win32/win32.c (rb_w32_rmdir, rb_w32_unlink): restore
+ FILE_ATTRIBUTE_READONLY flag on function failure.
+
+Wed Jul 13 12:40:00 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: TclTkLib.do_one_event doesn't work.
+
+ * ext/tk/lib/tk.rb: Tk.thread_update is available.
+
+Tue Jul 12 23:32:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: keep curdir unexpanded.
+
+Mon Jul 11 08:31:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regex.c (read_special): fix parsing backslashes following \c in
+ regexp. fixed: [ruby-dev:26500]
+
+Mon Jul 11 02:53:00 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):
+ mistook in merging the patch of [ruby-dev:26235] at
+ revision 1.4.2.6.
+
+Sun Jul 10 23:58:04 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Pathname#unlink): try Dir.unlink first to
+ avoid unlink a directory by root.
+ cf. [ruby-dev:26237]
+
+Sun Jul 11 05:18:17 2005 Michael Neumann <mneumann@ruby-lang.org>
+
+ * lib/xmlrpc/server.rb (XMLRPC::Server): Switch from GServer over to
+ WEBrick. This makes file lib/xmlrpc/httpserver.rb obsolete (at least it is
+ no further used by the XML-RPC library).
+
+Sun Jul 10 12:47:01 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/debug.rb (debug_command): added a deficient format specifier.
+ fixed: [ruby-core:05419]
+
+Sat Jul 9 21:28:46 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_method_dispid): convert dispid
+ in Ruby and C by INT2NUM and NUM2INT.
+
+ * ext/win32ole/win32ole.c (ole_invoke2): ditto.
+
+ * ext/win32ole/test/testWIN32OLE.rb: ditto.
+
+ * ext/win32ole/test/testOLEMETHOD.rb: ditto.
+
+Fri Jul 8 15:45:04 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb (RSS::VERSION): 0.1.4 -> 0.1.5.
+
+ * test/rss/test_version.rb (RSS::TestVersion#test_version):
ditto.
- * string.c (rb_str_enumerate_chars): ditto, and suppress a warning
- by gcc6.
+ * lib/rss/0.9.rb (RSS::Rss::Channel::Item::Category):
+ domain attribute of <category> is optional. Thanks to
+ Chris Lee <clee@kde.org>.
-Fri Jul 17 15:36:52 2015 yui-knk <spiketeika@gmail.com>
+ * test/rss/test_parser.rb (RSS::TestParser#test_category20):
+ adjusted test case.
- * test/ruby/test_range.rb (test_first_last): Add test for
- `Range.new`. [Fix GH-971]
+Tue Jul 5 23:44:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 17 15:36:40 2015 yui-knk <spiketeika@gmail.com>
+ * instruby.rb: expand source library path.
- * test/ruby/test_range.rb (test_first_last): Add assertions to
- test of `Range#last` with exclude_end true case. [Fix GH-970]
+Tue Jul 5 23:27:14 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 17 09:59:14 2015 Eric Wong <e@80x24.org>
+ * array.c (sort_2): get rid of yet another bcc's bug.
+ fixed: [ruby-core:05152]
- * thread.c (rb_thread_alone): simplify
+ * eval.c (rb_thread_save_context): must not switch contexts during
+ re-allocating stack. fixed: [ruby-core:05219]
-Fri Jul 17 09:58:32 2015 Eric Wong <e@80x24.org>
+Tue Jul 5 15:15:10 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/rinda/tuplespace.rb: remove enumerator require
- * test/pathname/test_pathname.rb: ditto
+ * ext/tk/tkutil.c: fix typo.
-Fri Jul 17 05:33:58 2015 Eric Wong <e@80x24.org>
+Tue Jul 5 14:51:35 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * iseq.c (rb_iseq_compile_with_option): reuse result of previous
- GET_THREAD() call
- * thread.c (thread_create_core): ditto
- (rb_mutex_trylock): ditto
- (rb_mutex_lock): ditto
- * process.c (rb_waitpid): avoid multiple eval from RUBY_VM_CHECK_INTS
- * thread.c (rb_thread_check_ints): ditto
+ * ext/tcltklib/tcltklib.c: bug fix on treating Unicode strings.
-Thu Jul 16 19:12:30 2015 Eric Wong <e@80x24.org>
+ * ext/tcltklib/tcltklib.c: add methods to treat encoding mode.
- * thread.c (mutex_alloc): remove needless volatile
+ * ext/tcltklib/MANUAL.eng: add description of TclTkLib#encoding,
+ encoding_system, and so on.
-Thu Jul 16 22:05:29 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tcltklib/MANUAL.euc: ditto.
- * vm_core.h: constify rb_iseq_t::parent_iseq.
+ * ext/tk/tkutil.c: fail to create a Tcl's list string from an
+ array including multiple kind of encoded strings.
- rb_iseq_t::local_iseq is not constant data because
- local_iseq::flip_cnt can be modified (commented).
+ * ext/tk/lib/tk.rb: ditto.
- * compile.c: catch up this fix.
+ * ext/tk/lib/multi-tk.rb: 2nd arg of _{to|from}UTF8 is omissible.
- * iseq.c: ditto.
+ * ext/tk/lib/remote-tk.rb: ditto.
- * vm_insnhelper.c: ditto.
+ * ext/tk/lib/tk.rb: override TclTkLib#encoding and encoding= to
+ use TkCore::INTERP.encoding and encoding=.
-Thu Jul 16 21:47:47 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/tk/lib/tk.rb: when "require 'tk'" and $KCODE=='NONE', check
+ DEFAULT_TK_ENCODING to decide Ruby/Tk's system encoding mode.
- * process.c (redirect_dup2): when the new FD of dup2() conflicts
- with one of the timer thread FDs, the internal FD is diverted.
- [Bug #11336] [ruby-core:69886] [Bug #11350] [ruby-core:69961]
+ * ext/tk/lib/tk/encodedstr.rb: check both of Tk.encoding and
+ Tk.encoding_system. Tk.encoding has higher priority.
- * process.c (dup2_with_divert): new function for the above purpose.
+ * ext/tk/lib/tk/optiondb.rb: ditto.
- * thread_pthread.c (rb_divert_reserved_fd): new function for
- diverting reserved FD. If the given FD is the same as one of the
- reserved FDs, the reserved FD number is internally changed.
- It returns -1 when error. Otherwise, returns 0. It also returns
- 0 if there is no need to change reserved FD number.
+ * ext/tk/lib/tk/spinbox.rb: ditto.
- * thread_win32.c (rb_divert_reserved_fd): always returns 0 because
- of no reserved FDs.
+ * ext/tk/lib/tk/validation.rb: ditto.
- * internal.h (rb_divert_reserved_fd): prototype declaration.
- It is Ruby internal use only.
+ * ext/tk/lib/tk/namespace.rb: arguemnts for TclTkIp#_merge_tklist
+ should be UTF-8 strings.
-Thu Jul 16 21:47:46 2015 Koichi Sasada <ko1@atdot.net>
+Mon Jul 4 14:35:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * iseq.c (rb_iseq_disasm): rename rb_iseq_t *iseqdat to iseq
- and VALUE *iseq to code.
+ * sample/svr.rb: service can be stopped by ill-behaved client; use
+ tsvr.rb instead.
- * iseq.c (rb_iseq_disasm_insn): ditto.
+Mon Jul 4 13:25:21 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Jul 16 14:34:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * missing/erf.c: original erf.c by prof. Okumura is confirmed to
+ be public domain. reverted BSD implementation.
- * vm.c (REWIND_CFP): keep the arguments region inside the valid
- value stack. [ruby-core:69969] [Bug #11352]
+Mon Jul 4 11:15:37 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Jul 16 11:38:21 2015 Eric Wong <e@80x24.org>
+ * test/{dbm,gdbm,sdbm}/test_{dbm,gdbm,sdbm}.rb: skip some tests
+ which using fork on fork-less platforms.
- * process.c (close_unless_reserved): declare type of `fd' arg
+Sun Jul 3 23:26:30 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Thu Jul 16 08:47:29 2015 Eric Wong <e@80x24.org>
+ * test/wsdl/document/test_rpc.rb: compare formatted time string of
+ Time objects instead of comparing Time objects itself to avoid
+ unintended conflict of usec part. [ruby-dev:26220]
- * load.c (rb_construct_expanded_load_path): fstring expanded path
- (get_loaded_features_index): fstring feature path
- (rb_provide_feature): ditto
- [ruby-core:69871] [Feature #11331]
+Sat Jul 2 22:41:04 2005 Tanaka Akira <akr@m17n.org>
-Thu Jul 16 02:56:14 2015 Eric Wong <e@80x24.org>
+ * ext/socket/socket.c (unix_send_io, unix_recv_io): support x86-64 and
+ IA64.
- * thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT
+Sat Jul 2 17:06:23 2005 Tanaka Akira <akr@m17n.org>
-Thu Jul 16 01:00:46 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64.
+ (flush_register_windows): declare flush_register_windows.
- * test/ruby/test_process.rb (test_exec_close_reserved_fd): test for
- [Bug #11353]
+ * eval.c (flush_register_windows): new function.
-Thu Jul 16 00:35:42 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Fri Jul 1 17:48:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * .gitignore: ignore version.i.
+ * bignum.c (get2comp): revert all prior changes, and calculate
+ proper 2's complement for negative numbers. backported from
+ HEAD.
-Wed Jul 15 23:40:32 2015 Naohisa Goto <ngotogenome@gmail.com>
+Fri Jul 1 15:50:12 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_process.rb (test_deadlock_by_signal_at_forking):
- use RUBY (= EnvUtil.rubybin)
+ * missing/erf.c: need to include some headers for some platforms.
-Wed Jul 15 23:01:22 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * win32/win32.h (copysign, scalb): define for compatibility with
+ other platforms. [ruby-dev:26430]
- * process.c (redirect_close, parent_redirect_close): should not close
- reserved FD. It should be closed in the exec system call due to the
- O_CLOEXEC or FD_CLOEXEC flag. [Bug #11353] [ruby-core:69977]
+Fri Jul 1 15:37:42 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * process.c (close_unless_reserved): new function to close FD unless
- it is reserved for internal communication.
+ * missing/crypt.c: modified to make it compilable on platforms
+ other than BSD. [ruby-dev:26430]
- * thread_pthread.c (rb_reserved_fd_p): should check owner_process pid
- to avoid false positive in forked child process.
+ * missing/erf.c: ditto. code from <exp.c> merged.
-Wed Jul 15 18:31:18 2015 Eric Wong <e@80x24.org>
+Fri Jul 1 12:44:56 2005 Tanaka Akira <akr@m17n.org>
- * proc.c (proc_mark): remove redundant check
- * vm.c (env_mark): ditto
+ * lib/open-uri.rb (OpenURI.open_http): refine post_connection_check
+ call.
-Wed Jul 15 17:27:40 2015 Eric Wong <e@80x24.org>
+Fri Jul 1 11:34:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * iseq.c (iseq_mark): remove check for data pointer
- * proc.c (binding_mark): ditto
- * vm.c (rb_thread_mark): ditto
- * vm_trace.c (tp_mark): ditto
+ * missing/crypt.c: replaced with 4.4BSD version.
-Wed Jul 15 16:55:04 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * missing/erf.c: ditto.
- * encoding.c (enc_autoload): drop dummy encoding flag from
- the loaded encoding index. this flag is used only in this
- source.
+ * missing/vsnprintf.c: removed the third provision from the old
+ BSD license. [ruby-core:05177]
-Wed Jul 15 14:39:29 2015 Koichi Sasada <ko1@atdot.net>
+Fri Jul 1 01:45:21 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (vm_make_env_each): add comments about env layout.
- Do not use `i' to specify `new_ep'.
+ * enum.c (enum_min, enum_max): must not return Qundef.
+ fixed: [ruby-core:05299]
- * vm.c (rb_proc_create, rb_vm_make_proc_lambda): envval is not used.
+Fri Jul 1 00:18:40 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jul 15 08:59:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/delegate.rb (Delegator::respond_to): respond_to? must check
+ destination object. [ruby-talk:146894]
- * gc.h (RUBY_MARK_UNLESS_NULL): evaluate the argument only once
- to get rid of inadvertent side effects.
+Thu Jun 30 19:00:21 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
+ * lib/irb/ruby-lex.rb (RubyLex::identify_number): alternative implements
+ for [ruby-dev:26410]. And support a numeric form of 0d99999.
-Wed Jul 15 02:53:11 2015 Koichi Sasada <ko1@atdot.net>
+Thu Jun 30 17:28:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h, vm.c: remove rb_proc_t::envval because we can know it via
- rb_proc_t::block::ep.
+ * lib/irb/ruby-lex.rb (RubyLex::identify_number): should not treat
+ plain zero as an octal number. [ruby-dev:26410]
- rb_vm_proc_envval(const rb_proc_t *proc) returns an Env object which
- the Proc object use.
+Thu Jun 30 15:13:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c: catch up this fix.
+ * eval.c (rb_eval): pre-evaluate argument for unambiguous
+ evaluation order. [ruby-dev:26383]
- * vm_dump.c (rb_vmdebug_proc_dump_raw): ditto.
+Thu Jun 30 09:53:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jul 15 02:27:22 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/delegate.rb (Delegator::method_missing): forward unknown
+ method to the destination. suggested by
+ <christophe.poucet@gmail.com>. [ruby-talk:146776]
- * vm_core.h, vm.c: remove rb_env_t::prev_envval because we can know it
- via env->ep.
+Tue Jun 28 21:59:29 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- rb_vm_env_prev_envval(env) returns prev_envval via env->ep.
+ * dir.c, eval.c, hash.c, process.c, ruby.c: avoid warning "unused
+ variable" [ruby-dev:26387]
- * vm_core.h (rb_vm_env_local_variables): change parameter type
- from VALUE (T_DATA/env) to `const rb_env_t *' to make same as
- rb_vm_env_prev_envval().
+Sat Jun 25 17:15:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * proc.c: catch up these changes.
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_query): should
+ discard if key=val pair is empty. patch from Gary Wright.
- * vm_dump.c: ditto.
+Sat Jun 25 23:30:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm.c: rename macros.
+ * process.c (detach_process_watcher): terminate process watcher
+ thread right after rb_waitpid() succeed. [ruby-talk:146430]
- * ENV_IN_HEAP_P() to VM_EP_IN_HEAP_P() because it uses ep.
- * ENV_VAL() to VM_ENV_EP_ENVVAL() because it is too short.
+Sat Jun 25 15:49:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jul 15 01:09:09 2015 Koichi Sasada <ko1@atdot.net>
+ * enum.c (enum_min, enum_max): do not ignore nil as the first element.
- * vm.c: refactoring Proc/Env related code.
+Sat Jun 25 14:40:17 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * vm_core.h: remove blockprocval field from rb_proc_t and rb_binding_t.
- Instead of this field, mark given block in Proc at rb_env_t::env.
+ * ext/sdbm/init.c (fsdbm_select): SDBM#select had returned the array
+ which contained each elements twice. [ruby-dev:26358]
- * vm.c (vm_make_env_each): make an Env object with this layout.
- And also simplify parameters.
+Fri Jun 25 05:06:47 2005 Michael Neumann <mneumann@ruby-lang.org>
- * proc.c: catch up this fix.
+ * lib/xmlrpc/*, test/xmlrpc/*: backported changes from HEAD into 1.8
- * vm_core.h: remove rb_env_t::local_size because it is not used.
+Fri Jun 24 17:00:00 2005 Shigeo Kobayashi <shigeo@tinyforest.jp>
- * vm_dump.c (rb_vmdebug_env_dump_raw): catch up this fix.
+ * ext/bigdecimal/bigdecimal.c: patch from "NATORI Shin"
+ (u-tokyo.ac.jp) applied to fix rounding bug.
- * vm_core.h (rb_vm_make_env_object): remove rb_vm_make_env_object()
- because it is only referred from vm.c.
+Fri Jun 24 13:06:45 2005 akira yamada <akira@ruby-lang.org>
- * vm_eval.c (eval_string_with_cref): catch up this fix.
+ * lib/uri/common.rb, lib/uri/generic.rb: fixed typo in documents and
+ replaced some existent domain name with "example.com".
-Wed Jul 15 00:03:36 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Fri Jun 24 12:23:19 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * gc.c (__has_feature): move into internal.h.
+ * ext/tk/lib/tk.rb: fix typo on Tk.grid_propagate.
- * internal.h (__has_feature): ditto.
+ * ext/tk/lib/tk.rb: Tk.event_generate and TkWindow#event_generate
+ accept TkEvent::Event object as context argument.
- * internal.h (__has_extension): new macro.
+ * ext/tk/lib/tk/event.rb: add TkEvent::Event#valid_fields and
+ valid_for_generate to get field parameters of event_generate.
- * internal.h (STATIC_ASSERT): use _Static_assert with
- clang. [ruby-core:69931] [Bug #11343]
+Thu Jun 23 23:55:59 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jul 15 00:00:00 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * runruby.rb: should load built rbconfig.rb.
- * random.c (fill_random_bytes_syscall): fix compile error with
- clang. [ruby-core:69931] [Bug #11343]
+Thu Jun 23 16:53:15 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Jul 14 11:22:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/canvastag.rb: TkcGroup.new cannot include given items.
+ TkcGroup#exclude calls wrong method.
+ Add alias TkcGroup#add [ruby-talk:146049].
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#register):
- notify the handler thread of new timeout registration.
+ * ext/tk/lib/tk/canvas.rb: TkCanvas#dtag and some subcommands of
+ TkCanvas#addtag fail to treat a TkcTag argument.
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
- make sleep intervals adaptive than fixed period intervals.
+ * ext/tk/lib/tk/event.rb: add TkEvent::Event#generate to help to send
+ current event to other widgets.
- * lib/webrick/server.rb (WEBrick::GenericServer#start): flush
- shutdown pipe.
+Mon Jun 20 18:44:04 2005 Tanaka Akira <akr@m17n.org>
- * lib/webrick/server.rb (WEBrick::GenericServer#stop): request the
- server to stop immediately by sending data via shutdown pipe.
+ * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): DUMMY_SETJMP is replaced
+ because setjmp is not enough to fix getcontext and SPARC register
+ window problem.
-Mon Jul 13 23:58:08 2015 Stefano Tortarolo <stefano.tortarolo@gmail.com>
+Mon Jun 20 16:48:36 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#do_CONNECT):
- fix typos in debugger statements. [Fix GH-967]
+ * ext/dbm/dbm.c (fdbm_closed): new method DBM#closed?
-Mon Jul 13 19:11:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/gdbm/gdbm.c (fgdbm_closed): new method GDBM#closed?
- * lib/timeout.rb (timeout): warn as deprecated for a long time.
+ * ext/sdbm/init.c (fsdbm_closed): new method SDBM#closed?
-Mon Jul 13 01:37:27 2015 Zachary Scott <zzak@ruby-lang.org>
+ * test/dbm/test_dbm.rb, test/gdbm/test_gdbm.rb, test/sdbm/test_sdbm.rb
+ (teardown): close all db objects before deleting data files.
- * ext/openssl/ossl.c: [DOC] Backport ruby/openssl@dbb3fdb [Bug #11345]
- Thanks to Tomoya Chiba for the report and help with patch.
+ * win32/win32.{ch} (unlink): hook runtime function to change
+ file attribute before unlinking.
+ fixed: [ruby-dev:26360]
-Sun Jul 12 09:20:02 2015 Shota Fukumori <her@sorah.jp>
+Mon Jun 20 02:15:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/basicsocket.c: [DOC] typo (Errno::AGAIN -> Errno::EAGAIN)
+ * gc.c (define_final): document fix: finalizers never get called
+ before target object is destroyed.
- * ext/socket/socket.c: ditto
+Mon Jun 20 01:26:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * ext/socket/tcpserver.c: ditto
+ * ext/openssl/openssl_missing.c, ext/openssl/ossl.h,
+ ext/openssl/ossl_asn1.c, ext/openssl/ossl_bio.c,
+ ext/openssl/ossl_pkcs12.h, ext/openssl/ossl_x509req.c: avoid
+ compiler warnings. suggested by Michal Rokos.
- * ext/socket/udpsocket.c: ditto
+Sun Jun 19 14:09:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/unixserver.c: ditto
+ * gc.c (run_final): reduce unnecessary object allocation during
+ finalization.
- * io.c: ditto
+ * gc.c (rb_gc_call_finalizer_at_exit): deferred finalizers list should
+ be cleared before calling them. fixed: [ruby-talk:145790]
-Sun Jul 12 06:42:23 2015 ksss <co000ri@gmail.com>
+Fri Jun 17 13:01:40 2005 Tanaka Akira <akr@m17n.org>
- * test/stringio/test_stringio.rb (test_sysread): add a test for
- StringIO#sysread. [Fix GH-966]
+ * lib/time.rb (Time.parse): fix previous leap seconds support.
+ (Time.rfc2822): ditto.
+ (Time.xmlschema): ditto.
-Sat Jul 11 21:16:34 2015 ksss <co000ri@gmail.com>
+Thu Jun 16 15:06:55 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * ext/stringio/stringio.c (Init_stringio): [DOC] Fix an example,
- StringIO#puts should be set "\n" at last. [Fix GH-965]
+ * ext/tcltklib/tcltklib.c (ip_rb_threadVwaitCommand): Tcl_Release
+ was missing.
-Sat Jul 11 12:45:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 16 13:34:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/timeout.rb (Timeout#timeout): remove regexp with wrong line
- number and fix caller depth.
+ * ext/tk/lib/tk.rb: add Tk.getMultiple{Open|Save}File() which return
+ an Array of selected files.
-Fri Jul 10 22:05:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 16 12:53:24 2005 Tanaka Akira <akr@m17n.org>
- * lib/timeout.rb (ExitException): removed internal exception class
- and use Timeout::Error instead, as using throw/catch to isolate
- each timeouts now. [ruby-dev:49179] [Bug #11344]
+ * lib/time.rb (Time.parse): "Fri Jan 1 08:59:60 +0900 1999" was
+ parsed as "Fri Jan 01 09:00:00 JST 1999" even on an environment
+ which supports leap seconds.
+ (Time.rfc2822): ditto.
+ (Time.xmlschema): ditto.
-Fri Jul 10 17:41:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 16 08:29:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * dir.c (is_case_sensitive): get attributes by the file descriptor
- of open directory, instead of using mount point name.
+ * ext/dl/sym.c (rb_dlsym_call): needs FREE_ARGS before return.
+ fixed memory leak. [ruby-Bugs-2034]
-Fri Jul 10 10:46:02 2015 ksss <co000ri@gmail.com>
+Wed Jun 15 18:26:39 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/stringio/stringio.c (writable): remove unnecessary check for
- deprecated safe level 4. [Fix GH-963]
+ * ext/tk/lib/tk.rb: support "tk inactive" sub-command [for Tcl/Tk8.5a3]
-Thu Jul 9 15:07:12 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tk/namespace.rb: support "namespace path" sub-command and
+ 'namespace ensemble' sub-command [for Tcl/Tk8.5a3]
- * win32/win32.c (waitpid): return immediately if interrupted.
- reported by <takkanm AT gmail.com> [ruby-dev:49176] [Bug #11340]
+Tue Jun 14 02:02:43 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Jul 9 13:03:46 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/tkutil.c: add TkUtil::CallbackSubst.subst_arg(m, ...) &
+ _define_attribute_aliases(hash) to get substitution-argument from
+ attributes (e.g. subst_arg(:x,:y,:num,:button) --> "%x %y %b %b ").
- * vm_insnhelper.c (vm_search_super_method): use CI_SET_FASTPATH().
+ * ext/tk/lib/tk/event.rb: use _define_attribute_aliases().
-Thu Jul 9 11:07:06 2015 Koichi Sasada <ko1@atdot.net>
+Mon Jun 13 13:01:05 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * vm_core.h: remove rb_call_info_t::klass because
- rb_callable_method_entry_t has information about defined class.
+ * hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]
- * vm_insnhelper.c (vm_search_method): don't set ci->klass because
- it is removed.
+Mon Jun 13 01:54:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_insnhelper.c (rb_equal_opt): ditto.
+ * signal.c (sigexit): call rb_thread_signal_exit() instead of
+ rb_exit(). [ruby-dev:26347]
- * vm_insnhelper.c (vm_search_superclass): removed because it is too
- simple to write code directly.
+ * eval.c (rb_thread_signal_exit): a new function to exit on main
+ thread.
- * vm_insnhelper.c (vm_defined): don't use vm_search_superclass().
- This fix avoid searching current callable `me' twice.
+ * eval.c (rb_thread_switch): exit status should be retrieved from
+ ruby_errinfo.
- * vm_insnhelper.c (vm_search_super_method): ditto.
+ * eval.c (rb_f_exit): ensure exit(0) should call
+ exit(EXIT_SUCCESS).
-Thu Jul 9 10:03:10 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Jun 13 01:20:02 2005 Tanaka Akira <akr@m17n.org>
- * lib/net/http/responses.rb: Added 308 status to CODE_TO_OBJ list.
- [fix GH-961] Patch by @billinghamj
+ * eval.c (rb_gc_mark_threads): curr_thread may not be part of the
+ thread list. [ruby-dev:26312]
-Thu Jul 9 09:34:14 2015 Koichi Sasada <ko1@atdot.net>
+Fri Jun 10 23:35:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h (rb_control_frame_t): fix comments (layout index).
+ * missing/mkdir.c: remove. [ruby-core:05177]
-Thu Jul 9 09:25:50 2015 Zachary Scott <e@zzak.io>
+Fri Jun 10 22:54:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: Improve duplicate key warning with patch by @andremedeiros
- [Fix GH-938] https://github.com/ruby/ruby/pull/938 [Bug #11327]
+ * missing.h: fd_set stuffs need sys/types.h. fixed: [ruby-core:05179]
-Wed Jul 8 07:43:01 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Jun 9 23:58:12 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/csv.rb: typo fix [ci skip][fix GH-958] Patch by @henrik
+ * ext/Win32API/Win32API.c (Win32API_Call): disable global
+ optimization. fixed: [ruby-core:05143]
-Wed Jul 8 04:42:27 2015 Eric Wong <e@80x24.org>
+Thu Jun 9 23:35:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.c (iseq_data_to_ary): dump kw_arg as symbol
- * test/-ext-/iseq_load/test_iseq_load.rb: test kw_arg roundtrip
- [ruby-core:69891] [Bug #11338]
+ * enum.c (enum_inject): default the result value to Qundef to use
+ first element as initial value if not given.
-Tue Jul 7 18:18:41 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Thu Jun 9 19:55:41 2005 Tanaka Akira <akr@m17n.org>
- * random.c (fill_random_bytes_syscall): fix compile error.
+ * eval.c (ruby_longjmp): new macro to call longjmp, setcontext, etc.
+ (ruby_setjmp): new macro to call setjmp, getcontext, etc.
+ (ruby_setjmp): call setjmp before getcontext to avoid IA64 register
+ stack problem.
+ [ruby-talk:144939]
-Tue Jul 7 16:47:30 2015 Eric Wong <e@80x24.org>
+ * gc.c (Init_stack): remove IA64_MAGIC_STACK_LIMIT.
- * compile.c (COMPILE_ERROR): reduce GET_THREAD() calls
+Thu Jun 9 11:55:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 7 16:39:04 2015 Eric Wong <e@80x24.org>
+ * lib/delegate.rb (SimpleDelegator::__setobj__): need check for
+ recursive delegation. [ruby-core:04940]
- * random.c (fill_random_bytes_syscall): return -1 for error
- * random.c (fill_random_bytes): try urandom on syscall failure
+Wed Jun 8 18:47:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 7 15:02:18 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * misc/ruby-mode.el (ruby-expr-beg): fix looking point drift.
- * file.c (rb_str_normalize_ospath): skip invalid byte sequence not
- to loop infinitely. this case usually does not happen as the
- input name should come from real file systems.
+Wed Jun 8 11:11:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 7 14:40:08 2015 Koichi Sasada <ko1@atdot.net>
+ * bignum.c (get2comp): calculate proper 2's complement for
+ negative numbers. a bug in normalizing negative numbers
+ reported from Honda Hiroki <hhonda@ipflex.com>.
- * vm_backtrace.c: remove debug flag introduced accidentally.
+Wed Jun 8 08:33:10 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jul 7 12:05:37 2015 Koichi Sasada <ko1@atdot.net>
+ * enum.c (enum_min_by, enum_max_by): return nil if no iteration.
+ fixed: [ruby-dev:26245]
- * cont.c (cont_free): remove mysterious fflush()
- introduced at r19890, maybe accidentally.
+ * eval.c (rb_need_block): ensure a block is given.
-Tue Jul 7 11:45:14 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (backtrace): skip successive frames sharing same node.
- * proc.c (rb_method_call): because data->me should be non-NULL,
- do not check data->me
+Wed Jun 8 00:15:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c (method_inspect): ditto.
+ * ext/socket/socket.c (ruby_getaddrinfo__aix): merged a patch from
+ KUBO Takehiro <kubo at jiubao.org> to support AIX. [ruby-list:40832]
-Tue Jul 7 11:37:25 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jun 8 00:09:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: remove rb_iseq_t::orig because rb_iseq_clone()
- no longer exists.
+ * lib/yaml/rubytypes.rb (Array::to_yaml): merged a patch from
+ Tilman Sauerbeck <tilman at code-monkey.de>. [ruby-core:05055]
- * iseq.c: don't use rb_iseq_t::orig.
+ * lib/yaml/rubytypes.rb (Hash::to_yaml): ditto.
-Tue Jul 07 11:25:57 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jun 8 00:00:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * iseq.c, internal.h (rb_iseq_clone): removed because we don't need to
- clone iseq any more.
+ * ext/curses/curses.c (curses_insertln): merged a patch from
+ TAKAHASHI Tamotsu <ttakah at lapis.plala.or.jp>. [ruby-ext:02305]
- * class.c (clone_method): share iseq between cloned methods. All of
- method dependent information are able to refer from method entry.
+Tue Jun 7 19:34:15 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 7 04:42:25 2015 Eric Wong <e@80x24.org>
+ * lib/irb/init.rb (IRB::IRB.rc_file_generators): more flexible
+ IRB.rc_file_generators. [ruby-core:05163]
- * string.c (Init_String): use rb_str_freeze for String#freeze
- to resize internal buffer
- [ruby-core:69870] [Feature #11330]
+Tue Jun 7 18:39:31 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jul 7 04:12:32 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/thread.rb: RDoc documentation from Eric Hodel
+ <drbrain at segment7.net> added. [ruby-core:05148]
- * vm.c (vm_define_method): remove an unused local variable.
+Tue Jun 7 18:30:04 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jul 7 03:57:28 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb (create_makefile): add .SUFFIXES from depend file.
+ fixed: [ruby-dev:26294]
- * vm_core.h: remove rb_iseq_t::defined_method_id because it is not
- needed.
+Tue Jun 7 17:39:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * eval.c (frame_func_id): simplify. rb_callable_method_entry_t
- has enough information.
+ * object.c (rb_mod_cvar_get): Module#class_variable_get(): back
+ ported from CVS HEAD. [ruby-talk:144741]
- * eval.c (frame_called_id): ditto.
+ * object.c (rb_mod_cvar_set): Module#class_variable_set().
+ [ruby-talk:144741]
- * iseq.c (prepare_iseq_build): catch up this fix.
+Tue Jun 7 16:32:53 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c (rb_mod_define_method): ditto.
+ * sprintf.c (rb_f_sprintf): raise exception on debug mode (-d),
+ not verbose mode (-v/-w). [ruby-core:05123]
- * vm.c (vm_define_method): ditto.
+Tue Jun 7 10:30:49 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Jul 7 03:47:26 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/multi-tk.rb: slave-ip fails to call procedures
+ delegated by master-ip.
- * vm_core.h: remove a useless declaration.
+Sun Jun 5 23:00:35 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Jul 7 03:33:20 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/console.rb: create console when required
- * vm_core.h: remove rb_iseq_t::klass to reduce dynamic data.
+ * ext/tk/sample/tkextlib/tile/demo.rb: fix TypeError & create Console
- * internal.h, iseq.c (rb_iseq_klass): remove it because
- rb_iseq_t::klass is removed.
+Sat Jun 4 14:55:18 2005 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.c (vm_super_outside): do not see cfp->iseq, but
- check callable method entry on a frame.
- This fix simplify the logic to search super class.
+ * test/dbm/test_dbm.rb: merged from ext/dbm/testdbm.rb.
- * test/ruby/test_method.rb: support super() from Proc.
- Now, [Bug #4881] and [Bug #3136] was solved.
+ * test/gdbm/test_gdbm.rb: merged from ext/gdbm/testgdbm.rb.
- * proc.c (rb_mod_define_method): catch up this change.
+ * test/sdbm/test_sdbm.rb: renamed from ext/sdbm/testsdbm.rb with
+ modification to use test/unit.
- * vm.c (vm_define_method): ditto.
+Fri Jun 3 14:06:12 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * vm_backtrace.c (rb_profile_frames): now, each `frame' objects
- are rb_callable_method_entry_t data or iseq VALUEs.
+ * ext/tk/lib/multi-tk.rb: fix typo.
- This fix introduce minor compatibility issue that
- rb_profile_frame_label() always returns
- rb_profile_frame_base_label().
+Wed Jun 1 11:32:42 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * test/-ext-/debug/test_profile_frames.rb: catch up this change.
+ * bcc32/Makefile.sub: can use single quote character in DESTDIR.
+ [ruby-dev:26205]
-Tue Jul 7 01:52:14 2015 Koichi Sasada <ko1@atdot.net>
+Mon May 30 23:48:29 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * cont.c (fiber_init): initialize control frame correctly.
- This fix does not affect any ordinal execution, but
- affects debug prints.
+ * ext/tk/lib/tk/macpkg.rb: add PACKAGE_NAME information of Tcl/Tk
+ Extension.
-Mon Jul 6 17:59:05 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/msgcat.rb: ditto.
- * vm_insnhelper.c (vm_search_super_method): do not skip calling
- same methods in super.
- [Bug #3351]
+ * ext/tk/lib/tk/winpkg.rb: ditto.
- * test/ruby/test_super.rb: fix a test.
+ * ext/tk/lib/tkextlib/*: ditto.
-Mon Jul 6 17:59:11 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat May 28 16:40:15 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * ext/tk/tcltklib.c: removed deprecated safe level.
+ * test/openssl/test_x509store.rb: add test for expired CRL
+ and refine some assertions.
-Mon Jul 6 17:16:37 2015 Koichi Sasada <ko1@atdot.net>
+Sat May 28 05:15:51 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * method.h, proc.c (rb_method_entry_location): make it static
- and remove prefix `rb_' because it is used only in proc.c.
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_time): should
+ not set internal flag directry.
-Mon Jul 6 16:42:10 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sat May 28 02:00:11 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * test/lib/memory_status.rb: removed redundant path.
+ * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):
+ ENV["REQUEST_URI"] is better to get correct Request-URI
+ than ENV["SCRIPT_NAME"] + ENV["PATH_INFO"]. [ruby-dev:26235]
-Mon Jul 6 01:18:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 27 16:32:04 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/lib/test/unit/parallel.rb: make @@project_dir one level
- upper as this file had moved one level deeper.
+ * lib/mkmf.rb: use the semicolon as the path separator
+ in the environment of MSYS. fixed: [ruby-dev:26232]
-Sun Jul 5 23:54:10 2015 mizokami <suzunatsu@yahoo.com>
+Thu May 26 06:08:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/optparse.rb: [DOC] Fix typo.
+ * ext/tk/lib/tk.rb: add shortcut-methods of tk_call + tk_split_list
-Sun Jul 5 18:25:37 2015 Eric Wong <e@80x24.org>
+Wed May 25 22:52:42 2005 Shugo Maeda <shugo@ruby-lang.org>
- * gc.c (gc_profile_record_get): fix spelling error in keys
+ * lib/irb/input-method.rb: do not use Readline::HISTORY.pop.
+ (backported from HEAD)
-Sun Jul 5 14:49:01 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Wed May 25 21:55:40 2005 Shugo Maeda <shugo@ruby-lang.org>
- * README.md: fix a typo pointed out by raoulvdberge.
- https://github.com/ruby/ruby/pull/953#commitcomment-11998186
+ * ext/readline/readline.c: supported libedit. (backported from HEAD)
-Sun Jul 5 12:56:20 2015 Irvi Firqotul Aini <viarc7@gmail.com>
+ * ext/readline/extconf.rb: ditto.
- * README.md: Added link HowToReport bugs.
+ * test/readline/test_readline.rb: ditto.
-Sun Jul 5 10:51:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 25 20:06:27 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * array.c (rb_ary_sort_bang): the original array may not be
- embedded even if a substitution array is embedded, as it is
- embedded when the original array is short enough but not
- embedded. [ruby-dev:49166] [Bug #11332]
+ * ext/tk/lib/tk.rb: TkComm#tk_split_*list fail to split a kind of SJIS
+ strings. To avoid the trouble, add arguments to control converting
+ encoding, and do split on a UTF8 string.
-Sun Jul 5 09:31:40 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/multi-tk.rb: modify to attend encoding.
- * test/ruby/test_process.rb: test for fd=3 usability in child
+ * ext/tk/lib/remote-tk.rb: ditto.
-Sat Jul 4 19:43:31 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk/itemconfig.rb: ditto.
- * Add test case for empty array and first method with args.
- Patch by @yui-knk [fix GH-955]
+ * ext/tk/lib/tk/listbox.rb: ditto.
-Sat Jul 4 19:39:08 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk/namespace.rb: ditto.
- * Add test for `Enumerable#sort` with block. Patch by @yui-knk
- [fix GH-954]
+ * ext/tk/lib/tk/panedwindow.rb: ditto.
-Sat Jul 4 14:38:43 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/text.rb: ditto.
- * enum.c (zip_ary): remove volatile, use RB_GC_GUARD
- (zip_i): ditto
+ * ext/tk/lib/tk/textmark.rb: ditto.
-Sat Jul 4 10:42:57 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/texttag.rb: ditto.
- * lib/rubygems/test_case.rb (teardown): do not delete features
- loaded from the original load paths, the same libraries should
- be loaded again when the same features are required.
- [ruby-dev:49031] [Bug #11222]
+ * ext/tk/lib/tk/variable.rb: ditto.
-Sat Jul 4 09:38:52 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/winfo.rb: ditto.
- * vm.c (rb_vm_mark): reduce branches for always-set VM fields
- (rb_vm_add_root_module): ditto
+ * ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb: ditto.
-Fri Jul 03 20:05:10 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: ditto.
- * method.h: introduce rb_callable_method_entry_t to remove
- rb_control_frame_t::klass.
- [Bug #11278], [Bug #11279]
+ * ext/tk/lib/tk.rb: add TkWindow#lower_window/raise_window and
+ Tk#lower_window/raise_window by reason of method-name conflict
- rb_method_entry_t data belong to modules/classes.
- rb_method_entry_t::owner points defined module or class.
+ * ext/tk/lib/tk/canvas.rb: bug fix on TkCanvas#delete when given
+ non-TkcItem arguments.
- module M
- def foo; end
- end
+ * ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto.
+
+Wed May 25 12:59:48 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (OpenURI::Meta::RE_QUOTED_STRING): a content of
+ quoted-string should be zero or more characters.
+
+Tue May 24 23:42:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_pow): support Fixnum ** Float case directly
+ without coercing. [ruby-talk:142697] [ruby-talk:143054]
+
+Tue May 24 16:57:24 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (require_libraries): caused SEGV when continuation jumped
+ in to the required library code.
+
+Tue May 24 11:56:25 2005 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/getopts.rb: should warn only if verbose mode.
+ fixed: [ruby-dev:26201]
+
+Tue May 24 06:45:31 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): string
+ literals to be matched non-greedy.
+
+Tue May 24 00:34:32 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/calc: method name 'set' was able to crash with a class Set.
+ [ruby-dev:26210]
+
+ * test/wsdl/document/test_rpc.rb: dateTime comparison failed under
+ TZ=right/Asia/Tokyo (with leap second.) [ruby-dev:26208]
+
+Mon May 23 16:24:05 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/extconf.rb: Framework support on MacOS X Tiger.
+
+ * ext/tcltklib/README.1st: add description of Framework support options.
+
+Mon May 23 12:21:37 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (make_regexp): should not return junk address during
+ compile time. [ruby-dev:26206]
+
+Sun May 22 21:54:06 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.4.
+
+ == SOAP client and server ==
+
+ === for both client side and server side ===
+
+ * improved document/literal service support.
+ style(rpc,document)/use(encoding, literal) combination are all
+ supported. for the detail about combination, see
+ test/soap/test_style.rb.
+
+ * let WSDLEncodedRegistry#soap2obj map SOAP/OM to Ruby according to
+ WSDL as well as obj2soap. closes #70.
+
+ * let SOAP::Mapping::Object handle XML attribute for doc/lit service.
+ you can set/get XML attribute via accessor methods which as a name
+ 'xmlattr_' prefixed (<foo name="bar"/> -> Foo#xmlattr_name).
+
+ === client side ===
+
+ * WSDLDriver capitalized name operation bug fixed. from
+ 1.5.3-ruby1.8.2, operation which has capitalized name (such as
+ KeywordSearchRequest in AWS) is defined as a method having
+ uncapitalized name. (converted with GenSupport.safemethodname
+ to handle operation name 'foo-bar'). it introduced serious
+ incompatibility; in the past, it was defined as a capitalized.
+ define capitalized method as well under that circumstance.
+
+ * added new factory interface 'WSDLDriverFactory#create_rpc_driver'
+ to create RPC::Driver, not WSDLDriver (RPC::Driver and WSDLDriver
+ are merged). 'WSDLDriverFactory#create_driver' still creates
+ WSDLDriver for compatibility but it warns that the method is
+ deprecated. please use create_rpc_driver instead of create_driver.
+
+ * allow to use an URI object as an endpoint_url even with net/http,
+ not http-access2.
+
+ === server side ===
+
+ * added mod_ruby support to SOAP::CGIStub. rename a CGI script
+ server.cgi to server.rb and let mod_ruby's RubyHandler handles the
+ script. CGIStub detects if it's running under mod_ruby environment
+ or not.
+
+ * added fcgi support to SOAP::CGIStub. see the sample at
+ sample/soap/calc/server.fcgi. (almost same as server.cgi but has
+ fcgi handler at the bottom.)
+
+ * allow to return a SOAPFault object to respond customized SOAP fault.
- In this case, owner is M.
+ * added the interface 'generate_explicit_type' for server side
+ (CGIStub, HTTPServer). call 'self.generate_explicit_type = true'
+ if you want to return simplified XML even if it's rpc/encoded
+ service.
- rb_callable_method_entry_t data belong to only classes.
- For modules, MRI creates corresponding T_ICLASS internally.
- rb_callable_method_entry_t can also belong to T_ICLASS.
+ == WSDL ==
- rb_callable_method_entry_t::defined_class points T_CLASS or
- T_ICLASS.
- rb_method_entry_t data for classes (not for modules) are also
- rb_callable_method_entry_t data because it is completely same data.
- In this case, rb_method_entry_t::owner == rb_method_entry_t::defined_class.
+ === WSDL definition ===
- For example, there are classes C and D, and includes M,
+ * improved XML Schema support such as extension, restriction,
+ simpleType, complexType + simpleContent, ref, length, import,
+ include.
- class C; include M; end
- class D; include M; end
+ * reduced "unknown element/attribute" warnings (warn only 1 time for
+ each QName).
- then, two T_ICLASS objects for C's super class and D's super class
- will be created.
+ * importing XSD file at schemaLocation with xsd:import.
- When C.new.foo is called, then M#foo is searched and
- rb_callable_method_t data is used by VM to invoke M#foo.
+ === code generation from WSDL ===
- rb_method_entry_t data is only one for M#foo.
- However, rb_callable_method_entry_t data are two (and can be more).
- It is proportional to the number of including (and prepending)
- classes (the number of T_ICLASS which point to the module).
+ * generator crashed when there's '-' in defined element/attribute
+ name.
- Now, created rb_callable_method_entry_t are collected when
- the original module M was modified. We can think it is a cache.
+ * added ApacheMap WSDL definition.
- We need to select what kind of method entry data is needed.
- To operate definition, then you need to use rb_method_entry_t.
+ * sample/{soap,wsdl}: removed.
- You can access them by the following functions.
+Sun May 22 19:11:35 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * rb_method_entry(VALUE klass, ID id);
- * rb_method_entry_with_refinements(VALUE klass, ID id);
- * rb_method_entry_without_refinements(VALUE klass, ID id);
- * rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#intialize):
+ should initialize session id context. [ruby-core:4663]
- To invoke methods, then you need to use rb_callable_method_entry_t
- which you can get by the following APIs corresponding to the
- above listed functions.
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): add session id support.
- * rb_callable_method_entry(VALUE klass, ID id);
- * rb_callable_method_entry_with_refinements(VALUE klass, ID id);
- * rb_callable_method_entry_without_refinements(VALUE klass, ID id);
- * rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
+Sat May 21 10:24:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- VM pushes rb_callable_method_entry_t, so that rb_vm_frame_method_entry()
- returns rb_callable_method_entry_t.
- You can check a super class of current method by
- rb_callable_method_entry_t::defined_class.
+ * bcc32/Makefile.sub: tds files were not deleted when DESTDIR
+ included '\' path delimiter. [ruby-dev:26193]
- * method.h: renamed from rb_method_entry_t::klass to
- rb_method_entry_t::owner.
+Thu May 19 19:04:29 2005 speakillof <speakillof@yahoo.co.jp>
- * internal.h: add rb_classext_struct::callable_m_tbl to cache
- rb_callable_method_entry_t data.
+ * lib/rexml/encodings/SHIFT-JIS.rb: encoding and decoding were
+ swapped. [ruby-core:4772]
- We need to consider about this field again because it is only
- active for T_ICLASS.
+Wed May 18 23:42:25 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c (method_entry_i): ditto.
+ * error.c (exc_exception): reverted to call Exception#initialize
+ directly. fixed: [ruby-dev:26177]
- * class.c (rb_define_attr): rb_method_entry() does not takes
- defined_class_ptr.
+Wed May 18 23:39:09 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (mark_method_entry): mark RCLASS_CALLABLE_M_TBL() for T_ICLASS.
+ * dir.c (glob_helper): get rid of using String. [ruby-dev:26180]
- * cont.c (fiber_init): rb_control_frame_t::klass is removed.
+ * dir.c (push_braces): should skip balanced braces.
- * proc.c: fix `struct METHOD' data structure because
- rb_callable_method_t has all information.
+ * eval.c (ruby_options), win32/win32.c (NtInitialize): move argument
+ intialization back. [ruby-dev:26180]
- * vm_core.h: remove several fields.
- * rb_control_frame_t::klass.
- * rb_block_t::klass.
+Tue May 17 15:31:31 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- And catch up changes.
+ * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should
+ break the loop if the socket reached to EOF. [ruby-talk:142285]
- * eval.c: catch up changes.
+Tue May 17 11:52:18 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c: ditto.
+ * win32/win32.c (unixtime_to_filetime): use localtime() instead of
+ gmtime() when using FileLocalTimeToFileTime().
- * insns.def: ditto.
+Mon May 16 22:28:43 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c: ditto.
+ * win32/win32.h, {bcc32,win32,wince}/Makefile.sub: moved rb_[ugp]id_t
+ to get rid of redefinition warnings on mingw.
- * vm_args.c: ditto.
+ * class.c (rb_class_init_copy): singleton class is disallowed to copy,
+ from its definition. fixed: [ruby-talk:142749]
- * vm_backtrace.c: ditto.
+Mon May 16 08:52:29 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * vm_dump.c: ditto.
+ * win32/win32.{h,c}: define rb_[pgu]id_t.
- * vm_eval.c: ditto.
+Mon May 16 00:21:02 2005 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.c: ditto.
+ * lib/pathname.rb (Pathname#unlink): use SystemCallError instead of
+ Errno::EISDIR because EISDIR is not portable.
+ [ruby-core:5001]
- * vm_method.c: ditto.
+Sun May 15 22:11:33 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Fri Jul 3 14:30:18 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/drb/drb.rb (DRbObject#method_missing): use raise(exception).
+ [ruby-dev:26164]
- * win32/file.c: some mingw compilers need a tweek for the
- declarations of _wfreopen_s. [Bug #11320]
+Sun May 15 18:56:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 3 12:25:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in, ruby.h: define rb_[pgu]id_t macros instead of typedefs
+ to get rid of types which might not be defined yet. [ruby-dev:26165]
- * transcode.c (rb_econv_set_replacement): target encoding name can
- be empty now. [ruby-core:69841] [Bug #11324]
+Sun May 15 14:35:46 2005 Tanaka Akira <akr@m17n.org>
-Fri Jul 3 07:21:06 2015 Eric Wong <e@80x24.org>
+ * lib/pathname.rb (Pathname#unlink): unlink a symlink to a directory
+ was failed. [ruby-core:4992]
- * benchmark/bm_io_nonblock_noex.rb: new benchmark
- * ext/openssl/ossl_ssl.c (no_exception_p): new function
- (ossl_start_ssl): adjust for no_exception_p
- (ossl_ssl_connect): adjust ossl_start_ssl call
- (ossl_ssl_connect_nonblock): ditto
- (ossl_ssl_accept): ditto
- (ossl_ssl_accept_nonblock): ditto
- (ossl_ssl_read_internal): adjust for no_exception_p
- (ossl_ssl_write_internal): ditto
- (ossl_ssl_write): adjust ossl_write_internal call
- (ossl_ssl_write_nonblock): ditto
- * ext/stringio/stringio.c (strio_read_nonblock):
- delay exception check
- * io.c (no_exception_p): new function
- (io_getpartial): call no_exception_p
- (io_readpartial): adjust for io_getpartial
- (get_kwargs_exception): remove
- (io_read_nonblock): adjust for io_getpartial,
- check no_exception_p on EOF
- (io_write_nonblock): call no_exception_p
- (rb_io_write_nonblock): do not check `exception: false'
- (argf_getpartial): adjust for io_getpartial
- [ruby-core:69778] [Feature #11318]
+Sun May 15 09:57:30 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 3 07:13:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (unixtime_to_filetime): deal with DST.
+ [ruby-talk:141817]
- * dir.c (replace_real_basename): Win32 API does not set errno, get
- the last error by GetLastError() and map to errno. [Bug #10015]
+Sat May 14 23:59:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jul 2 21:32:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * error.c (exc_exception, {exit,name_err,syserr}_initialize): call
+ Execption#initialize. fixed: [ruby-talk:142593]
- * dir.c (replace_real_basename): show warnings at errors.
- [Bug #10015]
+Sat May 14 23:57:26 2005 Erik Huelsmann <ehuels@gmail.com>
-Thu Jul 2 18:39:20 2015 Koichi Sasada <ko1@atdot.net>
+ * configure.in: Check for the availability of pid_t, gid_t and uid_t and
+ remove AC_TYPE_UID_T. fixed: [ruby-core:04745]
- * gc.c: remove `#define RGENGC_OBJ_INFO 1' line introduced to
- debug Bug #11244.
+ * defines.h: Remove pid_t typedef.
-Thu Jul 2 18:34:26 2015 Koichi Sasada <ko1@atdot.net>
+ * ruby.h: Define rb_pid_t, rb_gid_t and rb_uid_t in accordance with
+ the available system types.
- * gc.c (rb_raw_obj_info): separated from rb_obj_info().
- Fill internal object information into passed buffer.
+ * process.c: Change instances of pid_t and gid_t to their rb_*
+ counterparts.
- * gc.h: declare rb_raw_obj_info().
+ * ext/pty/pty.c: Change pid_t to rb_pid_t.
-Thu Jul 2 16:15:04 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vms/config.h: Define HAVE_{P,G,U}ID_T to 1.
- * dir.c (replace_real_basename): update path type by the target
- attributes if possible, to improve the performance. [Bug #10015]
+ * win32/Makefile.sub: Remove #define for {g,u}id_t.
-Thu Jul 2 14:45:53 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * win32/win32.c: Change pid_t to rb_pid_t.
- * st.c: get rid of VC++'s warnings of C4700 (uninitialized local
- variable used). I think that these are wrong, but should shut them
- up.
+ * wince/Makefile.sub: Remove #define for {g,u}id_t.
-Thu Jul 2 14:15:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * wince/sys/types.h: Remove definitions of {p,g,u}id_t.
- * lib/rubygems.rb (Gem.load_path_insert_index): search
- @gem_prelude_index first.
+Fri May 13 23:44:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems/test_case.rb (Gem::TestCase#setup): keep already
- expanded paths to preserve instance variables.
+ * ext/extmk.rb: keep srcdir unexpanded.
-Thu Jul 2 14:12:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (create_makefile): quote topdir and hdrdir if necessary.
+ fixed: [ruby-core:04932]
- * ruby.c (process_options): also copy initial load path marks at
- setting load paths encoding.
+ * lib/mkmf.rb (configuration), {bcc32,win32,wince}/Makefile.sub: make
+ also INSTALL_PROG and INSTALL_DATA system dependent.
+ fixed: [ruby-core:04931]
-Thu Jul 2 12:26:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 13 17:54:39 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * test/rubygems/test_gem_server.rb (process_based_port): use
- dynamically chosen port numbers to get rid of conflicts.
+ * variable.c (generic_ivar_get): rb_attr_get should not warn.
+ [ruby-dev:26010]
-Thu Jul 2 11:58:59 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri May 13 12:28:43 2005 Daniel Berger <djberge@qwest.com>
- * test/rubygems/test_gem_specification.rb: skip tests which the
- platform does not permit the filename of its test file.
+ * array.c (rb_ary_select): can remove argc check. [ruby-core:4911]
-Thu Jul 2 11:36:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_array.rb: add test for find_all.
- * test/rubygems/test_gem_resolver_git_specification.rb: require
- rubygems/installer.rb before Gem::TestCase#setup runs, otherwise
- as Gem::TestCase#teardown restores $LOADED_FEATURES to the state
- at that time, the requiring the file in GitSpecification#install
- method causes a lot of constant redefinitions.
+Fri May 13 11:29:00 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Jul 2 10:43:36 2015 Eric Wong <e@80x24.org>
+ * eval.c (unknown_node): add volatile directive to prototype.
- * ext/socket/rubysocket.h: flags for common socket families
- (rsock_getfamily): update signature
- * include/ruby/io.h: comment socket FMODE flags
- * ext/socket/init.c (rsock_getfamily): memoize family
- * ext/socket/basicsocket.c: adjust rsock_getfamily calls
- * ext/socket/ancdata.c: ditto
- [ruby-core:69713] [Feature #11298]
+Thu May 12 17:08:48 2005 Tanaka Akira <akr@m17n.org>
-Thu Jul 2 10:30:01 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * io.c (rb_io_eof, remain_size, read_all, io_read, appendline)
+ (swallow, rb_io_each_byte, rb_io_getc): revert previous change.
- * lib/rubygems/resolver.rb: fixed NameError of Gem::Util::NULL_DEVICE.
+ * io.c (rb_io_eof, io_fread, appendline, swallow, rb_io_each_byte)
+ (rb_io_getc, rb_getc): call clearerr before getc to avoid
+ stdio incompatibility.
-Thu Jul 2 09:51:44 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu May 12 16:52:20 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * lib/rubygems/resolver.rb: fix error of null device reference with DOSISH
- platform.
+ * lib/rdoc/parsers/parse_c.rb: more readability for mixing
+ progress "c..." and warning message.
-Thu Jul 2 06:49:44 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu May 12 16:31:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/rubygems: Update to RubyGems HEAD(c202db2).
- this version contains many enhancements see http://git.io/vtNwF
- * test/rubygems: ditto.
+ * ext/nkf/nkf-utf8/nkf.c: follow nkf 2.0.5
-Wed Jul 1 23:50:34 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Thu May 12 16:15:01 2005 Tanaka Akira <akr@m17n.org>
- * test/net/http/test_httpresponse.rb
- (HTTPResponseTest#test_read_body_content_encoding_deflate_uppercase):
- fix a failure without zlib.
+ * io.c (rb_io_eof, remain_size, read_all, io_read, appendline)
+ (swallow, rb_io_each_byte, rb_io_getc): don't rely EOF flag.
+ [ruby-talk:141527]
-Wed Jul 1 10:54:56 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu May 12 15:56:20 2005 Tilman Sauerbeck <tilman@code-monkey.de>
- * Add test for Enumerable#none? [fix GH-950] Patch by @yui-knk
+ * lib/rdoc/parsers/parse_c.rb: show parsing progress for C files.
+ [ruby-core:4341]
-Wed Jul 1 09:30:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu May 12 13:47:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * struct.c (struct_set_members): hide internal back_members
- object, and members object does not need to be duped as it
- should be frozen and hidden.
+ * test/drb/test_drb{ssl,unix}.rb: can test drb
+ before install. (backported from HEAD) [ruby-dev:26146]
-Wed Jul 1 09:28:47 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu May 12 09:53:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * struct.c (struct_member_pos): revert r51080 to fix other
- implicit conversions but cast the return value to fix the
- previous implicit conversion.
+ * version.c (ruby_show_version): flush for non-tty stdout.
-Wed Jul 1 08:47:24 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Thu May 12 09:07:07 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * struct.c (struct_member_pos): avoid implicit conversion loses
- integer precision: 'long' to 'int'.
+ * test/ruby/envutil.rb, test/drb/drbtest.rb: can test drb
+ before install. (backported from HEAD) [ruby-Bugs-1672]
-Wed Jul 1 05:57:03 2015 Eric Wong <e@80x24.org>
+Thu May 12 01:23:55 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c (rb_add_method_iseq): add RB_GC_GUARD
- * class.c (clone_method): remove RB_GC_GUARD
- * struct.c (define_aref_method): ditto
- (define_aset_method): ditto
- * vm.c (vm_define_method):
- * iseq.c (rb_iseq_clone): add RB_GC_GUARD
+ * eval.c (rb_eval), parse.y (arg): reduce fixnum range literal at
+ parser. fixed: [ruby-dev:26113]
-Wed Jul 1 05:43:58 2015 Eric Wong <e@80x24.org>
+ * eval.c (unknown_node): ignore broken NODE to get rid of accessing
+ possibly inaccessible address. fixed: [ruby-dev:26122]
+ should emit more useful information like [ruby-dev:26126], though.
- * struct.c (AREF_HASH_THRESHOLD): new macro
- (id_back_members): new ID
- (struct_member_pos_ideal): new function
- (struct_member_pos_probe): ditto
- (struct_set_members): ditto
- (struct_member_pos): ditto
- (rb_struct_getmember): use struct_member_pos for O(1) access
- (rb_struct_aref_sym): ditto
- (rb_struct_aset_sym): ditto
- (setup_struct): call struct_set_members
- (struct_define_without_accessor): ditto
- (Init_Struct): initialize __members_back__
- [ruby-core:66851] [ruby-core:69705] [ruby-core:69821]
+Wed May 11 16:20:01 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Tue Jun 30 23:12:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/cgi.rb: new methods WEBrick::CGI#[], WEBrick::CGI#logger
+ and WEBrick::CGI#config. (backported from HEAD)
- * io.c (rb_io_reopen): FilePathValue() ensures the path
- NUL-terminated and frozen, so it is unnecessary to make it shared.
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape_path): should
+ not use String#split("/"). (backported from HEAD)
-Tue Jun 30 23:11:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 11 15:58:39 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * dir.c (check_dirname): ensure path name NUL-terminated for
- SHARABLE_MIDDLE_SUBSTRING.
+ * eval.c (break_jump): break should not cross functions.
+ [ruby-list:40818]
- * io.c (rb_sysopen): ditto.
+Wed May 11 10:39:37 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Tue Jun 30 18:38:16 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/tempfile.rb (Tempfile#unlink): fixed typo.
- * win32/file.c (rb_freopen): need to terminate by NUL.
+Wed May 11 01:03:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 30 17:28:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (TMP_ALLOC): use macro NEW_NODE() to get rid of warnings on
+ platforms which have no alloca(). fixed: [ruby-talk:141301]
- * io.c (rb_io_reopen): freopen(3) with OS encoding path.
- [ruby-core:69780] [Bug #11320]
+Sun May 8 23:17:47 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * win32/file.c (rb_freopen): wrapper of wchar version freopen(3).
- use _wfreopen_s() if available.
+ * ext/tk/lib/tk/timer.rb: fix typo.
-Tue Jun 30 08:24:08 2015 Eric Wong <e@80x24.org>
+Sun May 8 16:52:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * io.c (rb_io_oflags_modestr): handle O_TRUNC correctly
- * test/ruby/test_io.rb (test_reopen_stdio): new test
- Patch-by: cremno phobia <cremno@mail.ru>
- [ruby-core:69779] [Bug #11319]
+ * lib/profiler.rb: fixed "undefined method `[]' for nil:NilClass"
+ [ruby-core:4775] [ruby-talk:140401] [ruby-dev:26118]
-Tue Jun 30 02:47:02 2015 Eric Wong <e@80x24.org>
+Sat May 7 22:58:00 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/st.h (struct st_table): hide struct list_head
- * st.c (struct st_table_entry): adjust struct
- (head, tail): remove shortcut macros
- (st_head): new wrapper function
- (st_init_table_with_size): adjust to new struct and API
- (st_clear): ditto
- (add_direct): ditto
- (unpack_entries): ditto
- (rehash): ditto
- (st_copy): ditto
- (remove_entry): ditto
- (st_shift): ditto
- (st_foreach_check): ditto
- (st_foreach): ditto
- (get_keys): ditto
- (get_values): ditto
- (st_values_check): ditto
- (st_reverse_foreach_check): ditto (unused)
- (st_reverse_foreach): ditto (unused)
- [ruby-core:69726] [Misc #10278]
+ * lib/mkmf.rb (have_var): no libs argument is given.
-Mon Jun 29 17:38:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun May 1 09:58:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * insns.def (defineclass): do not quote unprintable characters at
- raising an exception.
+ * ruby.c (process_sflag): replace '-' in variable names with '_'.
+ [ruby-dev:26107]
-Mon Jun 29 16:01:24 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ruby.c (set_arg0): use also environment variable space for setting
+ $0. [ruby-core:04774]
- * lib/net/http/response.rb (inflater): CONTENT_ENCODING can be upper
- case. [ruby-core:69670] [Bug #11285] patched by Andy Chu
+Wed Apr 27 23:42:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 29 14:50:08 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * win32/Makefile.sub (OPTFLAGS): default global optimization to
+ disabled only for VC++6.
- * eval.c (add_activated_refinement): should not include the original
- class.
+Tue Apr 26 22:58:00 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Mon Jun 29 12:09:10 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c (ip_invoke_core): call Tcl's "::unknown"
+ command when can't get information of target command.
- * README.md: tweak styles. [fix GH-945][ci skip] Patch by @bryndyment
+Mon Apr 25 01:18:43 2005 Tanaka Akira <akr@m17n.org>
-Mon Jun 29 07:23:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * regex.c: declare rb_warn to have variadic argument. [ruby-core:4751]
- * template/sizes.c.tmpl: extract RUBY_DEFINT to define sizes of
- types checked by configure.in, and fix size of intptr_t in
- universal binary.
+Sat Apr 23 19:45:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Mon Jun 29 02:10:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c (ip_RubyExitCommand): exit with status code
+ via TclTkIp#_eval didn't work. [ruby-talk:139390]
- * insns.def (defineclass): preserve encoding of name in error
- messages for super class mismatch.
+Fri Apr 22 16:41:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * insns.def (defineclass): preserve encoding of name in error
- messages for non-class super.
+ * ext/tcltklib/tcltklib.c (ip_set_exc_message): fixed memory leak.
- * insns.def (defineclass): preserve encoding of name in error
- messages when already defined but type mismatch.
+ * ext/tcltklib/tcltklib.c: eTkCallbackReturn was not initialized.
-Sun Jun 28 12:07:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Apr 21 00:07:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c (rb_define_class_id_under): raise TypeError exception
- same as ruby level class definition when superclass mismatch.
+ * lib/mkmf.rb (create_makefile): support platforms have file separator
+ other than /.
-Sun Jun 14 19:02:03 2015 Benoit Daloze <eregontp@gmail.com>
+ * {bcc32,win32,wince}/Makefile.sub (BUILD_FILE_SEPARATOR): separator
+ of building platform.
- * lib/net/ftp.rb (makeport): close the TCPServer
- when sending the port fails.
+ * {bcc32,win32,wince}/Makefile.sub (CP, INSTALL): use COPY command.
- * test/net/ftp/test_ftp.rb: test for above.
+Wed Apr 20 23:22:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jun 26 12:48:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * Makefile.in, common.mk: miniruby depens on MINIOBJS.
- * transcode.c (load_transcoder_entry): fix transcoder loading race
- condition, by waiting in require. [ruby-dev:49106] [Bug #11277]
+ * dmydln.c (dln_load): dummy function to raise LoadError.
-Fri Jun 26 07:53:56 2015 Eric Wong <e@80x24.org>
+ * cygwin/GNUmakefile.in, {bcc32,win32,wince}/Makefile.sub: miniruby
+ can't load extensions on Windows.
- * enum.c (enum_minmax): simplify return value creation
- * test/ruby/test_enum.rb: test behavior on empty
- * hash.c (rb_hash_fetch_m): remove unnecessary volatile since r41597
- (env_reject_bang): trade volatile for GC guard
- (env_select): ditto
- (env_select_bang): ditto
- (env_keep_if): ditto
- (rb_env_clear): ditto
+Wed Apr 20 23:01:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 25 21:24:28 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * win32/ifchange.bat: delete testing files.
- * test/-ext-/popen_deadlock/test_popen_deadlock.rb: test [Bug #11265]
+Wed Apr 20 07:27:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/-test-/popen_deadlock/infinite_loop_dlsym.c: new ext to call
- dlsym(3) infinitely without GVL, used in the above test.
+ * {bcc32,win32,wince}/configure.bat, {bcc32,win32,wince}/setup.mak:
+ add extout option.
- * ext/-test-/popen_deadlock/extconf.rb: extconf.rb for the above
- ext. Currently, only enabled on Solaris (main target) and Linux
- (as a reference platform and for debugging the ext).
+ * bcc32/setup.mak: make configuration variables overridable.
-Thu Jun 25 19:24:25 2015 Naohisa Goto <ngotogenome@gmail.com>
+Wed Apr 20 04:15:27 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
- * configure.in: not to use vfork on Solaris to avoid deadlock
- occurred in vfork(2) with multi-threading and dynamic linker
- on Solaris. [Bug #11265] [ruby-dev:49089]
+ * lib/irb.rb lib/irb/* doc/irb: IRB 0.9.5
-Thu Jun 25 18:25:41 2015 Naohisa Goto <ngotogenome@gmail.com>
+Tue Apr 19 23:37:09 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/lib/envutil.rb (Test::Unit::Assertions#assert_no_memory_leak):
- NO_MEMORY_LEAK_ENVS is moved to Memory::NO_MEMORY_LEAK_ENVS
- to reduce child executions during test-all on Solaris.
+ * lib/ftools.rb (File.safe_unlink): do not modify a symlinked file.
- * test/lib/memory_status.rb (Memory::NO_MEMORY_LEAK_ENVS): ditto.
+Tue Apr 19 00:06:20 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 25 17:32:33 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/extmk.rb: expand path for ext/**/extconf.rb.
- * vm_method.c (rb_method_entry_create): need to call
- method_definition_reset() if def is given.
+Mon Apr 18 11:25:14 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- Actually, `me' is a new object, so we don't need to call it.
- It is just to make sure.
+ * ext/zlib/zlib.c (zstream_run): fixed SEGV. [ruby-core:4712]
- * vm_method.c (method_definition_reset): remove duplicated insertion.
+Sun Apr 17 23:57:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c (rb_method_entry_clone): assign dst->def here,
- not in method_definition_reset().
+ * ext/extmk.rb (extmake, parse_args): do not expand destdir.
-Thu Jun 25 16:44:54 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/extmk.rb (relative_from): treat mere drive letter as an absolute
+ path.
- * vm_method.c: make a rb_method_definition_t data (def) *after* making
- a rb_method_entry_t data (me).
+Sat Apr 16 17:01:16 2005 Kouhei Sutou <kou@cozmixng.org>
- Normally, `me' points `def'. Some Ruby objects pointed from `def'
- and objects are marked by `me' (mark_method_entry() in gc.c).
- However, `def' is built before making a `me', then nobody can mark
- objects pointed from `def' before making (and pointing from) `me'.
+ * sample/rss/tdiary_plugin/rss-recent.rb (rss_recent_cache_rss):
+ use the first date information of items as site date information
+ if channel doesn't have date information.
- I hope this patch solve #11244.
+Sat Apr 16 15:27:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c: remove `rb_' prefix from some static functions.
+ * configure.in (RUBY_PROG_INSTALL): not add -p option to INSTALL.
+ files need timestamps to be kept are only ar-archive on a few
+ platforms, and be installed by instruby.rb but not INSTALL.
+ fixed: [ruby-core:04721]
- * method.h (rb_method_entry_create): constify
+ * mkconfig.rb: purge autoconf value variables.
- * gc.c (mark_method_entry): add checking `def' and
- `def->body.iseq.iseqptr' availability because they can be NULL.
+Sat Apr 16 10:36:01 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Thu Jun 25 14:14:16 2015 takiy33 <takiy33@gmail.com>
+ * bcc32/Makefile.sub: quick hack... prepend DESTDIR.
+ still have restriction on DESTDIR ("", "/", "e:")
- * test/test_prime.rb (test_eratosthenes_works_fine_after_timeout):
- use spaces instead of TABs in ruby codes. [Fix GH-944]
+Sat Apr 16 03:59:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Jun 25 07:08:35 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/extconf.rb: check for OPENSSL_cleanse.
- * gc.c (obj_info, method_type_name): show method type name in a string
- instead of a number.
+ * ext/openssl/openssl_missing.h: ditto.
-Thu Jun 25 06:49:25 2015 Koichi Sasada <ko1@atdot.net>
+Thu Apr 14 19:18:30 2005 Minero Aoki <aamine@loveruby.net>
- * gc.c (obj_info): show more details for T_IMEMO/imemo_ment.
+ * lib/fileutils.rb (remove_file): ignore exceptions caused by
+ chmod.
-Thu Jun 25 06:40:46 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb (remove_dir): try to get rights to rmdir.
+ [ruby-Bugs:1502] (2 items backportted from HEAD, rev 1.53-54)
- * vm_method.c (rb_method_definition_reset): need a WB for
- VM_METHOD_TYPE_ATTRSET.
+Thu Apr 14 16:57:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 25 03:33:21 2015 Koichi Sasada <ko1@atdot.net>
+ * bcc32/Makefile.sub: failed to remove debug information files.
+ fixed: [ruby-dev:26034]
- * gc.c (RGENGC_OBJ_INFO, obj_info): add a macro to enable/disable
- rich obj_info() output.
+Wed Apr 13 23:40:21 2005 Kouhei Sutou <kou@cozmixng.org>
- At the default, the value of RGENGC_OBJ_INFO is
- (RGENGC_DEBUG | RGENGC_CHECK_MODE).
+ * lib/rss/rss.rb (RSS::VERSION): 0.1.3 -> 0.1.4.
- * gc.c (RGENGC_OBJ_INFO): force enable it to debug #11244.
+ * lib/rss/rss.rb (RSS::Element#converter): fixed converter
+ transmission bug.
- * gc.c (gc_mark_ptr): print more details with obj_info().
+Wed Apr 13 21:20:35 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * gc.c (gc_mark_children): remove useless debug prints.
+ * configure.in (mingw32): extract msvcr*.dll from objdump result.
-Thu Jun 25 02:40:33 2015 Eric Wong <e@80x24.org>
+Wed Apr 13 20:24:30 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal):
- do not process kwargs in blocking mode
- * test/openssl/test_ssl.rb: test sysread
+ * configure.in (mingw32): use actual runtime DLL name as ruby DLL
+ name and default load path.
-Wed Jun 24 16:54:11 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/Makefile.sub, win32/setup.mak: ditto.
- * gc.c (gc_mark_children): add additional debug code for #11244.
+Tue Apr 12 15:33:09 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Jun 24 16:05:42 2015 Eric Wong <e@80x24.org>
+ * ext/tcltklib/tcltklib.c (ip_finalize): better modification than the
+ previous commit [ruby-dev:26029].
- * string.c (rb_str_justify): use RB_GC_GUARD
+Tue Apr 12 12:38:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Jun 24 14:25:17 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tcltklib/tcltklib.c (ip_finalize): fix SEGV when Tcl_GlobalEval()
+ modifies the argument string to eval.
- * gc.c (gc_mark_ptr): add a check code for #11244.
+Tue Apr 12 02:21:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- It should be removed later. But we can remain this check
- because it is only a branch.
+ * ext/tcltklib/tcltklib.c (ip_finalize): add existence check of
+ Tcl commands before calling Tcl_GlobalEval().
-Wed Jun 24 12:49:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Apr 11 23:47:21 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * string.c (rb_fstring_cstr): new function to make a fstring from
- a string literal.
+ * lib/drb/drb.rb: [druby-ja:123] fix: When reference of my object is
+ loaded, the object is tainted.
- * internal.h (rb_fstring_lit): new macro to make a fstring from a
- string literal.
+ * test/drb/test_drb.rb: ditto.
- * include/ruby/intern.h (rb_strlen_lit): new macro to get the
- length of a string literal, borrowed from mruby/mruby@e4afd53.
+Mon Apr 11 22:18:23 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-Wed Jun 24 12:21:16 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * dir.c, file.c (lstat): avoid warnings for mingw.
- * re.c: Update documentation for Regexp class.
- [fix GH-937][ci skip] Patch by @davydovanton
+Mon Apr 11 20:11:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Jun 24 09:23:03 2015 Eric Wong <e@80x24.org>
+ * ext/tcltklib/tcltklib.c (ip_finalize): adhoc patch to avoid SEGV
+ when exit on Tcl/Tk8.3.x.
- * variable.c (generic_ivar_set): remove FL_ABLE check
- (gen_ivar_copy): ditto
- [ruby-core:69715]
+Mon Apr 11 15:26:25 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Jun 24 08:28:15 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb (configuration): shouldn't output hdrdir twice.
- * ext/socket/ancdata.c (bsock_recvmsg_internal): reduce stack use
- [ruby-core:69595] [Feature #11263]
+Mon Apr 11 12:09:05 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Tue Jun 23 14:32:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * {bcc32,win32,wince}/Makefile.sub: ri data was not installed
+ into correct path. [ruby-dev:26011]
- * error.c (name_err_receiver): raise ArgumentError if no receiver
- is available on this exception object. [Feature #10881]
+ * bcc32/Makefile.sub: defaulted install-nodoc. [ruby-dev:26011]
-Tue Jun 23 09:48:34 2015 Eric Wong <e@80x24.org>
+Sun Apr 10 10:12:42 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * dir.c (check_dirname): avoid volatile, use return value
- (dir_s_chroot, dir_s_mkdir, dir_s_rmdir): adjust callers
+ * ext/win32ole/win32ole.c(ole_invoke): retry after converting Qnil
+ to VT_EMPTY.
-Tue Jun 23 06:37:10 2015 Eric Wong <e@80x24.org>
+ * ext/win32ole/win32ole/tests/testWIN32OLE.rb: correct error
+ message string "Unknown" => "unknown".
- * struct.c (struct_ivar_get): cache member definition in a subclass
- Thanks to Sokolov Yura aka funny_falcon <funny.falcon@gmail.com>
- in https://bugs.ruby-lang.org/issues/10585
+Sat Apr 9 18:20:31 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Jun 23 04:58:06 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/image.rb: support to create TkImage object without
+ creating a new image object on Tk.
- * benchmark/bm_vm2_struct_big_href_hi.rb: new benchmark
- * benchmark/bm_vm2_struct_big_href_lo.rb: ditto
- * benchmark/bm_vm2_struct_big_hset.rb: ditto
- * benchmark/bm_vm2_struct_small_href.rb: ditto
- * benchmark/bm_vm2_struct_small_hset.rb: ditto
- Thanks to Sokolov Yura aka funny_falcon <funny.falcon@gmail.com>
- in https://bugs.ruby-lang.org/issues/10585
+ * ext/tk/lib/tk/menu.rb: use TkCommandNames on create_self()
-Mon Jun 22 18:08:48 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/tk/lib/tk/root.rb: TkRoot.to_eval() returns '.'.
- * test/lib/test/unit.rb (Test::Unit::Parallel#start_watchdog): removed
- because it has been meaningless since r36385. [Bug #11288]
+ * ext/tk/lib/tk/text.rb: add methods to create a TkText::IndexString
+ from (x, y) coords.
- * test/lib/test/unit.rb (Test::Unit::Parallel#_run_parallel): delete
- lines related to the removed start_watchdog method
+ * ext/tk/lib/tkextlib/tile/: add demo and update support status.
-Sun Jun 21 23:52:46 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Sat Apr 9 14:42:29 2005 Kouhei Sutou <kou@cozmixng.org>
- * NEWS: mention about Array#bsearch_index and Hash#fetch_values.
+ * sample/rss/tdiary_plugin/rss-recent.rb: supported configuration
+ via Web browser.
-Sun Jun 21 23:46:27 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Sat Apr 9 11:59:57 2005 Kouhei Sutou <kou@cozmixng.org>
- * NEWS: add a reference to a ticket.
+ * lib/rss: backoported from HEAD.
-Sun Jun 21 20:28:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss: refactored.
+ - gave a name to 'x'.
+ - undef_method -> remove_method for avoiding a warning in ruby 1.6.
- * internal.h (roomof): extract from type_roomof, and move from
- bignum.c.
-Sun Jun 21 18:32:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/parser.rb: @@setter -> @@setters.
- * ruby_atomic.h (ATOMIC_PTR_CAS): define by generic CAS macro, not
- via size_t, to suppress a warning by mingw gcc.
+ * lib/rss/parser.rb
+ (RSS::BaseListener.register_uri)
+ (RSS::BaseListener.uri_registered?)
+ (RSS::BaseListener.install_get_text_element):
+ swapped the first argument and the second argument.
+
+ * lib/rss/taxonomy.rb: swapped the first argument and the second
+ argument for RSS::BaseListener.install_get_text_element.
+ * lib/rss/image.rb: ditto.
+ * lib/rss/syndication.rb: ditto.
+ * lib/rss/dublincore.rb: ditto.
+ * lib/rss/parser.rb: ditto.
+ * lib/rss/1.0.rb: ditto.
+ * lib/rss/2.0.rb: ditto.
+ * lib/rss/0.9.rb: ditto.
+ * lib/rss/content.rb: ditto.
+
+ * lib/rss/parser.rb
+ (RSS::BaseListener.install_setter)
+ (RSS::BaseListener.register_uri): changed fallback way.
+
+ * lib/rss/parser.rb: added class name registry for complex model
+ elements. (ex. have childlen elements, have some attributes and
+ a child element and so on.)
+
+
+ * lib/rss/dublincore.rb: supported multiple Dublin Core items.
+ * lib/rss/maker/dublincore.rb: ditto.
+
+ * lib/rss/maker/image.rb: supproted new Dublin Core API.
+
+
+ * lib/rss/maker/base.rb: added default current_element implementation.
+
+
+ * lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need):
+ moved to RSS::Utils.
+
+ * lib/rss/utils.rb (RSS::Utils.new_with_value_if_need):
+ moved from RSS::TrackBackUtils.
+
+
+ * lib/rss/maker/image.rb: fixed invalid argument of
+ add_need_initialize_variable bug.
+ * lib/rss/maker/trackback.rb: ditto.
+
+
+ * lib/rss/rss.rb (Hash#merge): added for ruby 1.6.
+
+ * lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil
+ for date value.
+
+
+ * test/test_dublincore.rb: added tests for plural accessor and
+ multiple Dublin Core items.
+
+ * test/test_setup_maker_1.0.rb: fixed swapped actual and expected
+ values.
+
+ * test/rss/rss-assertions.rb (assert_multiple_dublin_core): added
+ an assertion for testing multiple Dublin Core items.
+
+ * test/rss/test_maker_dc.rb (test_rss10_multiple): added a test
+ for making multiple Dublin Core items.
+
+ * test/rss/test_maker_dc.rb (test_date): added a test for #date=
+ and #dc_date=.
+
+
+ * sample/rss/tdiary_plugin/rss-recent.rb:
+ new option: @options['rss-recent.use-image-link']:
+ use image as link instread of text if available.
+
+ * sample/rss/tdiary_plugin/rss-recent.rb (RSS_RECENT_VERSION):
+ 0.0.5 -> 0.0.6.
+
+Fri Apr 8 20:17:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): hdrdir needs to be defined also in
+ Config::CONFIG.
+
+ * lib/mkmf.rb (configuration, create_makefile): get rid of recursive
+ macro reference.
+
+Fri Apr 8 18:26:56 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c: add callbacks to OpenSSL::SSL::SSLContexts.
+ - SSLContext#client_cert_cb=(aProc). it is called when a client
+ certificate is requested by a server and no certificate was not
+ set for the SSLContext. it must return an Array which includes
+ OpenSSL::X509::Certificate and OpenSSL::PKey::RSA/DSA objects.
+ - SSLContext#tmp_dh_callback=(aProc). it is called in key
+ exchange with DH algorithm. it must return an OpenSSL::PKey::DH
+ object.
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): ignore the
+ argument if it's nil.
+
+ * ext/openssl/ossl_pkey.c
+ (GetPrivPKeyPtr, ossl_pkey_sign): should call rb_funcall first.
+ (DupPrivPKeyPtr): new function.
+
+ * ext/openssl/ossl_pkey_dh.c: add default DH parameters.
+
+ * ext/openssl/ossl_pkey.h: ditto.
+
+Fri Apr 8 01:55:20 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/demos-{en,jp}/goldberg.rb: reduced window size.
+ [ruby-dev:25992]
+
+Thu Apr 7 23:58:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): keep directory names in Makefile as macros.
+
+ * lib/mkmf.rb (configuration, create_makefile): ditto.
+
+ * lib/mkmf.rb (CXX_EXT): separate C++ extensions.
+
+Thu Apr 7 17:43:25 2005 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (rb_call0): "return" event hook should be always executed
+ if event_hooks is set. fixed: [ruby-core:04662]
+ (backported from HEAD)
+
+Mon Apr 4 23:17:52 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb (TkComm#array2tk_list): accept enc-mode argument to
+ decide whether convert encoding of each element or not.
+
+ * ext/tk/lib/tk/variable.rb (TkVariable#value=): fail to convert the
+ encoding of array elements when assign an array to an TkVariable
+ object.
+
+Mon Apr 4 10:26:48 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tk/lib/tk/dialog.rb: fixed typo.
+
+Sun Apr 3 17:16:33 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.{h,c} (rb_w32_fdopen): avoid warning on bcc32.
+ (backported from HEAD)
+
+Sat Apr 2 23:38:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CP, INSTALL): get rid of less portable options.
+
+ * lib/mkmf.rb (configuration, create_makefile): correct configuration
+ variable.
-Sun Jun 21 05:31:41 2015 Shota Fukumori <her@sorah.jp>
+ * {bcc32,win32,wince}/{Makefile.sub,setup.mak}: leave prefix empty in
+ config.status for backward compatibility. fixed: [ruby-core:04649]
- * ext/objspace/objspace_dump.c(dump_object): Return empty JSON object when
- passed object is a special const, instead of SEGV.
- Based patch by Kohei Suzuki (eagletmt). [ruby-core:69692] [Bug #11291]
+ * lib/mkmf.rb (create_makefile): ensure library directories get made
+ before copying libraries there.
- * test/objspace/test_objspace.rb(test_dump_special_consts): Test for above fix.
+Sat Apr 2 16:59:46 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+ * ext/tk/lib/tk.rb: forgot to update RELEASE_DATE
-Sat Jun 20 03:56:58 2015 Yusuke Endoh <mame@ruby-lang.org>
+ * ext/tk/lib/tk/variable.rb: fix namespace trouble when autoloading
- * enc/make_encmake.rb: the list of encoding extension libraries must
- not include encinit.c itself. It caused "undefined reference to
- Init_encinit".
+ * ext/tk/lib/tk/palette.rb: define Tcl variable 'tkPalette' as global
-Sat Jun 20 02:03:53 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/tk/lib/tk/dialog.rb: use array2tk_list method when calling
+ Tk.ip_eval.
- * process.c (rb_execarg_parent_start1): new macro ALWAYS_NEED_ENVP
- to generate envp_str anytime on Solaris 10 (or earlier version
- of Solaris) to avoid calling execv() which is async-signal unsafe
- on Solaris 10. [Bug #11265] [ruby-dev:49089]
+ * ext/tk/lib/tk/autoload.rb: add autoload entry 'TkDialogObj' and
+ 'TkWarningObj'
- * process.c (exec_with_sh, proc_exec_cmd): On Solaris 10,
- because ALWAYS_NEED_ENVP is 1 and envp_str is always generated,
- execv() in exec_with_sh() and proc_exec_cmd() are never called.
- To guarantee this, execv() is replaced by a macro to print
- out error message on Solaris 10.
+Sat Apr 2 02:19:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * process.c (proc_exec_sh): Because proc_exec_sh() may be called
- by rb_proc_exec() with envp_str = Qfalse, execl() is replaced
- by a macro that calls execle() with "extern char **environ"
- traditional global variable on Solaris 10.
- TODO: This may be unsafe and should be changed in the future.
- Although rb_proc_exec() is not used from inside current version
- of ruby, it may be called by third-party extensions.
+ * ext/tk/lib/tk.rb (TkWindow.initialize): accept 'without_creating'
+ option without 'widgetname' option to allow creating a widget object
+ which is used as an argument of Tcl/Tk's widget allocation commands.
-Sat Jun 20 01:10:13 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/tk/lib/tk/image.rb (TkImage.initialize): accept 'imagename'
+ option to create a image object by the given name.
- * NEWS: mention about $SAFE.
+Thu Mar 31 22:23:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jun 19 14:53:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (SRC_EXT): exclude just case different suffixes on case
+ insensitive file system platforms.
- * proc.c (rb_mod_define_method): now requires a block direct to
- this method call. [ruby-core:69655] [Bug #11283]
+ * README.EXT, README.EXT.ja (Appendix C): utility functions.
-Fri Jun 19 13:54:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Mar 31 14:15:44 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * proc.c (rb_mod_define_method): get rid of inadvertent ID
- creations at error.
+ * ext/openssl/ossl_engine.c (ossl_engine_s_load): should return
+ value. [ruby-dev:25971]
-Fri Jun 19 07:58:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Mar 31 08:25:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/extmk.rb: if no with-ext option is given, default to
- enable everything. [ruby-dev:49108] [Bug #11280]
+ * common.mk (RUBYOPT): clear for the environment RubyGems installed.
-Fri Jun 19 06:30:07 2015 Koichi Sasada <ko1@atdot.net>
+ * common.mk (clean-local): keep $(PREP) files till distclean.
- * bootstraptest/test_method.rb: remove a test because $SAFE=2 was
- obsolete.
+ * common.mk (check): do all tests.
- Please check btest, too.
+Thu Mar 31 06:00:20 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Jun 18 23:51:51 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/openssl/ossl_engine.c (ossl_engine_s_load): should not raise
+ error even if the specified engine could not be loaded. (Dynamic
+ engines don't have fixed name to load.)
- * bin/erb: $SAFE=3 is obsolete.
+Thu Mar 31 00:18:27 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Thu Jun 18 23:45:11 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * win32/ifchange.bat, win32/rm.bat: backported from HEAD.
- * safe.c: removed needless doc related $SAFE=2
+Wed Mar 30 23:44:50 2005 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-Thu Jun 18 23:38:07 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * Makefile.in, */Makefile.sub, */configure.bat,
+ cygwin/GNUmakefile.in, common.mk, configure.in, ext/extmk.rb,
+ lib/mkmf.rb, instruby.rb, runruby.rb: backport extout.
+ [ruby-dev:25963]
- * thread.c (rb_thread_safe_level): fix document. $SAFE=3 is obsolete.
- [ci skip]
+Wed Mar 30 17:41:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Jun 18 23:25:51 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c: add TclTkIp#_create_console() method to
+ create a Tcl/Tk's console window.
- * ext/extmk.rb: configure intersection of with-ext and not
- without-ext, as withouts is no longer true by default if
- with-ext option is given. [ruby-dev:49108] [Bug #11280]
+ * ext/tk/lib/multi-tk.rb: support TclTkIp#_create_console() method.
-Thu Jun 18 23:20:46 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/remote-tk.rb: ditto.
- * include/ruby/ruby.h: $SAFE=2 is now obsolete.
+ * ext/tk/lib/tk/console.rb: ditto.
- * dir.c, ext/fiddle/handle.c, ext/socket/basicsocket.c, file.c
- gc.c, io.c, process.c, safe.c, signal.c, win32/file.c:
- removed code for $SAFE=2
+ * ext/tk/lib/tk.rb: update RELEASE_DATE
- * test/erb/test_erb.rb, test/fiddle/test_handle.rb
- test/ruby/test_env.rb: removed tests for $SAFE=2.
+ * ext/tk/sample/demo-*/check2.rb: use 'return' in the Proc object.
-Thu Jun 18 22:50:07 2015 Yusuke Endoh <mame@ruby-lang.org>
+ * ext/tk/sample/tkextlib/**: ditto.
- * enc/make_encmake.rb: added --transes and --no-transes options.
+Tue Mar 29 22:11:56 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Thu Jun 18 18:24:12 2015 Eric Wong <e@80x24.org>
+ * test/rinda/test_rinda.rb: use DRbObject.new_with instead of reinit.
+ [ruby-dev:25961]
- * test/socket/test_unix.rb: replace sleep with select
+Mon Mar 28 23:40:40 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Thu Jun 18 17:59:06 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/drb/drb.rb: move method DRbObject#reinit to DRbObject.new_with.
+ extract method DRbObject.prepare_backtrace. add DRb.regist_server,
+ remove_server, fetch_server. change server in thread variable if
+ in-proc server. [druby-ja:113]
- * vm.c (rb_vm_control_frame_id_and_class): remove useless codes.
- `me' knows ID and owner class.
+ * lib/drb/gw.rb: ditto.
-Thu Jun 18 16:58:35 2015 Koichi Sasada <ko1@atdot.net>
+Mon Mar 28 20:43:34 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * method.h: constify rb_method_alias_struct::original_me and
- rb_method_refined_struct::orig_me.
+ * ext/syck/rubyext.c: get rid of warnings caused by a bug of VC.
- * class.c (move_refined_method): use RB_OBJ_WRITE() for
- me->def->body.refined.orig_me.
+Mon Mar 28 08:39:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 18 14:35:28 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/iconv/iconv.c (iconv_create): Iconv::Failure requires 3
+ arguments. (pointed out by NaHi)
- * ext/objspace/objspace.c (count_imemo_objects): support imemo_ment.
+Sat Mar 26 22:51:33 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Jun 18 13:32:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk.rb (_callback_entry_class?): add for checking whether
+ a class is available for a callback entry.
- * error.c (name_err_receiver): add NameError#receiver method.
- [Feature #10881]
+ * ext/tk/lib/tk.rb (after_cancel): add Tk.after_cancel(afterID) method.
-Thu Jun 18 10:00:06 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk.rb (array2tk_list): change from private module method
+ of TkComm to public module method.
- * safe.c: removed needless doc related $SAFE=3
+ * ext/tk/lib/tk.rb (cget): add check that slot argument is not
+ empty string.
-Thu Jun 18 09:59:23 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk.rb (configinfo): ditto.
- * safe.c: rename old method name for $SAFE=3
+ * ext/tk/lib/tk/itemconfig.rb (itemcget): add check that slot argument
+ is not empty string.
-Thu Jun 18 06:02:42 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/itemconfig.rb (itemconfiginfo): ditto.
- * compile.c (get_exception_sym2type, iseq_build_from_ary_body):
- rely on %+PRIsVALUE instead of calling rb_inspect directly
+ * ext/tk/lib/tk/entry.rb: add TkEntry#icursor and icursor= (alias of
+ cursor and cursor= method).
-Wed Jun 17 20:59:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/font.rb: improve font treatment when the font name is
+ empty string.
- * common.mk (ENC_MK): needs fake.rb if cross compilation.
- [ruby-dev:49098] [Bug #11272]
+ * ext/tk/lib/tk/variable.rb: add :variable, :window and :procedure
+ type.
-Wed Jun 17 20:23:29 2015 Tanaka Akira <akr@fsij.org>
+ * ext/tk/lib/tk/variable.rb: improve treatment of array-type
+ tkvariable.
- * ext/rbconfig/sizeof/extconf.rb: Check __float80.
+ * ext/tk/lib/tkextlib/blt.rb: add commands for zooming.
-Wed Jun 17 15:15:53 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tkextlib/blt/*: bug fix.
- * safe.c (safe_setter): of course, don't have to warn the limitation of
- $SAFE=3 after it's removed.
+ * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and add methods
+ to call TreeCtrl commands for bindings.
-Wed Jun 17 14:29:43 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/sample/tkextlib/blt/*: new sample scripts.
- * include/ruby/ruby.h: $SAFE=3 is now obsolete.
+ * ext/tk/sample/tkextlib/treectrl/*: ditto.
- * ext/socket/init.c, ext/socket/socket.c, ext/socket/tcpsocket.c
- ext/socket/udpsocket.c, gc.c, object.c, re.c, safe.c: removed code
- for $SAFE=3
+Fri Mar 25 10:53:16 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * bootstraptest/test_method.rb, test/erb/test_erb.rb, test/ruby/test_dir.rb
- test/ruby/test_file.rb, test/ruby/test_method.rb, test/ruby/test_regexp.rb
- test/ruby/test_thread.rb: remove tests for $SAFE=3
+ * configure.in (WIN32_LEAN_AND_MEAN): removed because a lot of
+ troubles. [ruby-list:40721]
-Wed Jun 17 12:13:33 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Mar 24 23:10:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ChangeLog: added contributor name.
+ * lib/mkmf.rb (macro_defined?): try to compile for an old compiler
+ which doesn't bail out at #error directive. [ruby-dev:25818]
-Wed Jun 17 10:57:28 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/mkmf.rb (check_sizeof): refine logging messages.
- * lib/csv.rb: accept to use Range object for row selection.
- contributed by Mitsutaka Mimura.
- [Feature #11267][ruby-dev:49091]
+Thu Mar 24 03:57:48 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Jun 17 09:50:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/utils.rb (WEBrick::Utils.create_listeners):
+ - should raise ArgumentError if no port is specified.
+ - even if the specified port is 0, all TCPServers should be
+ initialized with the port given to the first one.
- * lib/rdoc/servlet.rb (documentation_search, root_search):
- requires json for JSON.dump and fix sporadic failures due to
- the loading order.
+ * lib/webrick/server.rb (WEBrick::GenericServer#initialize): if :Port
+ parameter is 0, it should be updated with the port number which
+ actually listened.
-Tue Jun 16 19:19:53 2015 Tanaka Akira <akr@fsij.org>
+Wed Mar 23 00:35:10 2005 Shugo Maeda <shugo@ruby-lang.org>
- * ext/rbconfig/sizeof/extconf.rb: Check several types defined in C99
- and x86_64 ABI.
+ * test/ruby/test_settracefunc.rb (test_event): added tests for
+ "class" and "end" and "raise".
- * template/sizes.c.tmpl: Relax a pattern for types.
+Tue Mar 22 22:40:18 2005 Shugo Maeda <shugo@ruby-lang.org>
-Tue Jun 16 17:37:01 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (rb_call0): check event_hooks instead of trace_func.
- * test/objspace/test_objspace.rb: relax pattern because uncollectible
- flag and marked flag can be false at major GC.
- [Bug #10852]
+Tue Mar 22 17:30:44 2005 Shugo Maeda <shugo@ruby-lang.org>
-Tue Jun 16 04:50:44 2015 Eric Wong <e@80x24.org>
+ * eval.c (rb_add_event_hook): new function to add a hook function for
+ interpreter events. (backported form HEAD)
- * ext/socket/basicsocket.c (bsock_recv): document outbuf
- * ext/socket/unixsocket.c (unix_recvfrom): ditto
- * ext/socket/init.c (rsock_strbuf, recvfrom_locktmp): new functions
- (rsock_s_recvfrom): support destination buffer as 3rd arg
- (rsock_s_recvfrom_nonblock): ditto
- * string.c (rb_str_locktmp_ensure): export for internal ext
- * test/socket/test_nonblock.rb: test recv_nonblock
- * test/socket/test_unix.rb: test recv
- [ruby-core:69543] [Feature #11242]
+Sun Mar 20 22:51:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 16 04:38:02 2015 Eric Wong <e@80x24.org>
+ * lib/mkmf.rb (mkmf_failed): check if Makefile is created without
+ create_makefile.
- * ext/socket/ancdata.c (bsock_sendmsg_internal,
- bsock_recvmsg_internal):
- support "exception: false" kwarg
- * ext/socket/init.c (rsock_s_recvfrom_nonblock):
- ditto
- * ext/socket/init.c (rsock_s_recvfrom_nonblock): use rsock_opt_false_p
- * ext/socket/socket.c (sock_connect_nonblock): ditto
- * ext/socket/rubysocket.h (rsock_opt_false_p): new function
- * ext/socket/basicsocket.c (bsock_recv_nonblock): update rdoc
- * ext/socket/udpsocket.c (udp_recvfrom_nonblock): ditto
- * test/socket/test_nonblock.rb: new tests
- [ruby-core:69542] [Feature #11229]
+Sat Mar 19 23:48:10 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 15 14:33:02 2015 Akinori MUSHA <knu@iDaemons.org>
+ * misc/ruby-mode.el (ruby-expr-beg): returned true always.
+ fixed: [ruby-list:40683]
- * lib/set.rb: Make Set#each and SortedSet#each generate a sized
- enumerator. [GH-931] by kachick (Kenichi Kamiya)
+Sat Mar 19 00:41:02 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/test_set.rb: Import tests from Set into SortedSet. [GH-931]
- by kachick (Kenichi Kamiya)
+ * ext/tk/lib/tk/font.rb: add some TkFont class methods to get font
+ information without creating a TkFont object.
-Mon Jun 15 02:26:34 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and define some
+ classes for components of Tk::TreeCtrl
- * lib/net/http.rb (Net::HTTP#connect): use connect_nonblock and
- io/wait to eliminate timeout use. fix GH-899
+Thu Mar 17 17:42:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Jun 13 07:21:18 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * struct.c (make_struct): allow non local-id field
+ names. [ruby-core:04575]
- * thread.c (thread_start_func_2): don't interrupt when last thread
- exit unless main thread is already exited. Otherwise main thread
- could be wrongly interrupted when it uses rb_thread_call_without_gvl().
- Patch by Takehiro Kubo. [Bug #11237][ruby-dev:49044][GH-898]
+ * struct.c (inspect_struct): ditto.
- * test/-ext-/gvl/test_last_thread.rb: new test for the above fix.
+Wed Mar 16 23:36:02 2005 Shugo Maeda <shugo@ruby-lang.org>
- * ext/-test-/gvl/call_without_gvl/call_without_gvl.c: new ext for
- the above test.
- * ext/-test-/gvl/call_without_gvl/extconf.rb: ditto.
+ * eval.c (rb_call0): call_cfunc() should be protected.
-Mon Jun 15 00:14:33 2015 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_settracefunc.rb: added test for c-return.
- * ext/pathname/lib/pathname.rb (descend): Blockless form supported.
- (ascend): Ditto.
- [ruby-core:68820] [Feature #11052] Patch by Piotr Szotkowski.
+Wed Mar 16 22:20:25 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sun Jun 14 20:09:25 2015 Tanaka Akira <akr@fsij.org>
+ * object.c (str_to_id): fixed typo.
- * time.c (time_getlocaltime): [DOC] Add examples of valid utc_offset
- formats.
- [ruby-core:68306] [Misc #10905] Patch by Charles Korn.
+Wed Mar 16 18:08:32 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Jun 14 18:49:56 2015 Tanaka Akira <akr@fsij.org>
+ * eval.c (rb_call0): reorganize "return" event post.
- * ext/socket/raddrinfo.c (parse_numeric_port): Detect
- port overflow.
- (numeric_getaddrinfo): Use parse_numeric_port.
- numeric_getaddrinfo fails if port is too big now.
- This makes rb_getaddrinfo invokes the real getaddrinfo()
- on such condition.
- This change is related to [ruby-core:69355] [Bug #11179].
+Tue Mar 15 23:49:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jun 14 17:26:03 2015 Tanaka Akira <akr@fsij.org>
+ * ext/iconv/iconv.c (Init_iconv): InvalidEncoding also should include
+ Iconv::Failure.
- * enum.c (enum_chunk_while): New method Enumerable#chunk_while.
- [ruby-core:67738] [Feature #10769] proposed by Tsuyoshi Sawada.
+Tue Mar 15 16:38:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sun Jun 14 17:20:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/tkutil.c (ary2list): give wrong arguments to hash2kv()
- * file.c (rb_file_load_ok): try opening file without gvl not to
- lock entire process. [Bug #11060]
+Mon Mar 14 19:39:33 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sun Jun 14 10:43:50 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tk/timer.rb (TkTimer): forgot to clear @return_value
+ when restarting
- * tool/runruby.rb: just remove the lines of RUBY_VERSION check and raise
- instead of replacing the check to `true`, for getting rid of a
- warning `possibly useless use of true in void context`.
+ * ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer
-Sun Jun 14 10:13:55 2015 Kouhei Sutou <kou@cozmixng.org>
+Mon Mar 14 12:21:03 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/rexml/source.rb (REXML::IOSource#scan): Fix a typo in
- document. [fix GH-934]
- Patch by Anton Davydov. Thanks!!!
+ * ext/tk/lib/tk/timer.rb (TkRTTimer): forgot to reset the callback
+ time. So, 'continue' do all callbacks between 'stop' and 'continue'.
-Sun Jun 14 10:09:48 2015 Kouhei Sutou <kou@cozmixng.org>
+Mon Mar 14 08:14:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/rexml/attlistdecl.rb (REXML::AttlistDecl): Fix a typo in
- document. [fix GH-934]
- Patch by Anton Davydov. Thanks!!!
+ * object.c (str_to_id): warn for NUL containing strings.
-Sun Jun 14 06:24:57 2015 Benoit Daloze <eregontp@gmail.com>
+Mon Mar 14 00:13:49 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/ruby/test_io.rb: add test for IO.binread fd leak.
- See r50881.
+ * ext/tk/lib/tk/timer.rb (TkRTTimer): correct calculation of offset
+ value. get a little better accuracy.
-Sun Jun 14 05:23:51 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/tk/sample/demos-en/widget: use a binding with no local variables
+ when eval a sample script.
- * io.c (rb_io_s_binread): close fd if seek offset is invalid.
+ * ext/tk/sample/demos-en/bind.rb: ditto.
-Sun Jun 14 04:40:32 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/tk/sample/demos-en/tcolor: ditto.
- * test/lib/leakchecker.rb (check): refactor.
+ * ext/tk/sample/demos-jp/widget: ditto.
-Sun Jun 14 04:34:14 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/tk/sample/demos-jp/bind.rb: ditto.
- * test/lib/leakchecker.rb: Return false for no leaks.
- Otherwise the GC could run for nothing.
+ * ext/tk/sample/demos-jp/tcolor: ditto.
-Sun Jun 14 04:15:40 2015 Benoit Daloze <eregontp@gmail.com>
+Sun Mar 13 10:04:17 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * lib/delegate.rb: [DOC] Update SimpleDelegator example. [ci skip]
+ * test/rinda/test_rinda.rb: remove test_gc. [ruby-dev:25871]
-Sat Jun 13 20:28:14 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Mar 10 19:12:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * file.c (rb_stat_ino): get inode from the interval of struct st.
+ * ext/tcltklib/tcltklib.c (lib_eventloop_ensure): mis-delete a timer
+ handler when exit from a recursive called eventloop
- * win32/win32.c (stati64_set_inode): get nFileIndexHigh/Low, and set it
- to the interval of struct st as inode.
- [Feature #11216]
+ * ext/tk/lib/tk/timer.rb: new TkRTTimer class, which can works for a
+ realtime operation
- * win32/win32.c (stati64_set_inode_handle): call stati64_set_inode.
+ * ext/tk/sample/tkrttimer.rb: sample of TkRTTimer class
- * win32/win32.c (rb_w32_fstati64): call stati64_set_inode_handle.
+ * ext/tk/lib/tk/textmark.rb: move TkTextMark#+ and TkTextMark#- to
+ TkText::IndexModMethods
- * win32/win32.c (stati64_handle): call stati64_set_inode.
+ * ext/tk/lib/tk/text.rb: improve TkTextMark#+ and TkTextMark#-, and
+ add them to TkText::IndexModMethods module
-Sat Jun 13 19:44:53 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/sample/tktextio.rb: add test part of "seek by text index
+ modifiers"
- * ext/io/console/depend (.list.chksum): revert a part of r50859, because
- it was not mentioned at its commit log and it caused a build error on
- Windows ($(MAKE) is already quoted).
+Thu Mar 10 08:10:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Jun 13 17:35:11 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * re.c (make_regexp): need to free internal regexp structure when
+ compilation fails. [ruby-talk:133228]
- * vm_core.h (rb_thread_t): add th->name.
+Wed Mar 9 20:25:58 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * vm.c (th_init): initialize th->name.
+ * ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_write): call
+ rb_sys_fail if errno isn't 0. [ruby-dev:25831]
- * thread.c (Init_Thread): add Thread.name and name=. [Feature #11251]
+ * ext/openssl/lib/openssl/cipher.rb: fix typo. [ruby-dev:24285]
- * thread.c (rb_thread_inspect): show thread's name if set.
+Wed Mar 9 15:46:35 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * thread.c (rb_thread_getname): defined.
+ * lib/webrick/server.rb (WEBrick::GenericServer#start): should
+ restore @token if accept failure. suggested by Dominique Brezinski.
+ [ruby-core:04518]
- * thread.c (rb_thread_setname): ditto.
+Wed Mar 9 13:37:57 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Jun 13 11:39:43 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/sample/tktextio.rb: fix bug of handling 'end' position.
+ support initial text, overwrite setting and pos_gravity control.
- * lib/tempfile.rb: Fix typo. [fix GH-933] Patch by @Zorbash
+Tue Mar 8 18:16:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Jun 13 11:38:00 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/sample/tktextio.rb: New sample script. TkTextIO class in this
+ sample supports to use a text widget as if it is a I/O stream (such
+ like as StringIO class).
- * ext/openssl/ossl_ocsp.c: fix documentation on ocsp response cert status.
- [fix GH-932] Patch by @chrisholmes
+Tue Mar 8 13:54:40 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Jun 13 11:35:19 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/socket/socket.c: workaround for some of 4.4BSD-Lite derived OSs.
- * ext/bigdecimal/bigdecimal.gemspec: Fix require paths for released gem.
- [fix GH-929] Patch by @voxik
- * ext/io/console/io-console.gemspec: ditto.
+Tue Mar 8 12:36:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Jun 13 00:45:08 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ext/socket/socket.c: document from Sam Roberts
+ <sroberts@uniserve.com> for getsockopt and setsockopt is merged.
+ [ruby-doc:824]
- * lib/prime.rb: Return sized enumerators.
- Patch by Kenichi Kamiya [GH-931]
+Tue Mar 8 01:27:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Jun 13 00:45:06 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.66
+ fixed: [ruby-dev:25828]
- * lib/prime.rb: Fix with_object with no block given
+Mon Mar 7 21:35:02 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat Jun 13 00:44:59 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * sample/webrick/httpsd.rb: fix typo in comment. suggested by
+ Kazuhiko Shiozaki.
- * lib/prime.rb: Have with_index accept an offset parameter.
- Based on patch by T Yamada. [#11007]
+Mon Mar 7 14:55:43 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Jun 12 22:21:12 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * eval.c (block_pass): should not push unique number if a block is
+ not an orphan. [ruby-dev:25808]
- * test/ruby/test_extlibs.rb (TestExtLibs::check_existence): fix
- error. [Bug #11255] [ruby-dev:49079]
+Wed Feb 16 02:55:21 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Fri Jun 12 21:17:46 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_read,
+ ossl_ssl_write):
+ - need to set errno on Win32 platform.
+ - should call rb_sys_fail instead of rasing SSLError if
+ SSL_ERROR_SYSCALL occured.
+ - should wait for that the underlying IO become readable or
+ writable if the error was SSL_ERROR_WANT_READ or
+ SSL_ERROR_WANT_WRITE. [ruby-dev:25795]
- * pack.c (pack_{un,}pack): new template character `j` and `J`, pointer
- with signed and unsigned integers.
+ * ext/openssl/lib/openssl/buffering.rb
+ (Buffering#initialize): should set @eof and @rbuffer.
+ (Buffering#fill_rbuff): should rescue Errno::EAGAIN.
+ (Buffering#consume_rbuf): pointless eof flag resetting is deleted.
+ (Buffering#read): should return an empty string if the specified
+ size is zero.
+ (Buffering#readpartial): new method.
+ (Buffering#readline): fix typo.
+ (Buffering#getc): return the first character of string correctly.
+ (Buffering#each): fix typo. suggested by Brian Ollenberger.
+ (Buffering#readchar): fix typo.
+ (Buffering#eof?): should read again it the input buffer is empty.
+ (Buffering#do_write): should rescue Errno::EAGAIN.
+ (Buffering#puts): use "\n" as the output field separator.
- * NEWS: mention about this feature.
- [Feature #11215] [ruby-dev:49015]
+ * ext/openssl/lib/openssl/ssl.rb: set non-blocking flag to the
+ underlying IO.
-Fri Jun 12 21:01:44 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/openssl/extconf.rb: get rid of GNUmakefile generation.
- * file.c (File::SHARE_DELETE): new flag to be able to delete opened file
- on Windows.
+ * text/openssl/test_pair.rb: test for IO like methods.
- * include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.
+ * test/ruby/ut_eof.rb: test about empty file.
- * win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]
+Mon Mar 7 10:22:06 2005 WATANABE Hirofumi <eban@ruby-lang.org>
- * NEWS: mention about this feature.
- [Feature #11218] [ruby-dev:49022]
+ * lib/un.rb: should use OptionParser. (backported form HEAD)
-Fri Jun 12 18:21:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Mar 7 09:18:42 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ChangeLog: added missing commit message.
+ * string.c (rb_str_cmp_m): should not return false but nil.
+ fixed: [ruby-dev:25811]
-Fri Jun 12 18:20:37 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Mon Mar 7 01:22:14 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * sample/exyacc.rb: Fix some typos. [fix GH-927] Patch by @davydovanton
- * sample/list.rb: ditto.
- * sample/trick2013/kinaba/remarks.markdown: ditto.
+ * ext/tk/tkutil.c: remove the some codes which depend on the
+ difference between Ruby1.8 and 1.9, because st.c on Ruby1.9
+ was changed.
-Fri Jun 12 17:34:14 2015 Wojciech Mach <wojtek@wojtekmach.pl>
+Mon Mar 7 00:01:04 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * hash.c (rb_hash_fetch_values): add `Hash#fetch_values`.
- [Feature #10017] [Fix GH-776]
+ * ext/tcltklib/tcltklib.c: fail to call TclTkLib.mainloop when $SAFE==4
-Fri Jun 12 16:28:17 2015 Radan Skoric <radan.skoric@gmail.com>
+Sun Mar 6 16:41:33 2005 Minero Aoki <aamine@loveruby.net>
- * array.c (rb_ary_bsearch_index): Implement Array#bsearch_index
- method, which is similar to bsearch and returns the index or
- nil. [Feature #10730]
+ * lib/net/http.rb: HTTPHeader holds its header fields as an array
+ (backport from CVS HEAD rev 1.112-1.123). [ruby-list:40629]
-Thu Jun 11 19:11:22 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/net/http/test_httpheader.rb: new file.
- * ext/zlib/zlib.c: Fix indentation for rdoc.
- [Bug #11221][ruby-core:69465]
+Sun Mar 6 11:47:10 2005 Sam Roberts <sroberts@uniserve.com>
-Thu Jun 11 16:23:37 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/pp.rb: rdoced. [ruby-core:4490]
- * method.h (METHOD_ENTRY_BASIC_SET): fix last commit (unbalanced parens).
+Sun Mar 6 11:36:37 2005 Tanaka Akira <akr@m17n.org>
-Thu Jun 11 15:14:16 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/pp.rb (File::Stat#pretty_print): Etc.getpwuid and Etc.getgrgid
+ may return nil. [ruby-talk:129826]
+ reported by Daniel Berger.
- * configure.in: define SET_THREAD_NAME if it has pthread_set_name_np
- for FreeBSD, and don't define it if both pthread_setname_np
- and pthread_set_name_np don't exist.
+Sat Mar 5 18:06:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * thread_pthread.c (SET_THREAD_NAME): don't define if they don't exist.
+ * dir.c (fnmatch): removed unnecessary code. (ruby_1_8 didn't have
+ String#clear, so [ruby-dev:24749] didn't affect it)
- * thread_pthread.c (native_set_thread_name): run if SET_THREAD_NAME
- is defined.
+ * win32/win32.c (NtInitialize): ditto. (by numeric.c 1.101.2.14)
-Thu Jun 11 15:53:31 2015 Koichi Sasada <ko1@atdot.net>
+Sat Mar 5 16:29:26 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * method.h (METHOD_ENTRY_BASIC_SET): should clear last bit.
+ * ext/tk/lib/multi-tk.rb: freeze callback-entry objects
-Thu Jun 11 14:34:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tkextlib/tile.rb: support tile-0.6
- * lib/rubygems.rb: bump version to 2.4.7 and 2.4.8. these versions fixed
- CVE-2015-3900.
- * lib/rubygems/remote_fetcher.rb: ditto.
- * test/rubygems/test_gem_remote_fetcher.rb: added testcase for CVE-2015-3900
+Fri Mar 4 19:39:28 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 11 14:18:51 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#do_includes): replace
+ also locally defined modules.
- * lib/rubygems.rb: bump version to 2.4.6. It's missing change at r49774.
+ * ext/iconv/iconv.c: backport Iconv::InvalidEncoding from CVS HEAD.
-Thu Jun 11 13:50:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/strscan/strscan.c: moved misplaced rdoc.
- * array.c (ary_ensure_room_for_push): check if array size will
- exceed maximum size to get rid of buffer overflow.
- [ruby-dev:49043] [Bug #11235]
+Fri Mar 4 15:58:12 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * array.c (ary_ensure_room_for_unshift, rb_ary_splice): ditto.
+ * lib/cgi-lib.rb: add deprecation warning. [ruby-dev:25499]
+ getopts.rb, parsearg.rb, importenv.rb as well.
-Thu Jun 11 13:17:34 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Mar 4 11:17:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/test_cmath.rb (TestCMath#test_trigonometric_functions): should
- not compare float values (in complex values) by `==`.
+ * ext/tcltklib/tcltklib.c (ip_rbUpdateCommand): get rid of
+ warnings with Tcl/Tk 8.3 or former (backport from CVS_HEAD).
-Thu Jun 11 08:52:01 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tcltklib/tcltklib.c (ip_rb_threadUpdateCommand): ditto.
- * method.h: embed rb_method_entry_t::attr::flags (5 bits) into
- rb_method_entry_t::flags to make one word spare space.
+Fri Mar 4 10:15:30 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- Add some macros to access these flags.
+ * lib/set.rb (SortedSet::setup): a hack to shut up warning.
+ [ruby-talk:132866]
- * vm_method.c: use these macros.
+Fri Mar 4 07:07:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
- * internal.h: define IMEMO_FL_USHIFT and IMEMO_FL_USER[0-4]
- for T_IMEMO local flags.
+ * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.63
-Thu Jun 11 08:27:06 2015 Koichi Sasada <ko1@atdot.net>
+Thu Mar 3 23:49:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
- * vm.c: use VM_ASSERT instead of assert().
+ * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.62
- * vm_args.c: ditto.
+Thu Mar 3 11:49:51 2005 Kouhei Sutou <kou@cozmixng.org>
- * vm_insnhelper.c: ditto.
+ * sample/rss/tdiary_plugin/rss-recent.rb: added site information.
- * vm_method.c: ditto.
+Wed Mar 2 19:53:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 11 08:16:48 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/extmk.rb (parse_args): add DESTDIR only when not directed
+ already. fixed: [ruby-dev:25781]
- * vm_core.h: define VM_ASSERT() for assertion
- enabled only when (VM_CHECK_MODE > 0).
+Wed Mar 2 17:14:18 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * vm_insnhelper.c: move definition VM_CHECK_MODE
- from vm_insnhelper.c to vm_core.h.
+ * ext/tcltklib/tcltklib.c (lib_eventloop_core): fix typo
- * vm.c: remove <assert.h>
+Wed Mar 2 16:00:02 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Jun 11 06:46:07 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tcltklib/tcltklib.c: enforce thread-check and exception-handling
+ to avoid SEGV trouble.
+ [KNOWN BUG] When supports pthread and running multiple Tk
+ interpreters, an interrupt signal causes SEGV frequently. That
+ may be a trouble of Ruby's signal handler.
- * vm_insnhelper.c (check_frame): check type of cref_or_me first.
+ * ext/tk/tkutil/tkutil.c; fix a bug on converting a SJIS string array
+ to a Tcl's list string.
-Thu Jun 11 04:34:39 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * ext/tk/tcltklib.c: wrap Tcl's original "namespace" command to
+ protect from namespace crash.
- * test/test_cmath.rb: Add some assertions.
+ * ext/tk/lib/multi-tk.rb: enforce exception-handling.
-Thu Jun 11 00:34:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/multi-tk.rb: catch IRB_EXIT to work on irb.
- * template/fake.rb.in: expanded macro result may have spaces
- between tokens. [ruby-dev:49047] [Bug #11243]
+ * ext/tk/lib/tk.rb: ditto.
-Wed Jun 10 22:27:32 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * ext/tk/tcltklib.c: add TclTkLib.mainloop_thread?
- * lib/mkmf.rb: revert r50804 because of build failure when specifying
- LDFLAGS during configure, observed on Solaris with GCC 4.6.
- [Bug #11245]
+ * ext/tk/lib/multi-tk.rb: (bug fix) callback returns a value.
-Wed Jun 10 21:59:51 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/tk/lib/tk/canvas.rb (delete): bug fix when multiple arguments.
- * README.ja.md: fix markup miss.
+ * ext/tk/lib/clock.rb: fix 'no method error'.
-Wed Jun 10 11:06:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/clock.rb (self.clicks): accept a Symbol argument.
- * template/fake.rb.in: turn into erb template from autoconf
- template to fake more accurately.
+ * ext/tk/lib/variable.rb: be able to set default_value_type; :numeric,
+ :bool, :string, :symbol, :list, :numlist or nil (default; same to
+ :string). If set a type, TkVariable#value returns a value of the
+ type.
- * common.mk (fake.rb): needs preprocessed file now.
+ * ext/tk/lib/tkextlib/tclx/tclx.rb: add Tk::TclX.signal to warn the
+ risk of using TclX extension's 'signal' command.
- * version.c (Init_version): add dummy expression to
- RUBY_ENGINE_VERSION.
+ * ext/tk/sample/irbtk.rb: irb with Ruby/Tk.
-Tue Jun 9 12:31:25 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ext/tk/sample/demos-*/anilabel.rb: bug fix on 'show code'
- * lib/prime.rb: Simplify and optimize EratosthenesSieve
+ * ext/tk/sample/demos-*/aniwave.rb: new Ruby/Tk animation demo.
-Tue Jun 9 11:45:00 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ext/tk/sample/demos-*/pendulum.rb: ditto.
- * lib/prime.rb: Simplify and optimize EratosthenesSieve
- based on patch by Ajay Kumar. [Fixes GH-921]
+ * ext/tk/sample/demos-*/goldberg.rb: ditto.
-Mon Jun 8 05:09:58 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/sample/demos-*/widget: add entries of animation demos.
- * gc.c (obj_info): print method id for T_IMEMO/ment.
+Tue Mar 1 00:47:43 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Sun Jun 7 07:05:43 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * test/rinda/test_rinda.rb: backport from CVS_HEAD. use
+ MockClock.sleep instead of Kernel.sleep [ruby-dev:25387]
- * Move test cases from test/ruby/test_complex.rb to test/test_cmath.rb
+Tue Mar 1 00:34:24 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Sat Jun 6 18:23:41 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rinda/tuplespace.rb (Rinda::TupleSpace): improved keeper thread.
- * method.h: back to share rb_method_definition_t by
- rb_method_entry_t.
+ * test/rinda/test_rinda.rb: ditto.
- r50728 changed sharing `def's to isolating `def's
- on alias and so on. However, this change conflicts
- future improvement plan. So I change back to sharing approach.
+Mon Feb 28 11:42:23 2005 Ian Macdonald <ian@caliban.org>
- * method.h: move rb_method_definition_t::flags to
- rb_method_entry_t::attr::flags.
+ * exception error messages updated. [ruby-core:04497]
- rb_method_entry_t::attr is union with VALUE because this field
- should have same size of VALUE. rb_method_entry_t is T_IMEMO).
+Mon Feb 28 09:03:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- And also add the following access macros to it's fields.
+ * ext/socket/socket.c (Init_socket): add bunch of Socket
+ constants. Patch from Sam Roberts <sroberts@uniserve.com>.
+ [ruby-core:04409]
- * METHOD_ENTRY_VISI(me)
- * METHOD_ENTRY_BASIC(me)
- * METHOD_ENTRY_SAFE(me)
+Wed Feb 23 15:04:32 2005 akira yamada <akira@ruby-lang.org>
- * vm_method.c (rb_method_definition_addref): added instead of
- rb_method_definition_clone().
+ * lib/uri/generic.rb (split_userinfo): should split ":pass" into ""
+ and "pass". [ruby-dev:25667]
- Do not create new definition, but increment alias_count.
+Wed Feb 23 08:00:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * class.c (clone_method): catch up this fix.
+ * array.c (rb_ary_s_create): no need for negative argc check.
+ [ruby-core:04463]
- * class.c (method_entry_i): ditto.
+ * array.c (rb_ary_unshift_m): ditto.
- * proc.c (mnew_internal): ditto.
+Wed Feb 23 01:57:46 2005 Shugo Maeda <shugo@ruby-lang.org>
- * proc.c (mnew_missing): ditto.
+ * lib/net/imap.rb (initialize): handle certs correctly. Thanks,
+ NABEYA Kenichi. (backported from CVS HEAD)
- * vm_eval.c: ditto.
+Tue Feb 22 07:25:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c: ditto.
+ * parse.y (parser_yylex): identfier after dot must not be a variable.
- * vm_method.c: ditto.
+Mon Feb 21 10:04:49 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Jun 6 15:59:38 2015 Koichi Sasada <ko1@atdot.net>
+ * {bcc32,win32,wince}/Makefile.sub (config.h): add fcntl.
- * class.c: ins_methods_push() needs rb_method_visibility_t type on
- 2nd arg.
+ * win32/win32.[ch] (fcntl): ditto.
-Sat Jun 6 15:05:47 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/win32.c (rb_w32_connect): support nonblocking mode.
- * class.c (ins_methods_push): Change type and name of parameters
- to make more clear.
+ * ext/socket/socket.c (wait_connectable, ruby_connect): support
+ nonblocking connect on various platforms.
+ all changes are backported from CVS HEAD. [ruby-core:3154],
+ [ruby-core:4364].
-Sat Jun 6 08:52:13 2015 Eric Wong <e@80x24.org>
+Sun Feb 20 00:48:48 2005 Tanaka Akira <akr@m17n.org>
- * test/socket/test_nonblock.rb: try to avoid EMSGSIZE
- [ruby-core:69466]
+ * lib/open-uri.rb (URI::FTP#buffer_open): access mechanism
+ re-implemented according to RFC 1738.
+ reported by Guillaume Marcais. [ruby-talk:131650]
-Sat Jun 6 07:58:30 2015 Koichi Sasada <ko1@atdot.net>
+Sat Feb 19 18:11:47 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * gc.c: remove struct mark_tbl_arg and pass objspace directly
- to avoid indirect access overhead.
+ * lib/drb/drb.rb (DRbObject#respond_to?): take two arguments.
+ [ruby-dev:25722]
-Sat Jun 6 07:08:45 2015 Eric Wong <e@80x24.org>
+ * test/drb/drbtest.rb: ditto.
- * ext/socket/ancdata.c (bsock_sendmsg_internal): drop redundant assignment
+Sat Feb 19 13:52:02 2005 Tanaka Akira <akr@m17n.org>
-Sat Jun 6 01:00:06 2015 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/open-uri.rb: call OpenSSL::SSL::SSLSocket#post_connection_check
+ after connection is made.
- * ext/socket/ancdata.c (bsock_sendmsg_internal): all arguments are
- parsed even on systems without HAVE_STRUCT_MSGHDR_MSG_CONTROL
- to prevent SEGV caused by passing Qnil to RARRAY_LENINT and
- to preserve behavior before r50776.
- [Bug #11224] [ruby-core:69468] [Bug #11225] [ruby-core:69469]
+Sat Feb 19 01:32:03 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Fri Jun 5 22:37:42 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/bigdecimal/lib/bigdecimal/newton.rb: resolved LoadError.
+ [ruby-dev:25685]
- * class.c (ins_methods_push): change 3rd parameter's type
- from long to rb_method_visibility_t.
+ * ext/bigdecimal/sample/linear.rb: ditto.
- * class.c (ins_methods_i): catch up this fix.
+ * ext/bigdecimal/sample/nlsolve.rb: ditto.
- * class.c (method_entry_i): cast to st_data_t instead of `long'.
+ * ext/bigdecimal/lib/bigdecimal/nlsolve.rb: removed because this file
+ is sample script and same file exists in ext/bigdecimal/sample.
-Fri Jun 5 20:37:10 2015 Koichi Sasada <ko1@atdot.net>
+Fri Feb 18 17:14:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * internal.h: move definition of rb_cref_t to method.h.
+ * lib/xmlrpc/parser.rb (XMLRPC::FaultException): make it subclass
+ of StandardError class, not Exception class. [ruby-core:04429]
- * eval_intern.h: move definition of rb_scope_visibility_t
- to method.h.
+Thu Feb 17 20:11:18 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * method.h: change rb_cref_t::scope_visi from VALUE to
- rb_scope_visibility_t.
- [Bug #11219]
+ * lib/drb/drb.rb (DRbServer.default_safe_level): fix typo.
- * vm.c (vm_cref_new): accept rb_method_visibility_t directly.
+Thu Feb 17 20:11:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c (rb_vm_rewrite_cref): don't use 0,
- but METHOD_VISI_UNDEF.
+ * test/digest/test_digest.rb: separate test case for each algorithms.
+ [ruby-dev:25412]
- * vm_method.c (rb_scope_visibility_set): don't need to use cast.
+Thu Feb 17 11:54:00 2005 Nathaniel Talbott <ntalbott@ruby-lang.org>
- * vm_method.c (rb_scope_module_func_set): ditto.
+ * lib/test/unit/collector.rb (collect_file): now deletes paths added
+ to $LOAD_PATH instead of restoring it verbatim.
-Fri Jun 5 17:27:30 2015 Eric Wong <e@80x24.org>
+ * lib/test/unit/autorunner.rb (AutoRunner.run): fixed so that
+ 'ruby -rtest/unit -rtest1 -rtest2 -e0' will use the objectspace
+ collector again. Also tried to simplify the calling convention.
- * ext/socket/ancdata.c (bsock_sendmsg_internal): avoid msg_control
- ptr if msg_controllen is zero to fix portability problems.
+ * test/runner.rb: adjusted for new AutoRunner semantics.
-Fri Jun 5 09:17:45 2015 Eric Wong <e@80x24.org>
+ * lib/test/unit.rb: ditto.
- * ext/socket/ancdata.c (bsock_sendmsg_internal): fix build error
- from r50776
+Thu Feb 17 04:21:47 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Jun 5 07:05:58 2015 Eric Wong <e@80x24.org>
+ * lib/open3.rb (Open3::popen3): $? should not be EXIT_FAILURE.
+ fixed: [ruby-core:04444]
- * io.c (sym_wait_readable, sym_wait_writable): declare
- (io_getpartial): use sym_wait_readable
- (io_write_nonblock): use sym_wait_writable
- (Init_IO): initialize sym_wait_*able
+Thu Feb 17 00:09:45 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Fri Jun 5 06:43:00 2015 Eric Wong <e@80x24.org>
+ * test/drb/ignore_test_drb.rb: move TestDRbReusePort to new file
+ [ruby-dev:25238]
- * doc/extension.rdoc: note rb_get_kwargs changes keywords_hash
- [ruby-core:68507]
+ * test/drb/test_drb.rb: add method DRbService.ext_service, move
+ TestDRbReusePort to new file [ruby-dev:25238]
-Fri Jun 5 05:50:29 2015 Eric Wong <e@80x24.org>
+ * test/drb/test_drb.rb: ditto.
- * ext/socket/ancdata.c (bsock_sendmsg_internal): use rb_scan_args
- [ruby-core:69439] [Feature #11207]
+ * test/drb/test_drbssl.rb: ditto.
-Fri Jun 5 02:20:06 2015 Koichi Sasada <ko1@atdot.net>
+ * test/drb/test_drbunix.rb: ditto.
- * test/lib/envutil.rb (assert_no_memory_leak): change default value
- of limit from 1.5 to 2.0. It is ad-hoc fix to solve test failure
- in travis-ci.
+ * test/drb/ut_drb.rb: reduce sleep.
-Fri Jun 5 01:17:21 2015 Koichi Sasada <ko1@atdot.net>
+Thu Feb 17 00:02:27 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_insnhelper.c (vm_defined): no need to use cast.
+ * eval.c (is_defined): NODE_IASGN is an assignment.
-Fri Jun 5 01:14:02 2015 Koichi Sasada <ko1@atdot.net>
+Wed Feb 16 23:34:30 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm_insnhelper.c (vm_defined): show additional messages on rb_bug().
+ * lib/drb/drb.rb: add lazy stop_service. ([druby-ja:109])
-Fri Jun 5 01:06:02 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/drb/extserv.rb: ditto.
- * vm_method.c (rb_add_method_iseq): use intermediate struct to
- avoid initializing struct with variables.
- [Bug #11217]
+Wed Feb 16 17:07:57 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * method.h: add a comment about it.
+ * ext/tk/tkutil.c: Follow the change of st.c (st_foreach)
+ [ruby-list:40623].
+ Sometimes mis-convert from a Ruby's Array of SJIS Strings, which
+ includes some kind of SJIS characters, to a Tcl's UTF8 list string.
-Fri Jun 5 00:55:21 2015 Koichi Sasada <ko1@atdot.net>
+Mon Feb 14 23:58:17 2005 Kouhei Sutou <kou@cozmixng.org>
- * method.h: constify rb_method_refined_t::orig_me.
+ * lib/rss/parser.rb (RSS::ListenerMixin::tag_end):
+ fixed invalid namespace handling bug.
- Also constify the following functions.
+Mon Feb 14 13:12:38 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * rb_resolve_refined_method()
- * rb_method_entry_with_refinements()
- * rb_method_entry_without_refinements()
- * rb_method_entry_copy()'s parameter.
+ * ext/openssl/lib/openssl/ssl.rb
+ (OpenSSL::SSL::SSLSocket#post_connection_check): new method.
- * class.c: catch up this fix.
+Mon Feb 14 00:40:49 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm_insnhelper.c: ditto.
+ * lib/drb/drb.rb (InvokeMethod.perform): pass DRb info to sub thread.
- * vm_method.c: ditto.
+ * test/drb/test_drb.rb (test_01_safe1_safe4_eval): fix test case.
-Thu Jun 4 12:47:54 SGT 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Feb 13 23:13:46 2005 Kouhei Sutou <kou@cozmixng.org>
- * array.c: Revert r50763. because "reentered" is not typo.
+ * lib/rss/dublincore.rb (RSS::DublicCoreModel#date{,=}): added
+ convenient methods.
-Thu Jun 4 11:12:29 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/rss/0.9.rb (RSS::Rss::Channel#date{,=}): ditto.
- * ext/win32ole/win32ole.c: fix a typo. Patch by @davydovanton
- [fix GH-923]
- * include/ruby/st.h: ditto.
- * include/ruby/util.h: ditto.
+ * lib/rss/2.0.rb (RSS::Rss::Channel::Item#date{,=}): ditto.
-Thu Jun 4 10:54:30 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/rss/: added tests for the convenient methods.
- * array.c: fix a typo. Patch by @manish-shrivastava
- [fix GH-922]
+Sun Feb 13 22:43:03 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Thu Jun 4 09:52:02 2015 Eric Wong <e@80x24.org>
+ * lib/drb/drb.rb (DRbServer): add default_safe_level, safe_level,
+ config[:safe_level] ([druby-ja:120])
- * ext/openssl/lib/openssl/ssl.rb: use io/nonblock instead of fcntl
- [ruby-core:69382] [Feature #11190]
+ * test/drb/test_drb.rb, ut_eval.rb, ut_safe1.rb: ditto.
-Thu Jun 4 07:22:45 2015 Koichi Sasada <ko1@atdot.net>
+Sun Feb 13 16:56:52 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * method.h: introduce rb_method_refined_t for refined method entry.
+ * lib/webrick/cgi.rb (WEBrick::CGI.start): should set reason-phrase
+ to the value of status header field. ([ruby-dev:40617])
- * class.c (move_refined_method): catch up this fix.
+Sun Feb 13 00:52:33 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * gc.c (mark_method_entry): ditto.
+ * lib/erb.rb (ERB::Util.h, u): make it module_function.
- * vm_eval.c (vm_call0_body): ditto.
+Sat Feb 12 17:29:19 2005 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.c (vm_call_method): ditto.
+ * lib/open-uri.rb (OpenURI.open_loop): send authentication only for
+ the URI directly specified.
- * vm_method.c: ditto.
+Sat Feb 12 15:07:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 4 07:12:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * random.c (rand_init): suppress warning.
- * dir.c (dirent_match): match short names only when FNM_SHORTNAME
- flag is given, for the backward compatibility, and the new
- behavior is often dangerous. [ruby-core:69435] [Bug #11206]
+Sat Feb 12 13:54:03 2005 Tanaka Akira <akr@m17n.org>
-Thu Jun 4 05:44:01 2015 Eric Wong <e@80x24.org>
+ * lib/open-uri.rb: support https if the platform provides CA
+ certificates.
- * variable.c (special_generic_ivar): remove flag
- (givar_i, rb_mark_generic_ivar_tbl): remove functions
- (rb_free_generic_ivar, rb_ivar_lookup, rb_ivar_delete,
- generic_ivar_set, rb_ivar_set, rb_ivar_defined,
- rb_copy_generic_ivar, rb_ivar_foreach, rb_ivar_count,
- rb_obj_remove_instance_variable):
- adjust for lack of ivar support in special constants
- * test/ruby/test_variable.rb: test ivars for special consts
- * internal.h: remove rb_mark_generic_ivar_tbl decl
- * gc.c (gc_mark_roots): remove rb_mark_generic_ivar_tbl call
- [ruby-core:69441] [Feature #11208]
+Sat Feb 12 06:18:28 2005 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-Thu Jun 4 05:13:34 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/etc/etc.c (Init_etc): sGroup needs HAVE_ST_GR_PASSWD check.
+ [ruby-dev:25675]
- * vm_insnhelper.c (def_iseq_ptr): `iseqval' is not available any more.
+Fri Feb 11 17:40:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Jun 4 04:50:12 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths):
+ new method OpenSSL::X509::Store#set_default_paths.
- * class.c (method_entry_i): mtbl should not have `me' as NULL.
+Fri Feb 11 11:33:53 2005 Tanaka Akira <akr@m17n.org>
-Thu Jun 4 04:28:45 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/open-uri.rb (URI::HTTP#proxy_open): new option supported:
+ :http_basic_authentication.
+ suggested by Kent Sibilev. [ruby-core:4392]
- * class.c (clone_method): do not use me->klass, but use explicitly
- passed argument.
+Fri Feb 11 06:30:07 2005 George Ogata <g_ogata@optushome.com.au>
-Thu Jun 4 04:10:43 2015 Koichi Sasada <ko1@atdot.net>
+ * misc/ruby-mode.el: ignore parenthesis inside heredoc.
+ [ruby-core:04415]
- * vm_core.h (rb_vm_rewrite_cref_stack): rename to rb_vm_rewrite_cref().
+Fri Feb 11 04:54:13 2005 Tilman Sauerbeck <tilman@code-monkey.de>
- * class.c (clone_method): use renamed name.
+ * lib/rdoc/generators/html_generator.rb: [ruby-core:04412]
- * vm_insnhelper.c (rb_vm_rewrite_cref): do not use `node' in variable
- names.
+ * lib/rdoc/generators/ri_generator.rb: ditto.
-Wed Jun 3 23:03:50 2015 Koichi Sasada <ko1@atdot.net>
+Thu Feb 10 11:14:17 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_method.c: rename `rb_frame_...' to `rb_scope_...'.
+ * win32/Makefile.sub (COMMON_HEADERS): shouldn't include winsock2.h.
- * eval_intern.h: move decl. of rb_scope_visibility_set() to method.h.
+ * ext/socket/extconf.rb (sockaddr_storage): remove workaround for
+ mswin32.
- * load.c: catch up this fix.
+Thu Feb 10 10:29:16 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Jun 3 21:14:20 2015 Tanaka Akira <akr@fsij.org>
+ * ext/curses/curses.c: don't need to check HAVE_WCOLOR_SET excluding
+ window_color_set().
- * ext/rbconfig/sizeof/extconf.rb: Check C99 standard integer types.
+Thu Feb 10 00:47:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jun 3 21:00:47 2015 Tanaka Akira <akr@fsij.org>
+ * struct.c (make_struct): fixed: [ruby-core:04402]
- * configure.in: Don't check __int128.
+Wed Feb 9 08:07:08 2005 Paul Duncan <pabs@pablotron.org>
- * ext/rbconfig/sizeof/extconf.rb: Check __int128.
+ * ext/curses/curses.c (window_color_set): [ruby-core:04393]
- * ext/rbconfig/sizeof/depend: sizes.c depends on
- ext/rbconfig/sizeof/extconf.rb.
+Tue Feb 8 23:51:47 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * template/sizes.c.tmpl: Detect check_sizeof.
+ * lib/drb/drb.rb: reject :instance_eval, :class_eval, :module_eval
+ [druby-ja:117]
-Wed Jun 3 20:07:07 2015 Koichi Sasada <ko1@atdot.net>
+Tue Feb 8 13:06:12 2005 Sam Roberts <sroberts@uniserve.com>
- * class.c (clone_method): remove redundant check for me->def != NULL.
- Now, all `me` have `me->def`.
+ * ext/socket/socket.c (Init_socket): SO_REUSEPORT added.
+ [ruby-talk:130092]
- * proc.c (rb_method_entry_location): ditto.
+Tue Feb 8 09:30:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm.c (rb_vm_check_redefinition_opt_method): ditto.
+ * lib/cgi.rb (CGI::Cookie): [ruby-talk:130040]
- * vm.c (add_opt_method): ditto.
+Tue Feb 8 00:19:02 2005 Tanaka Akira <akr@m17n.org>
- * vm_eval.c (vm_call0_body): ditto.
+ * lib/resolv.rb (Resolv::DNS::Name#subdomain_of?): new method.
+ (Resolv::DNS::Name#inspect): ditto.
+ Suggested by Sam Roberts. [ruby-talk:129086]
-Wed Jun 3 19:24:12 2015 Koichi Sasada <ko1@atdot.net>
+Mon Feb 7 10:06:30 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: rename enum missing_reason to enum method_missing_reason.
+ * object.c: [ruby-doc:818]
- * vm_core.h: use enum method_missing_reason for
- rb_thread_t::method_missing_reason.
+Mon Feb 7 01:56:20 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_eval.c: catch up this fix.
+ * instruby.rb, rubytest.rb (srcdir): no longer embed srcdir into
+ rbconfig.rb. (backported from CVS HEAD)
- * vm_insnhelper.c: ditto.
+ * ext/socket/extconf.rb (sockaddr_storage): winsock2.h have the
+ definition of struct sockaddr_storage, but socket.c doesn't
+ include it because this version of ruby still has binary level
+ compatibility with winsock1.
-Wed Jun 3 16:17:21 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * lib/mkmf.rb (create_makefile): should support header files in
+ depend file.
- * vm.c: eagerly allocate `loading_table`. This eliminates the need to
- do NULL checks when looking up the `loading_table` hash.
- https://github.com/ruby/ruby/pull/918
+Mon Feb 7 01:21:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * load.c: remove various NULL checks
+ * ext/socket/extconf.rb: check if getaddrinfo() works fine only when
+ wide-getaddrinfo option is not given. fixed: [ruby-dev:25422]
-Wed Jun 3 11:47:15 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb ($extmk): check if under ext directory.
- * method.h: change fields order to gather frequent access fields.
+ * lib/mkmf.rb (Logging.postpone): allow recursive operation.
- * vm_insnhelper.c (vm_call_method): add LIKELY().
+ * lib/mkmf.rb (try_constant): make sure if really a constant, reduce
+ the number of times of compile.
-Wed Jun 03 10:35:45 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb (have_macro, have_var, byte_order): new functions.
- * method.h: split rb_method_definition_t::flag to several flags.
+ * lib/mkmf.rb (find_library): allow directory list with separators.
- `flag' contains several categories of attributes and it makes us
- confusion (at least, I had confused).
+ * lib/mkmf.rb (arg_config): manage provided configuration options.
- * rb_method_visibility_t (flags::visi)
- * NOEX_UNDEF -> METHOD_VISI_UNDEF = 0
- * NOEX_PUBLIC -> METHOD_VISI_PUBLIC = 1
- * NOEX_PRIVATE -> METHOD_VISI_PRIVATE = 2
- * NOEX_PROTECTED -> METHOD_VISI_PROTECTED = 3
- * NOEX_SAFE(flag) -> safe (flags::safe, 3 bits)
- * NOEX_BASIC -> basic (flags::basic, 1 bit)
- * NOEX_MODFUNC -> rb_scope_visibility_t in CREF
- * NOEX_SUPER -> MISSING_SUPER (enum missing_reason)
- * NOEX_VCALL -> MISSING_VCALL (enum missing_reason)
- * NOEX_RESPONDS -> BOUND_RESPONDS (macro)
+ * lib/mkmf.rb (dir_config): accept arrays of directory names as
+ default values.
- Now, NOEX_NOREDEF is not supported (I'm not sure it is needed).
+ * mkconfig.rb: no longer embed srcdir and compile_dir into
+ rbconfig.rb.
- Background:
- I did not know what "NOEX" stands for.
- I asked Matz (who made this name) and his answer was "Nothing".
- "At first, it meant NO EXport (private), but the original
- meaning was gone."
- This is why I remove the mysterious word "NOEX" from MRI.
+ * lib/mkmf.rb (create_makefile): fix unbalanced parens.
- * vm_core.h: introduce `enum missing_reason' to represent
- method_missing (NoMethodError) reason.
+Sun Feb 6 19:23:01 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * eval_intern.h: introduce rb_scope_visibility_t to represent
- scope visibility.
- It has 3 method visibilities (public/private/protected)
- and `module_function`.
+ * eval.c (stack_extend): add prototype because VC++8 doesn't
+ accept __declspec(noinline) with K&R style function definitions.
+ (backported from CVS HEAD)
-Wed Jun 3 08:06:30 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Feb 6 14:14:26 2005 Tadayoshi Funaba <tadf@dotrb.org>
- * gem/bundled_gems: updated to test-unit 3.1.1 and minitest 5.7.0.
+ * lib/date.rb (new_with_hash): changed messages of exception.
-Wed Jun 3 04:48:05 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/date/format.rb (str[fp]time): undocumented conversion
+ specifications %[1-3] are now deprecated.
- * vm_insnhelper.c (vm_defined): check respond_to_missing?
- at defined?(func()).
- [Bug #11212]
+Sun Feb 6 12:20:11 2005 Akinori MUSHA <knu@iDaemons.org>
- * test/ruby/test_defined.rb: add a test for this fix.
+ * bignum.c (rb_big2ulong_pack): One too many arguments are passed
+ to big2ulong().
-Wed Jun 3 04:34:39 2015 Koichi Sasada <ko1@atdot.net>
+ * re.c (rb_reg_init_copy, rb_reg_initialize_m): One too many
+ arguments are passed to rb_reg_initialize().
- * vm_insnhelper.c (vm_defined): skip respond_to_missing? when
- a method is available.
- [Bug #11211]
+Sun Feb 6 03:24:20 2005 Tanaka Akira <akr@m17n.org>
- * test/ruby/test_defined.rb: add a test for this fix.
+ * lib/resolv.rb (Resolv::DNS::Resource::TXT): multiple strings was not
+ handled.
+ (Resolv::DNS::Resource::TXT#strings): new method to return all
+ strings.
+ (Resolv::DNS::Message::MessageEncoder#put_string_list): new method.
+ (Resolv::DNS::Message::MessageDecoder#get_string_list): ditto.
+ based on [ruby-talk:129732] by Sam Roberts.
-Wed Jun 3 04:14:13 2015 Koichi Sasada <ko1@atdot.net>
+Fri Feb 4 00:30:45 2005 Kouhei Sutou <kou@cozmixng.org>
- * insns.def (defined), vm_insnhelper.c (vm_defined):
- move instruction body to the vm_defined() function.
+ * lib/rss: supported Image module.
+ http://web.resource.org/rss/1.0/modules/image/
-Wed Jun 3 02:29:25 2015 Benoit Daloze <eregontp@gmail.com>
+Thu Feb 3 23:42:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_module.rb: Do not assume class variable order.
- Patch by @enebo.
+ * ext/stringio/stringio.c (strio_close, strio_close_read, strio_close_write):
+ should return nil instead of self as well as IO. [ruby-dev:25623]
-Wed Jun 3 01:10:38 2015 Yusuke Endoh <mame@tsg.ne.jp>
+ * ext/stringio/stringio.c (strio_extend, strio_putc): fill with zero
+ extended portion. [ruby-dev:25626]
- * vm_method.c (rb_method_definition_set): remove a double assignment.
- Coverity Scan found this bug.
+Wed Feb 2 23:52:53 2005 sheepman <sheepman@tcn.zaq.ne.jp>
-Wed Jun 3 00:04:51 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/stringio/stringio.c (strio_truncate): should MEMZERO an extended
+ part. [ruby-dev:25618]
- * vm_method.c (rb_alias): rename parameter names.
+Wed Feb 2 21:56:01 2005 Kouhei Sutou <kou@cozmixng.org>
-Tue Jun 2 23:27:18 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rss/rss.rb (RSS::Element#convert): added.
- * method.h: remove rb_method_iseq_t::iseqval.
- While making a r50728, iseqval is needed (to mark correctly),
- but now just iseqptr is enough.
+ * lib/rss/rss.rb: convert -> need_convert.
- * class.c: catch up this fix.
+ * lib/rss/1.0.rb: ditto.
- * gc.c: ditto.
+ * lib/rss/0.9.rb: ditto.
- * proc.c: ditto.
+ * lib/rss/2.0.rb: ditto.
- * vm_method.c: ditto.
+ * lib/rss/trackback.rb: ditto.
-Tue Jun 2 21:29:28 2015 Koichi Sasada <ko1@atdot.net>
+Tue Feb 1 22:48:48 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * proc.c (proc_curry): remove a debug line.
+ * lib/drb/drb.rb (DRb::DRbObject#respond_to?): check marshal_dump and
+ _dump.
-Tue Jun 2 12:43:46 2015 Koichi Sasada <ko1@atdot.net>
+Tue Feb 1 00:20:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * method.h: make rb_method_entry_t a VALUE.
- Motivation and new data structure are described in [Bug #11203].
+ * configure.in (aix): fix linker flags on AIX. [ruby-talk:125460]
- This patch also solve the following issues.
+Mon Jan 31 13:33:21 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * [Bug #11200] Memory leak of method entries
- * [Bug #11046] __callee__ returns incorrect method name in orphan
- proc
+ * ext/tcltklib/tcltklib.c: add invalid namespace check
- * test/ruby/test_method.rb: add a test for [Bug #11046].
+ * ext/tk/lib/multi-tk.rb: add invalid_namespace? method
- * vm_core.h: remove rb_control_frame_t::me. me is located at value
- stack.
+ * ext/tk/lib/remote-tk.rb: ditto
- * vm_core.h, gc.c, vm_method.c: remove unlinked_method... codes
- because method entries are simple VALUEs.
+Mon Jan 31 10:29:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * method.h: Now, all method entries has own independent method
- definitions. Strictly speaking, this change is not essential,
- but for future changes.
+ * lib/irb/context.rb (IRB::Context::initialize): [ruby-core:04330]
- * rb_method_entry_t::flag is move to rb_method_definition_t::flag.
- * rb_method_definition_t::alias_count is now
- rb_method_definition_t::alias_count_ptr, a pointer to the counter.
+Sat Jan 29 09:42:12 2005 Sam Roberts <sroberts@uniserve.com>
- * vm_core.h, vm_insnhelper.c (rb_vm_frame_method_entry) added to
- search the current method entry from value stack.
+ * lib/resolv.rb (Resolv::DNS::Resource::IN::SRV): Added RFC2782 SRV
+ resource record for specifying location of services.
- * vm_insnhelper.c (VM_CHECK_MODE): introduced to enable/disable
- assertions.
+Fri Jan 28 17:16:55 2005 Tanaka Akira <akr@m17n.org>
-Tue Jun 2 10:46:36 2015 Eric Wong <e@80x24.org>
+ * lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf):
+ parse options line for ndots option.
+ (Resolv::Hosts#lazy_initialize): return self.
+ (Resolv::DNS#lazy_initialize): ditto.
+ (Resolv::DNS::Config#lazy_initialize): ditto.
+ Suggested by Sam Roberts.
- * test/socket/test_nonblock.rb: new test for sendmsg_nonblock
+Thu Jan 27 13:18:03 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Jun 2 09:04:14 2015 Eric Wong <e@80x24.org>
+ * st.c (st_foreach): report success/failure by return value.
+ [ruby-Bugs-1396]
- * lib/benchmark.rb: just use Process::CLOCK_MONOTONIC
- [ruby-core:69390]
+Thu Jan 27 00:15:29 2005 Minero Aoki <aamine@loveruby.net>
-Mon Jun 1 22:01:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/fileutils/test_fileutils.rb (setup): support BSD-style
+ directory group inheritance. (backport from HEAD, rev 1.32)
- * lib/mkmf.rb (pkg_config): split --libs if --libs-only-l option
- is not available. patch in [ruby-core:69428] by Hans Mackowiak.
- [ruby-core:69421] [Bug #11201]
+ * test/fileutils/fileasserts.rb (assert_same_entry): show entry
+ difference. (backport from HEAD, rev 1.4)
-Mon Jun 1 21:18:24 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jan 26 23:09:11 2005 Minero Aoki <aamine@loveruby.net>
- * gc.c (gc_mark_children): remove a garbage character
- introduced at the last commit.
+ * lib/net/protocol.rb (WriteAdapter#puts): should append \n, not
+ prepend. [ruby-talk:128302] (backport from HEAD, rev 1.75)
-Mon Jun 1 19:24:42 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jan 26 10:51:50 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_method.c (rb_method_entry_make): do not show warning message
- when method_entry is an alias.
+ * win32/win32.c (flock_winnt, flock_win95): unlock file even if
+ LOCK_NB is specified. (backported from CVS HEAD)
-Mon Jun 1 15:47:16 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jan 25 17:11:51 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * internal.h: move class related definitions.
+ * ruby.c (proc_options): correct -T option in RUBYOPT. (backported
+ from CVS HEAD)
-Mon Jun 1 15:43:03 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jan 25 14:05:52 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * class.c: remove needless include pragma for method.h.
+ * ext/tcltklib/tcltklib.c: fix SEGV bug; trouble on canceling remained
+ after scripts [ruby-dev:25479]: NULL current namespace when deleting
+ Tk interpreter [ruby-talk:126225]
- * struct.c: ditto.
+ * ext/tcltklib/extconf.rb: bug fix; TCL_ENABLE_THREAD flag is inverted
+ [ruby-talk:126360]
- * vm_method.c: ditto.
+ * ext/tcltklib/extconf.rb: add yet another native-thread check
-Mon Jun 1 05:42:00 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/tkutil.c: fix SEGV bug; NULL string pointer when finalize
+ Ruby interpreter
- * eval_intern.h, vm_method.c: move macros to functions.
- * SCOPE_TEST(f) -> rb_frame_visibility_test(flag).
- * SCOPE_CHECK(f) -> rb_frame_visibility_check(flag).
- * SCOPE_SET(f) -> rb_frame_visibility_set(flag).
+ * ext/tk/lib/multi-tk.rb: avoid warning for deleted safeTk ip frame
- * load.c (load_ext): use it.
+ * ext/tk/lib/tk/bindtag.rb: bug fix; new method of named bindtag
+ doesn't return the created object [ruby-dev:25479]
-Mon Jun 1 04:47:37 2015 Zachary Scott <e@zzak.io>
+ * ext/tk/lib/tk/menu.rb: bug on treating arguments [ruby-dev:25479]
- * ext/date/date_core.c: [DOC] Add comparison of Time and DateTime
- Patch provided by @pixeltrix
+ * ext/tk/lib/tk.rb: bug fix; cannot accept a callback ID string for
+ a command argument [ruby-dev:25479]
-Mon Jun 1 04:22:09 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/multi-tk.rb: ditto
- * vm_core.h (VM_FRAME_MAGIC_DUMMY): introduce new frame type to
- recognize dummy frame.
+ * ext/tk/lib/tk/*.rb: ditto
- * vm.c (th_init): use new frame type.
+ * ext/tk/lib/tkextlib/*.rb: ditto
- * vm_args.c (raise_argument_error): ditto.
+ * ext/tk/sample/demos-jp/anilabel.rb: new demo script
-Mon Jun 1 04:15:42 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/sample/demos-en/anilabel.rb: ditto
- * class.c (rb_class_has_methods): added to reduce dependency
- to internal class data structure.
+ * ext/tk/sample/tkHTML/ss.rb: local variable scope bug fix
+ [ruby-dev:25479]
- * internal.h: ditto.
+Mon Jan 24 15:44:25 2005 Tilman Sauerbeck <tilman@code-monkey.de>
- * hash.c (has_extra_methods): use added function.
+ * lib/rdoc/parsers/parse_c.rb: allow whitespace after function names.
+ [ruby-core:4296]
-Mon Jun 1 04:11:48 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rdoc/parsers/parse_simple.rb: adds support for private comments
+ in the "simple" parser. [ruby-core:4301]
- * gc.c , gc.h (rb_obj_info): export obj_info(VALUE) for debugging.
+Mon Jan 24 15:44:25 2005 Charles Mills <cmills@freeshell.org>
-Mon Jun 1 03:52:55 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rdoc/parsers/parse_c.rb: adds support for constants
+ (rb_define_const), accessors (rb_define_attr), and makes a
+ couple fixes. [ruby-core:4307]
- * test/ruby/test_gc.rb: increase timeout seconds for GC stressful
- debugging.
+Mon Jan 24 15:44:25 2005 Florian Gro <florgro@gmail.com>
-Sun May 31 04:18:06 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rdoc/parsers/parse_rb.rb: Logic for def Builtin.method() end
+ [ruby-core:4302]
- * method.h: fix typo of comments.
+Mon Jan 24 15:44:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun May 31 03:36:42 2015 Koichi Sasada <ko1@atdot.net>
+ * document updates - [ruby-core:04296], [ruby-core:04301],
+ [ruby-core:04302], [ruby-core:04307]
- * method.h: add VM_METHOD_TYPE_ALIAS rb_method_definition_t::type
- to fix [Bug #11173].
+Sun Jan 23 12:41:16 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- Now, inter class/method alias creates new method entry
- VM_METHOD_TYPE_ALIAS, which has an original method entry.
+ * lib/soap/wsdlDriver.rb: from 1.5.3-ruby1.8.2, operation which has
+ capitalized name (such as KeywordSearchRequest in AWS) is defined as
+ a method having uncapitalized name. (converted with
+ GenSupport.safemethodname to handle operation name 'foo-bar'). it
+ introduced serious incompatibility; in the past, it was defined as a
+ capitalized.
- * vm_insnhelper.c (find_defined_class_by_owner): added.
- Search corresponding defined_class from owner class/module.
+ define capitalized method as well under that circumstance.
- * vm_method.c (rb_method_entry_get_without_cache): return me->klass
- directly for defined_class.
+Sun Jan 23 05:24:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
- Now, no need to check me->klass any more.
+ * ext/openssl/ossl_ocsp.c (ossl_ocspreq_to_der): should call
+ GetOCSPReq at first.
- * vm_method.c (method_entry_set0): separated from method_entry_set().
+Sat Jan 22 23:09:47 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm_method.c (rb_alias): make method entry has VM_METHOD_TYPE_ALIAS.
+ * lib/drb/ssl.rb (accept): rescue SSLError. [druby-ja:110]
- * vm_method.c (release_method_definition): support VM_METHOD_TYPE_ALIAS.
+Sat Jan 22 22:35:03 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm_method.c (rb_hash_method_definition): ditto.
+ * lib/drb/unix.rb: fail if UNIXFileOwner is set. [druby-ja:111]
- * vm_method.c (rb_method_definition_eq): ditto.
+Fri Jan 21 23:58:42 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_method.c (release_method_definition): ditto.
+ * ext/stringio/stringio.c (strio_set_pos): clear EOF flag.
+ [ruby-talk:127511]
- * vm_insnhelper.c (vm_call_method): ditto.
+Fri Jan 21 20:07:02 2005 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.c (vm_method_cfunc_entry): ditto.
+ * lib/resolv.rb (Resolv::DNS::Config.resolv): don't raise ResolvError.
+ reported by Sam Roberts. [ruby-talk:127133]
- * vm_eval.c (vm_call0_body): ditto.
+Fri Jan 21 16:58:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (mark_method_entry): ditto.
+ * dir.c (rb_push_glob): should work for NUL delimited patterns.
- * proc.c (method_def_iseq): ditto.
+Fri Jan 21 13:58:37 2005 Shugo Maeda <shugo@ruby-lang.org>
- * proc.c (method_cref): ditto.
+ * lib/net/imap.rb (u8tou16): fixed typo. fixed: [ruby-list:40546]
+ (backported from CVS HEAD)
- * proc.c (rb_method_entry_min_max_arity): ditto.
+Fri Jan 21 09:30:16 2005 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_alias.rb: add tests.
+ * rubyio.h (rb_eof_error): should mark as NORETURN. (backported
+ from CVS HEAD)
- * test/ruby/test_module.rb: fix a test to catch up current behavior.
+Fri Jan 21 00:31:36 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sun May 31 03:34:25 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/syck/rubyext.c (syck_parser_bufsize_set): avoid VC++ warning
+ "local variable 'size' used without having been initialized".
- * vm_method.c (rb_unlink_method_entry): make it static.
+Thu Jan 20 19:03:24 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun May 31 03:26:58 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/extmk.rb (extmake): shouldn't set $extflags on mswin32.
- * method.h, vm_method.c (rb_free_method_entry): constify a parameter.
+ * win32/Makefile.sub (LIBRUBY_SO): should use $DLDOBJS instead of
+ $EXTOBJS.
+ fixed: [ruby-core:04290] (backported from CVS HEAD)
- * vm_core.h: remove useless declaration about rb_unlink_method_entry().
+Thu Jan 20 11:42:02 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat May 30 18:05:02 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * string.c (rb_str_new4): should propagate taintedness.
- * lib/tempfile.rb (Remover#call): fixed wrong condition. introduced at
- r50682.
+ * struct.c (rb_struct_set): use original method name, not callee
+ name, to retrieve member slot. [ruby-core:04268]
-Sat May 30 16:12:35 2015 Eric Wong <e@80x24.org>
+ * time.c (time_strftime): protect from format modification from GC
+ finalizers.
- * ext/socket/ancdata.c: use RB_GC_GUARD instead of volatile
- [ruby-core:69419] [Feature #11198]
+Wed Jan 19 18:06:40 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat May 30 15:59:10 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/ipaddr.rb (to_s, test_to_s): too many colons with some cases.
+ (backported from CVS HEAD)
- * lib/tempfile.rb (Tempfile#initialize): initialize @unlinked to fix
- test failures introduced at r50682. I hope that check the results of
- tests before committing, at least the tests about the changed feature.
+Wed Jan 19 01:16:30 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf): ignore
+ domain and search directive without an argument.
+ reported by Sam Roberts. [ruby-talk:126781]
+
+Tue Jan 18 15:03:05 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/ssl.rb (WEBrick::Config::SSL): the default value
+ of :SSLEnable is false.
+
+ * lib/webrick/server.rb (WEBrick::Daemon.start): prepared stdio
+ don't allow changing its mode.
+
+ * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_service):
+ should delete trailing LF from the result of pack("m*").
+
+ * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):
+ - should delete trailing LF from the result of pack("m*").
+ - clear Request-Line not to send the response by HTTPServer#run.
+
+ * lib/webrick/httputils (WEBrick::HTTPUtils.parse_qvalues):
+ refine regexp (and change the name of a local variable).
+
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils#escape_path): add
+ new method to escape URI path component.
+
+ * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line): should
+ escape SCRIPT_NAME and PATH_INFO before being parsed as a URI.
+
+ * test/webrick/*, sample/webrick/httpproxy.rb: add new file.
+
+Mon Jan 17 23:33:46 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (aix): fix typo. [ruby-talk:126401]
+
+Mon Jan 17 07:08:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c: suppress warnings.
+
+ * lib/irb/extend-command.rb (IRB::ContextExtender.def_extend_command):
+ ditto.
+
+ * lib/irb/ext/history.rb (IRB::Context::set_last_value): ditto.
+
+ * lib/irb/ext/history.rb (IRB::Context::eval_history): ditto.
+
+ * lib/irb/locale.rb (IRB::Locale::real_load): ditto.
+
+ * lib/irb/slex.rb (SLex::Node::create_subnode): remove garbage.
+
+Mon Jan 17 00:09:42 2005 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/uri/common.rb (PORT): typo fix. fixed: [ruby-core:04256]
+
+Sat Jan 15 14:57:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): ignore trailing CRs at the end of short
+ options as well as long options. fixed: [ruby-core:04232]
+
+Sat Jan 15 13:35:16 2005 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb (RSS::VERSION): 0.1.2 -> 0.1.3.
+
+ * lib/rss/rss.rb: accept inheritance. [ruby-talk:126104]
+
+Thu Jan 13 04:48:53 2005 Tanaka Akira <akr@m17n.org>
+
+ * io.c (io_fread): don't warn nonblocking behavior by default.
+
+Wed Jan 12 00:36:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_class_superclass): superclass of singleton class also
+ should be a singleton class. fixed: [ruby-list:40519]
+
+Tue Jan 11 09:44:40 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * numeric.c (Init_Numeric): turn off floating point exceptions
+ on bcc32. "1e300".to_f had crashed by overflow.
+
+Tue Jan 11 03:10:10 2005 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (copy_entry): could not copy symbolic link.
+ [ruby-talk:125733]
+
+ * lib/fileutils.rb (copy_stream): use read/write instead of
+ sysread/syswrite.
+
+Mon Jan 10 23:08:15 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_autoload): hide internal data from ruby level.
+ fixed: [ruby-dev:25435], [ruby-list:40498]
+
+Mon Jan 10 01:22:55 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_data_object_alloc): klass may be NULL.
+ [ruby-list:40498]
+
+Sun Jan 9 03:12:58 2005 Tanaka Akira <akr@m17n.org>
+
+ * io.c (io_fread): warn nonblocking behavior.
+ (io_readpartial): new method IO#readpartial.
+
+Sat Jan 8 04:38:47 2005 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/yaml.rb: Kernel#y requires an argument.
+
+Fri Jan 7 21:12:29 2005 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
+
+ * random.c (rand_init): use ALLOC_N instead of ALLOCA_N
+ [ruby-dev:25426]
+
+Fri Jan 7 18:03:35 2005 Tanaka Akira <akr@m17n.org>
+
+ * gc.c (mark_locations_array): avoid core dump with -O3.
+ [ruby-dev:25424]
+
+Thu Jan 6 20:31:07 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/zlib/zlib.c (zstream_end): should return value. (backported
+ from CVS HEAD)
+
+Thu Jan 6 19:55:13 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.c (rb_w32_close): didn't close socket handle.
+ [ruby-dev:25414]
+
+ * win32/win32.c (rb_w32_open_osfhandle): bcc32's _open_osfhandle
+ never set EMFILE.
+
+Thu Jan 6 17:14:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * random.c (random_seed): O_NONBLOCK isn't defined on some
+ platforms. [ruby-dev:25417]
+
+Thu Jan 6 13:45:35 2005 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb: recognize +00:00 and GMT as a localtime.
+
+Thu Jan 6 07:58:28 2005 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/usage.rb (RDoc::RDoc.usage_no_exit): Allow for colons
+ in path names on DOS machines. (thanks to Johan Nilsson)
+
+Wed Jan 5 20:16:32 2005 Tanaka Akira <akr@m17n.org>
+
+ * random.c (limited_big_rand): didn't work if SIZEOF_BDIGITS == 2.
+ [ruby-dev:25408]
+
+ * random.c (random_seed): refined.
+
+Wed Jan 5 12:49:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_initialize): Thread objects cannot be initialized
+ again. fixed: [ruby-core:04067]
+
+Wed Jan 5 10:48:16 2005 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * dir.c (dir_s_mkdir): win32 special processing doesn't need any
+ longer. (backported from CVS HEAD)
+
+ * win32/win32.[ch] (rb_w32_mkdir): new function. POSIX.1 compatible
+ interface. (backported from CVS HEAD)
+
+ * win32/win32.[ch] (rb_w32_rmdir): new function. (backported from CVS
+ HEAD)
+
+Wed Jan 5 02:30:11 2005 Tanaka Akira <akr@m17n.org>
+
+ * random.c (init_by_array): imported from mt19937ar-cok.tgz.
+ (genrand_int32): ditto.
+ (genrand_real): replaced with genrand_res53 in mt19937ar-cok.
+ (rand_init): support bignum for longer seed.
+ (random_seed): generate longer seed.
+ (make_mask): new function.
+ (limited_rand): ditto.
+ (limited_big_rand): ditto.
+ (rb_f_rand): call limited_rand and limited_big_rand.
+ [ruby-dev:25403]
+
+Tue Jan 4 23:25:29 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_rand): should return positive random number.
+ [ruby-dev:25401]
+
+Tue Jan 4 11:15:29 2005 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
+
+ * bignum.c (rb_big_rand): do not use rb_big_modulo to generate
+ random bignums. [ruby-dev:25396]
+
+Mon Jan 3 14:01:54 2005 Tanaka Akira <akr@m17n.org>
+
+ * random.c (random_seed): don't use /dev/urandom if it is not
+ character device.
+
+Mon Jan 3 11:37:42 2005 Tanaka Akira <akr@m17n.org>
+
+ * random.c (random_seed): use /dev/urandom if available.
+ [ruby-dev:25392]
+
+Mon Jan 3 07:46:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpauth/htpasswd.rb (WEBrick::Htpasswd#reload):
+ raise NotImplementedError if password is encrypted by digest
+ algorithms. This patch is contributed by sheepman. [ruby-list:40467]
+
+ * lib/webrick/httpauth/digestauth.rb
+ (WEBrick::HTTPAuth::DigestAuth#_authenticate): fix digest calculation.
+ This patch is contributed by sheepman. [ruby-list:40482]
+
+ * lib/webrick/{httpauth.rb,httpauth/basicauth.rb,httpproxy.rb}: use
+ pack/unpack-template char "m" instead of lib/base64.rb to do base64
+ encoding/decoding. fixed: [ruby-dev:25336]
+
+ * test/webrick/test_httpauth.rb: new file.
+
+Sat Jan 1 04:20:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ns_spki.c (ossl_spki_set_challenge): should call
+ StringValue before GetSPKI. fixed: [ruby-dev:25359].
+
+Sat Jan 1 01:13:28 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_autoload): [ruby-dev:25373]
+
+Fri Dec 31 14:10:43 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item): Fix problem
+ if heading contains formatting.
+
+Thu Dec 30 00:41:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (svalue_to_avalue): [ruby-dev:25366]
+
+ * string.c (rb_str_justify): [ruby-dev:25367]
+
+Wed Dec 29 11:07:07 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/template/html/kilmer.rb: Update to use new
+ sections.
+
+Tue Dec 28 22:31:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_justify): create buffer string after argument type
+ conversion. fixed: [ruby-dev:25341]
+
+Tue Dec 28 15:41:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (reinit): should initialize all static
+ variables. fixed: [ruby-list:40445]
+
+Tue Dec 28 15:25:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): second byte is up to
+ 0xfe.
+
+ * ext/nkf/lib/kconv.rb (Kconv#kconv): should handle UTF8 and UTF16
+ properly.
+
+Tue Dec 28 13:35:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate): ensure
+ freeing internal zstreams. fixed: [ruby-dev:25309]
+
+ * ext/zlib/zlib.c (rb_deflate_init_copy): replace rb_deflate_clone.
+
+Tue Dec 28 12:26:45 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub, win32/setup.mak (RDOCTARGET, install,
+ install-nodoc, install-doc): rdoc support for mswin32.
+
+ * win32/configure.bat (--enable-install-doc, --disable-install-doc):
+ ditto.
-Sat May 30 11:02:55 2015 Martin Englund <martin@englund.nu>
+Mon Dec 27 20:02:14 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * doc/dtrace_probes.rdoc: change lingering dtrace probe documentation
- from function- to method-
+ * ext/tcltklib/tcltklib.c: fix SEGV bug when deleting Tk interp
-Sat May 30 10:26:09 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * ext/tk/lib/multi-tk.rb: ditto
- * lib/tempfile.rb: refactoring.
- * use warn instead of STDERR.print
- * remove @tmpname and use @tmpfile.path
- * introduce @unlinked flag
- * Remover takes only @tmpfile
- * mode will be modified just before file reopen
+Mon Dec 27 16:55:17 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat May 30 09:02:51 2015 Eric Wong <e@80x24.org>
+ * ext/openssl/ossl_x509name.c (Init_ossl_x509name): should use
+ rb_hash_new to get exactly a Hash. fix [ruby-dev:25325].
- * include/ruby/intern.h (rb_generic_ivar_table): deprecate
- * internal.h (rb_attr_delete): declare
- * marshal.c (has_ivars): use rb_ivar_foreach
- (w_ivar): ditto
- (w_object): update for new interface
- * time.c (time_mload): use rb_attr_delete
- * variable.c (generic_ivar_delete): implement
- (rb_ivar_delete): ditto
- (rb_attr_delete): ditto
- [ruby-core:69323] [Feature #11170]
+Mon Dec 27 16:29:56 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat May 30 09:14:28 2015 Scott Francis <scott.francis@shopify.com>
+ * string.c (rb_str_justify): [ruby-dev:25341]
- * cont.c (cont_free): check if ruby_current_thread is still valid.
- [Fix GH-914]
+Mon Dec 27 15:47:48 2004 Minero Aoki <aamine@loveruby.net>
-Sat May 30 08:36:04 2015 Eric Wong <e@80x24.org>
+ * test/fileutils/fileasserts.rb: sync with HEAD.
- * variable.c (static int special_generic_ivar): move
- (rb_generic_ivar_table): rewrite for compatibility
- (gen_ivtbl_bytes): new function
- (generic_ivar_get): update to use ivar index
- (generic_ivar_update): ditto
- (generic_ivar_set): ditto
- (generic_ivar_defined): ditto
- (generic_ivar_remove): ditto
- (rb_mark_generic_ivar): ditto
- (givar_i): ditto
- (rb_free_generic_ivar): ditto
- (rb_mark_generic_ivar_tbl): ditto
- (rb_generic_ivar_memsize): ditto
- (rb_copy_generic_ivar): ditto
- (rb_ivar_set): ditto
- (rb_ivar_foreach): ditto
- (rb_ivar_count): ditto
- (givar_mark_i): remove
- (gen_ivtbl_mark): new function
- (gen_ivar_each): ditto
- (iv_index_tbl_extend): update for struct ivar_update
- (iv_index_tbl_newsize): ditto
- [ruby-core:69323] [Feature #11170]
+ * test/fileutils/test_fileutils.rb: ditto.
-Sat May 30 08:10:46 2015 Eric Wong <e@80x24.org>
+ * test/fileutils/test_nowrite.rb: ditto.
- * variable.c (iv_index_tbl_make): extract from rb_ivar_set
- (iv_index_tbl_extend): ditto
- (iv_index_tbl_newsize): ditto
- (rb_ivar_set): use extracted functions
- [ruby-core:69323] (Part 1)
+Mon Dec 27 15:21:07 2004 Minero Aoki <aamine@loveruby.net>
-Fri May 29 17:39:14 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb (mv): should raise error when moving a
+ directory to the (empty) directory. [ruby-talk:124368]
+ (backport from HEAD 1.48)
- * tool/make_hgraph.rb: added.
+ * lib/fileutils.rb (mv): wrongly did not overwrite file on Win32
+ platforms. (backport from HEAD 1.48)
-Fri May 29 14:39:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 25 11:11:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * compile.c (iseq_compile_each): out of range NTH_REF is always
- nil.
+ * stable version 1.8.2 released.
- * parse.y (parse_numvar): check overflow of NTH_REF and range.
- [ruby-core:69393] [Bug #11192]
+Sat Dec 25 04:23:49 2004 Minero Aoki <aamine@loveruby.net>
- * util.c (ruby_scan_digits): make public and add length parameter.
+ * lib/fileutils.rb (mkdir, mkdir_p): should ensure directory
+ permission. (backportted from HEAD, 1.47)
-Fri May 29 11:18:58 2015 Eric Wong <e@80x24.org>
+ * lib/fileutils.rb (traverse, remove_dir): untaint trasted
+ objects. (backportted from HEAD, 1.46)
- * ext/socket/ancdata.c (bsock_sendmsg_internal,
- bsock_recvmsg_internal):
- avoid redundant fcntl on Linux
- [ruby-core:69154] [Feature #11145]
- * ext/socket/init.c (rsock_s_recvfrom_nonblock): ditto
- * ext/socket/rubysocket.h (MSG_DONTWAIT_RELIABLE): new macro
+Sat Dec 25 01:28:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri May 29 10:30:34 2015 Eric Wong <e@80x24.org>
+ * io.c: cancel io_reopen() change on Dec. 24th.
- * lib/net/resolv.rb (request): use monotonic clock
- * lib/net/http.rb (begin_transport, end_transport): ditto
- [ruby-core:69384] [Feature #11124]
+ * dln.c: use <dlfcn.h> for NetBSD. [ruby-dev:25313]
-Fri May 29 04:37:38 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_f_select): IO list could be altered. [ruby-dev:25312]
- * ext/objspace/objspace.c: add two methods to debug internals.
+Fri Dec 24 23:51:48 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * ObjectSpace.internal_class_of: return RBASIC_CLASS(obj).
- * ObjectSpace.internal_super_of: return RCLASS_SUPER(cls).
+ * bcc32/Makefile.sub: bcc32 should use RTL dll (backport from HEAD)
+ [ruby-dev:25306]
- * NEWS: add information about both methods.
+ * win32/win32.[ch]: ditto.
- * test/objspace/test_objspace.rb: add tests for both methods.
+Fri Dec 24 23:27:18 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu May 28 06:55:53 2015 Anton Davydov <antondavydov.o@gmail.com>
+ * ext/tk/lib/tk/image.rb: TkPhotoImage#cget bug fix
- * ext/tk/sample/figmemo_sample.rb (open_file),
- ext/tk/sample/tktextio.rb (TkTextIO): fix typo in messages.
- [Fix GH-916]
+Fri Dec 24 18:39:25 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Wed May 27 09:50:51 2015 Eric Wong <e@80x24.org>
+ * win32/win32.[ch]: failed to compile on bcc32 (and probably wince)
+ [ruby-dev:25306]
+
+Fri Dec 24 02:52:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_reopen, rb_io_reopen): prohibit to change access mode for
+ special IO ports. [ruby-dev:25225]
+
+Fri Dec 24 02:22:53 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/rubyext.c (rb_syck_io_str_read): [ruby-core:03973]
+
+ * ext/syck/rubyext.c (syck_loader_transfer): check type conversion.
+
+ * ext/syck/rubyext.c (syck_parser_assign_io, rb_new_syck_node): duck
+ typing.
+
+ * ext/syck/rubyext.c (syck_parser_s_alloc, syck_parser_initialize):
+ allocation framework.
+
+ * ext/syck/rubyext.c (syck_emitter_s_alloc, syck_emitter_initialize):
+ ditto.
+
+Fri Dec 24 01:21:00 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkextlib/blt.rb: add BLT extension support
+
+ * ext/tk/lib/tkextlib/blt/*.rb: ditto
+
+ * ext/tk/lib/tkextlib/blt/tile/*.rb: ditto
+
+Thu Dec 23 23:36:28 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_setgroups): check if the argument lenght is
+ modified. fixed: [ruby-dev:25285]
+
+Thu Dec 23 13:13:33 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: define TclTkLib::COMPILE_INFO and
+ RELEASE_DATE
+
+ * ext/tcltklib/extconf.rb: ditto
+
+ * ext/tk/tkutil.c: define TkUtil::RELEASE_DATE
+
+ * ext/tk/lib/tk.rb: define Tk::RELEASE_DATE
+
+Thu Dec 23 09:38:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_reopen): restore exact mode. fixed: [ruby-core:04003]
+
+Thu Dec 23 00:16:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (bsdi): use $(CC) for LDSHARED. fixed [ruby-dev:25270]
+
+Wed Dec 22 11:14:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_mode_modenum): replace O_ACCMODE with O_RDWR.
+ fixed: [ruby-dev:25273]
+
+Wed Dec 22 08:34:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/sym.c (rb_dlsym_initialize): extract internal pointers after
+ all argument conversion. fixed: [ruby-dev:25271]
+
+Wed Dec 22 00:08:01 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.
+
+Tue Dec 21 22:07:33 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,
- ossl_asn1_decode_all): use RB_GC_GUARD instead of volatile
- [ruby-core:69371] [Bug #11185]
+ ossl_asn1_decode_all): temporary value should be marked volatile.
-Wed May 27 09:27:30 2015 Eric Wong <e@80x24.org>
+Tue Dec 21 14:40:02 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * lib/drb/drb.rb (set_sockopt): remove redundant fcntl call
- * lib/drb/unix.rb (set_sockopt): ditto
- [ruby-core:69128] [Feature #11137]
+ * ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,
+ ossl_asn1_decode_all): use rb_str_new4 to avoid SEGV.
+ fix [ruby-dev:25261]
-Tue May 26 22:10:43 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * test/openssl/test_asn1.rb: add tests for OpenSSL::ASN1.
- * vm_method.c (rb_alias): should resolve refined methods.
- [ruby-core:69360] [Bug #11182]
+Tue Dec 21 12:22:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue May 26 21:35:13 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * io.c (io_reopen): keep duplex pipe in correct mode for exception
+ safeness. fixed: [ruby-dev:25152]
- * include/ruby/defines.h (RUBY_ATTR_ALLOC_SIZE): fix condition.
+Tue Dec 21 12:10:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Mon May 25 22:35:58 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tk/grid.rb: rescue bug of 'grid configure' on Tcl/Tk8.3-
- * tool/redmine-backporter.rb (rel): after the relations is changed,
- @changesets is no longer right.
+Tue Dec 21 00:53:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon May 25 11:27:14 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/openssl/ossl_asn1.c (ossl_asn1_traverse): [ruby-dev:25261]
- * win32/win32.c (setup_overlapped): seek to the file end only when
- writing (mode:a), not reading (mode:a+, read).
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode): ditto.
-Mon May 25 00:27:37 2015 Benoit Daloze <eregontp@gmail.com>
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode_all): ditto.
- * numeric.c (Numeric#negative?): [DOC] Fix call-seq.
- Patch by @yui-knk. [Fixes GH-908]
+Mon Dec 20 23:22:26 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sun May 24 01:35:22 2015 Koichi Sasada <ko1@atdot.net>
+ * added files:
+ * lib/soap/mapping/wsdl*.rb
+ * lib/wsdl/soap/element.rb
+ * lib/wsdl/xmlSchema/simpleContent.rb
- * debug.c (ruby_debug_print_id): use rb_id2name() for fprintf().
+ * modified files:
+ * lib/soap/*
+ * lib/wsdl/*
+ * lib/xsd/*
+ * test/soap/*
+ * test/wsdl/*
+ * test/xsd/*
+ * sample/soap/*
+ * sample/sdl/*
-Sat May 23 18:38:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * summary
+ * imported from the soap4r repository. Version: 1.5.3-ruby1.8.2
- * man/*.1: updated dates in man pages.
- [ruby-dev:48988] [Bug #11171]
+ * added several XSD basetype support: nonPositiveInteger,
+ negativeInteger, nonNegativeInteger, unsignedLong, unsignedInt,
+ unsignedShort, unsignedByte, positiveInteger
-Sat May 23 03:10:58 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * HTTP client connection/send/receive timeout support.
- * win32/win32.c (rb_w32_write_console): should return the count of
- actually eaten characters, include escape sequences.
+ * HTTP client/server gzipped content encoding support.
-Fri May 22 22:36:14 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * improved WSDL schema definition support; still is far from
+ complete, but is making step by step improovement.
- * lib/prime.rb: Remove obsolete Prime.new
- patch by Ajay Kumar. [Fixes GH-891]
+Mon Dec 20 22:56:39 2004 Tanaka Akira <akr@m17n.org>
-Fri May 22 21:13:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c (stack_end_address): gcc noinline attribute is available since
+ gcc-3.1.
- * include/ruby/intern.h (rb_sym_count): move `rb_sym_all_symbols`
- to a symbol.c specific section. a part of patch by Lourens
- Naude.
+Mon Dec 20 14:07:02 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Fri May 22 20:56:33 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/multi-tk.rb: supports new features of Tcl/Tk8.5a2
- * complex.c (f_complex_polar): simple bug reproduced only when y is
- a float but x is not a float.
+ * ext/tk/lib/tk/clock.rb: ditto
-Fri May 22 19:42:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/text.rb: ditto
- * process.c (rb_spawn_process): do not discard global escape
- status. [ruby-core:69304] [Bug #11166]
+ * ext/tk/lib/tk/panedwindow.rb: ditto
- * process.c (rb_execarg_spawn): extract the start procedure in a
- parent process with ensuring the end procedure.
+Mon Dec 20 12:47:13 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Fri May 22 16:48:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/openssl/lib/net/https.rb,protocols.rb,telnets.rb: delete
+ doc and code about SSLContext#{key_file,cert_file}.
+ fixed: [ruby-dev:25243]
- * NEWS: added news for net-telnet and rake
+Mon Dec 20 12:42:17 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu May 21 20:27:07 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * io.c (io_fwrite): workaround for MSVCRT's bug.
+ fixed: [ruby-core:03982]
- * configure.in (RUBY_DTRACE_POSTPROCESS): cmp -b is GNU extension.
- darwin uses GNU cmp, and FreeBSD and Solaris are not.
- Note that accidentally equals to expected result.
+Mon Dec 20 11:21:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 21 18:00:19 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_io_eof): check if closed before clearerr().
+ fixed: [ruby-dev:25251]
- * iseq.c: constify.
+Mon Dec 20 03:30:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * iseq.h: ditto.
+ * lib/cgi/session.rb (CGI::Session#initialize): empty session id was
+ used if request had no session key. fixed: [ruby-core:03981]
- * method.h: ditto.
+Mon Dec 20 01:51:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c: ditto.
+ * struct.c (make_struct): [ruby-dev:25249]
- * vm_method.c: ditto.
+Mon Dec 20 00:28:20 2004 Kouhei Sutou <kou@cozmixng.org>
-Thu May 21 17:44:53 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/rexml/encodings/SHIFT-JIS.rb: backported from CVS HEAD.
- * proc.c: fix issues caused by binding created from Method#to_proc.
- [Bug #11163]
+ * lib/rexml/encodings/SHIFT_JIS.rb: ditto.
- * vm.c (vm_cref_new_toplevel): export as rb_vm_cref_new_toplevel().
+Sun Dec 19 17:19:48 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * test/ruby/test_method.rb: add some assertions.
+ * ext/openssl/ossl_x509store.c
+ (ossl_x509store_set_time): add OpenSSL::X509::Store#time=.
+ (ossl_x509stctx_set_time): add OpenSSL::X509::StoreContext#time=.
-Thu May 21 17:29:26 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/openssl/ossl_x509store.rb: test certificate validity times.
- * lib/matrix.rb: added documentation for Matrix#empty and Matrix#/
- [Feature #10070][ruby-dev:48433] Patch by @gogotanaka
+ * ext/openssl/ossl_x509name.c (ossl_x509name_to_s): add optional
+ second argument to specify the output format (see also
+ X509_NAME_print_ex).
-Thu May 21 17:02:43 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_x509name.c (ossl_x509name_init): new constants:
+ OpenSSL::X509::Name::COMPAT, OpenSSL::X509::Name::RFC2253,
+ OpenSSL::X509::ONELINE, OpenSSL::X509::MULTILINE.
- * proc.c: rename functions.
- * method_get_def() -> method_def()
- * method_get_iseq() -> method_def_iseq()
- * method_get_cref() -> method_cref()
+ * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name::RFC2253DN):
+ new module to provide the parse for RFC2253 DN format.
-Thu May 21 16:52:44 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name.parse_rfc2253):
+ new method to parse RFC2253 DN format.
- * proc.c (rb_method_get_iseq): rename to rb_method_iseq.
+ * test/openssl/ossl_x509name.rb: add tests about RFC2253 DN.
- * iseq.c: catch up this fix.
+ * text/openssl/ssl_server.rb: try to listen ports from 20443 to 20542
+ while EADDRINUSE is raised.
- * iseq.h: commit ditto.
+ * all changes in this entry are backport from 1.9.
-Thu May 21 15:41:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Sun Dec 19 17:24:59 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/net/telnet.rb: gemify net-telnet.
- [Feature #11083]
- * gems/bundled_gems: added net-telnet to bundled gems.
+ * configure.in (enable_rpath): use rpath flag to embed the library
+ path into extensions on ELF environment. [ruby-dev:25035]
-Thu May 21 15:37:32 2015 Zachary Scott <e@zzak.io>
+Sun Dec 19 11:01:25 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c: Remove private attribute warning [Bug #10967]
- Patch by @spastorino [Fixes GH-849]
- https://github.com/ruby/ruby/pull/849
+ * lib/test/unit.rb: use standalone runner for -e.
- * test/ruby/test_module.rb: Update test for changes
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): accept
+ multiple -p and -x options.
-Thu May 21 10:59:43 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#recursive_collect):
+ ditto.
- * proc.c (method_proc): rename to method_to_proc.
+Sat Dec 18 16:36:23 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 21 10:51:54 2015 Jake Worth <jakeworth82@gmail.com>
+ * ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate):
+ disallow interrupt by type conversion. fixed: [ruby-dev:25226]
- * io.c (rb_f_select): [DOC] Fixes for grammar and style.
- [Fix GH-906]
+Sat Dec 18 15:16:41 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Thu May 21 08:25:19 2015 Eric Wong <e@80x24.org>
+ * lib/webrick/httpauth.rb,
+ lib/webrick/httpauth/{basicauth.rb,digestauth.rb}: use
+ pack/unpack-template char "m" instead of lib/base64.rb to do base64
+ encoding/decoding.
- * variable.c (Init_var_tables): init generic_iv_tbl
- (rb_generic_ivar_table, generic_ivar_get, generic_ivar_set,
- generic_ivar_defined, generic_ivar_remove,
- rb_mark_generic_ivar, givar_i, rb_mark_generic_ivar_tbl,
- rb_free_generic_ivar, rb_copy_generic_ivar, rb_ivar_foreach,
- rb_ivar_count): remove checks for uninitialize generic_iv_tbl
- [ruby-core:69155] [Feature #11146]
+Sat Dec 18 10:51:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu May 21 04:11:03 2015 Koichi Sasada <ko1@atdot.net>
+ * dir.c (dir_open_dir): new function. [ruby-dev:25242]
- * iseq.c (exception_type2symbol): show correct bug message.
+Fri Dec 17 18:07:01 2004 Shugo Maeda <shugo@ruby-lang.org>
-Wed May 20 23:19:05 2015 Yusuke Endoh <mame@ruby-lang.org>
+ * test/readline/test_readline.rb: fix for BSD. Thanks, GOTOU Yuuzou.
+ fixed: [ruby-dev:25218]
- * lib/base64.rb: Fix rdoc-formatting for padding argument.
- [fix GH-905][ci skip] Patch by @davydovanton
+Fri Dec 17 16:28:12 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed May 20 13:16:23 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk.rb: fix bug on setting up system encoding
- * configure.in (DEPRECATED_BY): deprecate warning with preferable
- alternative.
+ * ext/tk/lib/tk/event.rb: fix error on require process
- * configure.in (RUBY_FUNC_ATTRIBUTE): allow attribute arguments in
- the macro.
+ * ext/tk/lib/tk/font.rb: fix abnormal termination error on Windows
-Wed May 20 11:23:24 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk/virtevent.rb: TkVirtualEvent::PreDefVirtEvent.new()
+ accepts event-sequence arguments
- * vm_dump.c (rb_print_backtrace): return value of libexec's backtrace
- is size_t, so simply cast as int.
+ * ext/tk/lib/tk/text.rb: fail to dump embedded images
-Tue May 19 18:54:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/text.rb: tag_nextrange and tag_prevrange returns wrong
+ types of values
- * iseq.c (rb_iseq_compile_with_option): check source type, must be
- an IO or a String. [ruby-core:69219] [Bug #11159]
+ * ext/tk/lib/tk/texttag.rb: nextrange and prevrange returns wrong
+ types of values
-Tue May 19 17:15:03 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk/text.rb: add TkText::IndexModMethods module and
+ TkText::IndexString class to treat text index modifiers
- * lib/benchmark.rb: Update Benchmark documentation and formatting.
- [fix GH-903][ci skip] Patch by @davydovanton
+ * ext/tk/lib/tk/texttag.rb: use TkText::IndexModMethods module
-Tue May 19 13:10:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/textmark.rb: ditto
- * numeric.c (num_positive_p): should false on Bignum 0.
- http://twitter.com/rafaelfranca/status/600509783427391488
- [ruby-core:69173] [Feature #11151]
+ * ext/tk/lib/tk/textimage.rb: ditto
-Tue May 19 11:22:28 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk/textwindow.rb: ditto
- * lib/uri/rfc2396_parser.rb (initialize_pattern):
- URI::Generic.build should accept port as a string.
- pattern[:PORT] is not defined for long.
- by Dave Slutzkin <daveslutzkin@fastmail.fm>
- https://github.com/ruby/ruby/pull/804 fix GH-804
+ * ext/tk/lib/tk/textimage.rb: wrong gravity of text mark for embedded
+ image
-Tue May 19 11:18:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/textwindow.rb: wrong gravity of text mark for
+ embedded window
- * include/ruby/ruby.h (rb_data_typed_object_alloc),
- (rb_data_object_alloc): add old names for source level backward
- compatibilities.
+Fri Dec 17 13:50:00 2004 Akiyoshi, Masamichi <akiyoshi@hp.com>
- * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc): add
- aliases for binary level backward compatibilities.
+ * vms/vmsruby_private.c, vms/vmsruby_private.h: private routines
+ for VMS port are added.
-Tue May 19 09:54:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (ruby_init): change to call VMS private intialization routine.
- * include/ruby/ruby.h (Data_Make_Struct0): needs function pointer
- casts to fix function overloading in C++.
+Fri Dec 17 13:33:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue May 19 09:43:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/cgi/session.rb (CGI::Session#initialize): control adding
+ session_id hidden fields. fixed: [ruby-talk:123850]
- * include/ruby/ruby.h (Data_Make_Struct0, TypedData_Make_Struct0):
- explicit cast from void* is necessary as implicit cast is
- disallowed in C++.
+Thu Dec 16 23:25:25 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Mon May 18 15:31:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/drb/drb.rb, lib/drb/ssl.rb: backported from CVS HEAD.
+ [druby-ja:101]
- * include/ruby/intern.h (rb_f_notimplement): should not respond to
- not-implemented methods. as the address inside a DLL and the
- imported address are different on Windows, use an exported
- variable to share the same address.
+ * test/drb/test_drb.rb: adjust and reduce sleep (backported from
+ CVS HEAD.)
-Mon May 18 13:55:01 2015 Shugo Maeda <shugo@ruby-lang.org>
+Thu Dec 16 18:44:58 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * lib/monitor.rb (mon_try_enter, mon_enter): should reset @mon_count
- just in case the previous owner thread dies without mon_exit.
- [fix GH-874] Patch by @chrisberkhout
+ * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should wait
+ for reading request till data arrive. [ruby-talk:121068]
-Sun May 17 17:21:29 2015 Eric Wong <e@80x24.org>
+ * lib/webrick/server.rb (WEBrick::GenericServer#start_thread):
+ should log about all accepted socket. [ruby-core:03962]
- * lib/webrick/utils.rb (set_non_blocking): use IO#nonblock=
- * (set_close_on_exec): use IO#close_on_exec=
- [Feature #11136]
+ * lib/webrick/accesslog.rb (WEBrick::AccessLog#setup_params):
+ "%%" and "%u" are supported. [webricken:135]
-Sun May 17 15:01:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/httpservlet/filehandler.rb
+ (WEBrick::HTTPServlet::FileHandler#check_filename):
+ :NondisclosureName is acceptable if it is Enumerable.
- * numeric.c (num_positive_p, num_negative_p): add methods
- Numeric#positive? and Numeric#negative?.
- [ruby-core:69173] [Feature #11151]
+ * lib/webrick/config.rb (WEBrick::Config::FileHandler):
+ default value of :NondisclosureName is [".ht*", "*~"].
- * numeric.c (flo_positive_p, flo_negative_p): specialized
- functions for Float.
+Thu Dec 16 18:36:52 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * complex.c (Init_Complex): Complex do not have positive? and
- negative? methods
+ * ext/openssl/ossl.c (ossl_raise): refine message format.
-Sun May 17 14:57:42 2015 Eric Wong <e@80x24.org>
+Thu Dec 16 16:29:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/webrick/server.rb (accept_client): avoid redundant fcntl call
- [Feature #11137]
+ * ext/tk/sample/demos-en/widget: modify version check for
+ supporting features
-Sun May 17 12:13:33 2015 Eric Wong <e@80x24.org>
+Thu Dec 16 16:03:50 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/socket/init.c (cloexec_accept): support nonblock flag and
- use SOCK_NONBLOCK if possible
- * ext/socket/init.c (rsock_s_accept_nonblock):
- update cloexec_accept call
- * ext/socket/init.c (accept_blocking): ditto for blocking
- * test/socket/test_nonblock.rb: check nonblock? on accepted socket
- [Feature #11138]
+ * ext/tk/lib/tk/bindtag.rb: bug fix [ruby-talk: 123667]
-Sun May 17 03:58:59 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+ * ext/tk/lib/tk/timer.rb: accept :idle for the interval argument
- * load.c (loaded_feature_path): stop returning false negatives for
- filenames which are trailing substrings of file extensions. For
- example, 'b', which a trailing substring of ".rb" should not return
- false. [Bug #11155][ruby-core:69206]
+ * ext/tk/lib/tk.rb: add TkComm._callback_entry?()
- * test/ruby/test_autoload.rb: test for fix
+ * ext/tk/lib/multi-tk.rb: add MultiTkIp.cb_entry_class
-Sat May 16 21:41:24 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk/canvas.rb: use TkComm._callback_entry?()
- * string.c: added documentation for character sequence \' with String#sub
- [Bug #11132][ruby-core:69121][fix GH-900][ci skip] Patch by @shishir127
+ * ext/tk/lib/tk/canvastag.rb: ditto
-Sat May 16 21:38:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tk/lib/tk/dialog.rb: ditto
- * enum.c: fix a sample code. Patch by @eagletmt
- [fix GH-901][ci skip]
+ * ext/tk/lib/tk/optiondb.rb: ditto
-Sat May 16 21:17:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/text.rb: ditto
- * gc.c (rb_data_object_wrap, rb_data_typed_object_wrap): rename
- alloc as wrap. these functions do not allocate data pointers
- but just wrap the given pointers.
+ * ext/tk/lib/tk/texttag.rb: ditto
-Sat May 16 19:59:24 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tk/textwindow.rb: ditto
- * win32/win32.c (rb_w32_accept): simplified.
+ * ext/tk/lib/tk/timer.rb: ditto
-Fri May 15 18:28:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/validation.rb: ditto
- * array.c (rb_ary_assoc, rb_ary_rassoc): [DOC] the result when key
- was found is the existing element, not a new array. reported by
- Giau Nguyen <giaunv AT nustechnology.com>.
+ * ext/tk/lib/tkextlib/*: ditto
-Fri May 15 08:24:28 2015 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+Thu Dec 16 03:14:28 2004 Minero Aoki <aamine@loveruby.net>
- * lib/cgi/cookie.rb: Implement HttpOnly flag for cookies.
- [fix GH-887] Patch by @martinpovolny
+ * lib/net/http.rb (basic_encode): return value of pack('m') may
+ include multiple CR/LFs. Backported from main trunk (rev 1.112).
+ [ruby-dev:25212]
-Fri May 15 06:54:19 2015 Aaron Patterson <tenderlove@ruby-lang.org>
+Thu Dec 16 00:33:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * variable.c: Change autoload to call `require` through Ruby rather
- than directly calling `rb_require_safe`. This allows things like
- RubyGems to intercept file loading done though `autoload`.
- [Feature #11140]
+ * hash.c (Init_Hash): remove custom "hash" and "eql?".
- * test/ruby/test_autoload.rb: Test for change.
+Wed Dec 15 18:57:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Apr 8 19:18:02 2015 Shota Fukumori (sora_h) <her@sorah.jp>
+ * lib/set.rb (Set::eql): wrong definition. [ruby-dev:25207]
- * enum.c (enum_grep_v, grep_i, grep_iter_i, Init_enum):
- Implement Enumerable#grep_v. [Feature #11049]
+Wed Dec 15 18:48:42 2004 Shugo Maeda <shugo@ruby-lang.org>
-Thu May 14 15:54:13 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/curses/curses.c (window_subwin): call NUM2INT() before
+ GetWINDOW(). (backported from CVS HEAD)
- * ext/pathname/lib/pathname.rb: Remove condition of RUBY_VERSION <= 1.9.
- [Feature #11082]
+Wed Dec 15 17:03:50 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed May 13 17:10:37 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * win32/win32.[ch] (rb_w32_isatty): new function to replace MSVCRT's
+ isatty because it never sets errno. (backported from CVS HEAD)
- * enum.c (enum_to_a): revert r50457.
- it requires recursion check.
- then, it doesn't make performance improvement.
- [Bug #11130] [Feature #9118]
+Wed Dec 15 15:39:32 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed May 13 11:13:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_x509name.c (ossl_x509name_to_a): avoid SEGV
+ (rollback the previous commit).
- * parse.y (parse_gvar): separate message for gvar without
- non-space characters from message for invalid identifiers.
+Wed Dec 15 16:10:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue May 12 22:18:27 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * object.c (rb_obj_id_obsolete): warn always.
- * enum.c (enum_to_a): fix incompatibility introduced in r50457.
- [Bug #11130]
+ * eval.c (rb_enable_super): ditto.
- * test/ruby/test_enum.rb: test for above.
+Wed Dec 15 15:31:02 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue May 12 17:08:03 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/set.rb (Set#==): [ruby-dev:25206]
- * method.h: remove unused declaration.
+Wed Dec 15 14:22:10 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon May 11 10:58:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * win32/win32.c (rb_w32_fdisset): check whether the handle is valid.
+ fixed: [ruby-core:03959]
- * gems/bundled_gems: Update minitest-5.6.1 and power_assert-0.2.3.
+Wed Dec 15 10:30:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon May 11 00:20:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_digest.c (ossl_digest_initialize): [ruby-dev:25198]
- * include/ruby/ruby.h (Data_Make_Struct, TypedData_Make_Struct):
- allocate wrapper data object before allocating DATA_PTR to get
- rid of possible memory leak when the former failed.
+Tue Dec 14 17:10:09 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun May 10 21:32:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (rb_w32_close): need to reset osfhnd().
- * gc.c (gc_mark_children): call dmark function for non-NULL
- pointers only, so that DATA_PTR can be NULL safely now.
+Tue Dec 14 14:03:57 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sun May 10 16:23:58 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+ * ext/openssl/ossl.c (ossl_raise): avoid buffer overrun.
+ [ruby-dev:25187]
- * proc.c (proc_binding): fix segmentation fault on marking phase.
- envptr of newenvval should not be NULL.
+Tue Dec 14 12:36:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- You can reproduce by
- make test-all TESTS='--gc-stress -n test_to_proc_binding ruby/test_method.rb'
+ * lib/cgi/session.rb (CGI::Session::initialize): generate new
+ session if given session_id does not exist. [ruby-list:40368]
-Sun May 10 12:41:18 2015 Masaki Matsushita <glass.saga@gmail.com>
+Mon Dec 13 18:13:52 2004 Tanaka Akira <akr@m17n.org>
- * ext/zlib/zlib.c (rb_gzreader_external_encoding):
- define GzipReader#external_encoding.
- [Bug #10900]
+ * gc.c (stack_end_address): new function to obtain stack end address.
+ stack_end_address calls __builtin_frame_address(0) to obtain the
+ frame pointer of a stack frame of stack_end_address. The address
+ is the stack pointer of the caller's stack frame.
+ (SET_STACK_END): use stack_end_address.
+ This makes the conservative garbage collector to scan a stack frame
+ of the garbage_collect function itself. This is required because
+ callee-save registers may be stored in the frame.
+ [ruby-dev:25158]
- * test/zlib/test_zlib.rb: test for above.
+Mon Dec 13 00:58:02 2004 Tanaka Akira <akr@m17n.org>
-Sun May 10 11:57:48 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * lib/pathname.rb (cleanpath_aggressive): make it private.
+ (cleanpath_conservative): ditto.
+ Suggested by Daniel Berger. [ruby-core:3914]
- * ext/win32ole/win32ole_variant.c: fix typo "indicies".
- the patch is from davydovanton <antondavydov.o at gmail.com>.
- [fix GH-892]
+Sun Dec 12 20:06:38 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * lib/rubygems/indexer.rb: ditto.
+ * lib/drb/drb.rb: backported from CVS HEAD.
- * test/rubygems/test_gem_indexer.rb: ditto.
+Sun Dec 12 10:35:10 2004 Dave Thomas <dave@pragprog.com>
-Sun May 10 11:44:37 2015 Masaki Matsushita <glass.saga@gmail.com>
+ * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Don't
+ show an accessor's r/w flag if none was specified
- * string.c (rb_str_crypt): Raise ArgumentError when
- string passed to String#crypt contains null.
- the patch is from jrusnack <jrusnack at redhat.com>.
- [Bug #10988] [fix GH-853]
+Sun Dec 12 10:14:03 2004 Dave Thomas <dave@pragprog.com>
- * test/ruby/test_string.rb: test for above.
+ * lib/rdoc/rdoc.rb (RDoc::RDoc::parse_files): Never exclude files
+ explicitly given on the command line.
-Sun May 10 11:23:03 2015 Masaki Matsushita <glass.saga@gmail.com>
+Sun Dec 11 23:54:07 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * enum.c (enum_to_a): Use size to set array capa when possible.
- the patch is from HonoreDB <aweiner at mdsol.com>.
- [fix GH-444]
+ * ext/tk/*: update to support libraries in ActiveTcl8.4.12.0
+ (see ext/tk/ChangeLog.tkextlib).
-Sat May 9 06:48:36 2015 Eric Wong <e@80x24.org>
+ * ext/tk/sample/scrollframe.rb: add a new sample.
- * ext/socket/ancdata.c (bsock_recvmsg_internal): GC guard
- [Bug #11123]
+Sat Dec 11 20:12:21 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Fri May 8 22:57:24 2015 takiy33 <takiy33@gmail.com>
+ * lib/drb/drb.rb: add DRbRemoteError. [ruby-list:40348],
+ [ruby-list:40390]
- * test/matrix/test_matrix.rb (test_determinant): refactor test on
- Matrix#determinant, by merging with test_det for an alias method
- det. [Fix GH-897]
+ * test/drb/drbtest.rb: ditto.
-Fri May 8 15:43:11 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * test/drb/ut_drb.rb: ditto.
- * lib/net/imap.rb (body_ext_mpart): should work even if body-fld-dsp
- is omitted. [ruby-core:69093] [Bug #11128]
+Sat Dec 11 15:38:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri May 8 15:05:57 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * lib/jcode.rb (String::succ): [ruby-dev:25156]
- * doc/syntax/control_expressions.rdoc: fix a missing "a"
- [fix GH-888][ci skip] Patch by @riffraff
+Sat Dec 11 12:41:55 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri May 8 12:11:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (run_trap_eval): prototype; avoid VC++ warnings.
- * vm_eval.c (rb_method_call_status): resolve refined method entry
- to check if undefined. [ruby-core:69064] [Bug #11117]
+ * ext/socket/getaddrinfo.c: fix typo. fixed: [ruby-core:03947]
-Thu May 7 22:22:59 2015 Sho Hashimoto <sho-h@ruby-lang.org>
+ * win32/win32.c: need to include dln.h.
- * proc.c: [DOC] fix Binding#local_variable_set example. [ci skip]
+Sat Dec 11 00:10:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu May 7 11:32:57 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * io.c (io_reopen): [ruby-dev:25150]
- * Makefile.in (rbconfig.rb): add rule to make.
+Fri Dec 10 08:39:27 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 7 05:14:39 2015 Eric Wong <e@80x24.org>
+ * ext/socket/socket.c (sock_listen): get OpenFile just before calling
+ listen(2). fixed: [ruby-dev:25149]
- * ext/socket/lib/socket.rb (connect_nonblock): use IO#wait_writable
- * lib/drb/drb.rb (DRB::DRbTCPSocket#alive?): use IO#wait_readable
- * lib/webrick/httpserver.rb (run): ditto
- * lib/resolv.rb (request): ditto for single socket case
- [ruby-core:68943] [Feature #11081]
+Thu Dec 9 17:00:00 2004 Akiyoshi, Masamichi <akiyoshi@hp.com>
-Wed May 6 22:49:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/socket.c, ext/socket/getaddrinfo.c: port to VMS
- * vm_eval.c (rb_method_call_status): undefined refined method is
- not callable unless using. [ruby-core:69064] [Bug #11117]
+Thu Dec 9 16:31:02 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun May 3 22:40:06 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * ext/sdbm/init.c (GetDBM): typo.
- * ext/-test-/file/fs.c: need to include sys/statvfs.h
- to use statvfs().
+Thu Dec 9 16:05:00 2004 Akiyoshi, Masamichi <akiyoshi@hp.com>
- * ext/-test-/file/extconf.rb: check the existence of
- sys/statvfs.h
+ * defines.h: change path of vms.h
+ * vms/vms.h: delete reference for snprintf()
+ * vms/config.h: new file
+ * vms/config.h_in: deleted
-Sun May 3 21:59:48 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+Thu Dec 9 14:38:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/yaml.rb: fix typo. [ci skip][fix GH-890]
- Patch by @miketheman
+ * string.c (rb_str_inspect): escape # which starts an expression
+ substitution. fixed: [ruby-core:03922]
-Sun May 3 10:02:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c (rb_str_dump): not escape # which isn't a substitution.
- * range.c (linear_object_p, range_include): test if covered for
- linear objects. [ruby-core:69052] [Bug #11113]
+Thu Dec 9 10:54:36 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri May 1 13:30:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dbm/dbm.c (fdbm_select): [ruby-dev:25132]
- * dln.c (dln_load): check if a different libruby is loaded by the
- extension library, and then bail out to get rid of very
- frequently reported stale bug reports.
+ * ext/sdbm/init.c: ditto.
-Thu Apr 30 19:51:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/gdbm/gdbm.c: ditto.
- * compile.c (iseq_compile_each): revert r46873 and r46875, not to
- allow to execute private readers by pretending op assign.
- [ruby-core:68984] [Bug #11096]
+Thu Dec 9 03:08:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Apr 30 17:02:33 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c (ip_init): set root-win title to "ruby" when
+ the running script is '-e one-liner' or '-' (stdin).
- * rational.c: Added documentation for rational literal.
- [Bug #11075][fix GH-885][ci skip] Patch by @shishir127
+ * ext/tcltklib/extconf.rb: add find_library("#{lib}#{ver}",..) for
+ stub libs
-Thu Apr 30 16:39:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/textmark.rb: TkTextMarkCurrent and TkTextMarkAnchor
+ have a wrong parent class.
- * ext/socket/ipsocket.c (init_inetsock_internal): preserve errno
- before other library calls and use rb_syserr_fail.
- [ruby-core:68531] [Bug #10975]
+ * ext/tk/lib/tk/dialog.rb: rename TkDialog2 --> TkDialogObj and
+ TkWarning2 --> TkWarningObj (old names are changed to alias names)
-Thu Apr 30 16:22:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/dialog.rb: bug fix of treatment of 'prev_command'
+ option and hashes for configuration
- * parse.y (lambda): push and reset cmdarg_stack in lambda body.
- [ruby-core:69017] [Bug #11107]
+ * ext/tk/lib/tk/dialog.rb: add TkDialogObj#name to return the
+ button name
-Sun Apr 26 07:36:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/radiobutton.rb: rename enbugged method value() ==>
+ get_value() and value=(val) ==> set_value(val).
- * enc/utf_8.c (code_to_mbclen, code_to_mbc): reject values larger
- than UTF-8 max codepoints. [Feature #11094]
+ * ext/tk/lib/tk/menu.rb: add TkMenu.new_menuspec
-Sat Apr 25 14:26:19 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/menu.rb: add alias (TkMenuButton = TkMenubutton,
+ TkOptionMenuButton = TkOptionMenubutton)
- * string.c (str_buf_cat): expand later so that the buffer can be
- larger for further use. [Bug #11080] [Bug #11095]
+ * ext/tk/lib/tk/event.rb: new method aliases (same as option keys of
+ event_generate) for Event object
-Fri Apr 24 23:48:45 2015 Akinori MUSHA <knu@iDaemons.org>
+ * ext/tk/lib/tk/font.rb: configinfo returns proper types of values
- * misc/ruby-electric.el: Import version 2.2.3 from
- https://github.com/knu/ruby-electric.el.
+ * ext/tk/lib/tk.rb: bind methods accept subst_args + block
-Fri Apr 24 10:40:02 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/tk/lib/tk/canvas.rb: ditto
- * win32/win32.c (rb_w32_{getc,putc}): removed. they are needed for old
- ruby (before 1.8), but not now.
+ * ext/tk/lib/tk/canvastag.rb: ditto
-Fri Apr 24 08:40:13 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk/frame.rb: ditto
- * win32/win32.c: remove bcc related code.
+ * ext/tk/lib/tk/text.rb: ditto
- * include/ruby/win32.h: ditto.
+ * ext/tk/lib/tk/texttag.rb: ditto
-Fri Apr 24 08:21:07 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk/toplevel.rb: ditto
- * win32/win32.c (rb_acrt_lowio_lock_fh): wrap _pioinfo(i)->lock.
+ * ext/tk/lib/tkextlib/*: ditto and bug fix
- * win32/win32.c (rb_acrt_lowio_unlock_fh): ditto.
+Wed Dec 8 23:54:29 2004 Dave Thomas <dave@pragprog.com>
-Fri Apr 24 06:47:19 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Typo
+ meant that h2 tag was invisible.
- * win32/win32.c (_filbuf): msvc14 doesn't have it, use _fgetc_nolock.
+Wed Dec 8 21:56:31 2004 Kouhei Sutou <kou@cozmixng.org>
- * win32/win32.c (_flsbuf): msvc14 doesn't have it, use _fputc_nolock.
+ * lib/rss, test/rss, sample/rss: backported from CVS HEAD.
- * win32/win32.c (vcruntime_file): define vcruntime_file on msvc14
- because it doesn't export FILE's internal structure.
+Wed Dec 8 14:31:36 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/win32.c (FILE_COUNT): added to abstract FILE->_cnt.
+ * io.c (io_fwrite): change dereference for cosmetic reason.
- * win32/win32.c (FILE_READPTR): added to abstract FILE->_ptr.
+ * sprintf.c (rb_f_sprintf): [ruby-dev:25104]
- * win32/win32.c (FILE_FILENO): added to abstract FILE->_file.
+Tue Dec 7 19:08:00 2004 Akiyoshi, Masamichi <akiyoshi@hp.com>
- * win32/win32.c (init_stdhandle): use FILE_FILENO.
+ * io.c (io_fwrite): fix offset incrementation (for VMS and Human68k)
- * win32/win32.c (rb_w32_getc): use FILE_COUNT and FILE_READPTR.
+Tue Dec 7 00:27:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/win32.c (rb_w32_putc): ditto.
+ * process.c (proc_setgroups): [ruby-dev:25081]
-Fri Apr 24 06:37:07 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Dec 6 18:08:10 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/win32.c (dupfd): use _set_osfhnd.
+ * re.c (rb_reg_eqq): document fix. [ruby-talk:122541]
- * win32/win32.c (rb_w32_wopen): use _set_osflags.
+Mon Dec 6 17:19:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 24 05:38:01 2015 Koichi Sasada <ko1@atdot.net>
+ * rubysig.h (TRAP_BEG, TRAP_END): safe errno around CHECK_INTS.
+ (backported from CVS HEAD) [ruby-dev:24993]
- * gc.c (gc_mark_roots): fox to work PRINT_ROOT_TICKS.
+Mon Dec 6 10:18:17 2004 Dave Thomas <dave@pragprog.com>
-Fri Apr 24 04:49:05 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::look_for_directives_in):
+ Oops - 1.8 doesn't have String#clear
- * win32/Makefile.sub: MSVC14 have struct timespec.
+Mon Dec 6 09:59:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/rtname.cmd: support vcruntime140.dll.
+ * ext/socket/socket.c (sock_connect): use rb_str_new4().
+ [ruby-dev:25052]
- * time.c (localtime_with_gmtoff_zone): MSVC14 doesn't have tzname and
- daylight but have _tzname and _daylight.
+Mon Dec 6 01:42:08 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Apr 23 11:35:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_public_encrypt,
+ ossl_rsa_public_decrypt, ossl_rsa_private_encrypt,
+ ossl_rsa_private_decrypt): should take an optional argument
+ to specify padding mode. [ruby-talk:122539]
- * vm_eval.c (rb_obj_instance_eval, rb_obj_instance_exec): allow
- symbols to just instance_eval/exec, except for definition of
- singletons. [ruby-core:68961] [Bug #11086]
+ * ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): add new constants
+ PKCS1_PADDING, SSLV23_PADDING, NO_PADDING and PKCS1_OAEP_PADDING
+ under OpenSSL::PKey::RSA.
-Thu Apr 23 10:01:36 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * test/openssl/test_pkey_rsa.rb: new file.
- * lib/delegate.rb: fix a typo.
- [fix GH-881][ci skip] Patch by @Zorbash
+Sun Dec 5 19:39:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 22 18:36:50 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/optparse.rb (OptionParser::Completion#complete): new parameter
+ to direct case insensitiveness.
- * lib/net/imap.rb (move, uid_move): support the MOVE command defined
- in RFC6851. Patch by ojab ojab.
- [ruby-core:68960] [Feature #11077]
+ * lib/optparse.rb (OptionParser#order!): ignore case only for long
+ option. [ruby-dev:25048]
-Tue Apr 22 12:42:12 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Sat Dec 4 22:54:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/ruby/test_object.rb: add tests for Kernel#String and Kernel#Array.
- [fix GH-879][fix GH-880] Patch by @yui-knk
+ * io.c (io_write): remove rb_str_locktmp(). [ruby-dev:25050]
-Tue Apr 21 20:46:02 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * io.c (io_fwrite): takes VALUE string as an argument.
+ [ruby-dev:25050]
- * test/ruby/test_object.rb: renamed tests to explicitly class name.
- [fix GH-877] Patch by @yui-knk
+ * ext/socket/socket.c (sock_connect): remove rb_str_locktmp().
+ [ruby-dev:25050]
-Tue Apr 21 05:31:00 2015 Eric Wong <e@80x24.org>
+ * ext/socket/socket.c (udp_connect): [ruby-dev:25045]
- * ext/socket/lib/socket.rb (connect_internal): avoid common exceptions
- from connect_nonblock. [ruby-core:68909]
+ * ext/socket/socket.c (udp_bind): ditto.
-Mon Apr 20 23:46:53 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/socket/socket.c (udp_send): ditto.
- * win32/win32.c (rb_w32_wreadlink): follow the official format of
- REPARSE_DATA_BUFFER structure.
+ * ext/socket/socket.c (bsock_send): ditto.
-Mon Apr 20 20:23:04 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/socket/socket.c (s_recvfrom): ditto.
- * common.mk ($(arch)-fake.rb): revert r50354 because bsdmake seems not
- to handle such substitution.
+ * hash.c (rb_hash_hash): should provide "hash" method where "eql?"
+ is redefined. [ruby-talk:122482]
- * tool/expand-config.rb: convert path separators here.
+Sat Dec 4 14:54:52 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Mon Apr 20 16:52:20 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * eval.c (proc_invoke): use volatile `tmp' rather than `args'.
+ [ruby-core:03882]
- * tool/fake.rb: don't fake libdir. use libdirname instead.
+Sat Dec 4 14:28:56 2004 Dave Thomas <dave@pragprog.com>
-Mon Apr 20 16:49:52 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rdoc/code_objects.rb (RDoc::Context::Section::set_comment):
+ Section comments may now be bracketed by lines which are
+ ignored. You can now write
+ # -----------
+ # :section: Dave's Section
+ # comment material
+ # -----------
+ The lines before :section: are removed, and identical lines at the end are
+ also removed if present.
- * lib/mkmf.rb (MakeMakefile#configuration): DESTDIR should never affect
- top_srcdir and builddir.
+Sat Dec 4 03:33:45 2004 Shugo Maeda <shugo@ruby-lang.org>
-Mon Apr 20 16:18:17 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/readline/readline.c: check $SAFE. (backported from CVS HEAD)
- * common.mk ($(arch)-fake.rb): fix the path separator up for Windows.
+ * test/readline/test_readline.rb: added tests for readline.
+ (backported from CVS HEAD)
-Mon Apr 20 15:02:47 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Sat Dec 4 02:24:00 2004 NARUSE, Yui <naruse@ruby-lang.org>
- * win32/win32.c (rb_w32_wreadlink): fixed a bug that a junction misses
- its drive letter.
+ * ext/nkf/nkf.c: add constant NKF::VERSION
-Mon Apr 20 12:54:56 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/nkf/nkf.c(guess): this becomes an alias of guess2
- * ext/openssl/*: use license instead of licence.
- [fix GH-876][ci skip] Patch by @davydovanton
- * lib/net/https.rb: ditto.
+ * ext/nkf/test.rb(mime_out2): add --no-cp932
-Mon Apr 20 12:42:40 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * ext/nkf/nkf-utf8/nkf.c: original nkf2 revision 1.47
- * benchmark/bm_so_meteor_contest.rb: fix a typo.
- [fix GH-876][ci skip] Patch by @davydovanton
- * tool/bisect.sh: ditto.
- * tool/update-deps: ditto.
+Sat Dec 4 00:35:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Apr 20 11:10:46 2015 Eric Wong <e@80x24.org>
+ * ext/socket/socket.c (bsock_setsockopt): [ruby-dev:25039]
- * ext/socket/socket.c (sock_connect_nonblock): do not raise EISCONN
- [ruby-core:68926] [Feature #11072]
- * test/socket/test_nonblock.rb: check non-EISCONN on 2nd connect
+Fri Dec 3 18:57:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Apr 19 12:19:17 2015 Chad Brewbaker <crb002@gmail.com>
+ * lib/ostruct.rb: 1.9 marshaling support back-ported.
+ [ruby-core:03871]
- * ext/{etc,openssl,tk}: Adding parens and comparisons around
- assignments to get rid of Wparentheses warnings. [Fix GH-875]
+Fri Dec 3 13:45:20 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Apr 19 10:42:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (proc_invoke): copy arguments to frame.argv.
+ [ruby-core:03861]
- * hash.c (get_env_cstr): environment variables must be ASCII
- compatible, as dummy encodings and wide char encodings are
- unsupported now.
+Fri Dec 3 12:25:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 18 15:18:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * st.h: fix prototypes.
- * ext/json/parser/parser.rl: raise with messages in UTF-8
- encoding. [ruby-core:67386] [Bug #10705]
+Fri Dec 3 00:21:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Apr 17 11:58:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * object.c (convert_type): use rb_respond_to() again.
+ [ruby-dev:25021]
- * string.c (STR_SET_EMBED): clear NOFREE flag at embedding as
- embedded strings no longer refer static strings.
- [ruby-core:68436] [Bug #10942]
+ * eval.c (rb_respond_to): funcall respond_to? if it's redefined.
+ [ruby-dev:25021]
-Thu Apr 16 05:15:50 2015 Eric Wong <e@80x24.org>
+Fri Dec 3 01:55:24 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * NEWS: note IO#wait_readable change in r50263
+ * ext/tk/lib/tk.rb: widget configuration by TkWindow#method_missing
+ returns proper object. "widget.option = val" returns val, and
+ "widget.option(val)" returns self.
-Thu Apr 16 05:09:36 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/font.rb: TkFont#replace accepts only one font argument.
- * lib/net/protocol.rb (rbuf_fill): use IO#wait_*able
- * lib/net/http/generic_request.rb (wait_for_continue): ditto
- [ruby-core:68891] [Feature #11056]
+ * ext/tk/lib/tk/radiobutton.rb: add TkRadiobutton#value and
+ TkRadiobutton#value=(val).
-Wed Apr 15 18:43:43 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/spinbox.rb: callback substitution support on
+ command option.
- * vm_trace.c (rb_tracepoint_new): fix documentation.
- Commented by @emilsoman.
+ * ext/tk/sample/demos-en/widget: bug fix (wrong image height)
-Wed Apr 15 17:36:51 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/sample/demos-jp/widget: ditto.
- * vm_trace.c (rb_tracepoint_new): Add documentation for
- rb_tracepoint_new C level API [ci skip]
- Provided by @emilsoman. [fix GH-869]
+Fri Dec 3 00:11:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Apr 15 10:37:40 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+ * io.c (rb_file_initialize): [ruby-dev:25032]
- * doc/contributors.rdoc: fix a typo. Patch by @davydovanton
- [fix GH-872][ci skip]
- * doc/syntax/methods.rdoc: ditto.
- * ext/digest/sha2/sha2.c: ditto.
- * ext/socket/ipsocket.c: ditto.
- * ext/tk/*: ditto.
+Thu Dec 2 16:41:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 15 07:51:23 2015 Yuki Yugui Sonoda <yugui@yugui.jp>
+ * eval.c (rb_protect): prevent continuations created inside from being
+ called from the outside. [ruby-dev:25003]
- * doc/extension.ja.rdoc: Added description of TypedData_XXX.
- Deprecated the old DATA_XXX.
- Reviewed by ko1 and nobu.
- Fixes [ruby-dev:40881] #3064
+ * eval.c (rb_callcc, rb_cont_call): prohibit calling from different
+ signal contexts. [ruby-dev:25022]
- * doc/extension.rdoc: ditto.
+Thu Dec 2 09:57:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Apr 15 07:34:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/ostruct.rb (OpenStruct::Marshaler): OpenStruct can be
+ marshaled again. [ruby-core:03862]
- * thread_pthread.c (reserve_stack): keep sp safe zone to get rid
- of crash by -fstack-check. [ruby-core:68740] [Bug #11030]
+Thu Dec 2 09:30:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 14 16:03:49 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * eval.c (thread_mark): mark thread group. [ruby-dev:25020]
- * tool/merger.rb (versionup): should also increment revision when
- changing teeny.
+ * eval.c (thgroup_add): check whether the argument is really a Thread.
-Tue Apr 14 11:24:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 2 07:57:16 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/-test-/printf/printf.c (uint_to_str): renamed to get rid of
- conflict on cygwin. [ruby-core:68877] [Bug #11065]
+ * io.c (rb_io_ctl): [ruby-dev:25019]
-Tue Apr 14 08:59:04 2015 Zachary Scott <e@zzak.io>
+Wed Dec 1 02:21:02 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c: [DOC] Improve documentation for ObjectSpace.count_objects
- with regards to `:TOTAL` key, with patch by @schneems [Fixes GH-871]
- https://github.com/ruby/ruby/pull/871 [Bug #11067]
+ * signal.c (sighandler): call handler immediately only for default
+ handlers. [ruby-dev:25003]
-Mon Apr 13 22:44:07 2015 Tanaka Akira <akr@fsij.org>
+Tue Nov 30 23:38:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/lib/envutil.rb (File.mkfifo): Defined using mkfifo command.
+ * io.c (io_fread): need not to null terminate. [ruby-dev:24998]
- * test/ruby/test_io.rb: Use File.mkfifo.
+ * io.c (read_all): remove unnecessary rb_str_resize().
+ [ruby-dev:24996] (backported from CVS HEAD)
- * test/ruby/test_file_exhaustive.rb: Ditto.
+ * io.c (io_readpartial): ditto.
- * test/ruby/test_process.rb: Ditto.
+ * io.c (io_read): ditto.
-Mon Apr 13 21:20:20 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Tue Nov 30 16:18:50 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/openssl/lib/openssl/ssl.rb: stricter hostname verification
- following RFC 6125. with the patch provided by Tony Arcieri and
- Hiroshi Nakamura [ruby-core:61545] [Bug #9644]
- * test/openssl/test_ssl.rb: add tests for above.
+ * io.c (io_fread): need not to null terminate. [ruby-dev:24998]
-Sun Apr 12 18:40:04 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (read_all): remove unnecessary rb_str_resize().
+ [ruby-dev:24996]
- * ext/json/json.gemspec: bump version to 1.8.2.
- * ext/json/lib/json/version.rb: ditto.
+ * io.c (io_read): ditto.
-Sun Apr 12 18:12:07 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Tue Nov 30 00:49:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/json/json.gemspec, lib/rdoc/rdoc.gemspec: added gemspec directly.
- * defs/default_gems, tool/rbinstall.rb: removed default_gems definition.
- it make simple installation for default gems.
+ * io.c (rb_io_sysread): use temporary lock. [ruby-dev:24992]
-Sun Apr 12 17:35:17 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Nov 29 16:06:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/json/*, test/json/*: Reverted r50231. Because it's not
- working with cross-compile environment.
+ * ext/stringio/stringio.c (strio_write): insufficiently filled string
+ being extended when overwriting. [ruby-core:03836]
-Sun Apr 12 15:34:59 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Nov 29 15:59:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * parse.y (arg): fix segfault by null caused by syntax error.
- [ruby-core:68851] [Bug #10957]
+ * lib/ostruct.rb (OpenStruct::method_missing): check method
+ duplication for -d.
-Sun Apr 12 15:11:16 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/ostruct.rb (OpenStruct::initialize): ditto.
- * lib/rubygems/test_case.rb: use explicitly exception class and reverted
- to require JSON library for rubygems tests with Ruby 2.2.0 or earlier.
+Mon Nov 29 15:22:28 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Apr 12 15:10:18 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/io/nonblock/test_flush.rb: abandon tests when io/nonblock is
+ not supported.
- * ext/io/wait/wait.c (io_wait_readable): simply returns that IO is
- readable without blocking, but no longer returns EOF.
+Mon Nov 29 03:08:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/io/wait/wait.c (io_ready_p, io_wait_readable): try polling
- first and check FIONREAD optionally to see if EOF.
- [ruby-core:36805] [Feature #4849]
+ * object.c (convert_type): direct call conversion methods for the
+ performance. [ruby-core:03845]
-Sun Apr 12 14:53:23 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * eval.c (rb_funcall_rescue): new function.
- * lib/rubygems/test_case.rb: fixed json load error for rubygems tests.
+ * object.c (rb_Array): avoid using rb_respond_to().
-Sun Apr 12 14:13:28 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * object.c (rb_Integer): ditto.
- * gc.c: Document require name for ObjectSpace methods.
- [ci skip][fix GH-860] Patch by @schneems
+ * parse.y (reduce_nodes): empty body should return nil.
-Sun Apr 12 13:54:05 2015 Tanaka Akira <akr@fsij.org>
+ * string.c (rb_str_aset): the original string should not be
+ affected by modifying duplicated string. [ruby-dev:24981]
- * test/ruby/test_io.rb: New test that open(fifo) doesn't block other
- threads.
+Mon Nov 29 13:57:38 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Apr 12 13:52:18 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * win32/win32.c (CreateChild): search executable file if no program
+ name given. (backported from CVS HEAD)
- * ext/coverage/coverage.c: Remove extension from require argument.
- [ci skip][fix GH-870] Patch by @yui-knk
+Mon Nov 29 13:37:54 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Apr 12 10:29:14 2015 Eric Wong <e@80x24.org>
+ * io.c (fptr_finalize): must not use FILE after fclose().
+ [ruby-dev:24985]
- * ext/openssl/ossl_ssl.c (ossl_ssl_connect_nonblock):
- support `exception: false'
- * (get_no_exception): move function location
- * ext/socket/socket.c (sock_connect_nonblock):
- support `exception: false'
- * test/openssl/test_pair.rb (test_connect_accept_nonblock_no_exception):
- test `exception: false' on connect,
- rename from `test_accept_nonblock_no_exception'
- * test/socket/test_nonblock.rb (test_connect_nonblock_no_exception):
- new test
+Mon Nov 29 13:16:31 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Apr 12 09:57:16 2015 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (CreateChild): push back the last space before next
+ loop because CharNext() eats it.
- * test/ruby/test_file_exhaustive.rb: Test a block device on GNU/Linux.
+Mon Nov 29 01:18:18 2004 Tanaka Akira <akr@m17n.org>
-Sun Apr 12 09:24:03 2015 Tanaka Akira <akr@fsij.org>
+ * io.c (rb_io_check_writable): call io_seek regardless of
+ NEED_IO_SEEK_BETWEEN_RW. [ruby-dev:24986]
- * test/ruby/test_file_exhaustive.rb: Test a file not owned.
+Sat Nov 27 21:43:39 2004 Tanaka Akira <akr@m17n.org>
-Sun Apr 12 09:05:44 2015 Tanaka Akira <akr@fsij.org>
+ * io.c: avoid data lost with nonblocking fd and
+ stdio buffering in sync mode. [ruby-dev:24966]
+ based on matz's patch [ruby-dev:24967]
+ (io_fwrite): new primitive writing function which writes
+ directly if sync mode.
+ (rb_io_fwrite): wrapper for io_fwrite now.
+ (io_write): call io_fwrite instead of rb_io_fwrite.
- * ext/fiddle/depend: Fix "Wrong mix of special targets" error with
- OpenBSD make.
+Sat Nov 27 14:44:15 2004 Kent Sibilev <ksibilev@bellsouth.net>
-Sun Apr 12 09:04:37 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/cgi/session.rb (CGI::Session::initialize): create_new_id is
+ now a instance method. [ruby-core:03832]
- * test/ruby/test_file_exhaustive.rb: Windows doesn't support Unix file
- modes.
+Sat Nov 27 09:41:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Apr 12 08:56:44 2015 Tanaka Akira <akr@fsij.org>
+ * io.c (io_fread): old rb_io_fread with file closing checking.
+ (rb_io_fread): wrapper for io_fread now.
+ [ruby-dev:24964]
- * ext/-test-/file/fs.c: OpenBSD needs sys/param.h before sys/mount.h.
+Fri Nov 26 18:02:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sun Apr 12 08:52:01 2015 Tanaka Akira <akr@fsij.org>
+ * ext/tk/lib/tk.rb: Tk.destroy uses TkWindow#epath
- * test/ruby/test_file_exhaustive.rb: Test suid, sgid and sticky file.
+ * ext/tk/lib/tk/image.rb: bug fix
-Sat Apr 11 23:48:30 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/tk/lib/tk/wm.rb: add 'iconphoto' method(Windows only)
- * template/fake.rb.in: Don't assign baseruby, Because it's affect to
- Makefile of native gem like json on bundled gems.
+ * ext/tk/lib/tkextlib/*: some methods uses TkWindow#epath
-Sat Apr 11 23:33:22 2015 Tanaka Akira <akr@fsij.org>
+Fri Nov 26 13:49:06 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * file.c (rb_f_test): Consider nsec for "=", "<" and ">" for "test"
- method.
+ * eval.c (method_missing): raise TypeError for classes do not
+ have allocators. [ruby-core:03752]
-Sat Apr 11 23:26:05 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/erb.rb: add RDoc by James Edward Gray II. [ruby-core:03786]
- * tool/rbinstall.rb: support destdir for native extension gem.
+Fri Nov 26 13:29:02 2004 Dave Thomas <dave@pragprog.com>
-Sat Apr 11 21:02:06 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::look_for_directives_in): Break
+ out of preprocessing when we find a :section: directive (previously cleared out the
+ comment, but this apparently now generates an error in gsub!)
- * test/ruby/test_file_exhaustive.rb
- (TestFileExhaustive#test_stat_socket_p): r50226 accidentally missed
- the guard for non-unix environments.
+Fri Nov 26 00:17:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Apr 11 20:14:21 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (io_read): move StringValue() check before GetOpenFile().
+ [ruby-dev:24959]
- * ext/json/*, test/json/*, defs/default_gems: Gemify JSON library.
- [fix GH-867][Feature #11057]
- * test/ruby/test_extlibs.rb: removed json gem from existence extensions.
- * gems/bundled_gems: added json gem into bundled gem.
- * lib/rdoc/rubygems_hook.rb: ignored no json environment.
- * lib/rubygems/test_case.rb, test/rubygems/*: ditto.
- * lib/rdoc/test_case.rb, test/rdoc/*: ditto.
+Thu Nov 25 20:14:57 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 11 15:56:58 2015 Tanaka Akira <akr@fsij.org>
+ * lib/thwait.rb (ThreadsWait#join_nowait): abnormally terminated
+ threads should be also processed. [ruby-talk:121320]
- * test/ruby/test_file_exhaustive.rb: Create sample files lazily.
+Thu Nov 25 10:14:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 11 14:03:47 2015 Tanaka Akira <akr@fsij.org>
+ * dir.c (push_braces): do not reuse buffer strings. [ruby-core:03806]
- * test/ruby/test_file_exhaustive.rb: Test character device using
- /dev/null.
+Thu Nov 25 07:59:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Apr 11 10:59:58 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (read_all): stringify non-nil buffer argument, and always
+ taint the result. [ruby-dev:24955]
- * lib/mkmf.rb (append_cppflags, append_cflags, append_ldflags):
- utility methods to append compiler options.
+Wed Nov 24 01:01:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Apr 11 08:22:24 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (io_read): integer conversion should be prior to
+ GetOpenFile(). [ruby-dev:24952]
- * lib/rdoc/text.rb: removed duplicated code.
+ * configure.in, io.c: cancel [ ruby-Patches-1074 ].
-Sat Apr 11 04:46:42 2015 Eric Wong <e@80x24.org>
+Tue Nov 23 08:09:50 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/net/protocol.rb (rbuf_fill): avoid exception with read_nonblock
- [ruby-core:68787] [Feature #11044]
+ * ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton
-Fri Apr 10 23:57:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 23 02:00:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * dir.c (need_normalization): use getattrlist() if fgetattrlist()
- is unavailable, on OSX 10.5. [ruby-core:68829] [Bug #11054]
+ * file.c (rb_file_chown): integer conversion should be prior to
+ GetOpenFile(). [ruby-dev:24949]
-Fri Apr 10 22:29:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 23 00:10:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/mkmf.rb (try_compile): pass the given werror flag to try_do
- to check if stderr is empty.
+ * file.c (rb_file_chown): integer conversion should be prior to
+ GetOpenFile(). [ruby-dev:24947]
- * lib/mkmf.rb (try_cflags, try_ldflags): default werror to true.
+ * file.c (rb_file_truncate): ditto.
- * win32/Makefile.sub (WERRORFLAG): remove useless option. VC does
- not make warnings of unknown command option an error.
+ * file.c (rb_file_s_truncate): ditto.
-Fri Apr 10 19:34:24 2015 Tanaka Akira <akr@fsij.org>
+ * dir.c (dir_seek): use NUM2OFFT().
- * test/ruby/test_file_exhaustive.rb: Test socket.
+ * misc/ruby-mode.el (ruby-non-block-do-re): should not match words
+ start with block keyword and underscore. [ruby-core:03719]
-Fri Apr 10 19:38:46 2015 Koichi Sasada <ko1@atdot.net>
+Mon Nov 22 22:33:02 2004 Dave Thomas <dave@pragprog.com>
- * test/objspace/test_objspace.rb: remove debug prints.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Don't use names
+ of variables or constants when oarsing 'require'
-Fri Apr 10 19:35:51 2015 Koichi Sasada <ko1@atdot.net>
+Mon Nov 22 00:13:35 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/objspace/objspace.c: add ObjectSpace.count_imemo_objects method
- to count imemo objects for each type.
+ * dir.c (dir_seek): should retrieve dir_data after NUM2INT().
+ [ruby-dev:24941]
- * test/objspace/test_objspace.rb: add a test.
+Sat Nov 20 23:57:33 2004 Dave Thomas <dave@pragprog.com>
- * NEWS: describe about this addition.
+ * lib/rdoc/README (et al): Add a new directive, :section:, and
+ change the output format to accomodate. :section: allows to to
+ group together methods, attributes, constants, etc under
+ headings in the output. If used, a table of contents is
+ generated.
-Fri Apr 10 19:34:24 2015 Tanaka Akira <akr@fsij.org>
+Sat Nov 20 23:56:54 2004 Dave Thomas <dave@pragprog.com>
- * test/ruby/test_file_exhaustive.rb: Test anonymous pipe.
+ * lib/rdoc/options.rb (Options::parse): Force --inline-source if
+ --one-file option given
-Fri Apr 10 19:31:56 2015 Tanaka Akira <akr@fsij.org>
+Sat Nov 20 23:55:19 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/ruby/test_file_exhaustive.rb: Test named pipe.
+ * string.c (rb_str_splice): should place index wrapping after
+ possible modification. [ruby-dev:24940]
-Fri Apr 10 19:10:34 2015 Koichi Sasada <ko1@atdot.net>
+Sat Nov 20 13:26:03 2004 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/objspace/objspace.c (setup_hash): unify common routine.
+ * ext/nkf/nkf-utf8/utf8tbl.c: original revision 1.7
-Fri Apr 10 18:29:49 2015 Tanaka Akira <akr@fsij.org>
+Sat Nov 20 05:34:24 2004 NARUSE, Yui <naruse@ruby-lang.org>
- * process.c (rb_execarg_parent_start1): Handle EINTR.
+ * ext/nkf/nkf-utf8/nkf.c: original nkf.c rev:1.40
-Fri Apr 10 17:27:58 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/nkf/test.rb: add test for mime encode/decode
- * vm.c (vm_exec): check other events when RETURN is thrown.
- [Bug #10724]
+Sat Nov 20 01:37:34 2004 Johan Holmberg <holmberg@iar.se>
- * test/ruby/test_settracefunc.rb: add a test.
+ * eval.c (error_print): nicer traceback at interrupt.
+ [ruby-core:03774]
-Fri Apr 10 11:44:09 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Nov 20 00:07:16 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/date/extconf.rb: check warnings.
+ * string.c (str_gsub): internal buffer should not be listed by
+ ObjectSpace.each_object() by String#gsub. [ruby-dev:24931]
- * lib/mkmf.rb (try_cflags): pass options to try_compile.
+Fri Nov 19 01:20:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/Makefile.sub (WERRORFLAG): make unknown command line
- options an error.
+ * lib/cgi/session.rb (CGI::Session::FileStore::initialize): raise
+ exception if data corresponding to session specified from the
+ client does not exist.
-Fri Apr 10 08:00:17 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Nov 19 00:59:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/ruby/test_process.rb: unfortunately, windows is not POSIX...
- cygwin has mkfifo command, but it does not affect system-wide.
+ * string.c (str_gsub): internal buffer should not be listed by
+ ObjectSpace.each_object(). [ruby-dev:24919]
-Fri Apr 10 02:18:53 2015 Tanaka Akira <akr@fsij.org>
+Thu Nov 18 18:41:08 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * test/ruby/test_process.rb: Use mkfifo command instead of mknod
- command to create a named pipe. mkfifo command is defined by POSIX.
+ * test/ruby/test_stringchar.rb (test_bang): added.
-Fri Apr 10 01:29:05 2015 Tanaka Akira <akr@fsij.org>
+ * string.c (rb_str_upcase_bang, rb_str_capitalize_bang)
+ (rb_str_swapcase_bang): missing rb_str_modify(). [ruby-dev:24915]
- * process.c: Release GVL when opening a file in spawn() to avoid whole
- process blocking when opening a named pipe.
- (open_func): New function.
- (rb_execarg_parent_start1): Extracted from rb_execarg_parent_start and
- use rb_thread_call_without_gvl2 to release GVL when opening a file.
- (rb_execarg_parent_start): Invoke rb_execarg_parent_start1 via
- rb_protect and invoke rb_execarg_parent_end when error.
+Thu Nov 18 00:21:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Apr 9 22:19:19 2015 Tanaka Akira <akr@fsij.org>
+ * process.c (proc_getpgrp): prohibit for $SAFE=2.
+ [ruby-dev:24899]
- * process.c (redirect_open): Removed.
+ * process.c (get_pid): ditto. [ruby-dev:24904]
-Thu Apr 9 21:38:20 2015 Tanaka Akira <akr@fsij.org>
+ * process.c (get_ppid): ditto.
- * internal.h (rb_execarg_parent_end): Declared.
+ * array.c (rb_ary_delete): defer rb_ary_modify() until actual
+ modification. [ruby-dev:24901]
- * process.c: "spawn" opens files in the parent process.
- (check_exec_redirect): Add an placeholder for fd in parameters
- for fd_open.
- (check_exec_fds_1): Delete fd_open condition.
- (check_exec_fds): Don't call check_exec_fds_1 with fd_open.
- (rb_execarg_parent_start): Open files specified as "spawn" options
- and add "dup2" options.
- (rb_execarg_parent_end): New function to close opened fds.
- (run_exec_open): Removed.
- (rb_execarg_run_options): Don't call run_exec_open.
- (rb_spawn_internal): Call rb_execarg_parent_end.
+Thu Nov 18 10:10:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (pipe_open): Call rb_execarg_parent_end.
+ * io.c, rubyio.h (rb_io_modenum_flags): exported.
- * ext/pty/pty.c (establishShell): Call rb_execarg_parent_end.
+ * ext/stringio/stringio.c (strio_initialize): allow Fixnum as mode as
+ well as IO.new does. [ruby-dev:24896]
-Thu Apr 9 20:52:31 2015 Tanaka Akira <akr@fsij.org>
+Wed Nov 17 23:42:40 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * internal.h (rb_execarg_parent_start): Renamed from rb_execarg_fixup.
+ * test/ruby/test_settracefunc.rb: added. [ruby-dev:24884]
- * process.c: Follows the above change.
+Wed Nov 17 13:56:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c: Ditto.
+ * parse.y (newline_node): should not use FL_SET. [ruby-dev:24874]
- * ext/pty/pty.c: Ditto.
+ * parse.y (string_content): should not use FL_UNSET.
-Thu Apr 9 20:35:12 2015 Tanaka Akira <akr@fsij.org>
+ * node.h (NODE_NEWLINE): remove unused bit to utilize flag field
+ in nodes.
- * process.c (fd_clear_cloexec): Extracted from run_exec_dup2.
+Wed Nov 17 13:09:40 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 9 09:26:47 2015 Eric Wong <e@80x24.org>
+ * {bcc32,win32,wince}/Makefile.sub (test): should build ruby.exe
+ before running test. [ruby-core:03756]
- * ccan/list/list.h: sync with ccan upstream
- [ccan commit c2fbfe5282ba264f3485586e7efa8a5967f2d386]
+Wed Nov 17 04:33:01 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Apr 9 08:24:03 2015 Masahiro Tomita <tommy@tmtm.org>
+ * pack.c: all features are backport from 1.9. [ruby-dev:24826]
- * ext/socket/raddrinfo.c (addrinfo_mload): fix memory leak of
- addrinfo. [ruby-dev:48923] [Bug #11051]
+ * bignum.c (rb_big2ulong_pack): new function to pack Bignums.
-Wed Apr 8 17:45:02 2015 Shannon Skipper <shannonskipper@gmail.com>
+Wed Nov 17 03:42:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * version.c (Init_version): the version of the engine or
- interpreter. [Fix GH-858]
+ * string.c (rb_str_splice): move rb_str_modify() after
+ StringValue(), which may alter the receiver. [ruby-dev:24878]
-Wed Apr 8 16:15:30 2015 Kenta Murata <mrkn@cookpad.com>
+Tue Nov 16 23:45:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * bigdecimal: conform to ruby's license. [ruby-core:68466] [Bug #10952]
+ * numeric.c (flo_divmod): protect float values from GC by
+ assignment to local variables. [ruby-dev:24873]
-Wed Apr 8 14:57:06 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Tue Nov 16 16:30:21 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * win32/win32.c (rb_w32_wreadlink): should treat junctions like as
- symlinks.
+ * {bcc32,win32,wince}/setup.mak (-epilogue-): remove config.h and
+ config.status to force updating them.
+
+Tue Nov 16 16:20:45 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): position was ignored when a
+ buffer was passed. http://www.yo.rim.or.jp/~nov/d/?date=20041116#p03
+
+Tue Nov 16 11:19:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::options): use
+ Regexp conversion.
+
+Tue Nov 16 01:41:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_mod_check): frozen check should be separated.
+ [ruby-core:3742]
+
+ * array.c (rb_ary_update): pedantic check to detect
+ rb_ary_to_ary() to modify the receiver. [ruby-dev:24861]
+
+Mon Nov 15 13:50:52 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_justify): typo fixed. [ruby-dev:24851]
+
+Mon Nov 15 11:50:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-special-char-p, ruby-parse-partial): handle
+ operator symbols. [ruby-talk:120177]
+
+Sun Nov 14 13:27:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pp.rb (PP#object_address_group): remove odd number of 'f'
+ prefixed to negative address.
+
+Sun Nov 14 08:51:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/logger/test_logger.rb: Logger just expects
+ Logger#datetime_format to be used for Time#strftime independently of
+ locale. [ruby-dev:24828]
+
+Fri Nov 12 15:03:26 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval.c (ruby_options): now we cannot call rb_glob() before
+ ruby_init(), so call rb_w32_cmdvector() at ruby_options().
+
+ * win32.{c,h} (rb_w32_cmdvector): rename make_cmdvector() and
+ export it.
+
+Fri Nov 12 14:08:01 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/event.rb: remove $LOADED_FEATURES trick
+
+ * ext/tk/lib/tk.rb: ditto
+
+Fri Nov 12 00:31:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/gdbm/gdbm.c (fgdbm_store): StringValue() may alter string
+ pointer. [ruby-dev:24783]
+
+Thu Nov 11 17:36:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (rb_globi): also should call back via rb_glob_caller().
+ [ruby-dev:24775]
+
+Thu Nov 11 16:47:21 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_file.rb (test_truncate_wbuf): we want to test
+ only File#truncate, not behaviour of seek(2).
+
+Thu Nov 11 09:41:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (push_braces): was confusing VALUE and char*.
+
+ * dir.c (rb_push_glob): Dir.glob should have called its block.
+
+Thu Nov 11 01:52:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (syserr_initialize): use stringified object.
+ [ruby-dev:24768]
+
+Wed Nov 10 22:49:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (SimpleDelegator::dup): wrong number of
+ arguments.
+
+ * lib/delegate.rb (DelegateClass::dup): ditto.
+
+Wed Nov 10 12:31:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT (Example): extconf.rb is indispensable now.
+
+Wed Nov 10 03:33:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: fix SEGV when compiled with Tcl/Tk8.3.x
+ or older
+
+ * ext/tk/lib/tkextlib/tile/style.rb: bug fix
+
+Tue Nov 9 14:27:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::Officious): moved from DefaultList.
+
+Tue Nov 9 01:05:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (rb_glob2): do not allocate buffer from heap to avoid
+ memory leaks. use string object for buffering instead.
+ [ruby-dev:24738]
+
+ * dir.c (join_path): ditto.
+
+ * io.c (io_read): external input buffer may be modified even after
+ rb_str_locktmp(). [ruby-dev:24735]
+
+ * dir.c (fnmatch): p or s may be NULL. [ruby-dev:24749]
+
+Tue Nov 9 00:53:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * regex.c (slow_match): avoid GCC 3.4.x warnings.
+
+Tue Nov 9 00:50:06 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri
+
+Mon Nov 8 23:38:35 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/extservm.rb: add DRb::ExtServManager#uri=.
+ [ruby-dev:24743]
+
+Mon Nov 8 22:20:19 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
+ Fix bug where parent class wasn't being detected if the
+ child class was defined using the A::B notation.
+
+Mon Nov 8 00:14:13 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: add setup for mignw32 cross compiling.
+ [ruby-talk:119413]
+
+Sun Nov 7 23:49:26 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bind-event methods accept multi substitution
+ arguments.
+
+ * ext/tk/lib/tk/canvas.rb: ditto.
+
+ * ext/tk/lib/tk/canvastag.rb: ditto.
+
+ * ext/tk/lib/tk/text.rb: ditto.
+
+ * ext/tk/lib/tk/texttag.rb: ditto.
+
+ * ext/tk/lib/tkextlib: ditto.
+
+Sat Nov 6 14:58:44 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (WEBrick::HTTPServer#start): remove
+ :DoNotReverseLookup option. (Socket#do_not_reverse_lookup is a
+ ruby 1.9 feature)
+
+Sat Nov 6 11:31:04 2004 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (_parse): checks whether zone was given.
+
+Sat Nov 6 00:46:27 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_locktmp): check STR_TMPLOCK flag before
+ locking. [ruby-dev:24727]
+
+Fri Nov 5 18:12:42 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/scrollable.rb: divide Scrollable module into
+ X_Scrollable and Y_Scrollable
+
+ * ext/tk/lib/tk/entry.rb: include X_Scrollable instead of Scrollable
+
+ * ext/tk/lib/tk/autoload.rb: define autoload for X_Scrollable and
+ Y_Scrollable
+
+Fri Nov 5 16:05:32 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: TkComm._at() supprts both of "@x,y" and "@x"
+
+Fri Nov 5 13:22:58 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/text.rb: sorry. bug fix again.
+
+Fri Nov 5 13:17:54 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/text.rb: bug fix
+
+Fri Nov 5 08:52:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark): stricter GC stack check.
+
+Fri Nov 5 08:52:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark): stricter GC stack check.
+
+Fri Nov 5 08:34:43 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_gsub): should have removed rb_str_unlocktmp(str).
+ [ruby-dev:24708]
+
+Thu Nov 4 21:25:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_gsub): string modify check no longer based on
+ tmplock. [ruby-dev:24706]
+
+Thu Nov 4 19:27:46 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_f_open): fix typo.
+
+Thu Nov 4 15:02:14 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: forget to initialize instance_variables
+ of TkVarAccess objects
+
+Thu Nov 4 09:11:35 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark): enable GC stack checking.
+
+Thu Nov 4 03:11:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_gsub): lock strings temporarily. [ruby-dev:24687]
+
+ * ext/socket/socket.c (s_recvfrom): tmplock input buffer.
+ [ruby-dev:24705]
+
+Wed Nov 3 22:32:12 2004 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c: On NetBSD don't use setruid() and setrgid().
+
+Wed Nov 3 22:24:17 2004 Daigo Moriwaki <techml@sgtpepper.net>
+
+ * lib/webrick/httpauth/digestauth.rb: use Base64.encode64 to
+ avoid warnings.
+
+Wed Nov 3 17:19:59 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_uniq_bang): do not push frozen string from hash
+ table. [ruby-dev:24695]
+
+ * array.c (rb_ary_and): ditto.
+
+ * array.c (rb_ary_or): ditto.
+
+Wed Nov 3 17:13:02 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * io.c (pipe_open): fix compile error
+
+Wed Nov 3 16:58:07 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: support to use different Tcl commands between
+ configure and configinfo
+
+ * ext/tk/lib/font.rb: ditto.
+
+ * ext/tk/lib/itemconfig.rb: support to use different Tcl commands
+ between item_configure and item_configinfo
+
+ * ext/tk/lib/itemfont.rb: ditto.
+
+ * ext/tk/extconf.rb: install SUPPORT_STATUS
+
+ * ext/tk/lib/tkextlib: some bug fixes (see ext/tk/ChangeLog.tkextlib)
+
+Wed Nov 3 16:30:41 2004 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf: follow nkf 2.0.4
+
+Wed Nov 3 15:53:34 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rss/test_maker_*.rb: added tests for RSS Maker.
+
+ * lib/rss/maker.rb: added RSS Maker.
+
+ * lib/rss/maker/*.rb: ditto.
+
+Tue Nov 2 16:35:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/enumerator/enumerator.c (each_cons_i): pass copy of an
+ internal consequent array. [ruby-talk:118691]
+
+Tue Nov 2 16:05:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (rb_f_fork): need to flush stdout and stderr before
+ fork(2). [ruby-talk:117715]
+
+Tue Nov 2 01:20:09 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): nail down dyna_var node when Proc object
+ or continuation is created. [ruby-dev:24671]
+
+Mon Nov 1 13:59:28 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (MANIFEST): do not use anymore, use extconf.rb instead.
+
+ * ext/enumerator/extconf.rb, ext/fcntl/extconf.rb,
+ ext/stringio/extconf.rb: added.
+
+ * MANIFEST, ext/**/MANIFEST: removed.
+
+ * README.EXT, README.EXT.ja: remove MANIFEST stuff.
+
+Mon Nov 1 01:14:52 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_open): create copy of popen specifier. [ruby-dev:24656]
+
+Mon Nov 1 00:36:48 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * main.c (_stklen): move to gc.c.
+
+Sun Oct 31 00:22:28 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_locktmp): lock string temporarily.
+
+ * string.c (str_independent): add tmplock check.
+
+ * io.c (io_write): lock output string temporarily.
+ [ruby-dev:24649]
+
+ * io.c (io_write): use rb_str_locktmp().
+
+ * io.c (read_all): ditto.
+
+Sat Oct 30 06:53:24 2004 Peter Vanbroekhoven <peter.vanbroekhoven@cs.kuleuven.ac.be>
+
+ * eval.c (rb_eval): NODE_XSTR should pass copy of literal string.
+
+Sat Oct 30 00:19:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_sort_by): protect continuation jump in.
+ [ruby-dev:24642]
+
+Fri Oct 29 21:27:51 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_check_initialized): new function to check uninitialized
+ object. [ruby-talk:118234]
+
+ * file.c (rb_file_path), io.c (rb_io_closed): check if initialized.
+
+Fri Oct 29 10:00:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): forget to free some memory chunks.
+ [ruby-core:03611]
+
+ * eval.c (ruby_cleanup): ruby_finalize_1 may cause exception,
+ should be wrapped by PUSH_TAG/POP_TAG(). [ruby-dev:24627]
+
+Thu Oct 28 08:42:02 2004 Tanaka Akira <akr@m17n.org>
+
+ * io.c (argf_forward): use ANSI style.
+ (argf_read): call argf_forward with argv argument.
+ [ruby-dev:24624]
+
+Thu Oct 28 23:32:54 2004 akira yamada <akira@ruby-lang.org>
+
+ * ext/zlib/zlib.c (zstream_detach_input): resets klass of z->input if
+ z->input isn't nil.
+
+Thu Oct 28 23:19:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: prefer relative path. [ruby-talk:93037]
+
+Wed Oct 27 18:49:11 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c: prototype; rb_io_fptr_finalize() doesn't return any value
+ at this version.
+
+Wed Oct 27 17:27:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_sweep): recover ruby_in_compile variable.
+
+Wed Oct 27 09:17:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_gsub): use a string object for exception safeness.
+ [ruby-dev:24601]
+
+Tue Oct 26 23:52:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_getline): rs modification check should not interfere in the loop.
+
+Tue Oct 26 23:30:39 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/code_objects.rb (RDoc::Context::add_class_or_module):
+ Restore correct :nopdoc: behavior with nested classes and modules.
+
+Tue Oct 26 18:21:29 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (RESIZE_CAPA): check string attribute before modifying
+ capacity member of string structure. [ruby-dev:24594]
+
+Tue Oct 26 11:33:26 2004 David G. Andersen <dga@lcs.mit.edu>
+
+ * ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain
+ performance. [ruby-talk:117701]
+
+Tue Oct 26 10:56:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): raise ArgumentError for extra
+ arguments, unless (digit)$ style used.
+
+Tue Oct 26 11:33:26 2004 David G. Andersen <dga@lcs.mit.edu>
+
+ * ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain
+ performance. [ruby-talk:117701]
+
+Tue Oct 26 10:56:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): raise ArgumentError for extra
+ arguments, unless (digit)$ style used.
+
+Mon Oct 25 18:35:39 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (isUNCRoot): should check NUL after '.'.
+ [ruby-dev:24590]
+
+ * win32/win32.c (isUNCRoot): fixed buffer overrun.
+
+Mon Oct 25 08:03:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (get_backtrace): ignore illegal backtrace. [ruby-dev:24587]
+
+Sun Oct 24 00:41:09 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_load, search_required, rb_require_safe, rb_require): use
+ frozen shared string to avoid outside modification. [ruby-dev:24580]
-Wed Apr 8 14:03:47 2015 Koichi Sasada <ko1@atdot.net>
+Sat Oct 23 22:18:32 2004 Guy Decoux <ts@moulon.inra.fr>
- * test/ruby/test_symbol.rb: fix syntax error.
+ * eval.c (frame_free): Guy Decoux solved the leak problem.
+ Thanks. [ruby-core:03549]
-Wed Apr 8 13:01:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 23 00:20:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * hash.c (rb_any_hash): Symbols are compared by the identities
- always. [ruby-core:68767] [Bug #11035]
+ * ext/zlib/zlib.c (zstream_append_input): clear klass for z->input
+ to avoid potential vulnerability.
-Tue Apr 7 10:22:51 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/zlib/zlib.c (zstream_run): always use zstream_append_input()
+ to avoid SEGV. [ruby-dev:24568]
- * internal.h: fix typo. Patch by @sferik [fix GH-865]
+Fri Oct 22 12:02:28 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Apr 6 22:52:35 2015 Tanaka Akira <akr@fsij.org>
+ * eval.c (rb_alias): was warning for wrong condition.
+ [ruby-dev:24565]
- * enum.c: Enumerable#chunk and Enumerable#slice_before no longer takes
- the initial_state argument. [Feature #10958]
+Fri Oct 22 10:36:37 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Mon Apr 6 16:09:58 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#meta_vars):
+ should check if path_info is not nil.
- * vm_args.c: protect value stack from calling other methods
- during complex parameter setting process (splat, kw, and so on).
- [Bug #11027]
+Fri Oct 22 00:22:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_core.h: remove rb_thread_t::mark_stack_len.
- With this modification, we don't need to use th->mark_stack_len.
+ * ext/zlib/zlib.c (zstream_shift_buffer): should restore class
+ field of a buffer. [ruby-dev:24562]
- * test/ruby/test_keyword.rb: add a test.
+Fri Oct 22 00:20:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * cont.c (cont_capture): catch up this fix.
+ * string.c (rb_str_include): should not treat char as negative value.
+ [ruby-dev:24558]
- * vm.c (rb_thread_mark): ditto.
+Thu Oct 21 21:32:30 2004 IWATSUKI Hiroyuki <don@na.rim.or.jp>
-Mon Apr 6 11:26:42 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/pstore.rb (PStore#transaction): Use the empty content when a
+ file is not found. [ruby-dev:24561]
- * tool/downloader.rb (http_options): prevent content auto decoding
- because this is a downloader.
+Thu Oct 21 19:06:15 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sun Apr 5 09:55:18 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/webrick/httpresponse.rb (WEBrick::HTTPResponse#send_body_io):
+ ensure to close @body. (http://bugs.debian.org/277520)
- * doc/contributing.rdoc: update Maintainers list.
+Thu Oct 21 00:36:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Apr 5 09:11:00 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * eval.c (rb_alias): should warn on method discarding.
+ [ruby-dev:24546]
- * tool/rbinstall.rb: fix bin script permission of bundled gems.
+ * ext/zlib/zlib.c (zstream_expand_buffer_into): hide internal
+ string buffer by clearing klass. [ruby-dev:24548]
-Sun Apr 5 08:46:08 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Wed Oct 20 19:45:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * tool/rbinstall.rb: support --program-suffix option.
+ * string.c (str_gsub): reentrant check. [ruby-dev:24432]
-Sat Apr 4 21:31:18 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * backport all SEGV bug fixes from CVS HEAD. [ruby-dev:24536]
- * lib/rake/*: Gemify rake [fix GH-862][Feature #11025]
- * test/rake/*: ditto.
- * tool/rbinstall.rb: ditto.
+Wed Oct 20 04:17:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Apr 4 11:30:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dbm/dbm.c (fdbm_delete_if): should check if deleting element
+ is a string. [ruby-dev:24490]
- * string.c (rb_str_setbyte): check the argument first not to
- discard shared string and code range unnecessarily until
- actually changing the contents. pointed out by headius.
+ * ext/sdbm/init.c (fsdbm_delete_if): ditto.
-Sat Apr 4 08:16:43 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Oct 20 01:37:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * lib/net/http.rb (edit_path): use path which is absolute ftp url
- on using ftp_proxy.
+ * array.c (rb_ary_times): Array#* should return an instance of
+ the class of right operand. [ruby-dev:24526]
-Fri Apr 3 11:43:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/zlib/zlib.c (zstream_detach_buffer): should not expose
+ class-less object to Ruby world. [ruby-dev:24530]
- * vm_eval.c (vm_call0_cfunc): update invoker arguments.
+ * eval.c (proc_dup): provide Proc#dup as well. [ruby-talk:116915]
- * vm_insnhelper.c (vm_call_cfunc_latter): ditto.
+ * eval.c (ruby_exec): stack marking position may be higher than
+ expected. thanks to Guy Decoux. [ruby-core:03527]
- * vm_insnhelper.c (rb_vm_call_cfunc_push_frame): ditto, and prefix
- with rb_.
+Tue Oct 19 22:43:12 2004 Dave Thomas <dave@pragprog.com>
-Thu Apr 2 16:26:59 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_attr): If
+ we come across 'attr' in a context where it isn't
+ followed by a symbol, just issue a warning.
- * common.mk, tool/mkconfig.rb: check the running ruby version in
- rbconfig.rb with the program version, as RUBY_VERSION has never
- been affected by --with-ruby-version option.
- [ruby-core:68639] [Bug #11002]
+Tue Oct 19 20:41:37 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * configure.in (LIBRUBY_DLDFLAGS): compatibility_version must be
- valid version numbers, not an arbitrary string.
+ * ext/win32ole.c(ole_invoke): retrieve the result value when
+ retrying the IDispatch::invoke.
-Wed Apr 1 11:09:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 19 17:24:11 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * dir.c (push_glob): remove indirect links of arguments for
- trampoline.
+ * io.c (read_all): block string buffer modification during
+ rb_io_fread() by freezing it temporarily. [ruby-dev:24479]
-Wed Apr 1 09:59:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * dir.c (rb_push_glob): block call at once the end of method.
+ [ruby-dev:24487]
- * lib/fileutils.rb (FileUtils#mv): show the exact target path in
- the error message instead of the destination parent directory
- name. patched by Joao Britto <jabcalves AT gmail.com> at
- [ruby-core:68706]. [Bug #11021]
+ * ext/enumerator/enumerator.c (enum_each_slice): remove
+ rb_gc_force_recycle() to prevent potential SEGV.
+ [ruby-dev:24499]
-Tue Mar 31 15:25:07 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/zlib/zlib.c (zstream_expand_buffer): hide internal string
+ buffer by clearing klass. [ruby-dev:24510]
- * doc/ChangeLog-0.06_to_0.52: added archived Changelog.
- [ruby-list:50105]
- * doc/ChangeLog-0.50_to_0.60: ditto.
- * doc/ChangeLog-0.60_to_1.1: ditto.
+Tue Oct 19 16:12:18 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Mon Mar 30 22:02:55 2015 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/tk/tkutil.c: backport from CVS HEAD
- * README.EXT.ja: add redirect [ruby-core:68631]
+Tue Oct 19 08:54:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Mar 30 14:42:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * intern.h, object.c (rb_class_inherited_p): export.
- * win32/win32.c (fileattr_to_unixmode, winnt_lstat): deal with
- symbolic link than directory, and set executable bits.
+Tue Oct 19 08:46:57 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Mar 30 11:27:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c (rb_str_upto): method result must be checked. [ruby-dev:24504]
- * io.c (copy_stream_body): use the arguments without conversion if
- having read, readpartial, and write methods, than conversion by
- to_path method. [ruby-core:68676] [Bug #11015]
+ * eval.c (error_print): ditto. [ruby-dev:24519]
-Sun Mar 29 21:08:37 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Oct 18 23:37:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (objspace_allrefs_destruct_i): fix a typo.
- [Bug #11013]
+ * marshal.c (r_object0): check inheritance by the internal function.
+ [ruby-dev:24515]
-Sun Mar 29 11:51:32 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 18 15:58:01 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * proc.c (proc_binding): replicate env from method object, and
- allocate the local variable area for the iseq local table.
- [ruby-core:68673] [Bug #11012]
+ * range.c (range_step, range_each): need cast.
-Sat Mar 28 09:19:41 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Oct 29 16:34:19 2004 Daiki Ueno <ueno@unixuser.org>
- * ext/date/extconf.rb: try_cflags("-std=iso9899:1999") [Bug #10906]
- ruby itself (including numeric.c) is built with strict compile
- options including -std=iso9899:1999, but ext/date is not.
- By the way -std=iso9899:1999 is not only a warning option but also
- changes behavior like MACRO definitions for example INFINITY.
- gcc on Solaris affect this.
+ * misc/ruby-mode.el (ruby-parse-partial): Parse the rest of the
+ line after opening heredoc identifier. [ruby-dev:24635]
-Fri Mar 27 16:34:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 18 07:26:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * common.mk: revert using BOOTSTRAPRUBY for enc.mk, as
- enc/depend uses CONFIG. [ruby-core:68647] [Bug #11004]
+ * file.c (rb_file_truncate): discard read buffer before truncation.
+ [ruby-dev:24197]
-Thu Mar 26 10:05:13 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Oct 18 02:11:21 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * test/test_observer.rb: add tests for Observable module.
- [fix GH-859] Patch by @brightbits
+ * lib/webrick/config.rb (WEBrick::Config::General): add default values:
+ - WEBrick::Config[:DoNotReverseLookup]
+ - WEBrick::Config[:RequestCallback] (it used as an alias of
+ :RequestHandler in WEBrick::HTTPServer#run)
+ - WEBrick::Config::FileHandler[:AcceptableLanguages]
-Thu Mar 26 06:35:10 2015 Eric Wong <e@80x24.org>
+ * lib/webrick/httpservlet/filehandler.rb
+ (WEBrick::HTTPServlet::FileHandler#set_filename): search files
+ having suffix of language-name which Accept-Language header field
+ includes if :AcceptableLanguages options is present.
- * README.EXT: add redirect [ruby-core:68631]
+ * lib/webrick/httpservlet/filehandler.rb
+ (WEBrick::HTTPServlet::FileHandler#get_servlet): new method to
+ search servlet correspond to the suffix of filename.
-Wed Mar 25 16:46:49 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/webrick/httprequest.rb: add attributes access methods: accept,
+ accept_charset, accept_encoding, accept_language, content_length
+ and content_type.
- * ext/socket/extconf.rb: Solaris 11 has struct tcp_info.tcpi_ca_state,
- but it is a dummy.
+ * lib/webrick/httpresponse.rb: add attribute access methods:
+ content_length, content_length=, content_type and content_type=.
- * ext/socket/option.c: Solaris 11 doesn't have u_intN_t.
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.mime_types):
+ use the second suffix to detect media type. (the first suffix
+ may be a language name.)
- * ext/socket/option.c: Solaris 11 needs inspect_tcpi_msec.
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_qvalues):
+ add method to parse Accept header field. it returns an Array of
+ values sorted by the qvalues.
- * ext/socket/raddrinfo.c: Solaris 11 has AF_PACKET but doesn't have
- related macros.
+Mon Oct 18 02:04:11 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Mar 25 17:03:08 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/httpserver.rb (WEBrick::HTTPServer#virtual_host): new
+ method to register virtual hosting servers.
- * ext/-test-/file/fs.c (get_fsname): try magic number only if
- f_type is included. [ruby-dev:48913] [Bug #11000]
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept): call
+ do_not_reverse_lookup for each socket if :DoNotReverseLookup
+ is set. [ruby-core:02357]
-Wed Mar 25 11:20:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 18 00:42:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * benchmark/bm_hash_aref_flo.rb: make more realistic data.
- [ruby-core:68632] [[Bug #10999]
+ * ext/socket/socket.c (sock_s_getservbyaname): protocol string
+ might be altered. [ruby-dev:24503]
-Wed Mar 25 10:39:06 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * string.c (rb_str_upto): check if return value from succ is a
+ string. [ruby-dev:24504]
- * .document: removed needless entries.
+Sun Oct 17 23:03:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Mar 25 08:07:28 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk/timer.rb: TkTimer#start and restart accept a block
- * doc/extension.rdoc: fix spelling of filename
- * doc/extension.ja.rdoc: ditto.
+Sun Oct 17 13:05:04 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Tue Mar 25 06:55:43 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * ext/win32ole/win32ole.c (fole_func_methods): correct argument mismatch.
+ * ext/win32ole/win32ole.c (fole_get_methods): ditto.
+ * ext/win32ole/win32ole.c (fole_put_methods): ditto.
+ * ext/win32ole/tests/testWIN32OLE.rb: add test for WIN32OLE#ole_func_methods
+ WIN32OLE#ole_get_methods, WIN32OLE#ole_put_methods
- * complex.c (k_inexact_p, k_exact_zero_p): use k_exact_zero_p macro
- to remove k_inexact_p macro.
+Sat Oct 16 14:45:28 2004 Kouhei Sutou <kou@cozmixng.org>
- * complex.c (k_exact_one_p): remove unused macro k_exact_one_p.
+ * lib/rss/0.9.rb (RSS::Rss#to_s): removed garbage.
-Tue Mar 24 22:23:33 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Sat Oct 16 13:42:49 2004 Kouhei Sutou <kou@cozmixng.org>
- * doc/extension.rdoc: move from toplevel document and added extname.
- * doc/extension.ja.rdoc: ditto.
+ * lib/rss/: untabified.
+ * test/rss/: untabified.
+ * lib/rss/0.9.rb (RSS::Rss#to_s): inent -> indent.
-Tue Mar 24 22:06:58 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Sat Oct 16 13:34:56 2004 Kouhei Sutou <kou@cozmixng.org>
- * doc/standard_library.rdoc: strip.
+ * lib/rss: supported prety print.
+ * test/rss/test_1.0.rb: added test for calculating default indent size.
-Tue Mar 24 22:06:27 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Fri Oct 15 18:04:35 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * doc/standard_library.rdoc: move Thread to Extensions.
+ * ext/tk/lib/tk/timer.rb: TkTimer.new(interval, loop){ ... } is
+ acceptable. Add TkTimer.start ( == new + start ).
-Tue Mar 24 21:59:10 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Fri Oct 15 12:43:09 2004 Tanaka Akira <akr@m17n.org>
- * doc/contributing.rdoc: update Maintainers list.
+ * eval.c (Init_stack): make prototype declaration consistent with
+ the definition in gc.c.
-Tue Mar 24 19:10:24 2015 Koichi Sasada <ko1@atdot.net>
+Thu Oct 14 14:34:01 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * gc.c (gc_writebarrier_generational): fix messages for rb_bug().
- Remove `rb_' prefix.
+ * io.c (MODE_BINMODE, MODE_BINARY): fixed reversed condition.
- * gc.c (gc_writebarrier_incremental): ditto.
+Thu Oct 14 13:33:59 2004 Kouhei Sutou <kou@cozmixng.org>
-Tue Mar 24 17:34:01 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/rss/rss.rb: added link to Tutorial.
- * README.ja.md: should be chunibyo.
+Mon Oct 11 13:48:20 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Tue Mar 24 17:30:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/*: untabify
- * ext/-test-/file/fs.c (get_fsname): return filesystem name by
- statfs/statvfs. [ruby-core:68624] [Bug #10998]
+Sun Oct 10 12:32:08 2004 Dave Thomas <dave@pragprog.com>
-Tue Mar 24 16:46:02 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Allow 'require'
+ to be used as a variable name
- * tool/redmine-backporter.rb: now doesn't required spaces just after
- `!`.
+Sat Oct 9 21:23:37 2004 Kouhei Sutou <kou@cozmixng.org>
-Mon Mar 23 23:18:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rss/converter.rb: changed to try to use Iconv for default
+ conversion.
- * dir.c (dir_close): don't raise on double close for consistent to
- IO#close. [Feature #10950]
+ * lib/rss/rss.rb: 0.0.9 -> 0.1.0.
-Mon Mar 23 21:22:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 9 19:50:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/file.c (rb_readlink): move from file.c for better buffer
- allocation and the result encoding.
+ * io.c (rb_io_getline): should not treat char as negative value.
+ [ruby-dev:24460]
- * win32/win32.c (wreadlink, rb_w32_ureadlink): implement readlink().
+Fri Oct 8 09:49:32 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Mar 23 14:40:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * pack.c (pack_pack): pointer modification check before each
+ iteration. [ruby-dev:24445]
- * win32/win32.c (winnt_stat): stat with following symbolic links.
+Fri Oct 8 01:13:05 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * win32/win32.c (winnt_lstat): rename old winnt_stat, which does
- not follow symbolic links.
+ * ext/tk/lib/tk/optiondb.rb: make it more secure
-Mon Mar 23 01:44:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Oct 7 23:47:57 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * marshal.c (r_symreal): register symbol names as strings first so
- that r_symlink always returns valid names.
- [ruby-core:68587] [Bug #10991]
+ * ext/tk/lib/tk/scrollbar.rb: When 'set' operation, a scrollbar
+ cannot propagate view port information from the source widget
+ (that calls 'set') to other assigned widgets.
- * marshal.c (r_ivar, r_object0): now need to intern symbol names.
+Thu Oct 7 17:36:25 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * marshal.c (r_object0): compare with symbol names.
+ * ext/tk/lib/tk.rb: When CHILDKILLED and so on, Tk.errorCode returns
+ a Fixnum for 2nd element (it's pid) of the return value.
-Sun Mar 22 22:07:40 2015 Kouhei Sutou <kou@cozmixng.org>
+Thu Oct 7 12:55:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * doc/etc.rd.ja: Fix wrong coding for Emacs.
+ * io.c (io_read): should freeze buffer before thread context
+ switch. [ruby-dev:24442]
-Sun Mar 22 09:53:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * pack.c (pack_unpack): string conversion should at the top of the
+ method. [ruby-dev:24439]
- * tool/make-snapshot (package): add default CONFIGURE name to
- follow r50039.
+ * io.c (io_read): buffer should be frozen only after the length
+ check. [ruby-dev:24440]
- * tool/make-snapshot (package): substitute configuration variables
- in Makefile.in instead of passing by the command line, and make
- temporary Makefile instead of a pipe.
+Thu Oct 7 02:56:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Mar 22 08:09:47 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/stringio/stringio.c: use FMODE_APPEND.
- * common.mk (ext/ripper/ripper.c, ext/rbconfig/sizeof/sizes.c):
- strip autogenerated dependencies which have invalid syntax in
- other than nmake.
+Thu Oct 7 01:05:33 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Mar 21 15:01:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk.rb: add Tk.errorInfo and Tk.errorCode
- * ext/io/console/console.c (console_set_winsize): use handle for
- writing. GetConsoleScreenBufferInfo seems failing on a handle
- for reading.
+Thu Oct 7 00:08:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c: [DOC] update the example of IO#winsize to use $stdout
- instead of $stdin, which does not work on Windows. a patch by
- Jan Lelis <mail AT janlelis.de> at [ruby-core:68574].
- [Bug #10986]
+ * io.c (rb_io_s_sysopen): preserve path in the buffer allocated by
+ ALLOCA_N() to prevent modification. [ruby-dev:24438]
-Fri Mar 20 18:41:03 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 6 09:21:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * proc.c (respond_to_missing_p): check if the receiver responds to
- the given method by respond_to_missing?.
+ * io.c (rb_io_mode_flags): preserve append mode flag.
+ [ruby-dev:24436]
- * proc.c (mnew_missing): create Method object for method_missing.
- [ruby-core:68564] [Bug #10985]
+ * io.c (rb_io_modenum_mode): do not use external output buffer.
-Fri Mar 20 17:43:18 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * string.c (rb_str_justify): differ pointer retrieval to prevent
+ padding string modification. [ruby-dev:24434]
- * .travis.yml: enabled email notification.
+ * range.c (range_each_func): allow func to terminate loop by
+ returning RANGE_EACH_BREAK.
-Fri Mar 20 17:39:52 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * range.c (member_i): use RANGE_EACH_BREAK. [ruby-talk:114959]
- * .travis.yml: removed Ruby 1.9.3 build on Travis CI
+Mon Oct 4 14:04:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Mar 20 12:38:36 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_file_open_internal, rb_io_reopen): fname might be altered
+ while GC. [ruby-dev:24408]
- * gc.c (obj_info): obj_info() can receive internal objects.
+Mon Oct 4 12:53:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * gc.c (check_rvalue_consistency): obj_info() returns const char *.
+ * ext/tk/lib/tk/optiondb.rb: support definition of command
+ resources on widgets
-Fri Mar 20 12:14:37 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/image.rb: bug fix
- * gc.c (obj_info): show class name and T_DATA type_name.
+Sun Oct 3 21:20:03 2004 Shugo Maeda <shugo@ruby-lang.org>
-Thu Mar 19 22:12:46 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/net/imap.rb (TEXT_REGEXP): allow 8-bit characters for the german
+ version of Microsoft Exchange Server. (backported from HEAD)
- * gc.c (rb_copy_wb_protected_attribute): `dest' can be WB unprotected.
+ * lib/net/imap.rb (RTEXT_REGEXP): ditto.
-Thu Mar 19 21:25:25 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/net/imap.rb (CTEXT_REGEXP): ditto.
- * gc.c (rb_copy_wb_protected_attribute): demote `dest' object.
+Sat Oct 2 20:34:22 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 19 16:18:00 2015 Koichi Sasada <ko1@atdot.net>
+ * node.h (NEW_DVAR): extra semicolon.
- * gc.c, internal.h: export rb_gc_verify_internal_consistency().
+Sat Oct 2 00:42:20 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Mar 19 16:15:24 2015 Koichi Sasada <ko1@atdot.net>
+ * marshal.c (r_byte): retrieve pointer from string value for each
+ time. [ruby-dev:24404]
- * gc.c (obj_info): show allocation site if GC_DEBUG is not 0.
+ * marshal.c (r_bytes0): ditto.
-Thu Mar 19 16:12:01 2015 Koichi Sasada <ko1@atdot.net>
+ * enum.c (sort_by_i): re-entrance check added. [ruby-dev:24399]
- * gc.c (newobj_of): fix RGENGC_OLD_NEWOBJ_CHECK logics.
- * skip on incremental marking because not sure what happen :p
- * rb_gc_writebarrier_remember() is enough to mark children.
+ * io.c (io_read): should freeze all reading buffer.
+ [ruby-dev:24400]
-Thu Mar 19 16:08:42 2015 Koichi Sasada <ko1@atdot.net>
+ * string.c (rb_str_sum): should use bignums when bits is greater
+ than or equals to sizeof(long)*CHAR_BITS. [ruby-dev:24395]
- * gc.c (rb_copy_wb_protected_attribute): need demote for old objects.
+ * eval.c (specific_eval): defer pointer retrieval to prevent
+ unsafe sourcefile string modification. [ruby-dev:24382]
-Thu Mar 19 10:31:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (specific_eval): defer pointer retrieval to prevent
+ unsafe sourcefile string modification. [ruby-dev:24382]
- * random.c (fill_random_bytes): release the handle in the static
- variable, not a local variable.
+ * string.c (rb_str_sum): wrong cast caused wrong result.
+ [ruby-dev:24385]
-Thu Mar 19 06:30:35 2015 Koichi Sasada <ko1@atdot.net>
+ * enum.c (enum_sort_by): hide temporary array from
+ ObjectSpace.each_object. [ruby-dev:24386]
- * object.c (rb_obj_clone): do not touch age (FL_PROMOTED[01]) because
- rb_obj_alloc() can return old object in debug.
+ * string.c (rb_str_sum): check was done with false pointer.
+ [ruby-dev:24383]
-Thu Mar 19 06:29:28 2015 Koichi Sasada <ko1@atdot.net>
+ * string.c (rb_str_sum): string may be altered. [ruby-dev:24381]
- * test/objspace/test_objspace.rb: flag name was changed
- (long_lived -> uncollectible).
+Mon Oct 11 17:51:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Mar 19 05:30:13 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_io_popen): get mode string via rb_io_flags_mode() to
+ avoid mode string modification. [ruby-dev:24454]
- * iseq.c (iseq_mark): skip some marking if iseq->orig is available.
+ * io.c (rb_io_getline_fast): should take delim as unsigned char to
+ distinguish EOF and '\377'. [ruby-dev:24460]
- * iseq.c (rb_iseq_clone): need WB for iseq1->klass = iseq0->klass
- (done in MEMCPY).
+ * io.c (rb_io_getline): add check for RS modification.
+ [ruby-dev:24461]
-Thu Mar 19 04:55:53 2015 Koichi Sasada <ko1@atdot.net>
+ * enum.c (enum_sort_by): use qsort() directly instead using
+ rb_iterate(). [ruby-dev:24462]
- * internal.h (IMEMO_DEBUG): added.
+ * enum.c (enum_each_with_index): remove rb_gc_force_recycle() to
+ prevent access to recycled object (via continuation for
+ example). [ruby-dev:24463]
- * internal.h: remove unused FL_IMEMO_MARK_V[0-3].
+Fri Oct 1 11:40:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (rb_imemo_new_debug): added.
+ * eval.c (rb_f_eval): defer pointer retrieval to prevent unsafe
+ sourcefile string modification. [ruby-dev:24373]
- * gc.c (obj_info): show imemo type name.
+ * io.c (io_read): block string buffer modification during
+ rb_io_fread() by freezing it temporarily. [ruby-dev:24366]
-Thu Mar 19 04:52:26 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_io_s_popen): mode argument may be altered.
+ [ruby-dev:24375]
- * gc.c (RGENGC_OLD_NEWOBJ_CHECK): add check mechanism.
+ * file.c (rb_file_s_basename): ext argument may be altered.
+ [ruby-dev:24377]
- If RGENGC_OLD_NEWOBJ_CHECK > 0, then create old objects
- (not new objects) periodically.
+ * enum.c (enum_sort_by): use NODE instead of 2 element arrays.
+ [ruby-dev:24378]
- Create one old objects per RGENGC_OLD_NEWOBJ_CHECK objects are
- created.
+ * string.c (rb_str_chomp_bang): StringValue() may change the
+ receiver. [ruby-dev:24371]
-Thu Mar 19 04:46:36 2015 Koichi Sasada <ko1@atdot.net>
+Fri Oct 1 11:25:20 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * enum.c (enum_sort_by): add WBs.
+ * ext/tk/lib/tk/grid.rb: revive TkGrid.grid
-Thu Mar 19 03:37:52 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/pack.rb: revive TkPack.pack
- * gc.c (check_rvalue_consistency): refactoring.
- * not inline on RGENGC_CHECK_MODE > 0.
- * check SPECIAL_CONST_P(obj) first.
- * add a check that remembered_bit is only TRUE when old (age == 3).
+ * ext/tk/lib/tk/place.rb: revive TkPlace.place
- * gc.c (RVALUE_DEMOTE): should clear RVALUE_REMEMBERED bit.
+Thu Sep 30 00:50:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- remembered_bit should be TRUE only for old (age == 3) objects.
+ * ext/tcltklib/tcltklib.c (ip_init): bug fix
- Actually there are no effect because demoted objects will be
- uncollectible WB unprotected objects (marked at the beginning of
- every minor GC).
+ * ext/tk/tkutil.c (get_eval_string_core): accept a Regexp object
-Thu Mar 19 02:52:48 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/multi-tk.rb: fix bug on 'exit' operation
- * gc.c: rename terminologies.
- * long_lived -> uncollectible:
- because this bitmap does not mean "long lived objects in past",
- but means "prohibit collection these objects until next major GC".
+ * ext/tk/lib/tk/text.rb: 'tksearch' accepts a Regexp object as a
+ matting pattern argument
- Uncollectible objects consist of two types objects, one is old
- objects (WB protected objects which age == 3) and another is
- uncollectible WB unprotected objects which are referred from old
- objects
+Wed Sep 29 10:58:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * remembered_wb_unprotected_objects ->
- uncollectible_wb_unprotected_objects:
- because uncollectible objects does not mean remembered objects.
+ * enum.c (sort_by_i): internally used object must not be changed
+ outside. [ruby-dev:24368]
-Wed Mar 18 17:21:12 2015 Koichi Sasada <ko1@atdot.net>
+Mon Sep 27 13:46:45 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_writebarrier_generational): add an alternative write
- barrier (WB) implementation.
- When finding reference from [Old obj] to [New obj] by WB, current
- implementation marks [Old obj] as remembered old objects and marks
- children of [Old obj] at the beginning of marking.
+ * intern.h, struct.c (rb_struct_s_members, rb_struct_members): public
+ accessors. [ruby-dev:24342]
- Added (but disabled) code changes current behaviour. This fix promote
- [New obj] to old and marks as a remembered old object. We can assume
- "new objects referred from old objects are maybe long-lived old
- objects".
+ * marshal.c (w_object, r_object0): use accessors.
- Disadvantage of added algorithm is we may promote unwilling
- short-lived objects. For example, consider many new objects push and
- pop to an old stack object. All of new objects (short-lived objects)
- promote to old objects unexpectedly.
+Mon Sep 27 09:14:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- To compare these behaviour, I add this new code (but disabled it).
+ * ext/socket/socket.c (s_accept): don't retry for EWOULDBLOCK.
+ [ruby-talk:113807]
-Wed Mar 18 17:14:39 2015 Koichi Sasada <ko1@atdot.net>
+Fri Sep 24 16:09:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (RVALUE_PROMOTE_RAW): rename to RVALUE_OLD_LONG_LIVED_SET()
- to make clear.
+ * eval.c (proc_invoke): propagate DVAR_DONT_RECYCLE on termination
+ to avoid double call to rb_gc_force_recycle(). [ruby-dev:24311]
-Wed Mar 18 17:10:01 2015 Koichi Sasada <ko1@atdot.net>
+Fri Sep 24 08:29:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (check_rvalue_consistency): do not need to check is_sweeping().
+ * array.c (rb_ary_subseq): original object might be modified after
+ sharing data creation. [ruby-dev:24327]
-Wed Mar 18 14:13:22 2015 Koichi Sasada <ko1@atdot.net>
+ * array.c (rb_ary_replace): ditto.
- * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase.
+ * array.c (ary_make_shared): freeze shared array. [ruby-dev:24325]
- * benchmark/bm_vm1_gc_wb_obj.rb: ditto.
+ * struct.c (struct_members): always check struct size and size of
+ members list in the class. [ruby-dev:24320]
- * benchmark/bm_vm1_gc_wb_ary_promoted.rb: add parameter
- full_mark: false to invoke only minor GC.
+Thu Sep 23 09:29:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * benchmark/bm_vm1_gc_wb_obj_promoted.rb: ditto.
+ * string.c (rb_str_sub_bang): check if string is not modified
+ during iteration. [ruby-dev:24315]
-Wed Mar 18 12:07:36 2015 Koichi Sasada <ko1@atdot.net>
+ * hash.c (rb_hash_rehash): replace st_foreach() by its deep
+ checking counterpart. [ruby-dev:24310]
- * string.c: add a comment about RSTRING_FSTR.
+Wed Sep 22 13:38:12 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Mar 18 12:01:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * hash.c (rb_hash_rehash): add iteration check. [ruby-dev:24301]
- * hash.c (rb_any_hash): use same hash values with Float#hash so
- that -0.0 and +0.0 will be identical.
- [ruby-core:68541] [Bug #10979]
+ * st.c (st_foreach): add deep check.
-Wed Mar 18 05:34:32 2015 Koichi Sasada <ko1@atdot.net>
+Wed Sep 22 13:06:14 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c: introduce STR_FAKESTR to show string is FAKESTR or not.
+ * win32/win32.c (rb_w32_call_handler): workaround for Ctrl-C.
+ merge from HEAD.
- * string.c (STR_SET_SHARED): ignore FAKESTR because only Ruby objects
- can use write barrier.
+Wed Sep 22 00:11:12 2004 Dave Thomas <dave@pragprog.com>
-Tue Mar 17 18:59:16 2015 Koichi Sasada <ko1@atdot.net>
+ * process.c: Add documentation for fork()
- * include/ruby/ruby.h: use rb_gc_writebrrier() simply.
- For incremental GC, we need to get a pointer to the objspace.
- We can share this pointer for the following WB process.
- And considering icache hit ratio, process in the GC.
+Wed Sep 22 09:04:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * gc.c (rb_gc_writebarrier): added.
+ * array.c (rb_ary_collect_bang): element size might change during
+ comparison. [ruby-dev:24300]
- * gc.c (gc_writebarrier_generational, gc_writebarrier_incremental):
- make them NOINLINE because inlining them into rb_gc_writebarrier()
- makes a prologue code of rb_gc_writebarrier() longer (storing callee
- save registers).
+ * array.c (rb_ary_reject_bang): ditto. [ruby-dev:24300]
- This patch improve the performance of WB on micro-benchmarks.
+ * array.c (rb_ary_eql): ditto. [ruby-dev:24300]
- name ruby 2.1 trunk modified
- vm1_gc_wb_ary* 0.511 0.632 0.532
- vm1_gc_wb_ary_promoted* 0.578 0.701 0.674
- vm1_gc_wb_obj* 0.419 0.575 0.492
- vm1_gc_wb_obj_promoted* 0.537 0.664 0.618
- (sec)
+Tue Sep 21 18:29:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Tue Mar 17 18:51:43 2015 Koichi Sasada <ko1@atdot.net>
+ * array.c (rb_ary_equal): merge miss.
- * benchmark/bm_vm1_gc_wb_ary(_promoted).rb: separate fastpath and
- slowpath for WB.
+ * array.c (rb_ary_uniq_bang): element size might change during
+ comparison. [ruby-dev:24298]
- Before this change bm_vm1_gc_wb_ary.rb tried to check the performance
- for WB slowpath (making a reference from oldobj to newobj). However,
- from Ruby 2.2, 3 GCs are needed to promote new objects because
- only 3 age objects are promoted objects.
+Mon Sep 20 00:24:19 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- To compare fastpath and slowpath, introduce new "promoted" version
- benchmark.
+ * enum.c (enum_sort_by): do not use qsort directly. use
+ rb_ary_sort_bang() instead. [ruby-dev:24291]
- bm_vm1_gc_wb_ary.rb is for fastpath and
- bm_vm1_gc_wb_ary_promoted.rb is for slowpath.
+ * enum.c (enum_sort_by): pedantic type check added.
+ [ruby-dev:24291]
- * benchmark/bm_vm1_gc_wb_obj(_promoted).rb: ditto.
+ * hash.c (rb_hash_foreach_iter): check iter_lev after each
+ iteration. [ruby-dev:24289]
-Tue Mar 17 17:23:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_and): element size might change during
+ comparison. [ruby-dev:24290]
- * dir.c (glob_helper): distinguish not-yet-stated and DT_UNKNOWN
- by readdir, and traverse recursively for the former. Linux
- readdir returns DT_UNKNOWN on some filesystems, e.g., smbfs,
- iso9660.
+ * array.c (rb_ary_or): ditto. [ruby-dev:24292]
-Mon Mar 16 17:43:21 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * array.c (rb_ary_equal): wrong fix. [ruby-dev:24286]
- * lib/webrick/server.rb: Fix regression bug in WEBrick's
- :DoNotReverseLookup config option implementation.
- [fix GH-731] Patch by @vais
- * test/webrick/test_do_not_reverse_lookup.rb: ditto.
+Sat Sep 18 15:02:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Mar 14 20:05:23 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * array.c (rb_ary_equal): element size might change during
+ comparison. [ruby-dev:24254]
- * math.c (math_gamma): optimization for passed small integer.
+ * array.c (rb_ary_diff): ditto. [ruby-dev:24274]
-Sat Mar 14 18:07:23 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * array.c (rb_ary_select): ditto. [ruby-dev:24278]
- * enum.c: [DOC] Fixes Enumerable#member? documentation
- [fix GH-756][ci skip] Patch by @shamanime
+ * array.c (rb_ary_delete): ditto. [ruby-dev:24283]
-Sat Mar 14 12:23:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_rindex): ditto. [ruby-dev:24275]
- * dir.c (glob_helper): use d_type to reduce lstat system calls.
+ * array.c (rb_ary_initialize): element size might change during
+ initializing block. [ruby-dev:24284]
- * win32/dir.h (struct direct): add d_type instead of d_isdir and
- d_isrep. SYMLINKD is unreliable, since the target can be
- replaced after a link was created.
+Sat Sep 18 14:10:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * win32/win32.c (readdir_internal): set d_type.
+ * dir.c (dir_s_chdir): avoid memory leak and unnecessary chdir to
+ the original directory when exception has caused in changing
+ direcotry or within block. thanks to Johan Holmberg
+ <holmberg@iar.se> [ruby-core:03446]
-Sat Mar 14 02:14:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 17 20:20:27 2004 Minero Aoki <aamine@loveruby.net>
- * parse.y (primary): empty parentheses at cmdarg can be null.
- [ruby-core:68477] [Bug #10957]
+ * lib/fileutils.rb (mkdir_p): backport from CVS HEAD 1.45. [ruby-core:03420]
-Fri Mar 13 15:04:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 17 17:11:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/stringio/stringio.c (strio_close): don't raise on double
- close for consistent to IO#close.
+ * array.c (rb_ary_delete): element comparison might change array
+ size. [ruby-dev:24273]
-Fri Mar 13 15:03:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_file_truncate): clear stdio buffer before truncating
+ the file. [ruby-dev:24191]
- * io.c (rb_io_close_read, rb_io_close_write): don't raise after
- close same as IO#close.
+ * ext/digest/digest.c: use rb_obj_class() instead of CLASS_OF
+ which might return singleton class. [ruby-dev:24202]
-Fri Mar 13 12:29:07 2015 Tanaka Akira <akr@fsij.org>
+Fri Sep 17 16:07:09 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * test/readline/test_readline.rb: Restore environment variables:
- COLUMNS LINES
+ * ext/tk/lib/multi-tk.rb: improve exit operation
-Fri Mar 13 11:37:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 17 15:01:57 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/fiddle/extconf.rb: needs --enable-shared when linked to
- libruby or fiddle.so. since --with-static-linked-ext does no
- longer link extensions to ruby program with --enable-shared, the
- only combination needs --enable-static is --disable-shared and
- --with-static-linked-ext. [ruby-dev:48901] [Bug #10960]
+ * ext/tcltklib/tcltklib.c: fix SEGV when (thread_)vwait or
+ (thread_)tkwait
-Fri Mar 13 07:02:20 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/tk.rb: add alias wait_window to wait_destroy
- * ext/socket/init.c (rsock_s_accept_nonblock): use rb_hash_lookup2
- * ext/openssl/ossl_ssl.c (get_no_exception): new function
- (ossl_ssl_accept_nonblock): use get_no_exception
- (ossl_ssl_read_internal): ditto
- (ossl_ssl_write_nonblock): ditto
- [ruby-core:68511]
+ * ext/tk/lib/multi-tk.rb: support calling 'mainloop' on slave
+ interpreters (however, the 'real' eventloop must be run on the
+ Default Master IP)
-Fri Mar 13 07:01:38 2015 Eric Wong <e@80x24.org>
+ * ext/tk/lib/remote-tk.rb: follow the changes of ext/tk/lib/multi-tk.rb
- * ext/openssl/ossl_ssl.c: predefine wait_*able symbols
+ * ext/tk/sample/remote-ip_sample2.rb: ditto
-Thu Mar 12 22:59:53 2015 Tanaka Akira <akr@fsij.org>
+ * ext/tk/sample/tkoptdb-safeTk.rb: ditto
- * test/lib/leakchecker.rb: Check environment variables.
+Thu Sep 16 18:12:32 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/cgi.rb (WEBrick::CGI#start): should set REMOTE_USER
+ to request.user attribute.
+
+ * lib/webrick/httpservlet/filehandler.rb
+ (WEBrick::HTTPServlet::FileHandler#initialize): should expand
+ the pathname of document root directory.
+
+Thu Sep 16 15:49:28 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_intern): protect string argument from GC.
+ [ruby-core:03411]
+
+Wed Sep 15 20:22:23 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/tkoptdb-safeTk.rb: fix a bug depend on the changes
+ of MultiTkIp
+
+Tue Sep 14 23:54:11 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string was en-bugged by
+ the previous changes.
+
+Tue Sep 14 23:45:44 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::TextFormatter.for):
+ Add Eric Hodel's simpleformatter.
+
+Tue Sep 14 16:59:37 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: fix SEGV
+
+ * ext/tk/lib/multi-tk.rb: improve safe-level handling of argument proc
+
+ * ext/tk/sample/multi-ip_sample.rb: rename of old 'safe-tk.rb'
+
+ * ext/tk/sample/safe-tk.rb: new sample script
+
+Tue Sep 14 00:15:15 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/zlib/zlib.c: backported from HEAD.
+
+Mon Sep 13 19:16:33 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103]
+
+Mon Sep 13 16:23:27 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp.new_master and new_slave accept
+ safe-level value argument
+
+Mon Sep 13 10:20:45 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * object.c (nil_inspect): fix typo.
+
+Mon Sep 13 01:03:02 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: improve control of preserv/release tcltkip
+
+ * ext/tcltklib/tcltklib.c: store original 'exit' command
+
+ * ext/tk/tkutil.c: fix(?) SEGV
+
+Sun Sep 12 23:46:23 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * util.c (ruby_strdup): remove unnecessary code. (xmalloc never
+ returns NULL.)
+
+ * util.c (ruby_getcwd): fix memory leak on failure.
+
+Sun Sep 12 02:41:58 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and
+ allow_ruby_exit=
+
+
+ * ext/tk/lib/multi-tk.rb: ditto.
+
+ * ext/tk/lib/remote-tk.rb: ditto.
+
+ * ext/tcltklib/MANUAL.euc: ditto.
+
+ * ext/tcltklib/MANUAL.eng: ditto.
+
+ * ext/tcltklib/tcltklib.c: fix some reasons of SEGV
+
+ * ext/tk/tkutil.c: ditto.
+
+ * ext/tk/lib/multi-tk.rb: ditto.
+
+ * ext/tk/lib/tk/timer.rb: ditto.
+
+Sat Sep 11 16:09:46 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb: Fix up cross-file class merging.
+
+Fri Sep 10 20:20:53 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tcltklib/tcltklib.c (lib_merge_tklist): fix suspicious
+ pointer conversion.
+
+Fri Sep 10 02:43:54 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/template/kilmer.rb: James Buck's
+ patch for call-seq.
+
+Thu Sep 9 13:58:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_init): change flag value for setting
+ 'argv' and 'argv0' variable
+
+ * ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb
+
+Thu Sep 9 11:46:18 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_classes): Allow
+ spaces aroun parameter to define_method_under (James Buck)
+
+Wed Sep 8 18:44:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_write): zero fill a gap if exsts.
+ [ruby-dev:24190]
+
+Wed Sep 8 15:19:49 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4
+
+ * ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check,
+ and error treatment
+
+ * ext/tk/lib/multi-tk.rb: allow a trusted slave IP to create slave IPs
+
+ * ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear, and
+ erase
+
+ * ext/tk/lib/tk/text.rb: add TkText#clear and erase
+
+Tue Sep 7 15:17:49 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): break immediately if a
+ socket is non-blocking. [ruby-talk:111654]
+
+Mon Sep 6 11:08:50 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tk/lib/tk/menu.rb(TkOptionMenubutton#insert): call correct method
+
+Mon Sep 6 11:00:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_s_chdir): the patch to shut up false warning when
+ exception occurred within a block. a patch was given from Johan
+ Holmberg <holmberg at iar.se>. [ruby-core:03292]
+
+Mon Sep 6 07:51:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (cvar_cbase): singletons should refer outer cvar scope.
+ [ruby-dev:24223]
+
+ * eval.c (rb_load): should preserve previous ruby_wrapper value.
+ [ruby-dev:24226]
+
+Sat Sep 4 01:14:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (cvar_cbase): class variables cause SEGV in
+ instance_eval() for fixnums and symbols. [ruby-dev:24213]
+
+Fri Sep 3 17:47:58 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (make_struct): remove redefining constant when
+ conflict. [ruby-dev:24210]
+
+Fri Sep 3 11:31:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: Tk.after makes TkCore::INTERP.tk_cmd_tbl grow
+ [ruby-dev:24207]
+
+Fri Sep 3 02:12:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]
+
+ * ext/tk/lib/tk/text.rb: fix typo
+
+ * ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs
+
+Fri Sep 3 01:54:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: already built-in libraries satisfy dependencies.
+ [ruby-dev:24028]
+
+Thu Sep 2 11:36:20 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (rb_obj_instance_eval): backported from HEAD.
+
+Wed Sep 1 21:18:25 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tk/lib/tk/spinbox.rb: fix typo
+
+Tue Aug 31 18:24:04 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/tk/tkutil.c (cbsubst_init): fix memory leak
+
+ * ext/tk/tkutil.c (cbsubst_get_all_subst_keys): fix SEGV
+
+Tue Aug 31 16:04:22 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_delete): when a tcltkip is deleted,
+ destroy its root widget
+
+Tue Aug 31 12:30:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (del_root): fix SEGV
+
+Mon Aug 30 23:11:06 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/ri/ri_driver.rb (and others): ri now merges documentation
+ if it finds the same class in multiple places.
+
+Mon Aug 30 22:40:30 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: 'restart' method accepts arguments
+
+Mon Aug 30 21:50:14 2004 Dave Thomas <dave@pragprog.com>
+
+ * object.c: Add RDoc for Module.included.
+
+Mon Aug 30 15:10:46 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (GNU/k*BSD): fixed FTBFS on GNU/k*BSD. [ruby-dev:24051]
+
+Mon Aug 30 11:29:35 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): strip trailing spaces. [ruby-dev:24143]
+ merge from HEAD.
+
+Sun Aug 29 14:08:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: compile error on bcc32 [ruby-dev:24081]
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string does not work
+
+Sat Aug 28 23:04:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_and): protect parameters from GC.
+ [ruby-talk:110664]
+
+Thu Aug 26 04:38:29 2004 Dave Thomas <dave@pragprog.com>
+
+ * eval.c (return_jump): Minor typo in error message. Now reads
+ "return can't jump across threads".
+
+Tue Aug 24 17:30:00 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/cgi/session.rb (CGI::Session::FileStore#initialize): do not
+ use a session id as a filename. (backported from HEAD)
+
+ * lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): ditto.
+
+ * lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): use
+ Dir::tmpdir. (backported from HEAD)
+
+Tue Aug 24 14:40:16 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/cgi/session.rb (CGI::Session::FileStore#initialize): untaint
+ session id after check. (backported from HEAD)
+
+Tue Aug 24 09:09:01 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): d2i
+ functions may replace the pointer indicated by the first argument.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.
+
+Mon Aug 23 14:04:51 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read):
+ - should return an empty string if specified length to read is 0.
+ - should check for pending data and wait for fd before reading.
+ - call underlying IO's sysread if SSL session is not started.
+ [ruby-dev:24072], [ruby-dev:24075]
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_write):
+ - call underlying IO's syswrite if SSL session is not started.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_pending): new method
+ OpenSSL::SSL#pending.
+
+ * ext/openssl/lib/openssl/buffering.rb: should not use select.
+
+Mon Aug 23 12:40:56 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/resolv.rb (Config.default_config_hash): when multiple domains
+ are set, Win32::Resolv.get_resolv_info returns Array.
+
+Sun Aug 22 01:15:31 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):
+ should call :ProxyContentHandler before finishing CONNECT.
+
+Sat Aug 21 06:41:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tcltklib/extconf.rb (find_tcl, find_tk): find stub library.
+
+ * lib/mkmf.rb (arg_config, with_config): deal with '-' and '_'
+ uniformly. [ruby-dev:24118]
+
+Thu Aug 19 16:29:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: Fail to treat a hash value of 'font' option.
+
+ * ext/tk/lib/tk.rb: bindinfo cannot return '%' substiturion infomation.
+
+ * ext/tk/lib/menu.rb: typo bug.
+
+Thu Aug 19 15:15:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (free_dir): fix memory leak. reported by yamamoto
+ madoka.
+
+Thu Aug 19 11:00:00 2004 Akiyoshi, Masamichi <masamichi.akiyoshi@hp.com>
+
+ * dln.c (dln_load): Modify to call lib$find_image_symbol for VMS.
+ * io.c (rb_io_fwrite): Use fputc() for VMS non-stream file.
+
+Thu Aug 19 06:07:45 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/token.c: re2c no longer compiled with bit vectors. caused
+ problems for non-ascii characters. [ruby-core:03280]
+ * ext/syck/implicit.c: ditto.
+ * ext/syck/bytecode.c: ditto.
+
+ * lib/yaml/baseemitter.rb: folding now handles double-quoted strings,
+ fixed problem with extra line feeds at end of folding, whitespace
+ opening scalar blocks.
+
+ * lib/yaml/rubytypes.rb: subtelties in handling strings with
+ non-printable characters and odd whitespace patterns.
+
+Wed Aug 18 23:41:33 2004 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb (rbuf_fill): OpenSSL::SSL::SSLSocket has its own
+ buffer, select(2) might not work. [ruby-dev:24072]
+
+Wed Aug 18 17:10:12 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tcltklib/stubs.c (ruby_tcltk_stubs): need to call
+ Tcl_FindExecutable() for Tcl/Tk 8.4.
+
+Wed Aug 18 12:52:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_obj_instance_eval): evaluates under special singleton
+ classes as for special constants.
+
+Tue Aug 17 17:20:59 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_reopen): should clear allocated OpenFile. pointed
+ out by Guy Decoux. [ruby-core:03288]
+
+Tue Aug 17 01:36:32 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/usage.rb: Remove extra indent. Tidy 'ri' option
+ parsing so RDoc::usage plays better with OptionParser.
+
+Sat Aug 14 13:09:10 2004 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: backport from CVS HEAD (rev1.44).
+
+ * lib/fileutils.rb: cp_r should copy symlink itself, except cp_r
+ root.
+
+ * lib/fileutils.rb: new option mv :force.
+
+ * lib/fileutils.rb: new module FileUtils::DryRun.
+
+Sat Aug 14 02:48:16 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/usage.rb: Added. Allows command line programs
+ to report usage using their initial RDoc comment.
+
+Fri Aug 13 13:23:17 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_range_header):
+ fix regex for range-spec.
+
+ * lib/webrick/httpservlet/filehandler.rb
+ (WEBrick::HTTPServlet::DefaultFileHandler#make_partial_content):
+ multipart/byteranges response was broken.
+
+ * lib/webrick/httpservlet/erbhandler.rb
+ (WEBrick::HTTPServlet::ERBHandler#do_GET): should select media type
+ by suffix of script filename.
+
+ * lib/xmlrpc/server.rb: refine example code.
+
+Wed Aug 11 17:17:50 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (RPATHFLAG): stop setting RPATHFLAG on Interix.
+
+Sun Aug 8 00:43:31 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/implicit.c: added sexagecimal float#base60.
+
+ * ext/syck/rubyext.c (yaml_org_handler): ditto.
+
+ * lib/token.c: indentation absolutely ignored when processing flow
+ collections. plain scalars are trimmed if indentation follows in
+ an ambiguous flow collection.
+
+Sat Aug 7 00:50:01 2004 Tanaka Akira <akr@m17n.org>
+
+ * ext/zlib/zlib.c: Zlib::GzipReader#read(0) returns "" instead of nil.
+
+Tue Aug 3 13:49:20 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/namespace.rb: bug fix
+
+ * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: add Tk::TreeCtrl.loupe
+
+Mon Aug 2 18:04:21 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/msgcat.rb (set_translation): bug fix (fail to set
+ trans_str to the same as src_str when trans_str is not given.)
+
+Mon Aug 2 11:53:06 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): Fix infinite recursion
+ looking up some top level symbols (batsman)
+
+Mon Aug 2 11:48:29 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Allow '.'s in
+ variable names to support SWIG generated files (Hans Fugal)
+
+Sat Jul 31 17:40:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial,
+ ruby-calculate-indent, ruby-move-to-block, ruby-forward-sexp,
+ ruby-backward-sexp): keywords must match word-wise.
+
+Sat Jul 31 05:47:37 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/yaml.rb (YAML::load_file, YAML::parse_file): added.
+
+ * lib/yaml/rubytypes.rb: exceptions were using an older
+ YAML.object_maker. [ruby-core:03080]
+
+ * ext/syck/token.c (sycklex_yaml_utf8): using newline_len to
+ handline CR-LFs. "\000" was showing up on folded blocks which
+ stopped at EOF.
+
+ * ext/syck/token.c: re2c compiled with bit vectors now.
+ * ext/syck/implicit.c: ditto.
+ * ext/syck/bytecode.c: ditto.
+
+Fri Jul 30 16:10:54 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (lib_fromUTF8_core): raise ArgumentError when
+ the unknown encoding name is given.
+
+ * ext/tcltklib/tcltklib.c (lib_toUTF8_core): ditto.
+
+ * ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertfrom): bug fix.
+
+ * ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertto): ditto.
+
+Wed Jul 28 18:59:17 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::initialize): remove at_exit code for CGI_PARAMS
+ and CGI_COOKIES. they will no longer be used.
+
+Wed Jul 28 01:04:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (run_final): wrong order of data. [ruby-dev:23984]
+
+Tue Jul 27 07:05:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): copy on write for argument local variable
+ assignment.
+
+ * eval.c (assign): ditto.
+
+ * eval.c (rb_call0): update ruby_frame->argv with the default
+ value used for the optional arguments.
+
+ * object.c (Init_Object): "===" calls rb_obj_equal() directly.
+ [ruby-list:39937]
+
+Mon Jul 26 11:22:55 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape): should
+ escape space.
+
+Sun Jul 25 11:05:21 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * win32/win32.{h,c} (rb_w32_{f,fd,fs}open): workaround for bcc32's
+ {f,fd,fs}open bug. set errno EMFILE and EBADF. [ruby-dev:23963]
+
+Sat Jul 24 13:32:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (rb_range_beg_len): returns Qnil only when "beg" points
+ outside of a range. No boundary check for "end".
+
+Fri Jul 23 16:40:25 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (define_final): should not disclose NODE* to Ruby world.
+ [ruby-dev:23957]
+
+Fri Jul 23 09:03:16 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (disconnected?): new method. (backported from HEAD)
+
+Thu Jul 22 16:41:54 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi/session.rb (CGI::Session::FileStore#update): sets the
+ permission of the session data file to 0600.
+
+ * lib/cgi/session/pstore.rb (CGI::Session::Pstore#initialize):
+ ditto.
-Thu Mar 12 05:54:27 2015 Eric Wong <e@80x24.org>
+Thu Jul 22 00:02:21 2004 Masahiro Kitajima <katonbo@katontech.com>
- * ext/socket/init.c (rsock_s_accept_nonblock):
- support exception: false
- [ruby-core:66385] [Feature #10532]
- * ext/socket/init.c (rsock_init_socket_init): define new symbols
- * ext/socket/rubysocket.h: adjust prototype
- * ext/socket/socket.c (sock_accept_nonblock): support exception: false
- * ext/openssl/ossl_ssl.c (ossl_ssl_accept_nonblock): ditto
- * ext/socket/socket.c (Init_socket): adjust accept_nonblock definition
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): ditto
- * ext/socket/tcpserver.c (rsock_init_tcpserver): ditto
- * ext/socket/unixserver.c (rsock_init_unixserver): ditto
- * ext/socket/tcpserver.c (tcp_accept_nonblock): adjust
- rsock_s_accept_nonblock call
- * ext/socket/unixserver.c (unix_accept_nonblock): ditto
- * ext/openssl/ossl_ssl.c (ossl_start_ssl): support no_exception
- * ext/openssl/ossl_ssl.c (ossl_ssl_connect): adjust ossl_start_ssl call
- * ext/openssl/ossl_ssl.c (ossl_ssl_connect_nonblock): ditto
- * ext/openssl/ossl_ssl.c (ossl_ssl_accept): ditto
- * test/socket/test_nonblock.rb (test_accept_nonblock): test for
- "exception :false"
- * test/socket/test_tcp.rb (test_accept_nonblock): new test
- * test/socket/test_unix.rb (test_accept_nonblock): ditto
- * test/openssl/test_pair.rb (test_accept_nonblock_no_exception): ditto
+ * process.c (rb_f_system): not need to call last_status_set() any
+ longer on _WIN32.
-Thu Mar 12 10:53:06 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jul 20 09:15:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * internal.h, node.h: move a definition of `struct rb_global_entry'
- and related functions from node.h to internal.h.
+ * test/fileutils/test_fileutils.rb: File.link raises EINVAL on BeOS.
- * variable.c: remove unused include pragma.
+Mon Jul 19 01:15:07 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * common.mk: remove unused dependency.
+ * lib/webrick/httpservlet/cgihandler.rb
+ (WEBrick::HTTPServlet::CGIhandler#do_GET): set SystemRoot environment
+ variable to CGI process on Windows native platforms. [ruby-dev:23936]
-Thu Mar 12 10:32:39 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/webrick/httpservlet/cgihandler.rb
+ (WEBrick::HTTPServlet::CGIhandler#do_GET): use $?.exitstatus and
+ refine log message.
- * common.mk: remove unused dependency.
+Sun Jul 18 16:14:29 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Mar 12 08:20:14 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tk/msgcat.rb (TkMsgCatalog.callback): bug fix
+ ( wrong number of argument )
- * load.c: removed unused header file "node.h".
+Sun Jul 18 08:13:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * method.h: ditto.
+ * sprintf.c (rb_f_sprintf): remove extra sign digit.
- * symbol.c: ditto.
+Sun Jul 18 03:21:42 2004 Akinori MUSHA <knu@iDaemons.org>
-Thu Mar 12 08:14:48 2015 Koichi Sasada <ko1@atdot.net>
+ * dir.c (range): use NULL instead of 0.
- * gc.c: RGENGC_CHECK_MODE should be 0.
+ * dir.c (range): get rid of a gcc 3.4 warning.
-Thu Mar 12 07:44:17 2015 Koichi Sasada <ko1@atdot.net>
+Sun Jul 18 03:12:11 2004 Shugo Maeda <shugo@ruby-lang.org>
- * internal.h: use T_IMEMO to represent `struct MEMO' value.
- memo->v1 and memo->v2 is WB protected values.
- So use MEMO_V1/V2_SET() macros to set these values.
- memo->u3 is ambiguous (sometimes a VALUE, sometimes an integer
- value), so use gc_mark_maybe() in gc.c to mark it.
+ * lib/net/imap.rb (receive_responses): return if a LOGOUT response
+ received. (backported from HEAD)
+ * lib/net/imap.rb (send_string_data): wait command continuation
+ requests before sending octet data of literals. (backported from HEAD)
- Rename NEW_MEMO() to MEMO_NEW().
+Sat Jul 17 23:54:59 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- Move MEMO_FOR and NEW_MEMO_FOR macros from node.h.
+ * ext/tk/lib/tk/variable.rb: TkVariable#ref returns a TkVariable object
- Export a rb_imemo_new() function for ext/ripper.
+Sat Jul 17 22:04:44 2004 akira yamada <akira@ruby-lang.org>
- * node.h: remove NODE_MEMO.
+ * lib/uri/ldap.rb: method hierarchical? should be in URI::LDAP.
- * enum.c: catch up these change.
+Sat Jul 17 18:29:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * enumerator.c: ditto.
+ * parse.y (stmt): not to show same error messages twice.
- * load.c: ditto.
+Sat Jul 17 13:13:32 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/objspace/objspace.c (count_nodes): ditto.
+ * lib/irb/ruby-lex.rb (RubyLex::identify_string): %s string do not
+ process expression interpolation. [ruby-talk:106691]
- * gc.c (gc_mark_children): mark imemo_memo type.
+Sat Jul 17 05:26:27 2004 Dave Thomas <dave@pragprog.com>
- * parse.y (new_args_gen): use T_IMEMO.
- (I'm not sure it is working correctly...)
+ * lib/rdoc/diagram.rb: Incorporate Micheal Neuman's
+ client-side imagemao patch
-Wed Mar 11 22:36:34 2015 Koichi Sasada <ko1@atdot.net>
+Sat Jul 17 01:57:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * eval.c (frame_called_id): it should use vm_ifunc type.
+ * eval.c (THREAD_ALLOC): th->thread should be initialized to NULL.
+ [ruby-talk:106657] The solution was found by Guy Decoux.
- * eval.c (frame_func_id): ditto.
+Fri Jul 16 22:30:28 2004 Michael Neumann <mneumann@ntecs.de>
-Wed Mar 11 22:27:05 2015 Koichi Sasada <ko1@atdot.net>
+ * file.c (rb_stat_dev_major): new methods File::Stat#dev_major and
+ #dev_minor. [ruby-core:03195]
- * node.h: remove NODE_IFUNC, NEW_IFUNC.
+Fri Jul 16 15:23:53 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * internal.h: use T_IMEMO for IFUNC.
+ * eval.c (return_jump, break_jump): raise unexpceted local jump
+ exception directly. [ruby-dev:23740]
- rename `struct IFUNC' to `struct vm_ifunc' and move the definition
- from vm_insnhelper.h. Add imemo_ifunc.
+ * lib/base64.rb (Deprecated): super in bound method calls original
+ name method in stable version. [ruby-dev:23916]
- * gc.c (gc_mark_children): mark imemo_ifunc type T_IMEMO object.
+Fri Jul 16 11:31:49 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * compile.c: catch up these changes.
+ * lib/test/unit/ui/{fox,gtk,gtk2}/testrunner.rb: remove
+ garbage (patch from akira yamada) [ruby-dev:23911]
- * proc.c: ditto.
+Fri Jul 16 11:20:00 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_core.h (RUBY_VM_IFUNC_P): ditto.
+ * sprintf.c (rb_f_sprintf): fix output of NaN, Inf and -Inf with
+ "%f" or etc on MSVCRT platforms. (backported from HEAD)
- * vm_eval.c (rb_iterate): ditto.
+Fri Jul 16 11:17:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c: ditto.
+ * error.c (exit_initialize): use EXIT_SUCCESS instead of 0.
+ [ruby-dev:23913]
- * ext/objspace/objspace.c: ditto.
+ * error.c (exit_success_p): new method SystemExit#success?.
+ [ruby-dev:23912]
-Wed Mar 11 21:53:43 2015 Koichi Sasada <ko1@atdot.net>
+ * error.c (syserr_initialize): initialization for subclasses.
+ [ruby-dev:23912]
- * internal.h, eval_intern.h: move CREF accessors.
+Thu Jul 15 23:53:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- List IMEMO supported types in internal.h.
+ * lib/optparse.rb (OptionParser#warn, OptionParser#abort): Exception
+ no longer has to_str method.
-Wed Mar 11 21:45:36 2015 Koichi Sasada <ko1@atdot.net>
+Thu Jul 15 22:59:48 2004 Shugo Maeda <shugo@ruby-lang.org>
- * vm_insnhelper.h: use T_IMEMO to create THROW_DATA.
+ * ext/readline/extconf.rb: added dir_config for curses, ncurses,
+ termcap. (backported from HEAD)
- Add THROW_DATA_NEW().
+Thu Jul 15 20:29:15 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * internal.h: move definition of `struct THROW_DATA'
- from vm_insnhelper.h to internal.h.
+ * class.c, error.c, eval.c, intern.h, object.c, variable.c:
+ do not set path if it is a singleton class. [ruby-dev:22588]
+ (backport from 1.9)
- Rename `THROW_DATA' to `vm_throw_data'.
+Thu Jul 15 10:15:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * eval_intern.h (THROW_DATA_P): move to internal.h.
- THROW_DATA is no longer T_NODE, so check T_IMEMO.
+ * ext/tk/, ext/tcltklib/: bug fix
- * gc.c (gc_mark_children): mark THROW_DATA.
+ * ext/tk/lib/tk.rb: better operation for SIGINT when processing
+ callbacks.
+ * ext/tk/lib/tk/msgcat.rb: ditto.
+ * ext/tk/lib/tk/variable.rb: ditto.
+ * ext/tk/lib/tk/timer.rb: ditto.
- * vm.c: catch up these changes.
+ * ext/tk/lib/tk/validation.rb: add Tk::ValidateConfigure.__def_validcmd
+ to define validatecommand methods easier
- * vm_eval.c: ditto.
+ * ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext
+ classes
- * vm_insnhelper.c: ditto.
+ * ext/tk/lib/tk/canvas.rb and so on: remove the parent widget type
+ check for items (e.g. canvas items; depends on the class) to
+ avoid some troubles on Tk extension widget class definition.
-Wed Mar 11 21:21:56 2015 Koichi Sasada <ko1@atdot.net>
+ * ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support
- * vm_insnhelper.c: use T_IMEMO to create SVAR.
+ * ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable
- * internal.h, vm_insnhelper.h: move definition `struct SVAR'
- from vm_insnhelper.h to internal.h. And rename it to struct vm_svar.
- new imemo_type imemo_svar is added.
+Wed Jul 14 18:08:37 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * gc.c (gc_mark_children): mark imemo_svar.
+ * ext/openssl/ossl_asn1.c (ossl_asn1cons_to_der): fix type of
+ argument. [ruby-dev:23891]
- * node.c (rb_gc_mark_node): remove useless marking.
+ * test/openssl/test_x509store.rb: prune tests for CRL checking
+ unless X509::V_FLAG_CRL_CHECK is defined.
-Wed Mar 11 19:35:46 2015 Koichi Sasada <ko1@atdot.net>
+Wed Jul 14 12:29:07 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * include/ruby/ruby.h: introduce new type T_IMEMO.
- T_IMEMO is Internal Memo type, internal use only.
- T_IMEMO has same purpose of NODE_MEMO.
+ * util.c (ruby_strtod): should not convert string in the form of
+ "-I.FE-X" which both "I" and "F" are ommitted. [ruby-dev:23883]
- To insert T_IMEMO, type numbers are modified a little.
+ * test/ruby/test_float.rb (test_strtod): add test for bug fix.
- * internal.h: define struct RIMemo. Each RIMemo objects
- has imemo_type. We can observe it by the imemo_type() function.
+Wed Jul 14 00:31:15 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * gc.c (rb_imemo_new): added.
+ * array.c: rdoc patch. merged patch from Johan Holmberg
+ <holmberg@iar.se> [ruby-core:3170]
- * node.h: remove NODE_CREF and NEW_CREF().
+Tue Jul 13 19:39:12 2004 akira yamada <akira@ruby-lang.org>
- * node.c (rb_gc_mark_node): ditto.
+ * lib/uri/generic.rb (URI::Generic#merge_path):
+ "URI('http://www.example.com/foo/..') + './'" should return
+ "URI('http://www.example.com/')". [ruby-list:39838]
+ "URI('http://www.example.com/') + './foo/bar/..'" should return
+ "URI('http://www.example.com/foo/')". [ruby-list:39844]
- * vm.c (vm_cref_new): use rb_imem_new().
+ * test/uri/test_generic.rb (TestGeneric#test_merge): added tests.
- * vm_eval.c: ditto.
+Tue Jul 13 15:51:45 2004 Akinori MUSHA <knu@iDaemons.org>
- * vm_insnhelper.c: use RIMemo objects for CREF.
+ * lib/mkmf.rb (init_mkmf): Do not add $(libdir) to $LIBPATH in
+ extmk mode.
- * ext/objspace/objspace.c: support T_IMEMO.
+ * lib/mkmf.rb (dir_config): Prepend a new library path instead of
+ appending so it is tried first.
-Wed Mar 11 17:03:20 2015 Koichi Sasada <ko1@atdot.net>
+Tue Jul 13 00:50:48 2004 Dave Thomas <dave@pragprog.com>
- * gc.c: fix memory leak by prepend method.
+ * lib/rdoc/parsers/parse_rb.rb: Support call-seq: for Ruby files.
- It is easy to reproduce with such script:
+Mon Jul 12 21:20:36 2004 Dave Thomas <dave@pragprog.com>
- module M; def bar; end; end
- loop{
- Class.new do
- def foo; end
- prepend M
+ * html_generator.rb: Support hyperlinks of the form {any text}[xxx]
+ as well as stuff[xxx]
+
+Sat Jul 10 09:30:24 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/marshal/test_struct.rb: use qualified build-tin class name
+ (::Struct) to avoid name crash.
+
+Sat Jul 10 04:21:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: better operation for SIGINT when processing
+ callbacks.
+ * ext/tk/lib/tk/msgcat.rb: ditto.
+ * ext/tk/lib/tk/variable.rb: ditto.
+ * ext/tk/lib/tk/timer.rb: ditto.
+
+ * ext/tk/lib/tk/validation.rb (__def_validcmd): add a module
+ function of Tk::ValidateConfigure to define validatecommand
+ methods easier
+
+Fri Jul 9 22:36:36 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * array.c, enum.c, pack.c: rdoc patch from Johan Holmberg
+ <holmberg@iar.se> [ruby-core:3132] [ruby-core:3136]
+
+ * numeric.c: rdoc patch.
+
+Fri Jul 9 19:26:39 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (URI::HTTPS#proxy_open): raise ArgumentError to
+ notice https is not supported.
+
+Fri Jul 9 14:28:54 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_raise): accept third argument as well as
+ Kernel#raise, and evaluate the arguments to create an exception in
+ the caller's context. [ruby-talk:105507]
+
+Fri Jul 9 01:47:08 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib : bug fix
+ * ext/tk/lib/tkextlib/itcl : add [incr Tcl] support
+ * ext/tk/lib/tkextlib/itk : add [incr Tk] support
+ * ext/tk/lib/tkextlib/iwidgets : midway point of [incr Widgets] support
+ * ext/tk/sample/tkextlib/iwidgets : very simple examples of
+ [incr Widgets]
+
+Thu Jul 8 22:52:19 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/{rss,parser,0.9,1.0,2.0}.rb: supported RSS 0.9x/2.0
+ validation and validation which disregard order of elements.
+ * test/rss/test_parser.rb: added tests for RSS 0.9x/2.0
+ validation.
+ * test/rss/{test_trackback,rss-testcase}.rb: fixed no good method
+ name.
+
+Thu Jul 8 00:05:23 2004 akira yamada <akira@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile::initialize): got out code of
+ generating tmpname. [ruby-dev:23832][ruby-dev:23837]
+
+Wed Jul 7 15:53:14 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * string.c (rb_str_match): raise TypeError when both arguments are
+ strings. [ruby-dev:22869] (backported from HEAD)
+
+ * string.c (rb_str_match2): removed.
+
+ * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
+ wince/Makefile.sub (string.c): now not depend on version.h.
+
+Wed Jul 7 00:48:34 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tk/lib/tkextlib/tktrans.rb,
+ ext/tk/lib/tkextlib/treectrl.rb: fix syntax errors.
+
+Tue Jul 6 18:38:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib : improve framework of developping Tcl/Tk extension
+ wrappers
+
+Mon Jul 5 23:56:42 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/{trackback,syndication,dublincore,content}.rb: worked
+ with ruby 1.6 again.
+
+ * test/rss/rss-assertions.rb: ditto.
+
+Mon Jul 5 22:54:39 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/uri/common.rb (Kernel#URI): new global method for parsing URIs.
+
+Mon Jul 5 09:02:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_yield, rb_f_catch): 4th argument to rb_yield_0()
+ is a set of bit flags. [ruby-dev:23859]
+
+Mon Jul 5 01:27:32 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * lib/drb/drb.rb(DRbConn self.open): If socket pool is full, close
+ the socket whose last-access-time is oldest. (and add new one)
+ [ruby-dev:23860]
+
+Sun Jul 4 12:24:50 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb: added copyright header.
+
+Sun Jul 4 00:24:40 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * added files
+ * lib/soap/attachment.rb
+ * lib/soap/header
+ * lib/soap/mimemessage.rb
+ * lib/soap/rpc/httpserver.rb
+ * lib/wsdl/soap/cgiStubCreator.rb
+ * lib/wsdl/soap/classDefCreator.rb
+ * lib/wsdl/soap/classDefCreatorSupport.rb
+ * lib/wsdl/soap/clientSkeltonCreator.rb
+ * lib/wsdl/soap/driverCreator.rb
+ * lib/wsdl/soap/mappingRegistryCreator.rb
+ * lib/wsdl/soap/methodDefCreator.rb
+ * lib/wsdl/soap/servantSkeltonCreator.rb
+ * lib/wsdl/soap/standaloneServerStubCreator.rb
+ * lib/wsdl/xmlSchema/enumeration.rb
+ * lib/wsdl/xmlSchema/simpleRestriction.rb
+ * lib/wsdl/xmlSchema/simpleType.rb
+ * lib/xsd/codegen
+ * lib/xsd/codegen.rb
+ * sample/soap/authheader
+ * sample/soap/raa2.4
+ * sample/soap/ssl
+ * sample/soap/swa
+ * sample/soap/whois.rb
+ * sample/soap/calc/samplehttpd.conf
+ * sample/soap/exchange/samplehttpd.conf
+ * sample/soap/sampleStruct/samplehttpd.conf
+ * sample/wsdl/raa2.4
+ * sample/wsdl/googleSearch/samplehttpd.conf
+ * test/openssl/_test_ssl.rb
+ * test/soap/header
+ * test/soap/ssl
+ * test/soap/struct
+ * test/soap/swa
+ * test/soap/wsdlDriver
+ * test/wsdl/multiplefault.wsdl
+ * test/wsdl/simpletype
+ * test/wsdl/test_multiplefault.rb
+
+ * modified files
+ * lib/soap/baseData.rb
+ * lib/soap/element.rb
+ * lib/soap/generator.rb
+ * lib/soap/marshal.rb
+ * lib/soap/netHttpClient.rb
+ * lib/soap/parser.rb
+ * lib/soap/processor.rb
+ * lib/soap/property.rb
+ * lib/soap/soap.rb
+ * lib/soap/streamHandler.rb
+ * lib/soap/wsdlDriver.rb
+ * lib/soap/encodingstyle/handler.rb
+ * lib/soap/encodingstyle/literalHandler.rb
+ * lib/soap/encodingstyle/soapHandler.rb
+ * lib/soap/mapping/factory.rb
+ * lib/soap/mapping/mapping.rb
+ * lib/soap/mapping/registry.rb
+ * lib/soap/mapping/rubytypeFactory.rb
+ * lib/soap/mapping/wsdlRegistry.rb
+ * lib/soap/rpc/cgistub.rb
+ * lib/soap/rpc/driver.rb
+ * lib/soap/rpc/element.rb
+ * lib/soap/rpc/proxy.rb
+ * lib/soap/rpc/router.rb
+ * lib/soap/rpc/soaplet.rb
+ * lib/soap/rpc/standaloneServer.rb
+ * lib/wsdl/data.rb
+ * lib/wsdl/definitions.rb
+ * lib/wsdl/operation.rb
+ * lib/wsdl/parser.rb
+ * lib/wsdl/soap/definitions.rb
+ * lib/wsdl/xmlSchema/complexContent.rb
+ * lib/wsdl/xmlSchema/complexType.rb
+ * lib/wsdl/xmlSchema/data.rb
+ * lib/wsdl/xmlSchema/parser.rb
+ * lib/wsdl/xmlSchema/schema.rb
+ * lib/xsd/datatypes.rb
+ * lib/xsd/qname.rb
+ * sample/soap/calc/httpd.rb
+ * sample/soap/exchange/httpd.rb
+ * sample/soap/sampleStruct/httpd.rb
+ * sample/soap/sampleStruct/server.rb
+ * sample/wsdl/amazon/AmazonSearch.rb
+ * sample/wsdl/amazon/AmazonSearchDriver.rb
+ * sample/wsdl/googleSearch/httpd.rb
+ * test/soap/test_basetype.rb
+ * test/soap/test_property.rb
+ * test/soap/test_streamhandler.rb
+ * test/soap/calc/test_calc.rb
+ * test/soap/calc/test_calc2.rb
+ * test/soap/calc/test_calc_cgi.rb
+ * test/soap/helloworld/test_helloworld.rb
+ * test/wsdl/test_emptycomplextype.rb
+ * test/wsdl/axisArray/test_axisarray.rb
+ * test/wsdl/datetime/test_datetime.rb
+ * test/wsdl/raa/test_raa.rb
+ * test/xsd/test_xmlschemaparser.rb
+ * test/xsd/test_xsd.rb
+
+ * summary
+ * add SOAP Header mustUnderstand support.
+
+ * add HTTP client SSL configuration and Cookies support (works
+ completely with http-access2).
+
+ * add header handler for handling sending/receiving SOAP Header.
+
+ * map Ruby's anonymous Struct to common SOAP Struct in SOAP Object
+ Model. it caused error.
+
+ * add WSDL simpleType support to restrict lexical value space.
+
+ * add SOAP with Attachment support.
+
+Sat Jul 3 17:19:44 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tk/lib/tkextlib/tkDND.rb: fix syntax error.
+
+Thu Jul 1 23:15:29 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pstore.rb (transaction): safer backup scheme. [ruby-list:39102]
+
+ * lib/pstore.rb (commit_new): use FileUtils.copy_stream for Cygwin.
+ [ruby-dev:23157]
+
+ * lib/pstore.rb (transaction): allow overriding dump and load.
+ [ruby-dev:23567]
+
+ * lib/pstore.rb (PStore#transaction): get rid of opening in write mode
+ when read only transaction. [ruby-dev:23842]
+
+ * lib/yaml/store.rb: follow lib/pstore.rb's change.
+
+Thu Jul 1 18:36:08 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tcltklib : bug fix
+
+ * ext/tk/lib/tk : bug fix and add Tcl/Tk extension support libraries
+
+Thu Jul 1 11:59:45 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: check for EVP_CIPHER_CTX_copy, ENGINE_add,
+ EVP_CIPHER_CTX_set_padding, EVP_CipherFinal_ex, EVP_CipherInit_ex,
+ EVP_DigestFinal_ex and EVP_DigestInit_ex.
+
+ * ext/openssl/openssl_missing.c (EVP_CIPHER_CTX_copy): new function.
+
+ * ext/openssl/openssl_missing.h (EVP_DigestInit_ex, EVP_DigestFinal_ex,
+ EVP_CipherInit_ex, EVP_CipherFinal_ex, HMAC_Init_ex): new macro for
+ OpenSSL 0.9.6.
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_encrypt, ossl_cipher_decrypt):
+ re-implemnt (the arguments for this method is ).
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_pkcs5_keyivgen): new method
+ OpenSSL::Cipher::Cipher#pkcs5_keyivgen. it calls EVP_BytesToKey().
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_alloc, ossl_cipher_initialize,
+ ossl_cipher_copy, ossl_cipher_reset ossl_cipher_final,
+ ossl_cipher_set_key, ossl_cipher_set_iv): replace all EVP_CipherInit
+ and EVP_CipherFinal into EVP_CipherInit_ex and EVP_CipherFinal_ex.
+ and EVP_CIPHER_CTX_init should only be called once.
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_set_key_length): new method
+ OpenSSL::Cipher::Cipher#key_len=.
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_init_deprecated): new
+ finction; print warning for Cipher#<<.
+
+ * ext/openssl/ossl_digest.c: replace all EVP_DigestInit and
+ EVP_DigestFinal into EVP_DigestInit_ex and EVP_DigestFinal_ex.
+ and EVP_MD_CTX_init should only be called once.
+
+ * ext/openssl/ossl_digest.c (digest_final): should call
+ EVP_MD_CTX_cleanup to avoid memory leak.
+
+ * ext/openssl/ossl_hmac.c (ossl_hmac_initialize): repalce HMAC_init
+ into HMAC_init_ex. and HMAC_CTX_init is moved to ossl_hmac_alloc.
+
+ * ext/openssl/ossl_hmac.c (hmac_final): should call
+ HMAC_CTX_cleanup to avoid memory leak.
+
+ * test/openssl/test_cipher.rb, test/openssl/test_digest.rb,
+ test/openssl/test_hmac.rb: new file.
+
+Thu Jul 1 04:08:30 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_asn1.c (ossl_i2d_ASN1_TYPE, ossl_ASN1_TYPE_free):
+ workaround for the versions earlier than OpenSSL-0.9.7.
+
+Thu Jul 1 03:33:55 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize): should create
+ empty pkey object if no argument is passed. [ruby-talk:103328]
+
+ * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.
+
+ * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize): ditto.
+
+ * ext/openssl/ossl_pkey_dh.c: add new methods: OpenSSL::PKey::DH#p,
+ OpenSSL::PKey::DH#p=, OpenSSL::PKey::DH#g, OpenSSL::PKey::DH#g=,
+ OpenSSL::PKey::DH#pub_key, OpenSSL::PKey::DH#pub_key=,
+ OpenSSL::PKey::DH#priv_key and OpenSSL::PKey::DH#priv_key=.
+
+ * ext/openssl/ossl_pkey_dsa.c: add new methods: OpenSSL::PKey::DSA#p,
+ OpenSSL::PKey::DSA#p=, OpenSSL::PKey::DSA#q, OpenSSL::PKey::DSA#q=,
+ OpenSSL::PKey::DSA#g, OpenSSL::PKey::DSA#g=,
+ OpenSSL::PKey::DSA#pub_key, OpenSSL::PKey::DSA#pub_key=,
+ OpenSSL::PKey::DSA#priv_key and OpenSSL::PKey::DSA#priv_key=.
+
+Thu Jul 1 03:16:09 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read): take optional second argument
+ to specify a string to be written.
+
+ * ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#read):
+ take optional second argument to specify a string to be written.
+
+ * ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#gets):
+ refine regexp for end-of-line.
+
+ * ext/opnessl/lib/openssl/ssl.rb
+ (OpenSSL::SSL::SocketForwarder#listen): fix typo.
+
+Wed Jun 30 11:38:51 2004 Mikael Brockman <phubuh@phubuh.org>
+
+ * parse.y (primary): should not be NULL. [ruby-core:03098]
+
+Wed Jun 30 02:53:24 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_emitter_new): set buffer after
+ Data_Wrap_Struct to avoid possible GC. [ruby-talk:104835]
+
+Tue Jun 29 10:31:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval_cmd, rb_thread_trap_eval): restore safe level.
+
+ * gc.c (define_final, run_final): preserve and restore safe level for
+ finalizers. [ruby-core:03058]
+
+ * signal.c (signal_exec, rb_trap_exit, trap): preserve and restore
+ safe level for signal handlers. [ruby-dev:23829]
+
+Mon Jun 28 14:57:56 2004 Jeff Mitchell <quixoticsycophant@yahoo.com>
+
+ * configure.in, lib/mkmf.rb (LIBPATHFLAG): use double quotes due to
+ DOSISH compilers. [ruby-core:03107]
+
+Mon Jun 28 00:30:19 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * sample/drb/*.rb: using 'DRb.thread.join' instead of 'gets'
+
+Sun Jun 27 22:39:51 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * sample/rss/tdiary_plugin/rss-recent.rb: supported Hiki.
+
+Sun Jun 27 12:19:46 2004 Kouhei Sutou <kou@cozmixng.org>
+
+ * {lib,sample,test}/rss: added RSS Parser. [ruby-dev:23780]
+
+Sat Jun 26 11:07:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (aix): -b must come at the start of the command line,
+ and -e must not appear while testing libraries. [ruby-talk:104501]
+
+ * lib/mkmf.rb (dir_config): quote directory names if necessary.
+ [ruby-talk:104505]
+
+Fri Jun 25 15:33:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/extconf.rb: check stricter. [ruby-talk:104501]
+
+ * ext/iconv/extconf.rb: include iconv.h for libiconv. [ruby-dev:22715]
+
+Fri Jun 25 08:31:29 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_atfork): remove "fork terminates thread"
+ warning. [ruby-dev:23768]
+
+ * object.c (rb_obj_clone): backport FL_FINALIZE patch from 1.9.
+ [ruby-core:02786][ruby-core:03067]
+
+ * ext/socket/socket.c (sock_sockaddr): Socket#gethostbyname()
+ should give us packed address, not struct sockaddr.
+ [ruby-core:03053]
+
+Fri Jun 25 02:04:23 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc32,win32,wince}/setup.mak: remove RUBY_EXTERN lines when
+ including version.h. [ruby-talk:104456] (backported from HEAD)
+
+Thu Jun 24 14:23:29 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_fread): return already read data when system call is
+ interrupted. [ruby-talk:97206]
+
+Thu Jun 24 01:32:43 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * version.h: added declarations of ruby_version,
+ ruby_release_date, ruby_platform.
+ (backported from HEAD)
+
+Wed Jun 23 22:23:37 2004 Dave Thomas <dave@pragprog.com>
+
+ * ext/socket/socket.c (sock_s_gethostbyaddr): Work around problem
+ with OS X not returning 'from' parameter to recvfrom for
+ connection-oriented sockets.
+
+Wed Jun 23 01:45:27 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_quotation):
+ Fix problem with the 'r' being dropped from %r{xxx}
+
+Wed Jun 23 00:20:20 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_hresult2msg): remove trailing
+ CRs and LFs. (doesn't depend on CR+LF) [ruby-dev:23749]
+
+Wed Jun 23 00:00:25 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_initialize): should check fcntl result. [ruby-dev:23742]
+
+Tue Jun 22 21:11:36 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (OLE_FREE): should not call CoFreeUnuse-
+ dLibraries().
+
+ * ext/win32ole/win32ole.c (ole_event_free): ditto.
+
+ * ext/win32ole/win32ole.c (ole_hresult2msg): truncate error message
+ before CR.
+
+Tue Jun 22 16:47:42 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (MDTM_REGEXP): fix for demon's ftp server.
+ Thanks, Rutger Nijlunsing.
+
+Mon Jun 21 10:19:23 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_opendir): use FindFirstFile()/FindNextFile()/
+ FindClose() instead of _findfirst()/_findnext()/_findclose().
+ merge from HEAD.
+
+Sat Jun 19 13:24:15 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (method_call): allow changing $SAFE. [ruby-dev:23713]
+
+Fri Jun 18 23:12:22 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (proc_save_safe_level, rb_set_safe_level, safe_setter): limit
+ safe level.
+
+Wed Jun 16 23:05:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_freeze): prepare string representation before
+ freezing. [ruby-talk:103646]
+
+Wed Jun 16 16:04:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_mod_le): singleton class inherits Class rather than its
+ object's class. [ruby-dev:23690]
+
+Wed Jun 16 16:01:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (stack_grow_direction): memoize the direction.
+
+ * gc.c (Init_stack): should always move to end of VALUE.
+
+Tue Jun 15 12:10:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix (TkWindow#grab)
+
+Mon Jun 14 18:23:27 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/remote-tk.rb: bug fix
+
+Sun Jun 13 00:23:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/extconf.rb: [EXPERIMENTAL] MacOS X (darwin) support
+
+ * ext/tcltklib/tcltklib.c: fix thread trouble on callback proc, and
+ eliminate warning about instance variable access
+
+ * ext/tk/lib/tk/menubar.rb: improve supported menu_spec
+
+ * ext/tk/lib/tk/menuspec.rb: [add] menu_spec support library
+
+ * ext/tk/lib/tk/root.rb: add menu_spec support
+
+ * ext/tk/lib/tk/text.rb: bug fix
+
+ * ext/tk/lib/tk/toplevel.rb: add menu_spec support
+
+ * ext/tk/sample/menubar?.rb: [add] sample of menu_spec usage
+
+Sat Jun 12 11:15:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (target_os): strip -gnu suffix on Linux.
+
+Fri Jun 11 17:08:21 2004 Akinori MUSHA <knu@iDaemons.org>
+
+ * config.guess: Restore a wrongly removed hyphen.
+
+Fri Jun 11 14:30:08 2004 Akinori MUSHA <knu@iDaemons.org>
+
+ * config.guess: Attempt to avoid system name change on
+ Darwin platforms also.
+
+Fri Jun 11 14:22:45 2004 Akinori MUSHA <knu@iDaemons.org>
+
+ * config.guess, config.sub: Attempt to avoid system name change on
+ Linux platforms. We have been using "linux" instead of
+ "linux-gnu" on this branch.
+
+Thu Jun 10 19:19:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/sdbm/init.c (fsdbm_store): sdbm should use StringValue().
+ [ruby-talk:103062]
+
+Wed Jun 9 18:04:14 2004 akira yamada <akira@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI::Generic::merge,
+ URI::Generic::route_from): accepts non-hierarchical URI.
+ [ruby-dev:23631]
+
+ * test/uri/test_generic.rb (TestGeneric::test_route,
+ TestGeneric::test_merge): added tests for above changes.
+
+Wed Jun 9 17:39:37 2004 Akinori MUSHA <knu@iDaemons.org>
+
+ * config.guess, config.sub: Update to a more recent version as of
+ 2004-01-20.
+
+ * configure.in: Add support for DragonFly BSD.
+
+Wed Jun 2 20:16:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_new4): should share shared instance if it already
+ exists. [ruby-dev:23665]
+
+Wed Jun 2 12:41:53 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_gets_m): set lastline ($_) even when read line is
+ nil. [ruby-dev:23663]
+
+Fri May 28 11:20:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): bad influence on frame node.
+
+ * eval.c (eval): reverted wrongly removed condition. [ruby-dev:23638]
+
+Thu May 27 23:15:18 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: leading 0 padding of timestamp usec part.
+
+ * lib/csv.rb (CSV.parse): [CAUTION] behavior changed. in the past,
+ CSV.parse accepts a filename to be read-opened (it was just a
+ shortcut of CSV.open(filename, 'r')). now CSV.parse accepts a
+ string or a stream to be parsed e.g.
+ CSV.parse("1,2\n3,r") #=> [['1', '2'], ['3', '4']]
+
+ * lib/csv.rb: CSV::Row and CSV::Cell are deprecated. these classes
+ are removed in the future. in the new csv.rb, row is represented
+ as just an Array. since CSV::Row was a subclass of Array, it won't
+ hurt almost all programs except one which depended CSV::Row#match.
+ and a cell is represented as just a String or nil(NULL). this
+ change will cause widespread destruction.
+
+ CSV.open("foo.csv", "r") do |row|
+ row.each do |cell|
+ if cell.is_null # using Cell#is_null
+ p "(NULL)"
+ else
+ p cell.data # using Cell#data
+ end
+ end
end
- }
- * gc.c (obj_free): free T_ICLASS::m_tbl if it is created by prepend.
- To recognize it, check RICLASS_IS_ORIGIN flag.
+ must be just;
+
+ CSV.open("foo.csv", "r") do |row|
+ row.each do |cell|
+ if cell.nil?
+ p "(NULL)"
+ else
+ p cell
+ end
+ end
+ end
+
+ * lib/csv.rb: [CAUTION] record separator(CR, LF, CR+LF) behavior
+ change. CSV.open, CSV.parse, and CSV,generate now do not force
+ opened file binmode. formerly it set binmode explicitly.
+
+ with CSV.open, binmode of opened file depends the given mode
+ parameter "r", "w", "rb", and "wb". CSV.parse and CSV.generate open
+ file with "r" and "w".
+
+ setting mode properly is user's responsibility now.
+
+ * lib/csv.rb: accepts String as a fs (field separator/column separator)
+ and rs (record separator/row separator)
+
+ * lib/csv.rb (CSV.read, CSV.readlines): added. works as IO.read and
+ IO.readlines in CSV format.
+
+ * lib/csv.rb: added CSV.foreach(path, rs = nil, &block). CSV.foreach
+ now does not handle "| cmd" as a path different from IO.foreach.
+ needed?
+
+ * test/csv/test_csv.rb: updated.
+
+ * test/ruby/test_float.rb: added test_strtod to test Float("0").
+
+Thu May 27 21:37:50 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Pathname#initialize): refine pathname initialization
+ by pathname.
+
+Thu May 27 20:22:05 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * io.c (rb_io_fwrite): check all case errno != 0 [ruby-dev:23648]
+
+Thu May 27 14:53:13 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (rb_io_fwrite): workaround for bcc32's fwrite bug.
+ add errno checking. [ruby-dev:23627]
+
+Wed May 26 14:19:42 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval, eval): make line number consistent on eval with
+ Proc. [ruby-talk:101253]
+
+Wed May 26 13:59:17 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::skip_for_variable): Allow for
+ 'do' after for statement
+
+Wed May 26 13:56:03 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/html_generator.rb (Generators::MarkUp::style_url): Fix
+ relative path to code CSS file
+
+Wed May 26 13:14:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_init_copy): copy also positions. [ruby-talk:100910]
+
+Wed May 26 00:00:00 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/syck.c (syck_new_parser): clear parser on init.
+ thanks, ts. [ruby-core:02931]
+
+ * ext/syck/token.c (sycklex_yaml_utf8): buffer underflow.
+ thanks, ts. [ruby-core:02929]
+
+ * lib/yaml/baseemitter.rb (indent_text): simpler flow block code.
+
+ * lib/yaml.rb: added rdoc to beginning of lib.
+
+Mon May 24 10:46:26 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/rdoc/generators/template/html/html.rb: SYSTEM identifiers
+ must be absolute URIs
+
+Sat May 22 12:00:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * MANIFEST: add new encodings in rexml.
+
+ * ext/tk/MANIFEST: add recent files.
+
+Sat May 22 05:37:11 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/remote-tk.rb: (NEW library) controll Tk interpreters
+ on the other processes by Tcl/Tk's 'send' command
+
+Fri May 21 09:22:05 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_parameters):
+ Add ()'s around parameters that don't have them
+
+Thu May 20 17:02:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (check_sizeof): define result size. [ruby-core:02911]
+
+ * lib/mkmf.rb (create_header): macro name should not include equal
+ sign.
+
+Thu May 20 15:59:50 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * ext/socket/socket.c: fix SEGV. [ruby-dev:23550]
+
+Thu May 20 14:35:52 2004 Tanaka Akira <akr@m17n.org>
+
+ * ext/socket/socket.c: check SCM_RIGHTS macro addition to
+ the msg_control field to test existence of file descriptor passing
+ by msg_control.
+
+Thu May 20 12:38:06 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_eq): always check if operands are NaN.
+ [ruby-list:39685]
+
+Thu May 20 12:34:39 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_visibility):
+ At Ryan Davis' suggestion, honor visibility modifers if guarded by a
+ statement modifier
+
+Thu May 20 12:22:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_type): do not check pointer to incomplete type,
+ which always get compiled. [ruby-list:39683]
+
+Wed May 19 11:09:00 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: change permition of TkObject#tk_send from
+ private to public
+
+Tue May 18 14:00:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * node.h (NEW_DSTR): adjust list length.
+
+ * parse.y (literal_concat): ditto.
+
+Mon May 17 16:14:25 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * numeric.c (flo_to_s): it's preferable that "p 0.0" outputs "0.0"
+ instead of "0.0e+00". [ruby-dev:23480]
+
+ * numeric.c (flo_to_s): it's preferable that "p 0.00000000000000000001"
+ outputs "1.0e-20" instead of "9.999999999999999e-21". (the precision
+ is considered, but there is assumption DBL_DIG == 15 in current
+ implementation)
+
+Mon May 17 10:13:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (setup_domain_and_type): honor duck typing.
+ [ruby-dev:23522]
+
+ * ext/socket/socket.c (sock_s_getnameinfo): ditto.
+
+Mon May 17 01:15:23 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/yaml.rb: removed fallback to pure Ruby parser.
+
+ * lib/yaml/baseemitter.rb (indent_text): was forcing a mod value
+ of zero at times, which kept some blocks from getting indentation.
+
+ * lib/yaml/baseemitter.rb (node_text): rewriting folded scalars.
+
+ * ext/syck/syck.h: reports style of scalars now, be they plain, block
+ single-, or double-quoted.
+
+ * ext/syck/syck.c: ditto.
+
+ * ext/syck/gram.c: ditto.
+
+ * ext/syck/node.c: ditto.
+
+ * ext/syck/token.c: ditto.
+
+ * ext/syck/rubyext.c (yaml_org_handler): symbols loaded only
+ if scalar style is plain.
+
+ * ext/syck/rubyext.c (yaml_org_handler): some empty strings were
+ loaded as symbols.
+
+ * test/yaml/test_yaml.rb (test_perl_regexp): updated test to
+ match new regexp serialization.
+
+Mon May 17 00:03:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/drb/drb.rb: Cosmetic documentation changes.
+
+Sun May 16 22:36:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/test/unit.rb: Removed :nodoc: directive (it prevented effective
+ RDoc operation), and added file-level comment.
+
+Sun May 16 20:55:49 2004 Tanaka Akira <akr@m17n.org>
+
+ * ext/dbm/dbm.c (fdbm_initialize): accept optional 3rd argument to
+ specify an open flag.
+ (Init_dbm): define open flags: DBM::READER, DBM::WRITER, DBM::WRCREAT
+ and DBM::NEWDB.
+
+Sun May 16 13:10:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/test/unit/**/*.rb: Removed :nodoc: directives (many were
+ generating warnings, many were on private methods).
+
+Sat May 15 01:41:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): forgot to restore $SAFE value before evaluating
+ compiled node. [ruby-core:02872]
+
+Sat May 15 01:33:12 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each_func): terminates loop if generating value
+ is same to @end. [ruby-talk:100269]
+
+Fri May 14 22:08:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_new4): should not reuse frozen shared string if
+ the original is not an instance of String. [ruby-talk:100193]
+
+Fri May 14 18:39:25 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/canvas.rb: improve coords support for canvas items.
+ Now, supports all of the followings.
+ TkcLine.new(c, 0, 0, 100, 100, :fill=>'red')
+ TkcLine.new(c, [0, 0, 100, 100], :fill=>'red')
+ TkcLine.new(c, [0, 0], [100, 100], :fill=>'red')
+ TkcLine.new(c, [[0, 0], [100, 100]], :fill=>'red')
+ TkcLine.new(c, :coords=>[0, 0, 100, 100], :fill=>'red')
+ TkcLine.new(c, :coords=>[[0, 0], [100, 100]], :fill=>'red')
+
+Fri May 14 12:11:43 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * util.c (ruby_strtod): strtod("0", &end); => end should point '\0'.
+ [ruby-dev:23498]
+
+Thu May 13 15:47:30 2004 akira yamada <akira@ruby-lang.org>
+
+ * lib/net/telnet.rb (Net::Telnet::login): "options" can specify
+ regexps for login prompt and/or password prompt.
+
+Thu May 13 14:23:45 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * hash.c (delete_if_i): use st_delete_safe() (via
+ rb_hash_delete()) instead of returning ST_DELETE.
+ backport from HEAD. [ruby-dev:23487]
+
+Thu May 13 13:01:30 2004 akira yamada <akira@ruby-lang.org>
+
+ * lib/uri/mailto.rb (URI::MailTo::to_s): should include fragment.
+
+Thu May 13 11:04:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_pack): always add with null for 'Z'.
+
+ * pack.c (pack_unpack): terminated by null for 'Z'. [ruby-talk:98281]
+
+Wed May 12 19:59:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_type, check_sizeof): replace unusable characters.
+ [ruby-talk:99788]
+
+Wed May 12 17:41:42 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb (Resolv::DNS::Config): make it configurable without
+ external file such as /etc/resolv.conf.
+
+Wed May 12 14:37:27 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_x509name.c: attribute value of DC (short name of
+ domainComponent) should be IA5String.
+
+Wed May 12 13:20:19 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/composite.rb: improve configure methods (based on
+ the proposal of [ruby-talk:99671]).
+
+Wed May 12 11:51:08 2004 Dave Thomas <dave@pragprog.com>
+
+ * class.c (rb_obj_singleton_methods): fix rdoc
+
+Mon May 10 21:44:42 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/html_generator.rb: Change scheme for
+ looking up symbols in HTML generator.
+
+Mon May 10 16:45:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): warning during eval should not cause deadlock.
+ [ruby-talk:98651]
+
+ * eval.c (rb_eval): raise TypeError exception for superclass
+ mismatch. [ruby-list:39567]
+
+Mon May 10 12:11:37 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/html_generator.rb: Hack to search parents
+ for unqualified constant names.
+
+Mon May 10 12:11:37 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/html_generator.rb: Hack to search parents
+ for unqualified constant names.
+
+Sun May 9 22:37:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/net/ftp.rb: improved documentation
+ * lib/net/imap.rb: ditto
+ * lib/net/pop.rb: ditto
+ * lib/net/smtp.rb: ditto
+ * lib/net/telnet.rb: ditto
+
+Fri May 7 21:50:21 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_include): Allow
+ multiple arguments to 'include'
+
+Fri May 7 21:31:56 2004 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_list): Array() breaks pathes including "\n".
+ [ruby-core:02843]
+
+Fri May 7 11:25:53 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * util.c (ruby_strtod): "0.0000000000000000001" should be converted
+ to 1.0e-19 instead of 0.0. (leading zeros aren't significant digits)
+ [ruby-talk:99318] [ruby-dev:23465]
+
+Fri May 7 10:00:05 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tkutil.c (get_eval_string_core): bug fix. [ruby-dev:23466]
+
+Thu May 6 22:13:17 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve
+ hostname.
+
+Thu May 6 14:22:29 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb (to_yaml): added instance variable handling
+ for Ranges, Strings, Structs, Regexps.
+
+ * lib/yaml/rubytypes.rb (to_yaml_fold): new method for setting a
+ String's flow style.
+
+ * lib/yaml.rb (YAML::object_maker): now uses Object.allocate.
+
+ * ext/syck/gram.c: fixed transfer methods on structs, broke it
+ last commit.
+
+Thu May 6 11:40:28 2004 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (string): accept NIL.
+
+ * lib/net/imap.rb (body_type_basic): allow body-fields omissions.
+
+Thu May 6 01:59:04 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/generators/html_generator.rb (Generators::HtmlMethod::params):
+ Don't include the &block parameter if we have explicit
+ yield parameters.
+
+Wed May 5 03:40:29 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/ring.rb: use recv instead of recvfrom.
+
+Tue May 4 23:52:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/gserver.rb: documented
+
+Tue May 4 23:46:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/xmlrpc/README.txt: introduced for documentation purposes
+
+Mon May 3 09:47:24 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):
+ Fix parsing bug if yield called within 1 line block
+
+Sun May 2 01:04:38 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib, ext/tk: renewal Ruby/Tk
+
+Fri Apr 30 20:08:41 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * time.c (SIZEOF_TIME_T): support SIZEOF_TIME_T == SIZEOF_INT.
+
+Tue Apr 27 13:12:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): too many line trace call. (ruby-bugs PR#1320)
+
+Tue Apr 27 08:41:28 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb: passing Range tests.
+
+ * ext/syck/syck.h: version 0.44.
+
+ * ext/syck/gram.c: transfers no longer open an indentation.
+ fixed transfers which precede blocks.
+
+ * ext/syck/token.c: ditto.
+
+ * ext/syck/syck.c: fixed segfault if an anchor has been released already.
+
+ * ext/syck/node.c (syck_free_members): organized order of free'd nodes.
+
+ * ext/syck/rubyext.c (syck_emitter_write_m): test for proper string with
+ StringValue.
+
+Mon Apr 26 23:56:54 2004 Daniel Kelley <news-1082945587@dkelley.gmp.san-jose.ca.us>
+
+ * README.EXT, README.EXT.ja: fixed wrong function signature.
+ [ruby-talk:98349]
+
+Mon Apr 26 21:40:09 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/code_objects.rb (RDoc::Context::add_alias): Only alias
+ to instance methods.
+
+Sat Apr 24 10:38:31 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::group_lines):
+ Fix bug where consecutive headings are merged.
+
+Fri Apr 23 23:26:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: $hdrdir should not contain macros for backward
+ compatibility. [bruby-dev:28]
+
+ * version.c (ruby_show_copyright): obtain copyright year from
+ RUBY_RELEASE_YEAR.
+
+ * win32/resource.rb: ditto.
+
+ * win32/resource.rb: default rubyw icon to ruby.ico, and let DLL also
+ include them.
+
+ * win32/resource.rb: include winver.h for older WindowsCE.
+
+Fri Apr 23 16:38:46 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb: sync taint/freeze flag between
+ a pathname object and its internal string object.
+
+Fri Apr 23 14:52:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt, arg, aref_args): should not make sole splat into
+ array, in aref_args other than aref with op_asgn.
+
+Fri Apr 23 14:14:38 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb: don't use Regexp#source to embed regexps.
+ [ruby-dev:23432]
+
+Thu Apr 22 04:15:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (aref_args): should pass expanded list. [ruby-core:02793]
+
+Thu Apr 22 01:12:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_to_s): tweak output string based to preserve
+ decimal point and to remove trailing zeros. [ruby-talk:97891]
+
+ * string.c (rb_str_index_m): use unsigned comparison for T_FIXNUM
+ search. [ruby-talk:97342]
+
+Wed Apr 21 22:57:27 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/rinda.rb, test/rinda/test_rinda.rb: check Hash tuple size.
+
+Wed Apr 21 20:05:00 2004 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (URI::HTTP#proxy_open): set Host: field explicitly.
+ [ruby-list:39542]
+
+Mon Apr 19 18:11:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_equal): returns true if two hashes have same set
+ of key-value set. [ruby-talk:97559]
+
+ * hash.c (rb_hash_eql): returns true if two hashes are equal and
+ have same default values.
+
+Mon Apr 19 08:19:58 2004 Doug Kearns <djkea2@mugca.its.monash.edu.au>
+
+ * dln.c, io.c, lib/benchmark.rb, lib/cgi.rb, lib/csv.rb, lib/date.rb,
+ lib/ftools.rb, lib/getoptlong.rb, lib/logger.rb, lib/matrix.rb,
+ lib/monitor.rb, lib/set.rb, lib/thwait.rb, lib/timeout.rb,
+ lib/yaml.rb, lib/drb/drb.rb, lib/irb/workspace.rb, lib/net/ftp.rb,
+ lib/net/http.rb, lib/net/imap.rb, lib/net/telnet.rb,
+ lib/racc/parser.rb, lib/rinda/rinda.rb, lib/rinda/tuplespace.rb,
+ lib/shell/command-processor.rb, lib/soap/rpc/soaplet.rb,
+ lib/test/unit/testcase.rb, lib/test/unit/testsuite.rb: typo fix.
+
+Mon Apr 19 08:14:18 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Allow for
+ #ifdef HAVE_PROTOTYPES
+
+Fri Apr 16 22:33:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * ext/iconv/iconv.c: nearly finished RDoc comments.
+
+Fri Apr 16 17:04:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_equal): always returns true or false, never
+ returns nil. [ruby-dev:23404]
+
+Fri Apr 16 08:27:02 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: skip linking when libraries to be preloaded not
+ compiled. [ruby-list:39561]
+
+Thu Apr 15 23:21:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (pst_success_p): new method Process::Status#success?.
+ [ruby-dev:23385]
+
+Thu Apr 15 17:12:13 2004 Tanaka Akira <akr@m17n.org>
+
+ * ext/gdbm/gdbm.c (Init_gdbm): define GDBM::READER, GDBM::WRITER,
+ GDBM::WRCREAT and GDBM::NEWDB.
+ (fgdbm_initialize): use specified read/write flag.
+
+Wed Apr 14 11:29:56 2004 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * numeric.c (flo_eq): workaround for bcc32's bug.
+ (ruby-bugs-ja:PR#594)
+
+Wed Apr 14 13:06:35 2004 Doug Kearns <djkea2@mugca.its.monash.edu.au>
+
+ * array.c, enum.c, eval.c, file.c, io.c, numeric.c, object.c, prec.c,
+ process.c, re.c, string.c: typos in RDoc comments. [ruby-core:02783]
+
+Wed Apr 14 11:06:38 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::scan): Changed
+ behavior of :enddoc: -- it now unconditionally terminates
+ processing of the current file.
+
+Wed Apr 14 11:03:22 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * defines.h: include <net/socket.h> to get fd_set definition in BeOS.
+
+Tue Apr 13 23:06:30 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/rinda.rb: change pattern matching.
+ a === b -> a == b || a === b. [druby-ja:98]
+
+ * test/rinda/test_rinda.rb: ditto.
+
+Tue Apr 13 19:54:29 2004 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: should not overwrite HTTP request header.
+ [ruby-list:39543]
+
+Tue Apr 13 01:30:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * ext/iconv/iconv.c: RDoc documentation (from RD; nearly finished).
+ * ext/iconv/charset_alias.rb: Prevent from RDoc'ing.
+
+Mon Apr 12 19:11:29 2004 Eric Hodel <drbrain@segment7.net>
+
+ * gc.c (rb_gc_copy_finalizer): typo. [ruby-core:02774]
+
+Mon Apr 12 18:52:32 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_init_i): should return
+ a value.
+
+Mon Apr 12 10:43:47 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * dir.c (rb_glob2, rb_glob, rb_globi, push_globs, push_braces,
+ rb_push_glob): fix memory leak. (leaked when block was interrupted)
+
+Mon Apr 12 10:27:37 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+
+ * bcc32/Makefile.sub: backport SIZEOF_TIME_T definition from 1.9.
+
+ * win32/Makefile.sub: ditto.
+
+ * wince/Makefile.sub: ditto.
+
+Sun Apr 11 19:12:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (require_libraries): restore source file/line after
+ statically linked extensions initialized. [ruby-dev:23357]
+
+Sun Apr 11 10:47:04 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/code_objects.rb (RDoc::TopLevel::add_class_or_module): Toplevel
+ classes and modules are a special case too... (handle extending existing
+ classes with or without :enddoc:)
+
+Sat Apr 10 23:51:13 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/code_objects.rb (RDoc::Context::add_to): Implementation of :enddoc:
+ made one too many assumptions...
+
+Sat Apr 10 00:00:19 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/markup/simple_markup/inline.rb: Fix problem
+ with \_cat_<b>dog</b>
+
+Wed Apr 7 00:19:50 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/rinda.rb: fix hash tuple bug.
+
+ * lib/rinda/tuplespace.rb: ditto.
+
+ * test/rinda/test_rinda.rb
+
+Tue Apr 6 18:24:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_reopen): should use rb_io_check_io().
+
+Tue Apr 6 16:46:09 2004 Tanaka Akira <akr@m17n.org>
+
+ * configure.in: check the size of time_t.
+
+ * time.c (time_add): new function.
+ (time_plus): use time_add.
+ (time_minus): use time_add.
+
+Tue Apr 6 13:21:30 2004 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (make_hostent): must return value.
+
+Tue Apr 6 00:05:30 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/rinda.rb: add require 'drb/drb'
+
+Mon Apr 5 08:18:23 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/rdoc.rb: Remove leading ./ from file names so that cross
+ references work properly.
+
+Sun Apr 4 20:33:42 2004 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (Init_load): make $LOADED_FEATURES built-in.
+ [ruby-dev:23299]
+
+ * ruby.c (ruby_prog_init): make $PROGRAM_NAME built-in.
+
+ * lib/English.rb: remove $LOADED_FEATURES and $PROGRAM_NAME.
+
+Sun Apr 4 14:01:20 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/options.rb (Options::parse): Allow multiple -x options to RDoc.
+ Fix bug where files weren't being excluded properly
+
+Sat Apr 3 17:11:05 2004 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/syck.h: version 0.43.
+
+ * ext/syck/lib/gram.c: allow root-level inline collections.
+ [ruby-talk:94922]
+
+ * lib/yaml/rubytypes.rb (Symbol#to_yaml): emit symbols as implicits.
+ [ruby-talk:94930]
+
+ * ext/syck/bytecode.c: turn off default implicit typing.
+
+ * ext/syck/implicit.c: detect base60 integers.
+
+ * ext/syck/rubyext.c: handle base60, as well as hex and octal
+ with commas. implicit typing of ruby symbols.
+
+Fri Apr 2 17:27:17 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (top_include): include in the wrapped load is done for
+ the wrapper, not for a singleton class for wrapped main.
+ [ruby-dev:23305]
+
+Fri Apr 2 15:13:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): use temporary double variable to save the
+ result (internal float register may be bigger than 64 bits, for
+ example, 80 bits on x86). [ruby-dev:23311]
+
+Fri Apr 2 14:35:26 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): should generate unique identifier of the
+ pushing block. [ruby-talk:96363]
+
+Fri Apr 2 07:31:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (make_hostent): fix memory leak, based on
+ the patch from HORIKAWA Hisashi <vzw00011@nifty.ne.jp>.
- * gc.c (gc_mark_children): T_ICLASS objects only need to mark
- T_ICLASS::m_tbl if RICLASS_IS_ORIGIN is set.
+Thu Apr 1 22:55:33 2004 Dave Thomas <dave@pragprog.com>
- * gc.c (obj_memsize_of): count T_ICLASS if RICLASS_IS_ORIGIN is set.
+ * lib/rdoc/parsers/parse_rb.rb: Allow rdoc comments in
+ =begin rdoc/=end
- * internal.h (RCLASS_SET_ORIGIN): add to set RCLASS_SET_ORIGIN.
+ * lib/rdoc/parsers/parse_rb.rb: Fix problem with comment in
+ top-level method being taken as file comment.
- TODO: The word `origin' seems not good name. We need to invent
- another good name.
+Thu Apr 1 22:55:04 2004 Dave Thomas <dave@pragprog.com>
- * class.c: use RCLASS_SET_ORIGIN().
+ * lib/rdoc/ri/ri_options.rb: Fix undefined variable warning.
- * class.c (class_alloc): zero clear rb_classext_t.
+Thu Apr 1 19:58:37 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Wed Mar 11 13:28:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/soap/mapping/{factory.rb,registry.rb}: fixed illegal mapped URI
+ object with soap/marshal.
+ added URIFactory class for URI mapping. BasetypeFactory checks
+ instance_variables when original mapping is not allowed (ivar must
+ be empty). Instance of URI have instance_variables but it must be
+ llowed whenever original mapping is allowed or not.
- * configure.in: check also procstat_getvmmap, which is not
- available on FreeBSD 9. [ruby-core:68468] [Bug #10954]
+ * lib/xsd/datatypes.rb: check the smallest positive non-zero
+ single-precision float exactly instead of packing with "f".
+ [ruby-talk:88822]
- * vm_dump.c (procstat_vm): use kinfo_getvmmap instead if
- procstat_getvmmap is not available.
+ * lib/soap/mapping/rubytypeFactory.rb: should not dump singleton class.
+ [ruby-dev:22588]
+ c = class << Object.new; class C; self; end; end; SOAPMarshal.dump(c)
-Wed Mar 11 09:15:21 2015 Koichi Sasada <ko1@atdot.net>
+Wed Mar 31 19:06:23 2004 Tanaka Akira <akr@m17n.org>
- * internal.h: define struct MEMO.
+ * time.c (year_leap_p): new function.
+ (timegm_noleapsecond): ditto.
+ (search_time_t): use timegm_noleapsecond instead of
+ mktime for first guess.
- * enum.c: use MEMO.
+Wed Mar 31 12:04:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * enumerator.c: ditto.
+ * lib/delegate.rb (DelegateClass): define internal methods of the
+ result class, but not metaclass of the caller. [ruby-talk:96156]
- * load.c: ditto.
+ * intern.h: provide proper prototypes. [ruby-core:02724]
- * node.h: return (struct MEMO *) pointer.
+ * ruby.h: missing.h is now prerequisite to intern.h.
-Wed Mar 11 06:26:21 2015 Koichi Sasada <ko1@atdot.net>
+Tue Mar 30 20:25:34 2004 Tanaka Akira <akr@m17n.org>
- * vm_insnhelper.h (THROW_DATA_STATE): return int, not VALUE.
+ * time.c (search_time_t): limit guess range by mktime if it is
+ available. [ruby-dev:23274]
- * vm_insnhelper.h (THROW_DATA_STATE_SET): accept int value.
+Sun Mar 28 14:16:59 2004 Minero Aoki <aamine@loveruby.net>
-Wed Mar 11 05:06:46 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/net/pop.rb (auth): failed when account/password include "%".
+ [ruby-talk:95933]
- * vm_eval.c (rb_catch_protect): use THROW_DATA_VAL().
+Sat Mar 27 21:40:41 2004 Tanaka Akira <akr@m17n.org>
-Wed Mar 11 04:56:04 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/open-uri.rb: permit extra semicolon in content-type field.
- * vm_insnhelper.h: define struct IFUNC.
+Sat Mar 27 10:40:48 2004 Tanaka Akira <akr@m17n.org>
- * vm_eval.c (rb_iterate): use it.
+ * (lib/pp.rb, lib/prettyprint.rb): define seplist in PP::PPMethods
+ instead of PrettyPrint.
- * vm_insnhelper.c (vm_yield_with_cfunc): ditto.
+Thu Mar 25 23:28:52 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Mar 11 03:52:12 2015 Koichi Sasada <ko1@atdot.net>
+ * time.c (time_overflow_p): backport 1.9 usec overflow function.
+ (ruby-bugs PR#1307)
- * eval_intern.h (THROW_DATA_P): use RB_TYPE_P() instead of
- BUILTIN_TYPE().
+Thu Mar 25 23:15:24 2004 Dave Thomas <dave@pragprog.com>
- * thread.c (thread_join): use THROW_DATA_P().
+ * lib/rdoc/ri/ri_options.rb (RI::Options::show_version):
+ Add --version option
-Wed Mar 11 03:48:01 2015 Koichi Sasada <ko1@atdot.net>
+Thu Mar 25 04:16:18 2004 Dave Thomas <dave@pragprog.com>
- * proc.c: use RUBY_VM_IFUNC_P() to recognize IFUNC or not.
+ * lib/rdoc/ri/ri_options.rb (RI::Options): Add the --list-names option,
+ which dumps our all known names
- * vm.c: ditto.
+Thu Mar 25 03:57:47 2004 Dave Thomas <dave@pragprog.com>
- * vm_dump.c: ditto.
+ * lib/rdoc/ri/ri_util.rb (NameDescriptor::initialize): No longer
+ allow nested classes to be designated using "."--you must
+ now use "::"
- * vm_insnhelper.c: ditto.
+Thu Mar 25 02:00:18 2004 Dave Thomas <dave@pragprog.com>
- * vm_core.h (RUBY_VM_IFUNC_P): use RB_TYPE_P() instead of
- BUILTIN_TYPE().
+ * lib/rdoc/generators/template/html/one_page_html.rb (Page):
+ Fix to work with C modules.
-Wed Mar 11 03:21:37 2015 Koichi Sasada <ko1@atdot.net>
+Wed Mar 24 21:17:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * vm_insnhelper.h: define struct THROW_DATA to represent
- throwing data. Also define accessor functions.
+ * lib/uri.rb: Documented (thanks Dmitry V. Sabanin).
+ * lib/uri/common.rb: Ditto.
+ * lib/uri/ftp.rb: Ditto.
+ * lib/uri/generic.rb: Ditto.
+ * lib/uri/http.rb: Ditto.
+ * lib/uri/https.rb: Ditto.
+ * lib/uri/ldap.rb: Ditto.
+ * lib/uri/mailto.rb: Ditto.
+ (All backported from 1.9)
- * eval_intern.h: move related changes into vm_insnhelper.h.
- Now these MACROs (functions) are only used in vm*.c.
+Wed Mar 24 18:48:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- There is only THROW_DATA_P(err) to check this data type or not.
+ * lib/mkmf.rb ($ruby, $topdir, $hdrdir): should not be affected by
+ DESTDIR after installed.
- * vm.c: catch up these changes.
+ * lib/mkmf.rb (RUBY): / is not recognized as path separator on
+ nmake/bmake. [ruby-list:39388]
- * vm_eval.c: ditto.
+ * lib/mkmf.rb (init_mkmf): $INCFLAGS also should be lazy-evaluated.
- * vm_insnhelper.c: ditto.
+Wed Mar 24 12:32:56 2004 Dave Thomas <dave@pragprog.com>
-Wed Mar 11 00:57:00 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_class_module):
+ Don't document methods if we don't know for sure the
+ class or module.
- * test/rubygems/test_gem_security_trust_dir.rb: The return value of
- File::Stat#mode is OS dependent. In AIX, 0200000 is set.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
+ Don't store documentation for singleton classes if we
+ don't know the real class.
-Tue Mar 10 20:03:41 2015 Tanaka Akira <akr@fsij.org>
+Wed Mar 24 11:11:26 2004 Dave Thomas <dave@pragprog.com>
- * lib/webrick/server.rb: Invoke setup_shutdown_pipe in start method
- instead of listen method.
- [ruby-core:68476] [Bug #10956] Reported by Shintaro Kojima.
+ * lib/rdoc/generators/html_generator.rb (Generators::HTMLGenerator::load_html_template):
+ Allow non-RDoc templates by putting a slash in the template name
-Tue Mar 10 17:27:27 2015 Koichi Sasada <ko1@atdot.net>
+Mon Mar 22 16:19:57 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * thread.c (thread_join): Fixnum (except TAG_FATAL) and
- NODE should not be reached here.
+ * ruby.1: add -width option to .Bl for old groff.
-Mon Mar 9 21:42:10 2015 Koichi Sasada <ko1@atdot.net>
+Sun Mar 21 21:11:16 2004 Keiju Ishitsuka <keiju@ishitsuka.com>
- * vm_insnhelper.c (ep_cref): rename to lep_cref() because it should be
- local ep.
+ * lib/shell/*: bug fix for Shell#system(command_line_string).
-Mon Mar 9 16:34:36 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Mar 20 20:57:10 2004 David Black <dblack@wobblini.net>
- * ext/stringio/stringio.c (strio_close): don't raise on double
- close for consistent to IO#close.
+ * lib/scanf.rb: Backported 1.9 branch
+ modifications/corrections to 1.8 branch
-Mon Mar 09 06:44:48 2015 Koichi Sasada <ko1@atdot.net>
+Sat Mar 20 23:51:03 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * vm_insnhelper.h: define struct SVAR for SVAR.
- This data type is also same layout of NODE (NODE_IF).
+ * eval.c (rb_require_safe): preserve old ruby_errinfo.
+ [ruby-talk:95409]
- * vm_insnhelper.c: catch up this change.
+ * eval.c (rb_f_raise): should not clear backtrace information if
+ exception object already have one.
-Mon Mar 9 06:43:21 2015 Koichi Sasada <ko1@atdot.net>
+Sat Mar 20 15:25:36 2004 Dave Thomas <dave@pragprog.com>
- * vm_insnhelper.c (lep_svar_set): add WBs.
+ * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Force
+ page background to white.
-Mon Mar 9 06:19:06 2015 Koichi Sasada <ko1@atdot.net>
+Sat Mar 20 09:52:33 2004 Tadayoshi Funaba <tadf@dotrb.org>
- * internal.h: define rb_cref_t and change to use it.
+ * lib/date.rb, lib/date/format.rb: _parse() now accepts fractional
+ part of second minute that follows a comma or a full stop.
- rb_cref_t is data type of CREF. Now, the body is still NODE.
- It is easy to understand what is CREF and what is pure NODE.
+Fri Mar 19 01:55:57 2004 Mauricio Fernandez <batsman.geo@yahoo.com>
-Mon Mar 9 06:00:37 2015 Koichi Sasada <ko1@atdot.net>
+ * io.c (rb_io_sync): need not to check writable. [ruby-core:02674]
- * vm_insnhelper.h (COPY_CREF_OMOD): fix translation miss.
+Thu Mar 18 21:44:38 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Mon Mar 9 04:47:58 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/drb/drb.rb: backport drb.rb 1.16.
- * internal.h: define CREF accessor macros.
- * CREF_CLASS(cref)
- * CREF_NEXT(cref)
- * CREF_VISI(cref)
- * CREF_VISI_SET(cref, v)
- * CREF_REFINEMENTS(cref)
- * CREF_PUSHED_BY_EVAL(cref)
- * CREF_PUSHED_BY_EVAL_SET(cref)
- * CREF_OMOD_SHARED(cref)
- * CREF_OMOD_SHARED_SET(cref)
- * CREF_OMOD_SHARED_UNSET(cref)
+Fri Mar 18 17:49:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
- This is process to change CREF data type from NODE.
+ * struct.c (make_struct): allow const_id for accessor names.
+ [ruby-core:04585]
-Sun Mar 8 22:50:57 2015 Tanaka Akira <akr@fsij.org>
+ * eval.c (rb_attr): check if attribute name is local_id or
+ const_id.
- * ext/zlib/zlib.c (rb_gzfile_close): Don't raise on double
- close for consistent to IO#close.
+Thu Mar 18 16:22:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Mar 8 16:57:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (proc_eq): avoid false positive by using scope and
+ dyna_vars. no longer use frame.uniq.
- * dir.c (glob_helper): match patterns against legacy short names
- too, not only ordinary names. [ruby-core:67954] [Bug #10819]
+Wed Mar 17 14:44:43 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * win32/dir.h (struct direct): add short name members.
+ * dir.c (range): fix possible "\0" overrun. (in case of "\0-")
- * win32/win32.c (opendir_internal, readdir_internal): ditto.
+Mon Mar 15 07:39:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Mar 7 09:36:05 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * eval.c (rb_yield_0): should not re-submit TAG_BREAK if this
+ yield is not break destination. [ruby-dev:23197]
- * array.c: document that first element is kept when using
- Array#uniq and #uniq! [fix GH-845][ci skip]
- Patch by @riffraff
+Sat Mar 13 14:28:16 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Sat Mar 7 09:28:02 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * test/drb/test_drbssl.rb: rescue LoadError. (Barkport from main
+ trunk)
- * thread.c: Mutex#owned? is no longer experimental since 2.1.0
- [fix GH-839][ci skip] Patch by @takiy33
+ * test/drb/test_drbunix.rb: ditto.
-Sat Mar 7 09:18:42 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Wed Mar 10 22:28:09 2004 Minero Aoki <aamine@loveruby.net>
- * tool/merger.rb: Added documentation to version method.
- [fix GH-847][ci skip] Patch by @magikid
+ * lib/fileutils.rb (remove_dir): should handle symlink correctly.
+ This patch is contributed by Christian Loew. [ruby-talk:94635]
+ (Backport from main trunk)
-Fri Mar 6 22:50:36 2015 Koichi Sasada <ko1@atdot.net>
+Wed Mar 10 16:28:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * class.c (rb_prepend_module): need a WB for klass -> origin.
+ * eval.c (return_jump): set return value to the return
+ destination. separated from localjump_destination().
-Fri Mar 6 20:18:38 2015 Koichi Sasada <ko1@atdot.net>
+ * eval.c (break_jump): break innermost loop (or thread or proc).
- * fix namespace issue on singleton class expressions. [Bug #10943]
+ * eval.c (rb_yield_0): set exit_value for block break.
- * vm_core.h, method.h: remove rb_iseq_t::cref_stack. CREF is stored
- to rb_method_definition_t::body.iseq_body.cref.
+Wed Mar 10 15:58:43 2004 Ryan Davis <ryand@zenspider.com>
- * vm_insnhelper.c: modify SVAR usage.
- When calling ISEQ type method, push CREF information onto method
- frame, SVAR located place. Before this fix, SVAR is simply nil.
- After this patch, CREF (or NULL == Qfalse for not iseq methods)
- is stored at the method invocation.
+ * eval.c (eval): Only print backtrace if generating the backtrace
+ doesn't generate an exception. [ruby-core:02621]
- When SVAR is required, then put NODE_IF onto SVAR location,
- and NDOE_IF::nd_reserved points CREF itself.
+Tue Mar 9 13:04:26 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm.c (vm_cref_new, vm_cref_dump, vm_cref_new_toplevel): added.
+ * io.c (rb_io_ungetc): raise IOError instead of calling
+ rb_sys_fail(). [ruby-talk:23181]
- * vm_insnhelper.c (vm_push_frame): accept CREF.
+Mon Mar 8 19:32:28 2004 akira yamada <akira@ruby-lang.org>
- * method.h, vm_method.c (rb_add_method_iseq): added. This function
- accepts iseq and CREF.
+ * lib/uri/common.rb (URI::REGEXP::PATTERN::HOSTPORT): (?:#{PORT})
+ -> (?::#{PORT}). [ruby-dev:23170]
- * class.c (clone_method): use rb_add_method_iseq().
+Mon Mar 8 15:31:41 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * gc.c (mark_method_entry): mark method_entry::body.iseq_body.cref.
+ * dir.c (range): treat incomplete '[' as ordinary character (like
+ has_magic does).
- * iseq.c: remove CREF related codes.
+ * dir.c (range): Cancel above change. More discussion is needed.
- * insns.def (getinlinecache/setinlinecache): CREF should be cache key
- because a different CREF has a different namespace.
+Sun Mar 7 22:37:46 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * node.c (rb_gc_mark_node): mark NODE_IF::nd_reserved for SVAR.
+ * test/drb/ut_drb.rb: use 'druby://localhost:0'. [ruby-dev:23078]
- * proc.c: catch up changes.
+ * test/drb/ut_eval.rb: ditto.
- * struct.c: ditto.
+ * test/drb/ut_large.rb: ditto.
- * insns.def: ditto.
+ * test/drb/ut_safe1.rb: ditto.
- * vm_args.c (raise_argument_error): ditto.
+ * test/drb/ut_drb_drbssl.rb: use 'drbssl://localhost:0'.
- * vm_eval.c: ditto.
+Sun Mar 7 16:22:26 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/ruby/test_class.rb: add a test.
+ * Makefile.in (lex.c): use $? instead of $<.
-Fri Mar 6 18:19:13 2015 Koichi Sasada <ko1@atdot.net>
+Fri Mar 5 00:54:14 2004 Dave Thomas <dave@pragprog.com>
- * test/webrick/test_filehandler.rb: on vboxsf (on VirtualBox
- on Windows 7), file name and permissions are strange (can access
- by short file name and so on).
+ * lib/test/unit.rb: MOve RDoc documentation so that you can
+ now say 'ri Test::Unit'
- Simply skip on such tests on such FS. To detect strange FS, this
- patch use a part of code `File.executable?(__FILE__)`.
- Please correct them if there are better ways.
+Tue Mar 2 12:32:59 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Mar 6 17:31:29 2015 Koichi Sasada <ko1@atdot.net>
+ * win32/Makefile.sub, wince/Makefile.sub (config.h): shouldn't check
+ defined? NORETURN. [ruby-dev:23100]
- * test/ruby/test_beginendblock.rb: do not change directory.
+Mon Mar 1 12:24:10 2004 Dave Thomas <dave@pragprog.com>
- Run system command in the directory mounted by vboxsf on Windows 7
- and get warning like that "warning: Insecure world writable dir...".
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_alias):
+ Allow aliases to have parentheses
-Fri Mar 6 10:31:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Feb 29 23:14:53 2004 Dave Thomas <dave@pragprog.com>
- * vm_eval.c (vm_call_super): search next super class from the
- original class, to get rid of infinite recursion with
- prepending. a patch by Seiei Higa <hanachin AT gmail.com> at
- [ruby-core:68434]. [ruby-core:68093] [Bug #10847]
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
+ Handle :nodoc: on singleton classes.
-Fri Mar 6 08:45:26 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+Sat Feb 28 10:58:49 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * lib/matrix.rb: Add Vector#round. Patch by Jordan Stephens.
- [Fixes GH-802]
+ * MANIFEST: add test_erb.rb
-Fri Mar 6 07:33:03 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/erb.rb, test/erb/test_erb.rb: don't forget filename,
+ if both filename and safe_level given. [ruby-dev:23050]
- * gc.c (obj_info): show node name too.
+Fri Feb 27 01:00:09 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Fri Mar 6 07:00:44 2015 Koichi Sasada <ko1@atdot.net>
+ * lib/drb/drb.rb, test/drb/drbtest.rb: require drb/eq.rb by default
- * internal.h: remove struct method_table_wrapper.
- struct method_table_wrapper was introduced to avoid duplicate marking
- for method tables.
+Wed Feb 25 21:16:25 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- For example, `module M1; def foo; end; end` make one method table
- (mtbl) contains a method `foo`. M1 (T_MODULE) points mtbl.
- Classes C1 and C2 includes M1, then two T_ICLASS objects are created
- and they points mtbl too. In this case, three objects (one T_MODULE
- and two T_ICLASS objects) points same mtbl. On marking phase, these
- three objects mark same mtbl. To avoid such duplication, struct
- method_table_wrapper was introduced.
+ * instruby.rb (with_destdir): should return the given argument if no
+ DESTDIR is given.
- However, created two T_ICLASS objects have same or shorter lifetime
- than M1 (T_MODULE) object. So that we only need to mark mtbl from M1,
- not from T_ICLASS objects. This patch tries marking only from M1.
- In other words, original module (M1) has responsibility to mark mtbl.
- Because of no duplicate marking, we don't need method_table_wrapper
- any more.
+ * instruby.rb: use path name expansion of cmd.exe.
- Note that one `Module#prepend` call creates two T_ICLASS objects.
- One for referring to a prepending Module object, same as
- `Module#include`. We don't need to care this T_ICLASS.
- One for moving original mtbl from a prepending class. We need to
- mark such mtbl from this T_ICLASS object. To mark the mtbl,
- we need to use `RCLASS_ORIGIN(klass)` on marking from a prepended
- class `klass`.
+Wed Feb 25 09:35:22 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * class.c: ditto.
+ * error.c (NameError::Message): new class for lazy evaluation of
+ message to ensure replaced before marshalling. merge from HEAD.
+ (ruby-bugs-ja:PR#588)
- * eval.c (rb_using_refinement): ditto.
+ * eval.c (rb_method_missing): use NameError::Message. merge from
+ HEAD. (ruby-bugs-ja:PR#588)
- * gc.c: ditto.
+Tue Feb 24 18:59:37 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * include/ruby/ruby.h: define m_tbl directly. The definition of
- struct RClass should be moved to (srcdir)/internal.h.
+ * dir.c (glob_helper): '**/' should not match leading period
+ unless File::FNM_DOTMATCH is set. (like '*/') [ruby-dev:23014]
- * method.h: remove decl of rb_free_m_tbl_wrapper().
+Tue Feb 24 13:22:21 2004 Dave Thomas <dave@pragprog.com>
- * object.c: use RCLASS_M_TBL() directly.
+ * lib/rdoc/rdoc.rb (RDoc::RDoc::normalized_file_list): Attempt to get better
+ heuristics on which files to include and exclude. Now only include
+ non-standard files if they are explicitly named in ARGV.
-Fri Mar 6 02:50:12 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Tue Feb 24 07:23:30 2004 Dave Thomas <dave@pragprog.com>
- * dir.c (replace_real_basename): need to check the return value of
- GLOB_REALLOC().
+ * lib/rdoc/generators/html_generator.rb: Deal with :stopdoc: when
+ choosing a default main page to display (ie. don't select a page
+ if we don't have documentation for it).
-Fri Mar 6 02:26:03 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Tue Feb 24 06:40:14 2004 Dave Thomas <dave@pragprog.com>
- * dir.c (replace_real_basename): shouldn't create Ruby object before
- the object system is loaded.
- [ruby-core:68430] [Bug #10941]
+ * lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_identifier): Handle
+ class variables in code listings
-Wed Mar 5 16:58:43 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Tue Feb 24 06:40:14 2004 Dave Thomas <dave@pragprog.com>
- * hash.c: [DOC] #delete method actually returns nil, if the key
- is not found. [fix GH-844][ci skip] Patch by @ivdma
+ * lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_identifier): Handle
+ class variables in code listings
-Wed Mar 5 12:22:23 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Tue Feb 24 06:32:27 2004 Dave Thomas <dave@pragprog.com>
- * math.c: refactoring: remove unnecessary variable d0 to unify code
- appearance.
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_aliases): Handle
+ aliases in C files.
-Thu Mar 5 11:50:54 2015 Shugo Maeda <shugo@ruby-lang.org>
+Tue Feb 24 06:16:22 2004 Dave Thomas <dave@pragprog.com>
- * vm_eval.c (eval_string_with_cref): A binding should keep
- refinements activation information and the refinements should be
- activated in subsequent eval calls with the binding.
- [ruby-core:67945] [Bug #10818]
+ * lib/rdoc/rdoc.rb (RDoc::RDoc::document): Now create op dir _before_
+ parsing files.
-Thu Mar 5 11:16:55 2015 Shugo Maeda <shugo@ruby-lang.org>
+Tue Feb 24 06:08:47 2004 Dave Thomas <dave@pragprog.com>
- * test/ruby/test_refinement.rb: There is no need anymore to suppress
- warnings.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_constant):
+ Start collecting text of constant values earlier: was missing
+ values in output if there was no space after '='
-Thu Mar 5 08:31:02 2015 Rei Odaira <Rei.Odaira@gmail.com>
+Tue Feb 24 06:08:25 2004 Dave Thomas <dave@pragprog.com>
- * random.c (random_raw_seed): Avoid calling fill_random_bytes()
- if the requested size is 0. AIX returns -1 for 0-byte read from
- /dev/urandom, while other UNIX returns 0. With this change,
- Random.raw_seed(0) consistently returns "" in any UNIX.
+ * lib/rdoc/generators/html_generator.rb: Escape contant values.
-Wed Mar 4 12:43:32 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Tue Feb 24 03:45:06 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * test/ruby/test_math.rb (assert_float_and_int): Refactor test cases
- by introducing assert_float_and_int. [misc #10810]
+ * ext/openssl/ossl_config.c (ossl_config_each): add new method
+ OpenSSL::Config#each. it iterates with section name, field name
+ and value.
-Wed Mar 4 11:52:30 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_config.c (Init_ossl_config): include Enumerable.
- * symbol.c (Init_sym): make dsym_fstrs a hash compared by identity
- as the keys are unique fstrings, to get rid of running hash and
- compare methods and causing new object allocation during garbage
- collection phase. [ruby-dev:48891] [Bug #10933]
+Mon Feb 23 09:16:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 4 10:16:57 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * instruby.rb (DOSISH): embedded path in batch files should not be
+ prefixed by DESTDIR. [ruby-core:02186]
- * enum.c: Fix typo in slice_after's exception message.
- [fix GH-842][ci skip] Patch by @jsyeo
+Sun Feb 22 09:54:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-Wed Mar 4 10:15:37 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * re.c: corrected documentation format (again)
- * doc/syntax/methods.rdoc: add some missing spaces and
- fix a grammatical error in method docs.
- [fix GH-843][ci skip] Patch by @nikolas
+Sun Feb 22 09:43:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-Wed Mar 4 02:13:06 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * re.c: corrected documentation format (rb_reg_initialize_m)
- * tool/redmine-backporter.rb (backport_command_string): pick up only
- when the revision exists in trunk.
+Sat Feb 21 22:36:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-Wed Mar 4 00:44:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/zlib/zlib.c: documented, but needs more effort.
- * thread.c (rb_thread_io_blocking_region): assigned variables
- inside EXEC_TAG() should be volatile.
+Sat Feb 21 11:12:15 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread.c (rb_thread_s_handle_interrupt): ditto.
+ * missing/os2.c, missing/x68.c: typo fix. pointed out by greentea.
- * thread.c (exec_recursive): ditto.
+Fri Feb 20 18:59:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Mar 4 00:29:18 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/irb/init.rb (IRB::IRB.parse_opts): add -I option to
+ irb. [ruby-dev:39243]
- * tool/redmine-backporter.rb: now can specify shorten form of commands.
+Thu Feb 19 23:24:16 2004 Dave Thomas <dave@pragprog.com>
-Tue Mar 3 23:41:42 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rdoc/generators/html_generator.rb (Generators::HtmlClass::build_attribute_list):
+ Support visibility modifiers for attributes
- * tool/redmine-backporter.rb (Readline.readline): drop untreated control
- characters.
+Thu Feb 19 23:24:16 2004 Dave Thomas <dave@pragprog.com>
-Tue Mar 3 22:25:24 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rdoc/generators/html_generator.rb (Generators::HtmlClass::build_attribute_list):
+ Support visibility modifiers for attributes
- * test/lib/envutil.rb (EnvUtil.invoke_ruby): need to rescue because
- Signal.signame may raise exception.
+Thu Feb 19 22:39:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Tue Mar 3 16:57:39 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * test/rinda/test_rinda.rb: DRb.start_service only once in testsuites.
+ DRb.start_service could handle this.
- * tool/redmine-backporter.rb: use 'b' instead of 's' for showing
- Backport options for merger.rb.
+Thu Feb 19 22:19:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-Tue Mar 3 16:55:23 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/ostruct.rb: documented
- * tool/redmine-backporter.rb: show selected ticket number at prompt.
+Thu Feb 19 21:28:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-Tue Mar 3 14:47:30 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * ext/strscan/strscan.c: improved documentation
- * math.c (num2dbl_with_to_f): direct casting from Rational to double.
- [Feature #10909]
+Thu Feb 19 03:10:52 2004 Minero Aoki <aamine@loveruby.net>
- * test/ruby/test_math.rb: add tests for the above change.
+ * ext/strscan/strscan.c: synchronized with main trunk (rev 1.11).
-Tue Mar 3 07:52:20 2015 Rei Odaira <Rei.Odaira@gmail.com>
+Thu Feb 19 02:30:34 2004 Minero Aoki <aamine@loveruby.net>
- * test/ruby/test_symbol.rb: avoid a false positive in AIX.
+ * ext/strscan/strscan.c: documentation checked.
-Tue Mar 3 00:59:39 2015 Naohisa Goto <ngotogenome@gmail.com>
+Thu Feb 19 00:11:05 2004 Dave Thomas <dave@pragprog.com>
- * configure.in: set PRELOADENV in Solaris to avoid "wrong ELF class"
- error. [Bug #10926] [ruby-dev:48888]
- * configure.in: set LIBPATHENV for 32-bit compile in Solaris
- in addition to 64-bit.
+ * lib/rdoc/markup/simple_markup/preprocess.rb (SM::PreProcess::handle):
+ Strip extraneous space from filenames in :include:
-Mon Mar 2 15:36:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 18 22:52:00 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * configure.in: do not check _setjmp unless _longjmp is available,
- so that configure results will not be changed by cache.
+ * lib/drb/unix.rb: remove O_NONBLOCK, thanks \ay
-Mon Mar 2 14:44:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 18 22:47:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * configure.in (RUBY_REPLACE_TYPE): restore unsigned type from
- cached variable only if the target type is not available.
+ * ext/strscan/strscan.c: documented
-Mon Mar 2 13:04:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 18 22:03:11 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * signal.c (sig_signame): return nil if the argument is a valid
- signal number.
+ * test/*: should not depend on $KCODE.
-Mon Mar 2 12:05:04 2015 Naohisa Goto <ngotogenome@gmail.com>
+Wed Feb 18 17:18:01 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/net/ftp/test_ftp.rb (create_ftp_server): set SO_OOBINLINE
- for receiving OOB data which is sent with MSG_OOB flag in
- portable way. [Bug #10915] [ruby-dev:48885]
- * test/net/ftp/test_ftp.rb (test_abort, test_status): use gets
- for receiving OOB data in portable way.
+ * ext/win32ole/win32ole.c: need to include <olectl.h> on Cygwin.
-Mon Mar 2 11:43:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 18 10:40:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * configure.in (RUBY_REPLACE_TYPE): restore unsigned type from
- cached variable.
+ * sprintf.c (rb_f_sprintf): do not prepend dots for negative
+ numbers if FZERO is specified. [ruby-list:39218]
-Mon Mar 2 06:01:41 2015 Eric Wong <e@80x24.org>
+Tue Feb 17 23:40:34 2004 Guy Decoux <ts@moulon.inra.fr>
- * ext/io/wait/wait.c (io_nread): wrap return value with INT2FIX
- Thanks to Yura Sokolov <funny.falcon@gmail.com>
- [ruby-core:68369] [Bug#10923]
- * test/io/wait/test_io_wait.rb (test_nread_buffered):
- fix broken test
+ * sprintf.c (rb_f_sprintf): preserve original val for
+ format_integer. [ruby-talk:92975]
-Sun Mar 1 20:21:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Feb 17 23:28:45 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * configure.in (RUBY_REPLACE_TYPE): restore convertible type from
- cached variable, so that configured results will be stable.
+ * test/ruby/marshaltestlib.rb: common marshal testcase added.
-Sun Mar 1 18:10:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_marshal.rb: use above testsuite.
- * configure.in (rb_cv_broken_memmem): check before adding the
- result HAVE_MEMMEM macro to confdefs.h, so that configured
- results will be stable.
+ * test/soap/marshal/test_marshal.rb: ditto.
-Sun Mar 1 11:17:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/soap/marshal/cmarshal.rb: removed (not used).
- * gc.c (id2ref): prohibit from accessing internal objects.
- [ruby-core:68348] [Bug #10918]
+Tue Feb 17 10:51:23 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Mar 1 09:06:11 2015 Tanaka Akira <akr@fsij.org>
+ * ext/syck/rubyext.c (syck_emitter_end_object): takes only one arg.
- * lib/time.rb (strptime): Support %s.%N.
- [ruby-core:68301] [Bug #10904] Patch by Sadayuki Furuhashi.
+Tue Feb 17 01:35:28 2004 Tanaka Akira <akr@m17n.org>
-Sat Feb 28 17:18:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_eval): care that another thread replace NODE_DREGX_ONCE
+ to NODE_LIT. [ruby-dev:22920]
- * enum.c (enum_each_slice, enum_each_cons): limit elements size by
- the enumerator size. suggested by Hans Mackowiak <hanmac AT
- gmx.de> at [ruby-core:68335]
+Tue Feb 17 01:24:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 28 15:44:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bcc32/Makefile.sub, win32/Makefile.sub (config.h): define
+ STACK_GROW_DIRECTION. [ruby-dev:22910]
- * vm_dump.c (rb_vm_bugreport): get rid of making new strings
- inside signal context.
+ * bcc32/Makefile.sub (config.h): add newer checks.
- * variable.c (rb_tmp_class_path): defer making temporary class
- path string.
+ * wince/Makefile.sub (config.h): define NEED_IO_SEEK_BETWEEN_RW.
- * variable.c (rb_search_class_path): search class path or return
- Qnil or Qfalse if unnamed, not creating a temporary path.
+Tue Feb 17 00:38:10 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Sat Feb 28 15:02:02 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rinda/tuplespace.rb: TupleSpace#initialize, stop doubling timeout
- * variable.c (rb_tmp_class_path): preserve name encoding of an
- anonymous instance of module/class subclass.
+Tue Feb 17 00:18:03 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Sat Feb 28 08:24:30 2015 Rei Odaira <Rei.Odaira@gmail.com>
+ * test/rinda/test_rinda.rb: import test_rinda.rb
- * ext/pty/pty.c: AIX supports autopush.
- Patch by Perry Smith [ruby-core:58539] [Bug #9144]
+Tue Feb 17 00:14:30 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Fri Feb 27 22:00:05 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * bcc32/Makefile.sub: avoid warning "Redefinition of macro
+ 'HAVE_GETLOGIN'".
- * lib/rubygems: Update to RubyGems 2.4.6 and HEAD(800f2e6).
- Fixed #1159, #1171, #1173 on rubygems/rubygems
- * test/rubygems: ditto.
+ * vms/config.h_in: ditto.
-Fri Feb 27 20:55:42 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Feb 16 23:28:14 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * lib/rake: Update to rake (9237e74), typo fix and remove needless
- private syntax.
- * test/rake: ditto.
+ * lib/csv.rb: document reduction. [ruby-core:02429]
-Fri Feb 27 17:06:44 2015 Koichi Sasada <ko1@atdot.net>
+Mon Feb 16 22:08:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * vm_core.h: define vm_svar_index.
+ * lib/generator.rb: corrected doc format
+ * lib/rinda/rinda.rb: added documentation (from Hugh Sasse)
+ * lib/rinda/tuplespace.rb: ditto
- * vm_insnhelper.c, vm.c, compile.c: use vm_svar_index names.
+Mon Feb 16 20:41:32 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * iseq.h: remove DEFAULT_SPECIAL_VAR_COUNT.
- use VM_SVAR_FLIPFLOP_START instead.
+ * bcc32/Makefile.sub: show more warnings. (refering to mingw)
-Fri Feb 27 13:57:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bcc32/setup.mak: ditto.
- * io.c (setup_narg): wipe away expanded part of buffer to get rid
- of revealing uncleaned data. reported by Dongkwan Kim <dkay AT
- kaist.ac.kr>.
+Mon Feb 16 13:39:44 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Wed Feb 25 22:25:07 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * dir.c (rb_glob, rb_globi): add const.
- * spec/default.mspec: use default configuration file name.
- https://github.com/ruby/rubyspec/commit/cc69f337b06362e5607ffa3e3ad40ef7494960cf
+ * ruby.h: ditto.
-Wed Feb 25 22:21:56 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Feb 16 02:16:33 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
- * spec/default.mspec: remove specific version number.
- https://github.com/ruby/rubyspec/commit/7a909e925c1baa9c700bd44af9241aef6e596714
+ * bcc32/Makefile.sub: should warn suspicious pointer conversion.
-Wed Feb 25 22:04:04 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * bcc32/setup.mak: ditto.
- * ext/win32/Win32API.rb (initialize): accept both a string and an array
- for the arguments of the imported function.
- reported by Aaron Stone [ruby-core:68208] [Bug #10876] [Fixes GH-835]
+Sun Feb 15 19:06:42 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Wed Feb 25 18:12:11 2015 Eric Wong <e@80x24.org>
+ * lib/rinda/tuplespace.rb: TupleSpace#read(tpl, 0), raise
+ RequestExpiredError if not found.
- * signal.c (sighandler): preserve errno
- Patch by Steven Stewart-Gallus <sstewartgallus00@mylangara.bc.ca>
- [ruby-core:68172] [Bug #10866]
+Sun Feb 15 15:56:46 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Wed Feb 25 15:59:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/win32ole/win32ole.c: add IDispatch wrapper in val2variant.
+ Thanks, arton.
- * dir.c (push_pattern, push_glob): make globbed file names same
- encoding to the given pattern.
+Sun Feb 15 01:46:05 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Wed Feb 25 15:27:16 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/mkmf.rb: absolute path of ruby is assigned to $(RUBY).
+ [ruby-dev:22870]
- * tool/merger.rb: support 2.1+ versioning scheme.
+Sat Feb 14 11:29:41 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Tue Feb 25 08:49:12 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * sample/drb/*: import lib/drb/sample
- * lib/cmath.rb (log): raise ArgumentError when more than 2 arguments
- are passed. [ruby-core:66143] [Bug #10487]
+Sat Feb 14 11:08:23 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Tue Feb 25 02:15:17 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * lib/drb/drb.rb: add pretty_print, thanks gotoken.
- * test/ruby/test_math.rb: Use assert_infinity instead of assert_equal(1.0/0, ...).
+Fri Feb 13 12:35:08 2004 Minero Aoki <aamine@loveruby.net>
- * test/ruby/test_math.rb: Add tests for overriding Integer#to_f.
- [ruby-core:67919] [Misc #10809]
+ * test/fileutils/test_fileutils.rb: File.link may raise EINVAL and
+ EACCES on Windows.
-Tue Feb 24 22:58:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Feb 12 21:45:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * complex.c (nucomp_mul): calculate as rotation in complex plane
- if matrix calculation resulted in NaN.
+ * lib/ftools.rb: documented
-Tue Feb 24 21:45:39 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Thu Feb 12 21:25:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * test/ruby/test_math.rb(test_cbrt): Add an assertion for Math.cbrt(1.0/0)
- and move #test_cbrt to more proper place.
+ * lib/base64.rb: backported from HEAD (modularised and documented)
-Tue Feb 24 19:09:25 2015 Koichi Sasada <ko1@atdot.net>
+Thu Feb 12 20:31:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c (lep_svar_place, lep_svar_get): do not create
- additional T_NODE object (svars holder) when only getting
- svars.
+ * lib/mkmf.rb (create_tmpsrc): cpp32 of Borland C++ ignores #error
+ directives in DOS line-ending files at all.
-Tue Feb 24 11:49:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Feb 12 02:23:56 2004 Tanaka Akira <akr@m17n.org>
- * time.c (time_zone_name): should be US-ASCII only if all 7-bits,
- otherwise locale encoding. [ruby-core:68230] [Bug #10887]
+ * lib/pathname.rb: use assert_raise instead of assert_raises.
-Tue Feb 24 09:47:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/pp.rb: ditto.
- * string.c (chompped_length): enable smart chomp for all non-dummy
- encoding strings, not only default_rs.
- [ruby-core:68258] [Bug #10893]
+ * lib/time.rb: ditto.
-Mon Feb 23 23:19:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/tsort.rb: ditto.
+ use TSortHash and TSortArray instead of Hash and Array in test.
- * tool/vcs.rb (IO.popen): support :chdir option.
+Wed Feb 11 20:01:12 2004 akira yamada <akira@ruby-lang.org>
- * tool/vcs.rb (VCS::GIT.get_revisions): use :chdir option instead
- of -C option which is not supported by older git.
- [ruby-dev:48880] [Bug #10890]
+ * test/ruby/test_file.rb (TestFile::test_fnmatch): added tests for
+ File.fnmatch. [ruby-dev:22815][ruby-dev:22819]
-Mon Feb 23 15:26:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_proc.rb (TestProc::test_eq): added a
+ test. [ruby-dev:22599]
- * string.c (rb_str_split_m): raise ArgumentError at broken string
- not RegexpError, as Regexp is not involved in.
- [ruby-core:68229] [Bug #10886]
+ * test/ruby/test_proc.rb (TestProc::test_eq): added tests for
+ Proc#==. [ruby-dev:22592], [ruby-dev:22601]
-Mon Feb 23 07:25:29 2015 Benoit Daloze <eregontp@gmail.com>
+Tue Feb 10 16:43:56 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c: Zone encoding should be US-ASCII if all 7-bits. Fix r46907.
+ * eval.c (umethod_bind): purge unused check. [ruby-dev:22850]
- * test/ruby/test_time.rb, test/ruby/test_time_tz.rb: Update tests.
+Mon Feb 9 17:16:00 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Sun Feb 22 18:33:42 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/rdoc/parsers/parse_c.rb: escape '{' and '}' to avoid warnings.
- * common.mk: use ruby organization for rubyspec.
+Mon Feb 9 13:00:55 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-Sun Feb 22 15:56:06 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+ * dir.c (fnmatch): File.fnmatch('*?', 'a') should return true.
+ [ruby-dev:22815]
- * vm_insnhelper.c (rb_vm_rewrite_cref_stack): copy nd_refinements
- of original crefs. It fixes segmentation fault when calling
- refined method in duplicate module. [ruby-dev:48878] [Bug #10885]
+ * dir.c (fnmatch): File.fnmatch('\[1\]' , '[1]') should return true.
+ [ruby-dev:22819]
- * vm_core.h, class.c: change accordingly.
+Sun Feb 8 16:46:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_refinement.rb: add a test for above.
+ * lib/pp.rb (PP::PPMethods::object_address_group): suppress negative
+ sign for higher heap areas.
-Sun Feb 22 10:43:37 2015 Koichi Sasada <ko1@atdot.net>
+Fri Feb 6 22:48:16 2004 Dave Thomas <dave@pragprog.com>
- * gc.c (rb_objspace_call_finalizer): control GC execution during
- force firnalizations at the end of interpreter process.
- [Bug #10768]
+ * lib/rdoc/generators/html_generator.rb (gen_url): Support
+ https in RDoc hyperlinks
- 1) Prohibit incremental GC while running Ruby-level finalizers
- to avoid any danger.
- 2) Prohibit GC while invoking T_DATA/T_FILE data structure
- because these operations break object relations consistency.
+Fri Feb 6 22:41:22 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- This patch can introduce another memory consuming issue because
- Ruby-level finalizers can run after (2), GC is disabled.
- However, basically object consistency was broken at (2) as I
- described above. So that running Ruby-level finalizers contains
- danger originally. Because of this point, I need to suggest to
- remove these 3 lines (invoking remaining finalizers). And add a
- rule to add that finalizers should not add new finalizers, or
- say there is no guarantee to invoke finalizers that added by
- another finalizer.
+ * lib/pp.rb (PPInspectTest#test_to_s_with_iv): rollback the previous
+ commit. [ruby-dev:22813]
-Sun Feb 22 04:07:05 2015 Zachary Scott <e@zzak.io>
+Fri Feb 6 22:22:50 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/openssl/ossl_asn1.c: [DOC] RDoc formatting fixes for
- ASN1::ObjectId with patch from @vbatts [Fixes GH-834]
+ * lib/pp.rb (PPInspectTest#test_to_s_with_iv): remove instance
+ variable which is defined in the test.
- * ext/openssl/ossl_bn.c: ditto.
+Fri Feb 6 00:48:37 2004 Tanaka Akira <akr@m17n.org>
-Sat Feb 21 19:51:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/prettyprint.rb (PrettyPrint#first?): obsoleted.
- * re.c (match_aref): RMatch::regexp is Qnil after matching by a
- string since r45451. [ruby-core:68209] [Bug #10877]
+Thu Feb 5 23:56:55 2004 Tanaka Akira <akr@m17n.org>
-Sat Feb 21 16:18:42 2015 Stefan Schuler <mail@stefanschuessler.de>
+ * lib/prettyprint.rb (PrettyPrint#seplist): added.
- * compar.c (Init_Comparable): [DOC] Replace camelcase variable name.
- [Fix GH-833]
+ * lib/pp.rb (PPMethods#pp_object): use seplist.
+ (PPMethods#pp_hash): ditto.
+ (Array#pretty_print): ditto.
+ (Struct#pretty_print): ditto.
+ (MatchData#pretty_print): ditto.
-Fri Feb 20 17:27:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/set.rb (Set#pretty_print): use seplist.
- * file.c (rb_file_identical_p): fix handle leak, ensure to close
- the handle of the first argument.
+Wed Feb 4 02:12:06 2004 Tanaka Akira <akr@m17n.org>
-Fri Feb 20 17:19:23 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (test_l): fix wrong method name in document.
+ (test_S): ditto.
+ (test_b): ditto.
+ (test_c): ditto.
+ (test_suid): ditto.
+ (test_sgid): ditto.
+ (test_sticky): ditto.
- * win32/win32.c (different_device_p): compare by volume serial
- numbers, not by path names. [ruby-core:68162] [Bug #10865]
+Tue Feb 3 08:04:57 2004 Tanaka Akira <akr@m17n.org>
-Thu Feb 19 01:58:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/pp.rb (Struct#pretty_print_cycle): follow 1.8 style.
- * win32/file.c (rb_file_expand_path_internal): neither the drive
- of base directory nor the current drive are involved in the
- result if different than the drive of path.
- [ruby-core:68130] [Bug #10858]
+Mon Feb 2 19:33:49 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Wed Feb 18 10:48:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: backport from 1.9 for Interix.
- * win32/win32.c (wrename): return EXDEV if moving a directory to
- another drive, since MoveFileExW does not set proper error code.
- [ruby-core:68162] [Bug #10865]
+ * dln.c (dln_load): ditto.
-Wed Feb 18 03:13:52 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Mon Feb 2 13:31:51 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/psych/lib/psych.rb: bump psych version.
- * ext/psych/psych.gemspec: ditto
- * ext/psych/yaml/scanner.c: add latest libyaml change.
- * test/psych/helper.rb: support newer minitest
- * test/psych/test_to_yaml_properties.rb: ditto
+ * lib/net/http.rb (canonical_each): fix merge miss.
-Tue Feb 17 11:47:17 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 2 01:54:00 2004 Tanaka Akira <akr@m17n.org>
- * lib/resolv.rb (Resolv::DNS::Resource#==, #hash): elements
- returned by Kernel#instance_variables are Symbols now.
- [ruby-core:68128] [Bug #10857]
+ * lib/pp.rb (Struct#pretty_print): make it 1.8 style.
+ (Numeric#pretty_print, FalseClass#pretty_print)
+ (TrueClass#pretty_print, Module#pretty_print): fix pp for objects
+ with instance variables. [ruby-talk:91157]
-Tue Feb 17 10:59:10 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/open-uri.rb (URI::Generic#find_proxy): return nil on loopback
+ address.
- * doc/syntax/calling_methods.rdoc: Fix documentation for "calling_methods"
- Patch by @sos4nt [fix GH-830][ci skip]
+ * lib/resolv-replace.rb (BasicSocket#send): don't replace because
+ it has no hostname argument.
+ (IPSocket.getaddress): raise SocketError instead of
+ Resolv::ResolvError for errors.
+ (TCPSocket#initialize, UDPSocket#bind, UDPSocket#connect)
+ (SOCKSSocket#initialize): use IPSocket.getaddress instead of
+ Resolv.getaddress.
+ (UDPSocket#send): recognize 3 arguments form. try all addresses on
+ 4 arguments form.
-Tue Feb 17 10:53:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Feb 1 18:17:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * win32/file.c (rb_file_expand_path_internal): do not make invalid
- (or ADS) path if the path has a drive letter, the result also
- should have be under it. [ruby-core:68130] [Bug #10858]
+ * lib/net/http.rb: merged coding style changes from HEAD.
-Tue Feb 17 10:47:20 2015 Iain Beeston <iain.beeston@gmail.com>
+Sun Feb 1 16:15:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
- * hash.c: Added docs to explain that #include? and #member? do not
- check member equality
- * lib/set.rb: ditto
+ * lib/test/unit.rb: rearranged documentation for RDoc's sake.
+ * lib/matrix.rb: improved documentation.
+ * lib/net/http.rb: slight documentation formatting improvement.
-Mon Feb 16 20:58:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Feb 1 05:30:06 2004 Tanaka Akira <akr@m17n.org>
- * compile.c (compile_massign): optimization for special case,
- assignments by aset or attrset.
- http://kokizzu.blogspot.jp/2015/02/c-java-hhvm-ruby-nodejsrhinojscspidermo.html
- http://www.atdot.net/~ko1/diary/201502.html#d16
+ * lib/open-uri.rb (URI::Generic#find_proxy): warn HTTP_PROXY.
+ raise an errror on non-http proxy URI.
+ (OpenURI::Buffer#<<): make a tempfile binmode. [ruby-talk:90793]
-Sun Feb 15 10:41:23 2015 Sho Hashimoto <sho-h@ruby-lang.org>
+Sat Jan 31 09:20:32 2004 NAKAMURA, Hiroshi <nakahiro@sairon.co.jp>
- * doc/standard_library.rdoc: [DOC] delete removed libraries.
- [misc #10843] [ci skip]
+ * sample/openssl/gen_csr.rb: wrong usage string.
-Sat Feb 14 12:20:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jan 31 01:00:32 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * random.c (rand_random_number): add a method to return a random
- number like SecureRandom to Random::Formatter.
+ * lib/soap/wsdlDriver.rb, lib/wsdl/soap/operation.rb: add support of
+ "parts" attribute of soap:body element in WSDL.
- * lib/securerandom.rb (random_bytes): move to Random::Formatter,
- the base method of the module.
+ * lib/wsdl/xmlSchema/schema.rb: friendly warning message for
+ simpleType element which is not supported for now.
-Sat Feb 14 12:01:32 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/soap/mapping/factory.rb: deleted unused methods.
- * random.c (random_raw_seed): extract platform dependent random
- seed initialization function as a new method Random.raw_seed.
+ * lib/soap/mapping/rubytypeFactory.rb: do no ignore case while xsi:type
+ string <-> Ruby class name matching.
- * lib/securerandom.rb (SecureRandom): use Random.raw_seed.
+ * test/wsdl/soap/{soapbodyparts.wsdl,test_soapbodyparts.wsdl}: new
+ files.
-Sat Feb 14 00:49:37 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Thu Jan 29 23:56:00 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * ext/coverage/coverage.c: Add Coverage.peek_result. Allows you to
- capture coverage information without stopping the coverage tool.
- [ruby-core:67940] [Feature #10816]
+ * util.c (mblen): fix overrun. [ruby-dev:22672]
- * test/coverage/test_coverage.rb: test for change.
+Thu Jan 29 22:41:53 2004 Dave Thomas <dave@pragprog.com>
-Fri Feb 13 21:52:05 2015 Yusuke Endoh <mame@tsg.ne.jp>
+ * lib/rdoc/generators/html_generator.rb: Allow 'link:' in Tidylinks.
+ THis means you can write "see f1[link:files/f1_rb.html]".
- * string.c (str_discard): does not free for STR_NOFREE string.
- [Bug #10853][ruby-core:68110]
+Thu Jan 29 15:33:23 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * bootstraptest/test_string.rb: test for above.
+ * ext/openssl/ossl_x509hame.c (ossl_x509name_initialize): change
+ second argument. it expected to be a Hash not an Integer.
-Fri Feb 13 21:16:00 2015 Yusuke Endoh <mame@tsg.ne.jp>
+ * ext/openssl/ossl_x509name.c (ossl_x509name_add_entry): add new
+ function for OpenSSL::X509::Name#add_entry.
- * lib/base64.rb: make urlsafe mode user-friendly.
+ * ext/openssl/ossl_x509name.c (ossl_x509name_to_a): append ASN.1
+ tag number to each element of return value.
- * lib/base64.rb (Base64.urlsafe_encode64): a new option "padding" to
- suppress the padding character ("=").
+ * ext/openssl/ossl_x509name.c (Init_ossl_x509name): add constants
+ OpenSSL::X509::Name::DEFAULT_OBJECT_TYPE and OBJECT_TYPE_TEMPLATE.
- * lib/base64.rb (Base64.urlsafe_decode64): now it accepts not only
- correctly-padded input but also unpadded input.
- [Feature #10740][ruby-core:67570]
+ * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name#initialize):
+ second argument takes OBJECT_TYPE_TEMPLATE by default.
- * test/base64/test_base64.rb: Test for above
+ * sample/openssl/gen_csr.rb: use OpenSSL::X509::Name.parse.
-Fri Feb 13 14:19:06 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Wed Jan 28 04:29:41 2004 Eric Schwartz <emschwar@fc.hp.com>
- * ext/json: merge upstream from flori/json
- change usage of TypedData. [Feature #10739][ruby-core:67564]
+ * lib/cgi/session.rb: use LOCK_SH to read, and a few other
+ improvements. [ruby-core:02328]
-Thu Feb 12 18:34:01 2015 multisnow <infinity.blick.winkel@gmail.com>
+Tue Jan 27 11:09:29 2004 FUKUMOTO Atsushi <fukumoto@nospam.imasy.or.jp>
- * ext/openssl/extconf.rb: check RAND_edg to support libressl.
+ * ext/socket/socket.c (s_recvfrom): sending length should be an
+ invariant while retrying on EAGAIN. [ruby-talk:89962]
- * ext/openssl/ossl_rand.c (ossl_rand_egd): define only if RAND_edg
- is available. [Fix GH-829]
+Tue Jan 27 10:35:18 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Feb 12 10:46:14 2015 Eric Hodel <drbrain@segment7.net>
+ * ext/win32ole/win32ole.c (set_argv): fix condition.
- * proc.c (proc_call): Improve Proc#call documentation. Patch by
- Hsing-Hui Hsu. [fix GH-761]
+Tue Jan 27 02:26:31 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Thu Feb 12 04:33:02 2015 Benoit Daloze <eregontp@gmail.com>
+ * lib/webrick/httputils.rb (WEBrick:HTTPUtils::parse_header):
+ refine regex for header-name.
- * compar.c (cmp_equal): no more error hiding for Comparable#==.
- It now behaves as other Comparable methods. See #7688.
+Tue Jan 27 00:30:11 2004 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_comparable.rb: update related test.
+ * win32/Makefile.sub: rollback.
-Thu Feb 12 03:28:05 2015 Eric Wong <e@80x24.org>
+Mon Jan 26 22:53:04 2004 Dave Thomas <dave@pragprog.com>
- * lib/set.rb (initialize): internal hash defaults to false
+ * io.c: Remove documentation references to $defout.
- * lib/set.rb (include?): use Hash#[] for optimized dispatch.
- Patch by Ismael Abreu <ismaelga@gmail.com>
- [ruby-core:67664] [Misc #10754]
+Mon Jan 26 15:11:47 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Feb 11 11:09:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * sample/exyacc.rb: escape '}' to avoid warning.
- * ext/digest/digest_conf.rb (digest_conf): check for CommonDigest.
+Mon Jan 26 14:41:46 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/digest/*/*cc.h: for Apple CommonCrypto/CommonDigest.h.
+ * lib/delegate.rb (Delegator::initialize): preserve
+ singleton_method_added method [ruby-dev:22685]
- * ext/digest/digest.h (DEFINE_FINISH_FUNC_FROM_FINAL): macro for
- finish functions, by inverting arguments order.
+ * lib/delegate.rb (Delegator::initialize): use Kernel::raise
+ instead of mere raise. [ruby-dev:22681]
- * ext/digest/digest_conf.rb (digest_conf): extract common
- configurations.
+Mon Jan 26 12:47:17 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Feb 11 11:01:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tcltklib/tcltklib.c: define CONST84 when TCL_MAJOR_VERSION == 7
- * ext/json/generator/generator.c (generate_json): get rid of
- unnecessary recursive calls which can cause infinite recursion.
- T_STRING may not have rb_cString.
+Mon Jan 26 11:35:23 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 11 07:53:35 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+ * ext/extmk.rb: Makefiles should depend on also rbconfig.rb.
+ (ruby-bugs:PR#1256)
- * test/win32ole/test_word.rb: use skip method to skip test.
+ * ext/win32ole/win32ole.c (set_argv): set real arguments to
+ WIN32OLE::ARGV. [ruby-list:39073]
-Tue Feb 10 11:38:28 2015 Shugo Maeda <shugo@ruby-lang.org>
+Thu Jan 22 22:54:53 2004 Shugo Maeda <shugo@ruby-lang.org>
- * vm_insnhelper.c (vm_call_method): stop method search when a method
- is not found in a refinement, to support undef in refinements.
- [ruby-core:66741] [Bug #10578]
+ * lib/net/imap.rb (BEG_REGEXP): allow 8-bit characters in quoted
+ strings for Novell GroupWise Internet Agent.
+ * lib/net/imap.rb (DATA_REGEXP): ditto.
-Tue Feb 10 11:19:11 2015 Shugo Maeda <shugo@ruby-lang.org>
+Thu Jan 22 16:21:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/net/ftp.rb (chdir, delete, gettextfile, mdtm, mkdir, nlst,
- putbinaryfile, puttextfile, rename, rmdir, size): support
- Pathname. Patch by Joe Rafaniello. [fix GH-828]
+ * parse.y (string_content): reset lexical states at the beginning of
+ string contents. [ruby-list:39061]
-Mon Feb 9 16:36:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jan 21 21:55:51 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * tool/make-snapshot (package): get rid of loading unbundled and
- unexpected libraries. [ruby-core:67977] [Bug #10822]
+ * lib/drb/drb.rb: remove O_NONBLOCK, thanks \ay
+ * lib/drb/extserv.rb: typo
-Sun Feb 8 20:09:37 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Wed Jan 21 17:57:56 2004 Shugo Maeda <shugo@ruby-lang.org>
- * lib/net/http/header.rb: pass header names as symbols.
- Patch by @DamirSvrtan [fix GH-805]
- * test/net/http/test_httpheader.rb: added test.
+ * lib/net/imap.rb (envelope): allow NIL.
+ * lib/net/imap.rb (body): ditto.
+ * lib/net/imap.rb (number): ditto.
+ * lib/net/imap.rb (ensure_nz_number): show a detailed error
+ message.
-Sun Feb 8 13:04:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jan 21 16:44:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/getaddrinfo.c (get_addr): reject too long hostname to
- get rid of GHOST vulnerability on very old platforms.
+ * lib/mkmf.rb (merge_libs): squeeze successive same libraries.
+ [ruby-dev:22652]
- * ext/socket/raddrinfo.c (make_hostent_internal): ditto, paranoic
- check for the canonical name.
+Wed Jan 21 16:01:37 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Feb 8 12:48:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/digest/rmd160/extconf.rb: have_library appends found library.
- * ext/win32/lib/win32/registry.rb (Win32::Registry::API): use wide
- versions of RegDeleteValue and RegDeleteKey.
- [ruby-core:67958] [Bug #10820]
+Wed Jan 21 11:36:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Feb 7 22:13:08 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+ * parse.y (block_append): update nd_end for "real" head node.
+ [ruby-list:39058]
- * test/win32ole/test_win32ole_record.rb: remove test using .NET
- Framework 3.5 because it is not included in Windows 8/8.1.
+Tue Jan 20 14:48:13 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat Feb 7 19:25:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/extconf.rb: should check <openssl/conf_api.h> instead
+ of OPENSSL_VERSION_NUMBER. [ruby-list:39056]
- * dir.c (has_magic): always get long path name on Windows even if
- no tilde is there. [ruby-core:68011] [Bug #10819]
+Tue Jan 20 14:43:17 2004 Dave Thomas <dave@pragprog.com>
- * dir.c (replace_real_basename): FindFirstFile ignore redirection
- character, check if exists before call it. cf. [Bug #8597]
+ * lib/base64.rb: Add RDoc
-Sat Feb 7 13:30:11 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+Tue Jan 20 14:25:51 2004 Dave Thomas <dave@pragprog.com>
- * test/win32ole/test_win32ole_record.rb
- (test_ole_instance_variable_get): correct VT_RECORD type and
- instance variables.
+ * lib/abbrev.rb: Add RDoc
-Fri Feb 6 17:47:05 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Tue Jan 20 13:22:39 2004 Dave Thomas <dave@pragprog.com>
- * ext/psych/lib/psych/visitors/yaml_tree.rb: register nodes when
- dumping objects with custom coders. [ruby-core:66215] [Bug #10496]
+ * lib/rdoc/generators/html_generator.rb: Document aliases at
+ top-most level.
- * test/psych/test_coder.rb: test for fix
+ * lib/English.rb: Document English.rb.
-Fri Feb 6 16:58:31 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Tue Jan 20 02:49:22 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * ext/psych/lib/psych/visitors/to_ruby.rb: fix support for regular
- expressions with newlines. tenderlove/psych#222
+ * ext/openssl/extconf.rb: add check for OpenSSL version.
+ [ruby-list:39054]
- * test/psych/test_yaml.rb: test for change.
+Tue Jan 20 02:38:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Feb 6 10:31:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (w_class): should not dump singleton class.
+ [ruby-dev:22631]
- * vm_core.h (rb_call_info_kw_arg_struct): make keywords a symbols
- list to get rid of inadvertent creation by variable keyword
- arguments. [ruby-core:68031] [Bug #10831]
+Tue Jan 20 01:31:36 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Thu Feb 5 22:42:34 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (lineno): typo fix(FIX2INT -> INT2FIX).
- * lib/rubygems: Update to RubyGems HEAD(5c3b6f3).
- Fixed #1156, #1142, #1115, #1142, #1139 on rubygems/rubygems
- * test/rubygems: ditto.
+Mon Jan 19 21:53:38 2004 akira yamada <akira@ruby-lang.org>
-Thu Feb 5 13:41:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c, re.c, string.c, time.c: fixed up positions of RDocs.
- * vm_eval.c (send_internal), vm_insnhelper.c (vm_call_opt_send):
- convert String method name into a Symbol, as method_missing
- method expects its first argument to be a Symbol. [Bug #10828]
+Mon Jan 19 07:09:20 2004 Tadayoshi Funaba <tadf@dotrb.org>
- * vm_insnhelper.c (ci_missing_reason): return the reason of method
- missing in call info.
+ * lib/date.rb: zone was wrong when it was behind UTC.
+ Thanks Mark J. Reed.
- * vm_insnhelper.c (vm_call_opt_send): re-apply r49500 with the
- proper missing reason. [Bug #10828]
+ * lib/date/format.rb: %z is now always replaced by four digits
+ with a leading plus or minus sign.
-Thu Feb 5 10:31:46 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * sample/cal.rb: added a class, anyway.
- * class.c (rb_obj_singleton_methods): should use RTEST() to convert
- VALUE to int.
+Sun Jan 18 20:47:35 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Thu Feb 5 03:59:33 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ruby.c: use translate_char() on Cygwin.
- * vm_insnhelper.c: Fix symbol leak with +send+ [Bug #10828]
+Sun Jan 18 02:33:26 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Wed Feb 4 20:26:54 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+ * defines.h (_WIN32): undef _WIN32 on Cygwin before defining DOSISH.
- * ext/win32ole/win32ole.c (Init_win32ole): should not use atexit to
- free allocated hash table to avoid error on Cygwin.
+Sun Jan 18 00:23:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 4 15:34:25 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * marshal.c (class2path): check anonymous class/module before
+ checking referable, and allow singleton classes.
- * class.c (method_entry_i, class_instance_method_list,
- rb_obj_singleton_methods): should not include methods of
- superclasses if recur is false. [ruby-dev:48854] [Bug #10826]
+Fri Jan 16 14:33:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 4 16:32:40 2015 Matt Hoyle <matt@deployable.co>
+ * marshal.c (class2path): get class path and check referable.
+ [ruby-dev:22588]
- * ext/bigdecimal/bigdecimal.c (VpSetPTR): fix a typo, 'expoennt'
- to 'exponent'. [ruby-core:67980] [Bug #10823] [Fix GH-825]
+Fri Jan 16 09:52:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Feb 4 15:55:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (proc_eq): Proc with empty body may not be equal.
+ [ruby-dev:22590]
- * ext/sdbm/_sdbm.c: include ruby/ruby.h for PRIdPTRDIFF when a
- macro `DEBUG` is defined. based on the patch by Owen Rodley in
- [ruby-core:67987]. [Bug #10825]
+Thu Jan 15 13:03:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 4 11:12:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (argf_read): do not append EOF. (ruby-bugs-ja:PR#585)
- * Makefile.in (probes.stamp): rebuild dtrace dependent objects
- only when `dtrace -G` modifies its input files.
+ * io.c (rb_io_fwrite): ad-hockery hack to get rid of HP-UX stdio
+ weird behavior. [ruby-dev:22424]
-Tue Feb 3 19:27:16 2015 Naohisa Goto <ngotogenome@gmail.com>
+Wed Jan 14 13:31:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * common.mk (ruby-glommed.o): dependency on $(OBJ) should be written
- in common.mk (in which OBJ is defined) because of Makefile include
- and parse order. This partly reverts r49419.
- [ruby-dev:48849] [Bug #10808]
+ * ext/iconv/extconf.rb: wrapper iconv.rb is dependent on platform.
- * Makefile.in (ruby-glommed.o): ditto.
+Tue Jan 13 18:54:28 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * Makefile.in (ruby-glommed.o): remove excess $(DTRACE_OBJ) because
- it is included in $(OBJS) since r49451.
+ * lib/logger.rb(Logger#msg2str): no special treatment for the object
+ which responds to :to_str. commited at 2004-01-11T21:46:27 by
+ gsinclair.
- * Makefile.in (probes.o): should depend on $(DTRACE_DEPENDENT_OBJS)
+ * lib/logger.rb(LogDevice#initialize): remove type checking if the
+ given object is a String. Kernel.open handles it correctly.
+ commited at 2004-01-11T21:46:27 by gsinclair.
-Tue Feb 3 17:15:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/logger/test_logger.rb: follow above change (ArgumentError ->
+ TypeError.) follow above commit.
- * lib/mkmf.rb (try_cppflags, try_cflags, try_ldflags): get rid of
- interference by modifying global variables in have_devel? method.
- [ruby-core:67962] [Bug #10821]
+Tue Jan 13 14:27:13 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Tue Feb 3 15:23:58 2015 Shugo Maeda <shugo@ruby-lang.org>
+ * lib/test/unit/ui/testrunnerutilities.rb (TestRunnerUtilities):
+ moved run method which allows output level. [ruby-dev:22554]
- * vm_method.c (remove_method): When remove refined
- method, raise a NameError if the method is not
- defined in refined class.
+Tue Jan 13 04:29:52 2004 Dave Thomas <dave@pragprog.com>
- But if the method is defined in refined class,
- it should keep refined method and remove original
- method.
+ * lib/rdoc/ri/ri_driver.rb (RiDriver::report_method_stuff):
+ Show fully-qualified class names in class list.
- Patch by Seiei Higa. [ruby-core:67722] [Bug #10765]
+Tue Jan 13 01:04:37 2004 Dave Thomas <dave@pragprog.com>
-Tue Feb 3 14:04:47 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc/ri/ri_paths.rb (RI::Paths): First attempt at
+ incorporating DESTDIR in the rdoc installation.
- * dir.c (glob_helper): obtain real name with FindFirstFile API
- instead of matching all entries, on Windows.
- [ruby-core:67954] [Bug #10819]
+Mon Jan 12 23:27:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Feb 3 12:26:35 2015 Katsuhiko Nishimra <ktns.87@gmail.com>
+ * parse.y (primary): fix position after FCALL. [ruby-dev:22574]
- * lib/mkmf.rb (configuration): set the default cxxflags, which is
- referred from the default CXXFLAGS, for extension libraries.
- [Fix GH-823]
+Mon Jan 12 12:07:22 2004 Dave Thomas <dave@pragprog.com>
-Tue Feb 3 05:52:00 2015 Aman Gupta <ruby@tmm1.net>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods):
+ Someone changed the "// in eval.c" comments to "/*...*/" style,
+ so the parsing of the source file name broke.
- * gc.c (rb_objspace_free): cause rb_bug if lazy sweep is in progress
- during rb_objspace_free. Adds extra protection for r46340.
- Patch by Vicent Marti. [Bug #10768] [ruby-core:67734]
- * gc.c (rb_objspace_call_finalizer): Ensure GC is completed after
- finalizers have run. We already call gc_rest() before invoking
- finalizers, but finalizer can allocate new objects and start new GC
- cycle, so we call gc_rest() again after finalizers are complete.
+ * object.c: Remove spurious space in TrueClass documentation.
-Mon Feb 2 10:51:34 2015 Ari Pollak <ajp@aripollak.com>
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Fix
+ bad regexp: if the code before a documented method contained
+ a comment that wasn't terminated by whitespace, that comment
+ and all intervening code was included in the following
+ method's documentation.
- * doc/security.rdoc (Symbols): update about Symbol GC. Symbols
- explicitly converted from Strings now can be collected, but
- reflection/metaprogramming still can cause memory flooding.
- [Fix GH-725]
+ * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter::break_to_newline):
+ HTML formats need explicit line breaks.
-Sun Feb 1 13:46:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 12 11:46:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * tool/rbinstall.rb (bin-comm): drop batch file installation.
- Windows 95 support has not been supported already.
- [Feature #10806]
+ * configure.in (LIBPATHFLAG, RPATHFLAG): enclose paths with single
+ quotes. [ruby-dev:22564]
-Sat Jan 31 12:06:23 2015 Scott Francis <scott.francis@shopify.com>
+ * lib/mkmf.rb (libpathflag): do not enclose with quotes always.
- * thread_pthread.c (reserve_stack): fix intermittent SIGBUS on
- Linux, by reserving the stack virtual address space at process
- start up so that it will not clash with the heap space.
- [Fix GH-822]
+ * {bcc32,win32,wince}/Makefile.sub (LIBPATHFLAG): quoted.
-Fri Jan 30 17:28:29 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Mon Jan 12 02:24:07 2004 Dave Thomas <dave@pragprog.com>
- * math.c (num2dbl_with_to_f): make faster when Bignum passed by
- direct conversion using rb_big2dbl(). [Feature #10800]
+ * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML
+ generation support to ri (Elliot Hughes)
-Thu Jan 29 23:30:00 2015 Kenta Murata <mrkn@mrkn.jp>
+Mon Jan 12 02:24:07 2004 Dave Thomas <dave@pragprog.com>
- * ext/bigdecimal/bigdecimal.c (rb_rational_num): add fallback function
- for rubies lower than 2.2.0.
+ * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML
+ generation support to ri (Elliot Hughes)
- * ext/bigdecimal/bigdecimal.c (rb_rational_den): ditto.
+Sun Jan 11 02:07:47 2004 Dave Thomas <dave@pragprog.com>
- * ext/bigdecimal/extconf.rb: check the existences of struct RRational,
- rb_rational_num, and rb_rational_den.
+ * lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):
+ Also accept command line options via the 'RI' environment variable.
- * ext/bigdecimal/bigdecimal.bundle: bump version.
+Sun Jan 11 02:07:47 2004 Dave Thomas <dave@pragprog.com>
-Thu Jan 29 20:28:25 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):
+ Also accept command line options via the 'RI' environment variable.
- * tool/make-snapshot: removed md5 digest with package information
+Sat Jan 10 21:27:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Jan 29 10:41:52 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
+ * eval.c (eval): need to add message delimiter. [ruby-dev:22561]
- * math.c (Get_Double): direct casting from Fixnum to double.
- [Feature #10785]
+Sat Jan 10 01:54:50 2004 Eric Sunshine <sunshine@sunshineco.com>
-Thu Jan 29 02:34:27 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+ * defines.h (__NeXT__): Ensure that all standard S_IRUSR, S_IWGRP,
+ S_IRWXO, etc. macros are defined since future code might require
+ them (even though present code only requires a subset).
- * ext/psych/lib/psych/visitors/to_ruby.rb: fix parsing hashes with
- instance variables when it is referenced multiple times.
- * ext/psych/lib/psych.rb: bump version
- * ext/psych/psych.gemspec: bump version
- * test/psych/test_hash.rb: test for fix
+ * defines.h (__NeXT__): Bug fix: WORDS_BIGENDIAN was not being set
+ correctly on Rhapsody when -arch compiler flag was used (via
+ configure's --enable-fat-binary option).
-Thu Jan 29 02:06:09 2015 Eric Wong <e@80x24.org>
+Fri Jan 9 10:05:14 2004 Siena. <siena@faculty.chiba-u.jp>
- * thread.c (struct join_arg): restructure and make smaller
- (thread_join_sleep): avoid timeofday() call if forever
- (thread_join): pass join_arg.delay directly
- (rb_thread_inspect_msg): remove, inline into rb_thread_inspect
- (rb_thread_inspect): reduce branching and string creation
- * thread_pthread.c (native_set_thread_name): create string directly
- to avoid reparsing. [Misc #10723]
+ * lib/mkmf.rb (libpathflag): use single quotes. [ruby-dev:22440]
-Wed Jan 28 21:32:24 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Jan 8 23:49:21 2004 WATANABE Hirofumi <eban@ruby-lang.org>
- * thread.c: Improve documentation for Thread#value
- [Bug #10694][ruby-core:67324][ci skip]
+ * configure.in (RDOCTARGET): new macro. if you want to install
+ rdoc documentation, you need to run configure with
+ --enable-install-doc.
-Tue Jan 27 16:04:19 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Jan 8 21:29:43 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * tool/redmine-backporter.rb: added `!` command.
+ * ext/openssl/ossl_pkey.c (ossl_pkey_to_der): removed; it returns
+ public key only.
-Tue Jan 27 15:58:23 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/openssl/ossl_pkey_dh.c (ossl_dh_to_der): new function for
+ OpenSSL::PKey::DH#to_der.
- * tool/redmine-backporter.rb: added history feature for platforms which
- lack readline.
+ * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_to_der): new function for
+ OpenSSL::PKey::DSA#to_der.
-Mon Jan 26 22:09:35 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_to_der): new function for
+ OpenSSL::PKey::RSA#to_der.
- * .gitignore: ignored temporary file with git.
+Thu Jan 8 16:51:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Mon Jan 26 18:06:03 2015 Akinori MUSHA <knu@iDaemons.org>
+ * test/wsdl/datetime/test_datetime.rb: fixed a stupid testcase which
+ dumps "E" at month-end.
- * misc/ruby-electric.el: Import version 2.2.2 from
- https://github.com/knu/ruby-electric.el.
+Thu Jan 8 11:20:01 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-Mon Jan 26 11:37:49 2015 Dave Stevens <dave@crowdlab.com>
+ * eval.c, object.c, process.c, re.c: don't use C++ style comments.
- * string.c (str_make_independent_expand): terminate String when
- moved from heap to embedded. [Fix GH-821].
+Thu Jan 8 04:36:21 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sun Jan 25 12:04:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/webrick/cgi.rb (WEBrick::CGI#initialize): should create
+ @config[:Logger] if it was not given.
- * array.c (flatten): no need to call to_ary method on elements
- beyond the given level. [ruby-core:67637] [Bug #10748]
+ * sample/webrick/*: new files.
-Sun Jan 25 00:42:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * MANIFEST: add sample/webrick/*
- * ext/fiddle/win32/libffi.mk.tmpl: assemble without directory prefix.
- workaround of a bug of VC12 ml, by unak at [ruby-core:67792].
- [ruby-core:67789] [Bug #10780]
+Wed Jan 7 13:00:18 2004 Dave Thomas <dave@pragprog.com>
-Sat Jan 24 19:56:25 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc/ri/ri_driver.rb: Fix problem where ri was
+ being too eager to find matches of ambiguous method
+ names (such as "ri Thread.join" would return both
+ Thread.join and ThreadsWait.join)
- * dln_find.c (dln_find_1): search regular files only. based on
- the patch by Alex Coomans in [ruby-core:67766]. [Bug #10776]
+Wed Jan 7 12:35:41 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Fri Jan 23 23:57:05 2015 Misumi Rize <r@ayase-e.li>
+ * lib/debug.rb: revert command parse regexps. [ruby-list:39014] by
+ Shirai,Kaoru.
- * vm_insnhelper.c (vm_throw_start): search the target to break
- from a block with nested rescue, from the nested blocks.
- [ruby-core:67765] [Bug #10775] [Fix GH-820]
+Wed Jan 7 08:21:04 2004 Dave Thomas <dave@pragprog.com>
-Fri Jan 23 20:00:59 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc/parsers/parserfactory.rb: Check for shebang
+ line in files that would otherwise be treated as
+ plain text.
- * marshal.c (w_object, marshal_dump): use identity tables for
- arbitrary VALUE keys, because of performance of FLONUM.
- [Bug #10761]
+Tue Jan 6 22:13:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * marshal.c (obj_alloc_by_klass, marshal_load): ditto.
+ * eval.c (rb_mod_modfunc): should break if m has no super class.
+ [ruby-dev:22498]
-Fri Jan 23 17:12:33 2015 Eric Wong <e@80x24.org>
+Tue Jan 6 21:55:02 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * benchmark/bm_marshal_dump_flo.rb: new benchmark for [Bug #10761]
+ * io.c (fptr_finalize): should save errno just after failure.
+ [ruby-dev:22492]
-Thu Jan 22 18:03:19 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Tue Jan 6 14:53:14 2004 Dave Thomas <dave@pragprog.com>
- * tool/redmine-backporter.rb (find_svn_log): use double quotes instead
- of single quotes because cmd.exe doesn't handle them.
+ * bin/ri: split out the display side, making it pluggable. Added
+ new ri_driver and ri_display files in lib/rdoc/ri.
- * tool/redmine-backporter.rb (done): the 2nd element of matched data
- is the offset of the end of matched string, not length.
+Tue Jan 6 06:37:53 2004 Dave Thomas <dave@pragprog.com>
-Thu Jan 22 16:45:24 2015 Eric Wong <e@80x24.org>
+ * bin/rdoc: Add --ri-system switch
- * st.c (st_numhash): mix float value for flonum
- * hash.c (rb_any_hash): ditto
- * benchmark/bm_hash_aref_flo.rb: new benchmark
- * benchmark/bm_hash_ident_flo.rb: ditto
- [Bug #10761]
+ * lib/.document: Update with list of files that seem to have
+ documentation
-Wed Jan 21 22:33:51 2015 Akinori MUSHA <knu@iDaemons.org>
+ * lib/test/unit.rb: Reorder comment to make it RDoc friendly.
- * misc/ruby-electric.el: Import version 2.2.1 from
- https://github.com/knu/ruby-electric.el. Improve compatibility
- with and optimize for Emacs 24.4.
+ * Makefile.in: add install-nodoc target, and make it
+ generate RDoc on default install.
-Wed Jan 21 09:40:52 2015 Zachary Scott <e@zzak.io>
+ * lib/rdoc/ri/ri_options.rb (RI::Options::parse): Add
+ --doc-dir option to ri.
- * file.c: Document other cases of missing birthtime on OS with patch
- provided by @sho-h similar to GH-817. [ci skip] [DOC]
+Tue Jan 6 00:04:40 2004 Dave Thomas <dave@pragprog.com>
-Wed Jan 21 09:09:19 2015 Tanaka Akira <akr@fsij.org>
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):
+ fix parsing if there are braces in a method parameter list
- * NEWS: References to tickets added.
- [ruby-core:67701] [Bug #10760] Suggested by Zachary Scott.
+Fri Jan 2 14:54:11 2004 Dave Thomas <dave@pragprog.com>
-Tue Jan 20 22:59:54 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * bin/ri: Add new --classes option, and arrange for
+ help messages to be paged too.
- * tool/vcs.rb: fix the exception given remote-url of svn.
+ * bin/rdoc: Add statistics.
-Tue Jan 20 12:58:33 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * process.c: (MG) Added Process documentation
- * tool/redmine-backporter.rb: now can change the page of `ls`.
+ * lib/rdoc/ri/ri_formatter.rb (RI::AttributeFormatter::wrap):
+ Fix problem with labels not displaying in RI labeled
+ lists using BS and ANSI modes.
-Tue Jan 20 12:28:37 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jan 2 01:50:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
- * tool/redmine-backporter.rb (readline): fallback to normal gets on
- Windows because IO.console.getch is not always do as expected.
+ * io.c (argf_eof): ARGF.eof? should not have any side effect.
+ [ruby-dev:22469]
-Tue Jan 20 11:31:07 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Wed Dec 31 17:25:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * tool/redmine-backporter.rb: update usage.
+ * io.c (argf_each_byte): should return self. [ruby-dev:22465]
-Tue Jan 20 11:23:47 2015 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 31 11:20:34 2003 Dave Thomas <dave@pragprog.com>
- * tool/redmine-backporter.rb (mygets): to support Backspace
- implement gets by itself.
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Make
+ file referenced in "// in sss.c" relative to current file.
-Tue Jan 20 02:54:11 2015 Zachary Scott <e@zzak.io>
+Wed Dec 31 11:17:37 2003 Dave Thomas <dave@pragprog.com>
- * file.c: NotImplementedError is raised if birthtime is unavailable.
- Patch by @y-yagi san and [Fixes GH-817] [ci skip] [DOC]
+ * lib/rdoc/generators/html_generator.rb: Fix problem when
+ a public method was aliased, but the alias is then
+ made private, and hence doesn't appear in RDoc output.
- * ext/pathname/pathname.c: ditto.
+Wed Dec 31 01:33:05 2003 Dave Thomas <dave@pragprog.com>
-Mon Jan 19 22:08:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c, error.c, eval.c, io.c, prec.c, range.c, re.c,
+ string.c, time.c: Add RDoc for Kernel functions, and tidy.
- * class.c (include_modules_at): allow to prepend each module up to
- once for each classe. [EXPERIMENTAL]
+Tue Dec 30 19:39:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Jan 18 18:32:20 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (rb_f_readline): should raise EOFError at the end of
+ files. [ruby-dev:22458]
- * math.c (math_atan2): revive documentation before r49220.
- http://d.hatena.ne.jp/nagachika/20150112/ruby_trunk_changes_49213_49226
+ * io.c (argf_read): should concatenate input files when length
+ argument is nil. [ruby-dev:22450]
-Sun Jan 18 15:57:32 2015 Seiei Higa <hanachin@gmail.com>
+ * io.c (argf_read): should update supplied string buffer (2nd
+ argument) even when IO#read is called multiple times.
- * vm_method.c (check_definition): Module#public_method_defined?,
- Module#private_method_defined?, Module#protected_method_defined?
- should not use refinements. [ruby-core:67656] [Bug #10753]
+ * io.c: should initialize lineno by zero. [ruby-dev:22460]
-Sun Jan 18 15:50:39 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Dec 30 12:30:30 2003 Dave Thomas <dave@pragprog.com>
- * vm_dump.c (rb_vm_bugreport): check by configured result instead
- of system name for old FreeBSD. based on a patch by Steve Wills
- at [ruby-core:67655]. [Bug #10752]
+ * lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): If a
+ class and a method have the same name, finding Xxx.abc was trying
+ to find 'abc' in method 'Xxx', not class 'Xxx'.
-Sun Jan 18 12:56:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * Makefile.in (VPATH, NEWLINE_C), common.mk (common-srcs): make
- and use newline.c under enc/trans directory, not toplevel. no
- longer search enc directory implicitly.
+Tue Dec 30 08:32:32 2003 Dave Thomas <dave@pragprog.com>
- * configure.in, enc/Makefile.in (BUILTIN_ENCS, BUILTIN_TRANSES):
- prefix respective directory names to builtin encodings and
- transcoder source names.
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method):
+ Handle undoing nesting of yield parameters correctly for:
-Sun Jan 18 11:49:46 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+ def each_entry(&b) Dir.foreach(@path) {|f| yield P.new(f) } end
- * ext/win32ole/win32ole.c (ole_invoke): avoid SEGV when VT_RECORD
- variable is passed by reference. [ruby-dev:48803] [Bug #10697]
-Sat Jan 17 23:59:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Dec 30 08:32:32 2003 Dave Thomas <dave@pragprog.com>
- * ext/psych/lib/psych/visitors/yaml_tree.rb (visit_String):
- anchors like `\Z` are not valid inside character class. use
- negative-lookahead instead.
- Fixes: https://github.com/tenderlove/psych/issues/221
+ * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method):
+ Handle undoing nesting of yield parameters correctly for:
-Sat Jan 17 23:42:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ def each_entry(&block) Dir.foreach(@path) {|f| yield Pathname.new(f) } end
- * configure.in: get rid of pattern substitution, which is not
- supported by ash, and ash on NetBSD parses whole source first
- and fails to start. [ruby-dev:48823] [Bug #10750]
+Mon Dec 29 12:51:02 2003 Dave Thomas <dave@pragprog.com>
-Fri Jan 16 18:42:58 2015 NARUSE, Yui <naruse@ruby-lang.org>
+ * eval.c: Add RDoc for Kernel global functions.
- * tool/redmine-backporter.rb: support adding related revisions
- to issues.
+Mon Dec 29 11:00:16 2003 Dave Thomas <dave@pragprog.com>
-Fri Jan 16 17:20:33 2015 Koichi Sasada <ko1@atdot.net>
+ * array.c: Tidy up RDoc loose ends.
- vm.c, vm_core.h: constify VM_CF_LEP, VM_CF_PREV_EP, VM_CF_BLOCK_PTR
- and rb_vm_control_frame_block_ptr.
+Mon Dec 29 05:05:51 2003 Dave Thomas <dave@pragprog.com>
-Fri Jan 16 15:41:21 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+ * struct.c, random: Add RDoc comments
- * ext/psych/lib/psych.rb: bump version
+Mon Dec 29 02:20:54 2003 Dave Thomas <dave@pragprog.com>
- * ext/psych/psych.gemspec: ditto
+ * eval.c: Add RDoc for class Proc, Method, UnboundMethod
-Fri Jan 16 15:37:49 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Mon Dec 29 00:41:44 2003 Dave Thomas <dave@pragprog.com>
- * ext/psych/lib/psych/visitors/yaml_tree.rb: only dump hash
- subclasses. Thanks Joe Eli McIlvain <joe.eli.mac@gmail.com>
+ * math.c: Add RDoc comments
- * test/psych/test_hash.rb: test for change
+Sun Dec 28 20:19:11 2003 Tanaka Akira <akr@m17n.org>
-Fri Jan 16 15:35:21 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+ * ext/stringio/stringio.c (strio_sysread): StringIO.new.sysread didn't
+ raise EOFError.
- * ext/psych/lib/psych.rb: bump version
+ * ext/zlib/zlib.c (gzreader_gets): don't increment lineno when
+ gzfile_read_all returns "".
- * ext/psych/lib/psych/visitors/yaml_tree.rb: fix line width wrapping
- for long strings. Thanks Jakub Jirutka <jakub@jirutka.cz>
+Sun Dec 28 15:25:08 2003 Dave Thomas <dave@pragprog.com>
- * test/psych/test_string.rb: test for change
+ * class.c,object.c,parse.y,sprintf.c,variable.c: Document classes
+ Object, Module, etc...
-Fri Jan 16 11:44:44 2015 Kazuki Tsujimoto <kazuki@callcc.net>
+Sun Dec 28 11:55:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * eval_intern.h, vm.c, vm_eval.c, vm_insnhelper.c:
- change throw mechanism (not save target ep, but save target cfp).
- It fixes `unexpected break' bug that occurs when
- TracePoint#binding is called.
- [ruby-dev:48797] [Bug #10689]
+ * test/csv/test_csv.rb: generate bom.csv and mac.csv files on the fly.
+ [ruby-talk:88852]
- * test/ruby/test_settracefunc.rb: add a test.
+ * test/csv/{bom.csv,mac.csv}: removed.
-Thu Jan 15 23:55:15 2015 Tanaka Akira <akr@fsij.org>
+Sun Dec 28 08:56:51 2003 Dave Thomas <dave@pragprog.com>
- * io.c (rb_io_close_m): Don't raise when the IO object is closed.
- [ruby-core:67444] [Feature #10718]
+ * eval.c: Thead[Group] RDoc (thanks to MG)
-Thu Jan 15 21:34:57 2015 Seiei Higa <hanachin@gmail.com>
+Sun Dec 28 03:50:05 2003 Dave Thomas <dave@pragprog.com>
- * proc.c (rb_obj_singleton_method): Kernel#singleton_method should
- not use refinements, as well as Kernel#method.
- [ruby-core:67603] [Bug #10744]
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_override_comment):
+ Escape method names used in regexp
-Thu Jan 15 10:45:04 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 28 01:46:02 2003 Dave Thomas <dave@pragprog.com>
- * array.c (rb_ary_select_bang, ary_reject_bang): linear
- performance. [ruby-core:67418] [Feature #10714]
+ * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item):
+ Add support for rules in 'ri' output.
-Wed Jan 14 18:06:06 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
+Sun Dec 28 01:35:35 2003 Dave Thomas <dave@pragprog.com>
- * lib/uri/mailto.rb: raising URI::InvalidComponentError instead
- of failing with undefined method `split' for nil:NilClass for
- mailto: URIs without opaque part. [Bug #10738]
- * test/uri/testuri.rb: Test for above
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body):
+ Sometimes the Ruby source aliases two otherwise
+ unrelated methods (for example Kernel#object_id and
+ Kernel#hash are both the same C function). Provide a
+ facility to allow the methods to be documented
+ separately.
-Wed Jan 14 16:45:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 28 01:05:31 2003 Dave Thomas <dave@pragprog.com>
- * tool/downloader.rb (RubyGems.download): verify downloaded gem
- packages. LowSecurity to allow untrusted certificates now.
+ * marshal.c, signal.c: RDoc collemts added by Elliott Hughes
-Wed Jan 14 15:43:48 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 28 00:48:47 2003 Dave Thomas <dave@pragprog.com>
- * ext/readline/readline.c (readline_s_refresh_line): initialize
- before rl_refresh_line(), as some function make the internal
- state non-clean but rl_refresh_line() does not re-initialize it.
- [ruby-core:43957] [Bug #6232]
+ * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_class_comment):
+ Some source files use lower case class or module names
+ when naming the Init_XXX function in C.
-Tue Jan 13 21:59:24 2015 Michal Papis <mpapis@gmail.com>
+Sat Dec 27 23:41:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
- * tool/rbinstall.rb (gem): fix changing permissions of installed
- bundled gems. [Fix GH-812]
+ * configure.in: fix "test: too many arguments" error.
-Tue Jan 13 21:57:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 27 15:32:19 2003 Dave Thomas <dave@wireless_3.local.thomases.com>
- * common.mk (distclean-local): remove autom4te.cache generated by
- autoconf.
+ * time.c: RDoc comments added
- * common.mk (realclean-local): remove id sources and dummy header
- for dtrace. [ruby-core:67562] [Bug #10737]
+Sat Dec 27 15:07:57 2003 Dave Thomas <dave@pragprog.com>
-Tue Jan 13 21:08:22 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * object.c: Add RDoc comments for Symbol class.
- * ext/json, test/json: merge JSON HEAD(259dee6)
- separate implementation of Typed_Data macro.
- https://github.com/flori/json/compare/v1.8.1...v1.8.2
+Sat Dec 27 14:42:30 2003 Dave Thomas <dave@pragprog.com>
-Tue Jan 13 14:16:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c: Add RDoc comments.
- * test/net/http/test_http.rb: get rid of accessing DNS actually
- for some servers returning wrong results.
- [ruby-core:67454] [Bug #10721]
+Sat Dec 27 00:44:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Jan 12 23:21:57 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+ * io.c (next_argv): warn always for stdin on inplace edit mode.
- * gems/bundled_gems: update test-unit to 3.0.9.
+ * io.c (read_all): need to check string value.
-Mon Jan 12 18:35:44 2015 Eric Wong <e@80x24.org>
+ * io.c (argf_read): allow ARGF.read(nil). [ruby-dev:22433]
- * numeric.c (bit_coerce): use original value for error message
- [ruby-core:67405] [Bug #10711]
- * test/ruby/test_numeric.rb (test_coerce): check error message
+Fri Dec 26 23:02:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Jan 12 18:01:24 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_f_backquote): need not to check nil result.
+ [ruby-core:02078]
- * lib/rdoc/text.rb (expand_tabs): get rid of infinite loop with
- CR. should check if substitution occurred too.
- [ruby-dev:48813] [Bug #10732]
+ * io.c (rb_io_getline): should return nil when read_all gives
+ empty string, even when nil rs is specified. [ruby-core:02077]
-Mon Jan 12 16:45:46 2015 Seiei Higa <hanachin@gmail.com>
+Fri Dec 26 18:50:59 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c (rb_alias): raise a NameError when creating alias to
- a refined method if the original method of the refined method is
- not defined. [ruby-core:67523] [Bug #10731]
+ * configure.in: check if getcontext and setcontext are available.
-Mon Jan 12 13:53:17 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * eval.c: use presence of getcontext/setcontext.
- * math.c (math_atan2): improve documentation.
- [Feature #10323][ruby-core:65400][ci skip]
+Fri Dec 26 16:40:53 2003 Tanaka Akira <akr@m17n.org>
-Mon Jan 12 13:50:49 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/pathname.rb (PathnameTest#test_plus): add 2 assertions.
- * ext/bigdecimal/bigdecimal.c: fixes documentation like labeled lists,
- code examples etc. [ruby-core:66730][Bug #10576][ci skip]
+Fri Dec 26 09:26:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon Jan 12 13:36:44 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * pack.c (pack_pack): add sign check for 'i', and 'l'.
+ [ruby-dev:22427]
- * lib/optparse.rb: improvements for OptionParser documentation.
- [misc #10608][ruby-core:66901][ci skip]
+ * bignum.c (rb_quad_pack): add range check for 'quad int'.
-Mon Jan 12 13:33:52 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 25 22:39:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * array.c (rb_ary_each): documented return value.
- [misc #10469][ruby-core:66063]
+ * string.c (rb_str_update): don't return any value.
-Sun Jan 11 15:11:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 25 15:30:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/webrick/test_utils.rb (test_create_listeners): use
- dynamically chosen port number, not hardcoded port number.
- [ruby-core:67508]
+ * string.c (rb_str_update): call rb_str_modify().
-Sat Jan 10 12:57:12 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 25 05:08:09 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/zlib/zlib.c: fix document of method signatures.
- [Bug #10668][ruby-core:67186][ci skip]
+ * eval.c (search_required): search actual file name once when no
+ extension specified.
-Sat Jan 10 12:32:44 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Dec 25 04:00:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * eval_error.c (error_print): pos and len parameters of rb_str_substr()
- are counted by characters, not bytes. use rb_str_subseq() instead.
- [Bug #10727] [ruby-core:67473]
+ * stable version 1.8.1 released.
-Sat Jan 10 10:58:55 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 25 00:17:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * complex.c: removed commented-out code.
+ * configure.in: check for nanosleep, -lrt if required.
+ [ruby-core:02059]
-Sat Jan 10 10:57:19 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * eval.c (thread_timer): use select(2) if nanosleep(2) is not
+ available.
+
+ * eval.c: check __stub_getcontext for glibc on some platforms.
+ [ruby-list:38984]
+
+Wed Dec 24 23:48:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/test_basetype.rb, test/soap/marshal/test_marshal.rb
+ test/xsd/test_xsd.rb: use "(-1.0 / (1.0 / 0.0))" instead of "-0.0"
+ to express -0.0. [ruby-talk:88786]
+
+Wed Dec 24 23:29:30 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/tsort.rb (test_orphaned_break): removed.
+
+Wed Dec 24 20:53:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/tkmulticolumnlist.rb: new sample
+
+ * ext/tk/sample/tkmultilistframe.rb: bug fix
+
+Wed Dec 24 20:37:37 2003 Eric Sunshine <sunshine@sunshineco.com>
+
+ * configure.in (LDSHARED): Fixed typographical error in assignment of
+ LDSHARED for Rhapsody which caused linking of extension modules to
+ fail.
+
+Wed Dec 24 17:51:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_thread_flock): enable thread support again.
+
+Wed Dec 24 16:46:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (catch_timer): do not call rb_thread_schedule() inside to
+ avoid pthread_mutex_lock() deadlock. interrupts to system calls
+ are detected by TRAP_END via EINTR error.
+
+ * eval.c (thread_timer): do not post signal unless it is
+ absolutely necessary.
+
+ * rubysig.h (TRAP_END): add CHECK_INTS to switch thread.
+
+ * regex.c (re_compile_pattern): check if nextp is smaller than
+ pend. [ruby-dev:22372]
+
+ * eval.c (umethod_bind): remove method overridden check.
+ [ruby-dev:22366]
+
+Wed Dec 24 16:13:05 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read): should check for error
+ status by SSL_get_error().
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_write): ditto.
+
+Wed Dec 24 14:23:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): clear the buffer argument
+ when returning nil. [ruby-dev:22363]
+
+ * test/ruby/ut_eof.rb (TestEOF::test_eof_0, TestEOF::test_eof_1):
+ add buffer argument tests.
+
+Wed Dec 24 14:07:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: Modules are allowed to rescue.
+
+ * lib/test/unit/autorunner.rb: show output_level in order.
+
+ * lib/test/unit/collector/dir.rb: get rid of successive same
+ directories in load path.
+
+ * test/testunit/test_assertions.rb (test_assert_nothing_raised,
+ test_assert_raise): test for modules.
+
+Wed Dec 24 13:43:34 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (authenticate): remove "\n" from base64 encoded
+ strings.
+
+Wed Dec 24 11:26:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb: should not create any
+ files or directories in current directory. [ruby-talk:88724]
+
+Wed Dec 24 10:29:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): never return nil at
+ unlimited read. [ruby-dev:22334]
+
+ * ext/stringio/stringio.c (strio_read): support second
+ argument. [ruby-dev:22350]
+
+Wed Dec 24 09:38:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (arg): should return 0 after error. [ruby-dev:22360]
+
+Wed Dec 24 00:56:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): do not return nil at the end of file.
+ [ruby-dev:22334]
+
+ * io.c (argf_read): do not depend on nil at eof behavior of
+ IO#read().
+
+ * eval.c (rb_thread_join): dup exception before re-raising it.
+
+ * io.c (rb_io_eof): call clearerr() to prevent side effect. this
+ patch is supplied by Masahiro Sakai <sakai@tom.sfc.keio.ac.jp>.
+ [ruby-dev:22234]
+
+ * pack.c (OFF16): get offset for big endian machines.
+
+ * pack.c (pack_pack): use OFF16 instead of OFF16B.
+ [ruby-dev:22344]
+
+ * pack.c (pack_unpack): ditto.
+
+Tue Dec 23 22:47:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_check_readable): set FMODE_RBUF always, even if
+ NEED_IO_SEEK_BETWEEN_RW is not defined. [ruby-dev:22340]
+
+ * io.c (rb_io_check_writable): clear FMODE_RBUF before writing
+ something.
+
+Tue Dec 23 22:25:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/optparse.rb: incomplete RDoc documentation added in place of
+ existing RD comments. Tabs converted to spaces.
+
+Tue Dec 23 19:44:47 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/test_streamhandler.rb (test_basic_auth): removed.
+ soap4r + basic_auth is not officially supported in ruby/1.8.1 even
+ though soap4r + basic_auth + http-access2 should run fine.
+
+Tue Dec 23 19:42:59 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * rational.c: removed commented-out code.
- [Feature #10376][ruby-core:65643]
+ * io.c (rb_io_ungetc): raise an exception at unread stream to
+ avoid unspecified behavior. [ruby-dev:22330]
-Sat Jan 10 10:12:15 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_system.rb (test_syntax): glob relatively from
+ __FILE__.
- * array.c (rb_ary_select_bang): keep the array consistent by
- removing unselected values soon. [ruby-dev:48805] [Bug #10722]
+Tue Dec 23 18:09:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Fri Jan 9 23:20:04 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * pack.c (pack_pack): remove unnecessary negative value check.
+ [ruby-dev:22329]
- * lib/rubygems: Update to RubyGems HEAD(e53c54a).
- * test/rubygems: ditto.
+Tue Dec 23 17:26:55 2003 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-Fri Jan 9 11:13:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bcc32/Makefile.sub (config.h): bcc has finite(). [ruby-list:38940]
- * parse.y (assocs, assoc): eliminate splatting empty literal
- hashes. [ruby-core:67446] [Bug #10719]
+Tue Dec 23 16:08:16 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * compile.c (compile_array_): support splatted hash in hash type.
+ * lib/rexml/encodings/US-ASCII.rb: typo. [ruby-talk:88650]
-Fri Jan 9 10:57:09 2015 Vit Ondruch <vondruch@redhat.com>
+ * test/ruby/test_system.rb: num of asserts depended on running dir.
- * configure.in (RUBY_SETJMP_TYPE): Remove superfluous semicolon
- which causes a syntax error with autoconf 2.63.
- [ruby-core:67429] [Bug #10716]
+ * test/xsd/test_noencoding.rb: rexml + without iconv/uconv cannot
+ handle euc-jp. install iconv, uconv or xmlscan.
-Fri Jan 9 07:23:32 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Tue Dec 23 14:13:51 2003 akira yamada <akira@ruby-lang.org>
- * ext/psych/lib/psych/visitors/yaml_tree.rb: correctly quote non-ascii
- letters. Thanks @jirutka for the patch.
+ * lib/uri/generic.rb (URI::Generic::check_userinfo,
+ URI::Generic::check_user, URI::Generic::check_password): tests
+ conflicts/depends with other components closely.
- * test/psych/test_string.rb: test for change
+ * test/uri/test_generic.rb (TestGeneric::test_set_component):
+ added tets.
-Fri Jan 9 07:13:55 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+Tue Dec 23 11:08:34 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/psych/lib/psych/visitors/to_ruby.rb: call `allocate` on hash
- subclasses. Fixes github.com/tenderlove/psych/issues/196
+ * test/xsd/test_noencoding.rb: rescue Errno::EINVAL and do not test.
+ "euc-jp" might not be in supported encoding name list.
+ [ruby-talk:88650]
- * test/psych/test_hash.rb: test for change
+Tue Dec 23 06:10:31 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Fri Jan 9 06:58:43 2015 Aaron Patterson <aaron@tenderlovemaking.com>
+ * lib/webrick/cgi.rb (CGI): add support for mod_ruby.
- * ext/psych/lib/psych/visitors/to_ruby.rb: revive hashes with ivars
+ * lib/webrick/cgi.rb (CGI::Socket): add check for existence of
+ OpenSSL module in all HTTPS related methods.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: dump hashes with ivars.
- Fixes github.com/psych/issues/43
+ * lib/webrick/cgi.rb (CGI::Socket#cipher): should create similar
+ value to OpenSSL::SSLSocket#cipher.
- * test/psych/test_hash.rb: test for change
+ * lib/webrick/httpresponse.rb (HTTPResponse#setup_header): should
+ set "connection: close" if @keep_alive is false.
-Thu Jan 8 17:05:00 2015 Seiei Higa <hanachin@gmail.com>
+ * lib/webrick/https.rb (HTTPrequest#meta_vars): add supprt for
+ SSL_PROTOCOL, SSL_CIPHER_USEKEYSIZE and SSL_CIPHER_ALGKEYSIZE.
- * vm_method.c (rb_method_entry): if no super class, no original
- method entry. [ruby-core:67389] [Bug #10707]
+Mon Dec 22 23:00:05 2003 akira yamada <akira@ruby-lang.org>
-Thu Jan 8 16:31:43 2015 Seiei Higa <hanachin@gmail.com>
+ * lib/uri/generic.rb (URI::Generic::check_opaque): fixed typo.
- * vm_method.c (rb_export_method): bail out if the original method
- is undefined when the method is refined.
- [ruby-core:67387] [Bug #10706]
+Mon Dec 22 21:59:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jan 8 12:53:44 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/iconv/iconv.c (map_charset): always ensure code is a String.
- * dir.c (glob_helper): match in case-folding only if the directory
- resides on a case-insensitive file system, on OSX.
- [ruby-core:67364] [Bug #10700]
+Mon Dec 22 21:15:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jan 8 11:39:18 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * class.c (rb_mod_init_copy): always copy singleton class.
+ [ruby-dev:22325]
- * .travis.yml: Remove redundant configuration option.
- [fix GH-809] Patch by @gxworld
+Mon Dec 22 20:44:36 2003 akira yamada <akira@ruby-lang.org>
-Thu Jan 8 07:17:14 2015 Eric Wong <e@80x24.org>
+ * lib/uri/generic.rb (URI::Generic#route_from): accepts urls which
+ has no host-part.
- * lib/resolv.rb: consider ENETUNREACH as ResolvTimeout
- [ruby-core:67411] [Bug #10712]
+ * test/uri/test_generic.rb (TestGeneric::test_route): added a test.
-Thu Jan 8 00:13:52 2015 Tanaka Akira <akr@fsij.org>
+Mon Dec 22 20:38:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/open3.rb: Open3 properly passes non-keyword hash args to spawn.
- Fixed by Josh Cheek. [Fix GH-808]
- Related to [ruby-core:67347] [Bug #10699]
+ * lib/cgi.rb: reduce eval.
-Wed Jan 7 19:19:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/cgi.rb (CGI::QueryExtension::read_multipart): alias path to
+ local_path. [ruby-list:38883]
- * dir.c (dir_initialize): workaround of opendir failure at symlink
- directories on Windows via CIFS.
+Mon Dec 22 20:09:31 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Wed Jan 7 18:52:50 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/soap/test_property.rb: remove duplicated test method.
- * dir.c (need_normalization): not only HFS+, CIFS (SMB) is also
- decomposed. [Bug #10704]
+Mon Dec 22 18:22:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * dir.c (NORMALIZE_UTF8PATH): Unicode decomposition seems to
- perform in an upper layer than file systems on OSX, as all path
- names are always decomposed regardless of file system types.
+ * bcc32/Makefile.sub, win32/Makefile.sub (config.h): remove
+ HAVE_ISINF definition to follow previous commits of missing.h
+ and win32/win32.h.
-Tue Jan 6 21:41:04 2015 Tanaka Akira <akr@fsij.org>
+Mon Dec 22 17:23:42 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (timelocalw): Set tm_isdst field -1 if vtm->isdst is
- VTM_ISDST_INITVAL. This bug is introduced at packing struct
- vtm (r45155).
- [ruby-core:67345] [Bug #10698] Reported by Boris Ruf.
+ * configure.in (ac_cv_func_setitimer): moved from defines.h
-Tue Jan 6 03:10:54 2015 Koichi Sasada <ko1@atdot.net>
+ * defines.h, rubysig.h, signal.c: removed macro handling which
+ should be done in configure.
- * test/fiddle/test_handle.rb: fix syntax.
+ * configure.in (intrinsics.h): check if present.
-Tue Jan 6 00:16:10 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ruby.h: include intrinsics.h if available.
- * test/fiddle/test_handle.rb (test_NEXT): use -test-/dln/empty
- which is always a shared object and is not used by others.
- [ruby-dev:48629] [Bug #10384]
+ * bignum.c, marshal.c: include ieeefp.h if available.
-Mon Jan 5 14:58:01 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * missing.h (isinf): define as a macro if finite() and isnan()
+ are available. [ruby-core:02032]
- * test/ruby/test_io.rb: added timeout for AIX environment.
- [ruby-core:62983][Bug #9917]
+Mon Dec 22 17:07:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-Sun Jan 4 22:33:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (mingw): set isnan, finite and isinf to yes.
- * test/lib/test/unit.rb (ExcludesOption): add "excludes" support
- to test suite, for alternative implementations and platforms.
- [Feature #10682]
+Mon Dec 22 13:40:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sun Jan 4 22:32:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/soap/property.rb: passing block by reference.
- * test/lib/test/unit.rb (Test::Unit): reorder modules and merge
- each modules.
+Mon Dec 22 00:32:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/lib/test/unit.rb (Test::Unit): split the large class into
- each modules.
+ * eval.c (rb_with_disable_interrupt): use ENABLE_INTS instead of
+ ALLOW_INTS which may switch context. [ruby-dev:22319]
-Sun Jan 4 21:32:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/emitter.c (syck_emitter_write): str bigger than
+ e->bufsize causes buffer overflow. [ruby-dev:22307]
- * parse.y (f_label): return tLABEL value as it is.
- [ruby-core:67315] [Bug #10693]
+Sun Dec 21 17:29:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jan 4 14:02:37 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * class.c (rb_check_inheritable): new function. [ruby-dev:22316]
- * test/lib/test/unit/parallel.rb (run): expand the file name to be
- loaded, so that relative paths work in parallel mode.
+ * intern.h: add prototype.
-Sun Jan 4 13:36:56 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * eval.c (superclass): use rb_check_inheritable().
- * test/test_tempfile.rb: use assert_file for more descriptive message.
- following r49131.
+ * object.c (rb_class_initialize): check argument validity.
-Sun Jan 4 13:05:09 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Sun Dec 21 16:25:10 2003 Tanaka Akira <akr@m17n.org>
- * string.c: improve docs for String#<=>. [ruby-core:65399][Feature #10322]
- Patch by gogo tanaka.
+ * lib/pathname.rb (Pathname#+): re-implemented to resolve ".." in
+ beginning of the argument.
+ (Pathname#join): concatenate from the last argument.
+ (Pathname#parent): just use Pathname#+.
-Sun Jan 4 12:42:24 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Sun Dec 21 00:12:37 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * array.c: improve docs for Array#reject. [ruby-core:65324][misc #10307]
- Patched by Nebu Pookins.
+ * ext/tk/lib/tk.rb: add new methods (TkScrollbar#assign, assign_list)
-Sun Jan 4 12:24:11 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * ext/tk/sample/tkmultilistframe.rb: use TkScrollbar#assign method
- * string.c: improve docs for String#strip and variations.
- [ruby-core:66081][Bug #10476]
+Sat Dec 20 21:59:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sun Jan 4 09:21:04 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): refine regexp.
- * lib/drb/drb.rb: removed unused argument. Patch by @vipulnsward
- [fix GH-515]
+ * lib/webrick/cgi.rb (CGI#start): NPH scripts return status line
+ instead of Status: header field.
-Sun Jan 4 09:18:31 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/webrick/cgi.rb (CGI::Socket): refine some coditions.
- * lib/tempfile.rb: provide default basename parameter.
- [fix GH-523] Patch by @dissolved
- * test/test_tempfile.rb: ditto.
+Sat Dec 20 16:07:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jan 4 00:43:41 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * lib/optparse.rb (OptionParser::Completion::complete): wrong
+ Regexp for word boundary. pointed out by Gavin Sinclair.
- * README.ja.md: add guidance of mailing list and bugs.r-l.o.
+ * lib/optparse.rb (OptionParser::make_switch): [no-] prefix was
+ missing.
-Sat Jan 3 23:56:28 2015 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Sat Dec 20 11:40:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c: fix docs for Hash#invert. [ruby-core:66917] [Bug #10612]
+ * lib/yaml.rb (YAML::YAML): adjust Marshal version.
-Sat Jan 3 19:52:12 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 20 03:56:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * include/ruby/intern.h (rb_str_new_literal): define on all
- platforms, not only gcc.
+ * eval.c (rb_with_disable_interrupt): prohibit thread context
+ switch during proc execution. [ruby-dev:21899]
-Sat Jan 3 18:53:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 20 02:41:02 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * ext/fiddle/lib/fiddle/cparser.rb (parse_ctype): limit split word
- number as the rest are not used.
+ * lib/webrick/cgi.rb: add file. (yet another CGI library)
-Sat Jan 3 18:19:50 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * MANIFEST: add lib/webrick/cgi.rb.
- * ext/fiddle/lib/fiddle/cparser.rb: r49110 broke Fiddle::Import with
- type_alias.
- * test/fiddle/test_cparser.rb: added type_alias test for parse_ctype
- and parse_struct_signature.
+Sat Dec 20 02:18:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Jan 3 11:50:16 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * misc/ruby-mode.el (ruby-calculate-indent): proper indentation
+ inside of parentheses. [ruby-dev:22308]
- * ext/openssl/ossl.h: avoid to build failure of Windows environment.
- * ext/openssl/ossl_ssl_session.c: ditto.
+Fri Dec 19 21:24:22 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat Jan 3 11:27:46 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): should not set
+ HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH.
- * array.c: Improve performance of Array#shift. use shared instead of
- MEMMOVE if with arguments. Patch by @ksss [fix GH-537]
- * test/ruby/test_array.rb: ditto.
- * benchmark/bm_array_shift.rb: Added benchmark of GH-537 issue.
+ * lib/webrick/https.rb (HTTPRequest#parse): should check presence
+ of cert() method to detect SSLSocket.
-Sat Jan 3 10:38:52 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Fri Dec 19 22:56:46 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * lib/net/http.rb: More descriptive error message when net/http fails
- to connect to a server. Patch by @xaviershay [fix GH-700]
- * test/net/http/test_http.rb: ditto.
+ * lib/soap/property.rb (SOAP::Property#load): new method for loading
+ property value into existing property tree.
-Sat Jan 3 10:14:51 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * test/soap/test_property.rb: add test.
- * ext/openssl/ossl.h: Make `SSL_SESSION_cmp` use `CRYPTO_memcmp`
- [fix GH-591] Patch by @PiPeep
- * ext/openssl/ossl_ssl_session.c: ditto.
+Fri Dec 19 19:21:49 2003 akira yamada <akira@ruby-lang.org>
-Sat Jan 3 09:54:32 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/runit/cui/testrunner.rb (RUNIT::CUI::TestRunner::run):
+ should use Test::Unit::UI::{PROGRESS_ONLY,VERBOSE}.
- * ext/fiddle/lib/fiddle/cparser.rb: Support for Fiddle::CParser
- to handle rich signatures including parameter names and function
- pointer types. Patch by @theryan [fix GH-590]
- * test/fiddle/test_cparser.rb: ditto.
+Fri Dec 19 17:36:49 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Sat Jan 3 09:01:43 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/tk/sample/tkmultilistbox.rb: bug fix
- * NEWS: added compatibility entry of r49101.
+ * ext/tk/sample/tkmultilistframe.rb: new sample script
-Fri Jan 2 21:06:59 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Fri Dec 19 03:44:27 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
- * lib/net/http.rb (Net::HTTP#send_request): there is no response body
- with HEAD request. Patch by @rodrigosaito [fix GH-520]
+ * lib/webrick/httputils.rb (parse_form_data): should return an
+ empty Hash if the body is empty.
-Fri Jan 2 21:04:36 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 18 21:47:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/net/http/test_http.rb (_test_send_request__HEAD): Added
- failing test for send_request with HEAD method.
+ * lib/mkmf.rb (create_makefile): should remove deffile if it's
+ made by miniruby. based on nobu's patch.
-Fri Jan 2 18:41:20 2015 Tanaka Akira <akr@fsij.org>
+Thu Dec 18 21:44:21 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * eval.c (ruby_init): Print ruby_setup() error only in debug mode.
- Unsuppressable error message is not a good idea.
- Note that the message is printed sometimes with following
- code (highly timing dependent, though):
- pid = spawn("ruby -e ''"); Process.kill(:TERM, pid)
+ * eval.c (stack_extend): ignore inline optimization on VC7.
-Fri Jan 2 16:18:44 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * win32/Makefile.sub (OS, RT): can override.
- * test/ruby/test_module.rb: Refactor invalid testcase.
- [fix GH-472][ruby-core:59035][Bug #9240]
+ * win32/Makefile.sub (LDFLAGS): ditto. shouldn't use pdb:none
+ option. based on Tietew's patch [ruby-dev:22289]
-Fri Jan 2 15:53:00 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 18 16:38:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/webrick/utils.rb: removed unused argument variable.
- [fix GH-356] Patch by @vipulnsward
- * lib/webrick/server.rb: ditto.
- * lib/webrick/ssl.rb: ditto.
- * test/webrick/test_utils.rb: added test for WEBrick::Utils#create_listeners.
+ * dir.c (fnmatch): unlike find_dirsep(), rb_path_next() never
+ return NULL.
-Fri Jan 2 15:35:53 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Dec 18 15:27:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
- * lib/securerandom.rb: improve syntax and grammar of documentation.
- [fix GH-796][ci skip] Patch by @Erol
+ * lib/ipaddr.rb (IPSocket::getaddress): merge usa's patch.
+ [ruby-dev:21678]
-Fri Jan 2 15:10:01 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Wed Dec 17 15:15:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/openssl/test_ssl_session.rb (OpenSSL#test_ctx_client_session_cb):
- fix test failure with OpenSSL disabled SSLv3 protocol.
- [ruby-core:63772] [Bug #10046]
+ * lib/cgi.rb (CGI::QueryExtension::Value::[]): should work like
+ String#[] if more than one arguments are specified.
-Fri Jan 2 09:08:31 2015 Tanaka Akira <akr@fsij.org>
+ * lib/delegate.rb: avoid using common instance name as "@obj".
- * lib/resolv.rb (Resolv::DNS::Label::Str#==): Check class equality.
- (Resolv::DNS::Name#initialize): Normalize labels as
- Resolv::DNS::Label::Str objects.
+ * lib/cgi.rb (CGI::QueryExtension::Value): Value is no longer
+ subclass of String, but DelegateClass(String).
-Thu Jan 1 21:41:49 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/curses/extconf.rb: restore function check for init_color.
+ [ruby-list:38905]
- * doc/regexp.rdoc: fix regexp docs for whitespace character.
- [ruby-dev:48765] [Bug #10624]
+ * Makefile.in: need to specify $(MAINLIBS) for the miniruby
+ generation rule.
-Thu Jan 1 17:50:52 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: better FreeBSD -lc_r support.
- * test/ruby/test_rubyoptions.rb: try locale encoding name.
- [ruby-core:67109] [Bug #10643]
+Wed Dec 17 00:16:14 2003 Minero Aoki <aamine@loveruby.net>
-Thu Jan 1 11:07:12 2015 Eric Wong <e@80x24.org>
+ * ext/strscan/strscan.c: new method
+ StringScanner#beginning_of_line? (alias #bol?)
- * symbol.c (rb_gc_free_dsymbol): delete from global fstr hash
- * test/ruby/test_symbol.rb (test_symbol_fstr_leak): test for bug
- [ruby-core:67268] [Bug #10686]
+ * ext/strscan/strscan.c: new method StringScanner#concat and #<<.
-Thu Jan 1 09:14:21 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/strscan/strscan.c: StringScanner#new(str) does not duplicate
+ nor freeze STR (allow destructive modification).
- * vm_args.c (keyword_hash_p): fix non-symbol keys hash.
- rb_extract_keywords() returns 0 not Qnil when no symbol keys is
- included. [ruby-core:67264] [Bug #10685]
+ * test/strscan/test_stringscanner.rb: test new methods above.
-Wed Dec 31 17:48:43 2014 Tanaka Akira <akr@fsij.org>
+ * test/strscan/test_stringscanner.rb: test destructive string
+ modification.
- * lib/resolv.rb (Resolv::DNS::Label::Str#initialize): Set encoding
- ASCII-8BIT before downcase. case insensitivity of DNS labels doesn't
- apply non-ASCII characters. [RFC 4343]
+Tue Dec 16 21:20:47 2003 Tanaka Akira <akr@m17n.org>
-Wed Dec 31 16:48:44 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/pp.rb: don't use local variable `pp'.
- * parse.y (gettable_gen): disable warnings of possible reference
- to a local variable defined in a past scope.
- [ruby-core:67162] [Bug #10661]
+ * lib/prettyprint.rb: ditto.
-Wed Dec 31 13:43:48 2014 Tanaka Akira <akr@fsij.org>
+Tue Dec 16 13:20:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * lib/resolv.rb (Resolv::DNS::Name#==): Compare an array of Label:Str
- objects. Label#Str#== is case-insensitive.
+ * ext/tk/lib/tk.rb: condition bug of if statement on
+ {pack,grid}_propagate methods
-Tue Dec 30 16:16:12 2014 Ben Miller <bmiller@rackspace.com>
+Tue Dec 16 03:17:29 2003 why the lucky stiff <why@ruby-lang.org>
- * lib/resolv.rb (Resolv::DNS::Name#==): DNS is case-insensitive, so the
- comparison should be case-insensitive as well.
- [ruby-core:66498] [Bug #10550]
+ * lib/yaml/rubytypes.rb: comments in strings. [ruby-talk:88012]
-Tue Dec 30 16:03:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/yaml/test_yaml.rb: add test.
- * lib/resolv.rb (Resolv::DNS::Name): names with different dots
- should be different.
+Tue Dec 16 01:14:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Dec 30 13:16:56 2014 Martin Duerst <bernhard+git@lsmod.de>
+ * eval.c (catch_timer): check rb_thread_crtical in main native
+ thread.
- * lib/uri/common.rb: Initialize HTML5ASCIIINCOMPAT to empty Array
- to avoid error during bootstrap when encodings are not yet defined.
- [Bug #10678]
+ * eval.c (thread_timer): just sends signals periodically, to
+ prevent main native thread from receiving them in critical
+ section. [ruby-core:01959]
-Tue Dec 30 09:29:26 2014 Bernhard M. Wiedemann <bernhard+git@lsmod.de>
+Mon Dec 15 13:32:22 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/dbm/dbm.c (Init_dbm): [DOC] as UNIX permissions are octal
- numbers, needs to be prefixed by 0. [Fix GH-800]
+ * dir.c (check_dirname): check string safety and remove extraneous
+ trailing directory separators. [ruby-dev:22279]
-Tue Dec 30 08:57:39 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * file.c: renamed and externalized rb_path_next,
+ rb_path_skip_prefix, rb_path_last_separator, rb_path_end.
- * lib/unicode_normalize.rb: typo fix. [ci skip]
- [ruby-dev:48794][misc #10675]
+ * intern.h: prototypes for rb_path_next, rb_path_skip_prefix,
+ rb_path_last_separator, rb_path_end.
-Mon Dec 29 19:38:01 2014 Yukihiro Matsumoto <matz@ruby-lang.org>
+Mon Dec 15 09:27:46 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * version.h (RUBY_VERSION): 2.3.0 development has started.
+ * ext/openssl/ossl_pkcs12.c (ossl_pkcs12_initialize): first argument
+ of rb_protect should take an argument of VALUE.
-Mon Dec 29 18:58:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 14 18:46:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
- * re.c (unescape_nonascii): append escape sequence as-is not
- unescaped character, to get rid of unexpected meta-character.
- [ruby-core:67193] [Bug #10670]
+ * ext/socket/socket.c (Init_socket): IPv6 is not supported although
+ AF_INET6 is defined on MinGW.
-Mon Dec 29 14:27:33 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/ipaddr.rb (AF_INET6): workaround in the environment which does
+ not support IPv6.
- * doc/syntax/literals.rdoc (Symbols): now Symbols created by
- interpolation can be garbage collected. patch by Yihang Ho in
- [ruby-core:67194]. [Bug #10671]
+Sat Dec 13 18:55:16 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 29 11:18:17 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/iconv/charset_alias.rb: preserve original order.
- * thread.c (rb_thread_variable_get): fix dynamic symbol keys.
- rb_check_id() returns non-zero only for static symbols, whereas
- thread local variable keys can be dynamic symbols.
- [ruby-core:67185] [Bug #10667]
+ * ext/iconv/extconf.rb: remove wrapper file at clean.
-Mon Dec 29 10:37:27 2014 Thiago Lewin <thiago_lewin@yahoo.com.br>
+Sat Dec 13 18:09:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (rb_f_select): [DOC] workaround for YARD doc. [Fix GH-799]
+ * eval.c (thread_timer): use timer by sub-thread and nanosleep.
+ [ruby-talk:87519]
- * process.c (proc_detach): [DOC] fix missing closing parenthesis.
- [Fix GH-799]
+ * gc.c (Init_stack): no stack adjustment for THREAD_SAFE.
-Mon Dec 29 07:27:23 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Sat Dec 13 17:17:59 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/json, test/json: merge JSON HEAD(17fe8e7)
- https://github.com/flori/json/compare/v1.8.1...17fe8e7
+ * eval.c (proc_alloc): cache the created object at first time.
+ [ruby-talk:61288], [ruby-dev:22240]
-Sun Dec 28 23:49:37 2014 Michal Papis <mpapis@gmail.com>
+Sat Dec 13 09:01:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * rbinstall.rb: fix target location for installing bundled gems.
- install to the prepared directory instead of default Gem.dir,
- not to be affected GEM_HOME environment variable. [Fix GH-798]
+ * configure.in: check ucontext.h.
-Sun Dec 28 18:19:28 2014 Eric Wong <e@80x24.org>
+ * eval.c: use getcontext/setcontext() instead of setjmp/longjmp()
+ on ia64 or with native thread enabled. [ruby-core:01932]
- * test/-ext-/iseq_load/test_iseq_load.rb
- (test_next_in_block_in_block): test using ISeq#eval
- (test_break_ensure): ditto
- [ruby-core:66988]
+Sat Dec 13 03:09:14 2003 why the lucky stiff <why@ruby-lang.org>
-Sun Dec 28 16:25:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/yaml/rubytypes.rb: anonymous struct fix. [ruby-core:01946]
- * cygwin/GNUmakefile.in (EXTOBJS): override to add resource files
- always. [ruby-core:67153] [Bug #10657]
+ * test/yaml/test_yaml.rb: add test.
-Sun Dec 28 13:54:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 12 22:36:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * parse.y (f_kwrest, new_args_tail_gen): unnamed rest keyword and
- keywords bits arguments should be unique. since internal IDs
- depend on the local variable index in the current scope, new ID
- should be made before popping those vtables.
- [ruby-core:67157] [Bug #10659]
+ * lib/csv.rb: add Cell#to_str and Cell#to_s for /.../ =~ aCell,
+ "#{aCell}" and so on.
-Sat Dec 27 20:12:55 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/csv/test_csv.rb: add tests.
- * ext/json/generator/generator.c (JSON_Generator_State_type): add
- #ifdef for backward compatibility.
+Fri Dec 12 19:33:06 2003 Minero Aoki <aamine@loveruby.net>
- * ext/json/parser/parser.rl (JSON_Parser_type): ditto.
+ * lib/fileutils.rb (mkdir): remove trailing `/' from pathes.
- * ext/json/generator/generator.h (ZALLOC): add fallback definition.
+ * lib/fileutils.rb (rmdir): ditto. [ruby-dev:22238]
- * ext/json/parser/parser.h (ZALLOC): ditto.
+ * lib/fileutils.rb (rmdir_r): ditto.
-Sat Dec 27 16:54:05 2014 Tanaka Akira <akr@fsij.org>
+ * lib/fileutils.rb (fu_copy_dir): check if it is a directory after
+ mkdir(2).
- * process.c: Unused code removed.
- It seems waitpid() is universally available on POSIX platforms.
+Fri Dec 12 06:06:09 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 27 15:08:27 2014 Eric Wong <e@80x24.org>
+ * eval.c (proc_invoke): fix class name in warning message for
+ define_method. [ruby-dev:22235]
- * vm_core.h (rb_vm_living_threads_insert): preserve order
- [Bug #10660] [ruby-core:67154] [ruby-core:67159]
+Thu Dec 11 21:24:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-Sat Dec 27 13:08:20 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/openssl/ossl_pkcs12.[ch]: new files. add OpenSSL::PKCS12.
- * ext/socket/socket.c: improved document for YARD doc.
- [fix GH-795][ci skip] Patch by @tlewin
+ * ext/openssl/ossl.[ch]: ditto.
-Sat Dec 27 10:11:21 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/openssl/MANIFEST: add ossl_pkcs12.[ch].
- * ext/tk/lib/tkextlib/tcllib/plotchart.rb: fix to invoke correct function
- of tcllib. Patch by @zalt50 [fix GH-787]
+Thu Dec 11 20:54:28 2003 Minero Aoki <aamine@loveruby.net>
-Sat Dec 27 10:03:41 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * lib/fileutils.rb (mkdir_p): remove trailing `/' befere mkdir(2).
+ mkdir("nonexistdir/") does not work on NetBSD/Alpha 1.6.1.
- * tool/make-snapshot: show sha1 digest when making packages.
- it's request from https://github.com/ruby/www.ruby-lang.org/issues/921
- [fix GH-794]
+ * lib/fileutils.rb (fu_list): call to_str for all arguments.
-Fri Dec 26 15:32:16 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 11 20:07:01 2003 WATANABE Hirofumi <eban@ruby-lang.org>
- * ext/tk/tcltklib.c (ip_invoke_core): remove probably duplicate
- dead code.
+ * lib/ftools.rb (makedirs): sync with fileutils.
-Fri Dec 26 15:28:27 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 11 19:53:03 2003 Minero Aoki <aamine@loveruby.net>
- * ext/tk/tcltklib.c (ip_ruby_cmd_receiver_const_get): simply use
- rb_path2class() to get a class/module from its name.
+ * lib/fileutils.rb (mkdir_p): catch all SystemCallErrors.
+ (mkdir("C:\") causes EACCESS on Windows 2000/NTFS)
-Fri Dec 26 15:20:54 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 11 19:08:02 2003 Minero Aoki <aamine@loveruby.net>
- * marshal.c (w_long): append at once by w_nbyte() instead of
- appending byte by byte.
+ * lib/fileutils.rb (mkdir_p): check if it is a directory after
+ mkdir(2) instead of before mkdir(2), to avoid race condition.
+ [ruby-talk:87730]
+ Refer: mkinstalldirs sh script, GNU mkdir(1) (coreutils 5.0)
-Fri Dec 26 15:13:13 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 11 18:49:30 2003 Minero Aoki <aamine@loveruby.net>
- * ext/json/parser/parser.rl (unescape_unicode): check if valid
- before bit-or assignments.
- reported by Denis Denisov <denji0k AT gmail.com>.
+ * lib/fileutils.rb: def m( arg ) -> def m(arg).
- * ext/nkf/nkf-utf8/nkf.c (nkf_iconv_t): fix a missing semicolon.
- reported by Denis Denisov <denji0k AT gmail.com>.
+Thu Dec 11 11:39:43 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (rb_spawn_process): get rid of usage of uninitialized
+ * configure.in (ieeefp.h), numeric.c: needed for finite() on
+ Solaris. [ruby-core:01921]
+
+ * file.c (rb_stat_inspect): adjust format specifier.
+
+ * parse.c (arg_prepend): nodetype() is for debug use.
+
+ * ruby.h (ISASCII, etc): cast to int to get rid of warning.
+
+ * ruby.h (alloca.h): include even in GCC. [ruby-core:01925]
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValue): adjust format
+ specifier.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_prec, BigDecimal_coerce,
+ BigDecimal_divmod): use rb_assoc_new() to suppress memory usage.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_split): ditto.
+
+ * ext/dl/sym.c (rb_dlsym_guardcall): guard itself should be
+ volatile.
+
+ * ext/iconv/iconv.c (iconv_convert): ensure actual parameter with
+ format specifier.
+
+ * ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): do not
+ define unless used.
+
+ * ext/pty/pty.c (getDevice): get rid of warning.
+
+ * ext/socket/socket.c (port_str, sock_s_getaddrinfo,
+ sock_s_getnameinfo): FIX2INT() now returns long.
+
+ * ext/socket/socket.c (init_inetsock_internal): uninitialized
variable.
- reported by Denis Denisov <denji0k AT gmail.com>.
- * regexec.c (match_at): ditto.
+ * ext/syck/rubyext.c (syck_parser_assign_io): add prototype.
- * ext/win32ole/win32ole.c (ole_wc2mb_alloc, ole_vstr2wc, ole_mb2wc):
- ditto.
+ * ext/syck/rubyext.c (rb_syck_mktime, yaml_org_handler): use
+ ISDIGIT() instead of isdigit() to avoid warnings and for
+ platforms which don't support non-ascii charater.
+
+Wed Dec 10 19:28:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): set EOF flag at short read.
+ [ruby-dev:22223], [ruby-dev:22224]
+
+Wed Dec 10 18:07:25 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]
+
+Wed Dec 10 17:54:51 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): do not set EOF flag when
+ requested length is zero. [ruby-dev:22214]
+
+Wed Dec 10 17:17:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): should return given string even if data read is
+ empty. [ruby-dev:22207]
+
+Wed Dec 10 17:16:06 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): adjust behavior at reading
+ beyond EOF to IO. [ruby-dev:22205]
+
+ * test/ruby/ut_eof.rb (TestEOF::Seek): test behaviors at reading
+ beyond EOF.
+
+ * test/ruby/test_file.rb, test/stringio/test_stringio.rb: include
+ TestEOF::Seek test case.
+
+Wed Dec 10 15:01:19 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/monitor/test_monitor.rb (test_cond): use Queue#deq
+ instead of sleep.
+
+Wed Dec 10 14:45:39 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/pty/pty.c (HAVE_SYS_IOCTL_H): need to include <sys/ioctl.h>
+ for TIOCSCTTY on *BSD. based on gotoyuzo's patch.
+ (ruby-bugs:PR#1211)
+
+ * ext/pty/pty.c (establishShell): should close descriptors if fork
+ failed.
+
+Wed Dec 10 12:53:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.h: define execv() using do_aspawn().
+
+ * process.c (proc_exec_v): remove #ifdef's which stopped needing.
+
+Tue Dec 9 23:32:23 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tkcanvas.rb, ext/tk/lib/tkdialog.rb,
+ ext/tk/lib/tkentry.rb, ext/tk/lib/tkscrollbox.rb, ext/tk/lib/tktext.rb,
+ ext/tk/sample/tkalignbox.rb, ext/tk/sample/tkcombobox.rb,
+ ext/tk/sample/tkmultilistbox.rb, ext/tk/sample/tkoptdb.rb, ext/tk/sample/tktextframe.rb,
+ ext/tk/sample/demos-en/dialog1.rb, ext/tk/sample/demos-en/dialog2.rb,
+ ext/tk/sample/demos-jp/dialog1.rb, ext/tk/sample/demos-jp/dialog2.rb:
+ overrided instance methods, which are private methods on the super
+ class, are changed to 'private'
+
+Tue Dec 9 19:53:02 2003 akira yamada <akira@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI::Generic#route_from0): make case insensitive
+ for host-part.
+
+ * test/uri/test_generic.rb (test_route): added tests for the above
+ change.
+
+Tue Dec 9 14:10:48 2003 Tanaka Akira <akr@m17n.org>
+
+ * io.c (rb_io_check_readable): don't call io_seek if EOF flag is set,
+ to avoid clearing EOF flag.
+ (rb_io_check_writable): ditto.
+
+Tue Dec 9 02:53:55 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/tkalignbox.rb: new sample script
+
+Tue Dec 9 00:45:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: renamed #assert_raises to #assert_raise
+ and made the former call the latter. [ruby-core:01890]
+
+ * test/testunit/test_assertions.rb: ditto.
+
+Tue Dec 9 00:07:35 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/rpc/standaloneServer.rb: add 'shutdown' and 'status'
+ methods as delegates to WEBrick.
+
+ * test/soap/calc/{test_calc.rb,test_calc2.rb},
+ test/soap/helloworld/test_helloworld.rb,
+ test/wsdl/datetime/test_datetime.rb, test/wsdl/raa/test_raa.rb:
+ follow the change.
+
+Mon Dec 8 22:48:03 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/autorunner.rb: remove dependency to a particular
+ runner. [ruby-core:01901], [ruby-list:38869]
+
+ * lib/test/unit/ui/testrunnerutilities.rb: moved output level
+ constants from Console.
+
+ * lib/test/unit/ui/console/testrunner.rb: ditto.
+
+ * lib/test/unit/ui/{fox,gtk,gtk2,tk}/testrunner.rb (initialize):
+ accept output_level.
+
+Mon Dec 8 15:03:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/syck.c (syck_io_str_read): get rid of buffer overflow.
+
+Mon Dec 8 13:02:11 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/uri/common.rb: new method URI.regexp. [ruby-dev:22121]
+
+ * test/uri/test_common.rb: add test for URI.regexp.
+
+Mon Dec 8 12:44:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c: define swap16 and swap32 only if they are not
+ defined. OpenBSD defines these macros. [ruby-dev:22181]
+
+Sun Dec 7 20:54:17 2003 Tanaka Akira <akr@m17n.org>
+
+ * ext/iconv/iconv.c (map_charset): make case sensitive.
+ ext/iconv/charset_alias.rb (charset_alias): don't ignore
+ config.charset's information. sort aliases.
+
+Sat Dec 6 22:58:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_start_ssl): new function to wrap
+ SSL_connect and SSL_accept; if SSL_connect (or SSL_accept) returned
+ but not finished the handshake process, we should retry it.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_connect): call ossl_start_ssl.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_accept): ditto.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read): allow signal traps.
+
+Sat Dec 6 21:45:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (flush_before_seek): flush before seek on any platform.
+
+ * configure.in: ditto.
+
+Sat Dec 6 17:23:00 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/soap.rb(SOAP::Env.getenv): allow upcase environment variable
+ as well as downcase one.
+
+ * lib/soap/netHttpClient.rb(SOAP::NetHttpClient#proxy=): check URI.
+
+Fri Dec 5 23:22:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises,
+ Test::Unit::Assertions::assert_nothing_raised): use the last
+ argument as message unless class object.
+
+ * test/testunit/test_assertions.rb (test_assert_raises): test for
+ multiple exception list. [ruby-core:01891]
+
+ * test/testunit/test_assertions.rb (test_assert_nothing_raised): test
+ for non-exception classes.
+
+Fri Dec 5 22:23:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/netHttpClient.rb: proxy support did not work. fixed.
+
+ * lib/soap/property.rb: add class methods for loading property from
+ stream/file/propertyfile. propertyfile is a file which is located at
+ somedir in $:.
+
+ * lib/soap/soap.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb,
+ lib/wsdl/importer.rb: load property from propertyfile 'soap/property'
+ e.g. /usr/local/lib/ruby/site_ruby/1.8/soap/property.
+
+ * test/soap/test_property.rb, test/soap/test_streamhandler.rb: new file.
+
+Fri Dec 5 17:26:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_exec_end_proc): maintain tmp_end_procs.
+ [ruby-dev:22154]
+
+Fri Dec 5 13:36:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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 <akr@m17n.org>
+
+ * test/ruby/test_pipe.rb: use IO.pipe instead of IO.popen.
+
+Fri Dec 5 11:54:45 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): follow IO#read.
+
+ * test/ruby/ut_eof.rb, test/ruby/test_file.rb, test/ruby/test_pipe.rb,
+ test/stringio/test_stringio.rb: add EOF test.
+
+Fri Dec 5 02:49:35 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises):
+ allow multiple exception list. [ruby-core:01884]
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_nothing_raised):
+ check whether arguments are subclass of Exception.
+
+Thu Dec 4 23:54:00 2003 Rick Ohnemus <rick.ohnemus@systemware.com>
+
+ * dln.c (aix_loaderror): should not use member named 'errno' which
+ might be a macro (e.g. on AIX).
+
+Thu Dec 4 23:32:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): do not depend on lseek position.
+ [ruby-dev:22026]
+
+Thu Dec 4 22:37:26 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): preserve $! value when retry happens in the
+ rescue clause. [ruby-talk:86697]
+
+Thu Dec 4 21:50:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/drb/drb.rb (DRb::DRbMessage::send_request, send_reply):
+ should rescue errors and re-raise DRbConnError on write too.
+ [ruby-dev:22132]
+
+Thu Dec 4 16:41:17 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (exc_list): allow expanding list. [ruby-dev:22134]
+
+Thu Dec 4 14:09:24 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb (test_cp): test if the error is
+ kind of SystemCallError. It is needless details that which errno
+ is set on each systems.
+
+Thu Dec 4 13:24:13 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb: use Object#__send__ instead of Object#send.
+
+Thu Dec 4 13:17:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/streamHandler.rb: support latest released version of
+ http-access2.
+
+Thu Dec 4 13:04:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/soap.rb: add SOAP::Env module for environment repository
+ such as HTTP_PROXY.
+
+ * lib/soap/property.rb: property implementation.
+
+ * lib/soap/streamHandler.rb, lib/soap/wsdlDriver.rb,
+ lib/soap/rpc/driver.rb: use soap/property.rb.
+
+ * lib/wsdl/importer.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb:
+ use SOAP::Env.
+
+ * lib/soap/netHttpClient.rb: add basic_auth, ssl_config, and cookie
+ management interface, but ignored for now.
+
+ * lib/xsd/charset.rb: add XSD::Charset.encoding= interface to set
+ wiredump charset explicitly. it was fixed to 'utf-8' when iconv or
+ uconv module was found.
+
+Thu Dec 4 10:43:58 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/sym.c (rb_dlsym_guardcall): __declspec(noinline) is VC7
+ feature.
+
+Thu Dec 4 10:27:12 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: update hyperlink to the Japanese document.
+
+Thu Dec 4 09:12:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_asn1.c (asn1time_to_time): should check that
+ the underlying value of ASN1_TIME isn't NULL. [ruby-core:01881]
+
+Thu Dec 4 08:29:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (GenericServer#start): should rescue
+ Exception to avoid unexpected aborting. [ruby-core:01853]
+
+ * lib/webrick/server.rb (GenericServer#start_thread): should check
+ that peeraddr isn't nil before printing.
+
+ * lib/webrick/httpresponse.rb (HTTPResponse#start_thread): should
+ rescue Exception to avoid unexpected aborting of thread.
+
+Thu Dec 4 03:48:59 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Pathname#link, Pathname#symlink): obsoleted.
+ (Pathname#make_link, Pathname#make_symlink): new method.
+
+Thu Dec 4 01:45:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_read): should not terminate on empty string; wait
+ until real EOF. [ruby-dev:21969]
+
+ * io.c (argf_read): should adjust length to read, when length is
+ specified and read spans command line argument files.
+
+Wed Dec 3 19:38:36 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb: correct fcntl parameter. [ruby-dev:22120]
+
+Wed Dec 3 13:49:07 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: 'format'==>'Kernel.format' (avoid override trouble)
+
+ * ext/tk/lib/tkafter.rb: ditto.
+
+ * ext/tk/lib/tkcanvas.rb: ditto.
+
+ * ext/tk/lib/tkdialog.rb: ditto.
+
+ * ext/tk/lib/tktext.rb: ditto.
+
+Wed Dec 3 13:28:13 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (lex.c): try gperf first, and copy from the source
+ directory if failed. [ruby-dev:22123]
+
+ * ext/extmk.rb (MTIMES): let makefiles depend to mkmf.rb.
+
+ * lib/mkmf.rb (configuration): DLDFLAGS was duplicated.
+
+Tue Dec 2 23:18:12 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: wrote the warning about HTTP_PROXY environment
+ variable.
+
+Tue Dec 2 21:31:42 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bin/testrb: new test runner. [ruby-core:01845]
+
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner.run,
+ Test::Unit::AutoRunner#process_args): take test list to run and
+ options.
+
+ * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::RUNNERS,
+ Test::Unit::AutoRunner#run): should not exit inside a library,
+ just return the result instead.
+
+ * lib/test/unit.rb: ditto.
+
+ * test/runner.rb: exit with the test result.
+
+Tue Dec 2 20:18:48 2003 Eric Sunshine <sunshine@sunshineco.com>
+
+ * configure.in (AC_PROG_YACC): AC_DEFINE(OLD_YACC) if Yacc is found
+ instead of Bison or byacc.
+
+ * parse.y: If OLD_YACC is defined, ensure that YYMAXDEPTH is at least
+ 10000 (Bison's default) since some old versions of Yacc define it as
+ low as 150 by default, which is too low for Ruby to parse some files,
+ such as date/format.rb. Among other issues, the parse problem causes
+ "make test" to fail.
+
+Tue Dec 2 20:03:20 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb: check if Pathnames are usable
+ for arguments.
+
+Tue Dec 2 04:22:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: fixed #assert_no_match message.
+
+ * test/testunit/test_assertions.rb: ditto.
+
+Tue Dec 2 00:43:00 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/syck.c: string buffering bug. decrementing by full
+ max_size now. [ruby-core:01834]
+
+Mon Dec 1 21:33:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_sadded): prohibit singleton method definition for
+ Numerics. fill yet another gap between Fixnum and Bignum.
+
+Mon Dec 1 17:33:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (htov16): converts endian using swap16. htov32(), hton16,
+ hton32 as well. [ruby-talk:85377]
+
+ * pack.c (swap16): swap 2 bytes no matter how big short is on the
+ platform. swap32() is also prepared.
+
+ * numeric.c (rb_num2int): returns long to preserve information.
+ rb_fix2int(), rb_num2uint(), rb_fix2uint() as well.
+ [ruby-talk:85377]
+
+ * numeric.c (rb_num2uint): should not check for value range if the
+ source value is negative.
+
+Mon Dec 1 17:14:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sample/optparse/opttest.rb: added.
+
+Mon Dec 1 16:10:52 2003 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/rdoc.rb: (etc) initial merge into main tree.
+
+Mon Dec 1 14:17:49 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_each_src_dest0): call #to_str to allow
+ Pathname for arguments. [ruby-core:01795]
+
+ * test/fileutils/test_fileutils.rb: does much strict test on
+ "same" files detecting.
+
+Mon Dec 1 09:28:14 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (XCFLAGS): re-export $(XCFLAGS).
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (ARCH_FLAG): export $(ARCH_FLAG) (perhaps empty value).
+
+Mon Dec 1 01:03:27 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (TRY_LINK, link_command): added support for DLDFLAGS
+ and ARCH_FLAG. [ruby-dev:22085]
+
+Sun Nov 30 20:18:07 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: keep ARCH_FLAG separate. export ARCH_FLAG.
+ [ruby-core:01819]
+
+ * Makefile.in: add ARCH_FLAG to CFLAGS.
+
+ * Makefile.in: add @CPPFLAGS@ to CPPFLAGS.
+
+ * lib/mkmf.rb (link_command, cc_command): use ARCH_FLAG.
+
+ * lib/mkmf.rb (configuration): add ARCH_FLAG to DLDFLAGS.
+
+ * Makefile.in: add ARCH_FLAG to DLDFLAGS.
+
+ * configure.in: should put getcwd in AC_CHECK_FUNCS, not
+ AC_REPLACE_FUNCS. [ruby-core:01826]
+
+Sun Nov 30 18:22:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: do not override CCDLDFLAGS, LDFLAGS, XLDFLAGS,
+ DLDFLAGS and LDSHARED.
+
+ * configure.in: XCFLAGS for compiling ruby itself. ARCH_FLAG is
+ reflected in CFLAGS.
+
+ * lib/mkmf.rb: ditto. do not import XCFLAGS from config.status.
+
+Sun Nov 30 17:37:36 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix [ruby-talk:86746]
+
+Sun Nov 30 13:02:00 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/encodingstyle/soapHandler.rb: refactoring - Simplifying
+ Conditional Expressions.
+
+ * lib/wsdl/soap/definitions.rb: refactoring - Move Method.
+
+ * test/xsd/{test_noencoding.rb,noencoding.xml}: new files. test for
+ encoding unspecified XML file parsing.
+
+ * test/wsdl/{test_fault.rb,map,datetime}: new files. test of
+ SOAPFault, dateTime and Apache's Map.
+
+Sun Nov 30 09:35:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_update): get rid of SEGV at just allocated String.
+ [ruby-core:01812]
+
+Fri Nov 28 23:19:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark): explicitly check mark recursion levels, instead
+ of unreliable stack length.
+
+Fri Nov 28 22:49:56 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/rinda.rb: fix TupleSpaceProxy#read, read_all.
+
+Fri Nov 28 21:44:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb (test_ln_s): should be a file, not
+ a directory for FreeBSD.
+
+Fri Nov 28 19:37:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (env_has_value, env_index): must match exactly.
+
+ * test/ruby/test_env.rb (test_has_value, test_index): condition for
+ aboves.
+
+Fri Nov 28 17:59:20 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_env.rb: add tests for ENV.
+
+Fri Nov 28 17:47:46 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (DRbMessage#load): rescue Errno::* and raise
+ DRbConnError.
+
+Fri Nov 28 15:41:15 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Pathname#realpath): obsolete the force_absolute
+ argument.
+
+Fri Nov 28 14:41:52 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/streamHandler.rb: drop unused http parameters.
+
+ * lib/soap/encodingstyle/soapHandler.rb, lib/soap/mapping/factory.rb,
+ lib/soap/mapping/mapping.rb, lib/soap/mapping/registry.rb,
+ lib/wsdl/soap/complexType.rb: ApacheSOAP's map support was broken
+ under WSDL dynanic client environment. fixed.
+
+ * test/wsdl/raa/*: add tests.
+
+ * lib/xsd/datatypes.rb: dateTime precision bug fix (at least, I hope.)
+ bug of soap4r. XSDDateTimeImple.to_time passed a Float to
+ Time.local/Time.gm as an usec, and NUM2LONG(rb_num2long for Float)
+ causes rounding error.
+
+ * test/soap/test_basetype.rb, test/xsd/test_xsd.rb: add tests.
+
+Fri Nov 28 04:15:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (method_arity): used wrong Proc object. [ruby-talk:86504]
+
+Fri Nov 28 00:47:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_f_exit), process.c (rb_f_exit_bang): treat true as
+ success, false as failure. [ruby-dev:22067]
+
+ * eval.c (rb_f_abort, rb_thread_switch), process.c (rb_f_system): use
+ ANSI macro instead of hard coded value.
+
+ * eval.c (rb_f_exit), process.c (rb_f_exit_bang): use VALUEs not but
+ TYPEs.
+
+Thu Nov 27 22:05:48 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * eval.c, gc.c: FreeBSD/ia64 currently does not have a way for a
+ process to get the base address for the RSE backing store, so
+ hardcode it for the moment.
+ [submitted by: Marcel Moolenaar <marcel@FreeBSD.org>]
+
+Thu Nov 27 17:36:42 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkafter.rb: bug fix on TkTimer#cancel_on_exception=(mode).
+ TkTimer#wait recieves the exception of the callback.
+ The exception is kept on @return_value.
+
+Thu Nov 27 16:58:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_stat): remove _fullpath() for NUL: device.
+
+Wed Nov 26 15:38:47 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb (test_ln_s): should take the
+ existing symbolic link for OpenBSD.
+
+Wed Nov 26 04:48:42 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/token.c: removed YYTOKTMP references which
+ were causing buffer overflows on large block scalars,
+ comments, quoted scalars and plain scalars.
+
+ * ext/syck/rubyext.c: dynamic changing of buffer size.
+
+ * ext/syck/syck.h: default buffer size of 4k.
+
+Wed Nov 26 00:55:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpresponse.rb: add HTTPResponse#keep_alive=.
+
+ * lib/webrick/httpserver.rb (HTTPServer#run): should pass the
+ request's keep_alive flag to the response.
+
+Tue Nov 25 21:41:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * defines.h (ENV_IGNORECASE): should define when DOSISH without
+ human68k. [ruby-dev:22047]
+
+ * hash.c (env_has_value, env_index): don't ignore case of value.
+ [ruby-dev:22048]
+
+Tue Nov 25 21:39:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (path_check_1): honor sticky bits always.
+ [ruby-talk:86273]
+
+Tue Nov 25 20:02:14 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb: do test in more deep
+ directory.
+
+ * test/fileutils/test_nowrite.rb: ditto.
+
+Tue Nov 25 19:04:23 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (URI::Generic#find_proxy): ENV case sensitivity test
+ refined.
+
+Tue Nov 25 18:13:30 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb: chdir Dir.tmpdir before each
+ test. [ruby-dev:22045]
+
+ * test/fileutils/test_nowrite.rb: ditto.
+
+Tue Nov 25 17:52:11 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (URI::Generic#find_proxy): use http_proxy under CGI
+ if the environment variable is case sensitive.
+
+Tue Nov 25 16:41:33 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb:
+ removed. this test requires extra libraries in soap4r/1.5.*.
+
+Tue Nov 25 16:24:42 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/**/*.rb, lib/wsdl/**/*.rb, lib/xsd/**/*.rb: changed license;
+ GPL2 -> Ruby's.
+
+ * lib/soap/rpc/driver.rb, lib/soap/wsdlDriver.rb,
+ lib/soap/streamHandler.rb: add interface to streamhandler.
+
+ * lib/soap/marshal.rb: raise error if parse fails.
+
+ * lib/soap/netHttpClient.rb: add https support. Patched by
+ Oliver M. Bolzer.
+
+ * lib/soap/netHttpClient.rb: dump HTTP response message body by itself.
+
+ * lib/soap/rpc/driver.rb, lib/soap/rpc/proxy.rb,
+ lib/soap/wsdlDriver.rb: add driver#mandatorycharset interface to foce
+ using charset for parsing response from buggy server.
+
+ * lib/soap/encodingstyle/soapHandler.rb: support Apache Axis's half
+ typed multi-ref array.
+
+ * lib/soap/mapping/factory.rb, lib/soap/mapping/registry.rb: map
+ SOAPStruct which has multi-accessors which name are the same, to an
+ array.
+
+ * lib/soap/rpc/element.rb: fixed illegal parameter order.
+
+ * lib/soap/rpc/element.rb: element name of response message could have
+ the name other than 'return'.
+
+ * lib/wsdl/operation.rb, lib/wsdl/operationBinding.rb,
+ lib/wsdl/soap/classDefCreator.rb, lib/wsdl/soap/methodDefCreator.rb,
+ lib/wsdl/soap/methodDefCreatorSupport.rb: WSDL/1.1 allows plural
+ fault definition in a operation. [ruby-talk:84948]
+
+ * test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb: add
+ test for above fix.
+
+ * lib/wsdl/soap/complexType.rb: support WSDL array definition with
+ maxOccures="unbound".
+
+ * lib/xsd/charset.rb: use cp932 under emx. Patched by
+ Siena. / SHINAGAWA, Norihide in [ruby-dev:21972]
+
+ * lib/xsd/xmlparser/parser.rb: set @charset nil by default. Nil means
+ 'follow encoding declaration in XML'.
+
+ * sample/soap/digraph.rb, sample/wsdl/amazon/wsdlDriver.rb,
+ sample/wsdl/googleSearch/sampleClient.rb,
+ sample/wsdl/googleSearch/wsdlDriver.rb,
+ test/wsdl/test_emptycomplextype.rb,
+ test/wsdl/marshal/test_wsdlmarshal.rb,
+ test/xsd/test_xmlschemaparser.rb: use File.open(...) { |f| f.read }
+ instead of File.open(...).read. [ruby-dev:21964]
+
+ * test/wsdl/emptycomplextype.wsdl, test/wsdl/test_emptycomplextype.rb:
+ simplify the test case.
+
+ * test/wsdl/axisArray/*: add tests for axis's array encoding.
+
+Tue Nov 25 16:15:29 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ruby.h: don't treat Cygwin as Windows.
+
+Tue Nov 25 15:18:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in: change default value of --enable-pthread (default: no)
+
+Tue Nov 25 07:31:16 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (primary): allow newlines just before right argument
+ parenthesis. (ruby-bugs:PR#1221)
+
+Mon Nov 24 23:32:06 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (OpenURI.open_loop, URI::HTTP#proxy_open): use
+ catch/throw for redirection instead of exception.
+ (OpenURI.open_loop, OpenURI.redirectable?): restrict redirection.
+
+Mon Nov 24 19:59:48 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (URI::Generic#find_proxy): use CGI_HTTP_PROXY
+ instead of HTTP_PROXY in the CGI environment.
+
+Mon Nov 24 19:32:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/etc/extconf.rb: check for pw_passwd in struct passwd and
+ gr_passwd in struct group for DJGPP.
+
+ * ext/etc/etc.c: ditto.
+
+ * ext/Setup.dj: support for curses, etc, zlib.
+
+Mon Nov 24 17:00:00 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb: validate option names.
+ :content_length_proc and :progress_proc option implemented.
+
+Mon Nov 24 14:53:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (XCFLAGS): output empty value instead of `-DRUBY_EXPORT'.
+
+Sat Nov 22 23:09:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: set enable_pthread to no on MinGW.
+
+Sat Nov 22 22:56:20 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in: add --enable-pthread option (default: yes)
+
+Sat Nov 22 22:48:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: add Tk.grab_release and fix bug of TkComposite
+
+ * ext/tk/lib/tkafter.rb: bug fix of TkAfter#start
+
+ * ext/tk/sample/tkcombobox.rb: new sample script
+
+ * ext/tcltklib/tcltklib.c: add native thread check
+
+Sat Nov 22 18:49:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/curses/curses.c (window_nodelay): nodelay() of NetBSD's
+ libcruses returns no value, just like keypad().
+
+Sat Nov 22 17:36:36 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (HAVE_GETCWD): output to config.h.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (XCFLAGS): output to config.status.
+
+Sat Nov 22 13:10:10 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (have_st_ino?): djgpp has valid st_ino.
+
+Sat Nov 22 11:28:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (Init_stack): stack region is far smaller than usual if
+ pthread is used.
+
+Sat Nov 22 07:30:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/util/backtracefilter.rb: fixed a bug that occurred
+ when an exception had no backtrace.
+
+ * test/testunit/util/test_backtracefilter.rb: ditto.
+
+Fri Nov 21 16:44:18 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkentry.rb: fix the encoding trouble of percent
+ substitutions on validatecommand option of TkEntry widget
+
+ * ext/tk/lib/tk.rb: fix bug on {pack|grid}_propagate() method
+
+Fri Nov 21 16:12:11 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.1: Fix markups and grammar.
+
+Fri Nov 21 14:49:42 2003 Minero Aoki <aamine@loveruby.net>
+
+ * ruby.1: wrote about ruby related environment variables.
+
+Fri Nov 21 12:28:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_extended): singleton methods should not be checked
+ when dumping via marshal_dump() or _dump(). [ruby-talk:85909]
+
+Fri Nov 21 01:40:00 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in: check <pthread.h>
+
+ * ruby.h: include pthread.h if existence.
+ define is_ruby_native() macro when not HAVE_NATIVETHREAD
+
+ * eval.c: undef is_ruby_native() function when not HAVE_NATIVETHREAD
+
+Fri Nov 21 00:43:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: use #__send__ instead of #send.
+
+ * lib/test/unit/testcase.rb: ditto.
+
+Thu Nov 20 19:19:22 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: don't find the Cygwin's pthread library on MinGW.
+
+Thu Nov 20 19:15:50 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (have_st_ino?): emx (OS/2 with EMX) does not
+ have st_ino (always 0). [ruby-dev:21972]
+
+ * lib/fileutils.rb (rename_cannot_overwrite_file?): emx does not
+ allow overwriting files by rename(2).
+
+ * test/fileutils/test_fileutils.rb: windows? ->
+ have_drive_letter?, have_file_perm?
+
+Thu Nov 20 17:50:58 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/tkballoonhelp.rb: new sample script
+
+ * ext/tk/sample/tkmultilistbox.rb: ditto
+
+ * ext/tk/sample/tktextframe.rb: ditto
+
+Thu Nov 20 13:37:34 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ruby.h: define is_ruby_native_thread() for no native thread
+ environment
+
+ * eval.c: ditto
+
+Thu Nov 20 12:42:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in: always check existence of the pthread library
+
+ * ruby.h: define macros for ruby's native thread check
+
+ * eval.c: add ruby's native thread check
+
+ * gc.c: ditto
+
+Wed Nov 19 14:45:18 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (to_ary): print more friendly warning message.
+
+Wed Nov 19 14:32:08 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_same?): add djgpp and wince.
+
+ * lib/fileutils.rb (cannot_overwrite_file?): add wince.
+
+Wed Nov 19 11:04:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/fileutils.rb (cannot_overwrite_file?, have_st_ino?): bccwin32
+ is same as mswin32.
+
+Wed Nov 19 07:54:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit.rb: do not run tests if $! is set.
+
+ * lib/test/unit/assertionfailederror.rb: extend StandardError instead
+ Exception (irb catches the former but not the latter).
+
+Tue Nov 18 23:31:36 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * missing/memmove.c (memmove): take void *, not char *.
+
+ * missing.h (memmove): ditto.
+
+ * missing.h (strchr, strrchr): return char *, not int.
+
+Tue Nov 18 22:20:10 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_same?): temporal fix for windows.
+
+Tue Nov 18 19:05:04 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_same?): check by inode instead of path
+ name, to detect two hard links pointing to the same content.
+
+ * test/fileutils.rb: did not create correctly looped symlinks.
+
+Tue Nov 18 18:23:05 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_read): behave as IO at empty string.
+ [ruby-dev:21939], [ruby-dev:21941]
+
+ * ext/stringio/stringio.c (strio_getc, strio_getline): set EOF flag.
+
+ * ext/stringio/stringio.c (strio_rewind, strio_seek, strio_ungetc):
+ clear EOF flag.
+
+ * test/stringio/test_stringio.rb: imported from [ruby-dev:21941].
+
+Tue Nov 18 14:06:35 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_each_src_dest): raise if src==dest.
+ [ruby-talk:85344] [ruby-core:01699]
+
+ * lib/fileutils.rb: use Object#is_a? instead of Class#=== to allow
+ e.g. remote objects for receivers.
+
+ * lib/fileutils.rb: FileTest -> File.
+
+ * lib/fileutils.rb: put parentheses for arguments of File.xxxx?
+
+ * test/fileutils/test_fileutils.rb (test_cp): test "cp a a".
+
+ * test/fileutils/test_fileutils.rb (test_mv): test "mv a a".
+
+ * test/fileutils/test_fileutils.rb (test_ln): test "ln a a".
+
+ * test/fileutils/test_fileutils.rb (test_ln_s): test "ln_s a a".
+
+ * test/fileutils/test_fileutils.rb (test_install): test "install a a".
+
+ * test/fileutils/fileasserts.rb: new method assert_symlink.
+
+ * test/fileutils/fileasserts.rb: assert_is_directory -> assert_directory.
+
+Mon Nov 17 19:38:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (getcwdofdrv): avoid using getcwd() directly, use
+ my_getcwd() instead.
+
+ * merged NeXT, OpenStep, Rhapsody ports patch from Eric Sunshine
+ <sunshine@sunshineco.com>. [ruby-core:01596]
+
+Mon Nov 17 10:50:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::Completion::complete): allow least
+ common completion for three or more candidates.
+
+Mon Nov 17 09:41:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/ui/tk/testrunner.rb,
+ lib/test/unit/ui/gtk/testrunner.rb:
+ run GUI main loop in sub thread.
+
+ * lib/test/unit/ui/gtk2/testrunner.rb: imported from rough.
+
+ * lib/test/unit/autorunner.rb (keyword_display): sort keywords.
+
+Sun Nov 16 18:10:57 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): iterator should return value from next inside
+ begin/rescue/end. (ruby-bugs:PR#1218)
+
+Sun Nov 16 13:26:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): LINK check earlier than anything else,
+ i.e. do not dump TYPE_IVAR for already dumped objects.
+ (ruby-bugs:PR#1220)
+
+ * eval.c (rb_eval): call "inherited" only when a new class is
+ generated; not on reopening.
+
+ * eval.c (eval): prepend error position in evaluating string to
+ "mesg" attribute string only when it's available and is a
+ string.
+
+Sun Nov 16 12:16:10 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: logging response body. [experimental]
+ [ruby-list:38800]
+
+Sun Nov 16 10:49:38 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
+
+ * lib/thread.rb (Thread.exclusive): wrap method definition in
+ class Thread to enable rdoc to process.
+
+Sun Nov 16 09:45:23 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (set_debug_output): warn if method is called
+ after #start. [ruby-dev:38798]
+
+Sun Nov 16 04:41:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): do not re-raise exception to avoid unnecessary
+ exception copying, instead modify exception and internal
+ information to adjust eval().
+
+ * eval.c (backtrace): can return the current frame information
+ only if lev < -1.
+
+Sat Nov 15 22:16:42 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * /ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext):
+ refine error message.
+
+Sat Nov 15 10:05:40 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (OpenURI.open_loop, OpenURI::HTTP#proxy_open):
+ refactored to support options.
+ (Buffer): maintain size by this class.
+
+Sat Nov 15 07:40:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_method_node): new API to retrieve method body.
+
+Fri Nov 14 13:21:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: fix (en-bugged at 2003/11/07)
+
+ * ext/tk/lib/tkdialog.rb: TkDialog.new accepts a parent widget
+ argument [ruby-talk:85066]
+
+Thu Nov 13 20:53:35 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (Kernel[#.]open): hard coded URI schemes removed.
+ [ruby-ext:02251]
+
+Thu Nov 13 19:17:00 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * lib/test/unit/ui/tk/testrunner.rb: use grid and panedwindow
+ (if available)
+
+Thu Nov 13 17:56:41 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (OpenURI.open_uri): use File::RDONLY.
+ reported by Take_tk <ggb03124@nifty.ne.jp>.
+ [ruby-ext:02245]
+
+Thu Nov 13 16:45:53 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_x509req.c (ossl_x509req_to_der): add function for
+ X509::Request#to_der.
+
+Thu Nov 13 11:31:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::Completion#complete): prior shorter
+ name to containing longer name.
+
+Thu Nov 13 06:08:54 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: stop freezing some classes
+
+ * ext/tk/lib/multi-tk.rb: ditto.
+
+Wed Nov 12 17:32:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_throws, assert_nothing_thrown):
+ uncaught throw in sub thread raises ThreadError.
+
+ * lib/test/unit/ui/tk/testrunner.rb (setup_ui): "expand" is not
+ necessary.
+
+Wed Nov 12 14:09:43 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/monitor/test_monitor.rb: fix the timing problem by Queue.
+
+Wed Nov 12 12:59:44 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/monitor/test_monitor.rb: added.
+
+Wed Nov 12 10:14:28 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb: refactored. Thanks, Gennady Bystritsky.
+
+Wed Nov 12 06:11:39 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl.c (ossl_x509_sk2ary, ossl_x509crl_sk2ary):
+ add functions to convert STACK into Array.
+
+ * ext/openssl/ossl.h: add prototypes.
+
+ * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_set_certificates,
+ ossl_pkcs7_get_certificates, ossl_pkcs7_get_crls,
+ ossl_pkcs7_set_crls): add functions for PKCS7#certificates=
+ PKCS7#certificates, PKCS7#crls= and PKCS7#crls.
+
+Wed Nov 12 00:47:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/ui/testrunnermediator.rb: should require 'test/unit'.
+
+Tue Nov 11 23:54:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/ui/gtk/testrunner.rb: added a rescue clause to handle
+ the case when the requested font is not available.
+
+Tue Nov 11 22:44:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (appendline): file may not end with newline. a bug if
+ READ_DATA_PENDING_PTR is defined. [ruby-talk:84925]
+
+Tue Nov 11 10:42:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: raise an exception when creating TkWindow
+ object, because TkWindow class is an abstract class.
+
+Tue Nov 11 03:30:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/ext/openssl/ossl_conf.c (ossl_config_get_value): return nil
+ if the specified value doesn't exist.
+
+ * lib/ext/openssl/ossl_conf.c (ossl_config_get_section): return
+ a empty hash if the specified section doesn't exist.
+
+Mon Nov 10 11:40:29 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb (wait): return true on signal/broadcastfalse and
+ false on timeout. Thanks Gennady Bystritsky.
+
+Mon Nov 10 00:07:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (primary): primary_value may be 0 when syntax error.
+ [ruby-talk:84893]
+
+Sun Nov 9 02:05:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: un-deprecated #assert_not_nil to
+ maintain symmetry with #assert_nil. Also added better output for
+ #assert_kind_of.
+
+ * test/testunit/tc_assertions.rb: ditto.
+
+Sat Nov 8 18:50:20 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/wsdl/raa/*: add new testcase for WSDL loading, parsing and
+ reading.
+
+ * test/soap/marshal/*: backport from soap4r/1.5.1. all differences are
+ for ruby/1.6.
+
+ * lib/soap/*: backport from soap4r/1.5.1. all differences are for
+ ruby/1.6.
+
+ * lib/wsdl/data.rb, lib/wsdl/xmlSchema/data.rb: move definition of
+ ArrayTypeAttrName from ::WSDL::XMLSchema::* to ::WSDL::*.
+ [ruby-talk:84813]
+
+ * lib/wsdl/soap/definitions.rb: element name typo in custom exception
+ struct definition which is needed for wsdlDriver; camelCase ->
+ underscore_name.
+
+Sat Nov 8 13:49:50 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in: improvement of pthread check
+
+Sat Nov 8 13:28:46 2003 Takaaki Tateishi <ttate@ttsky.net>
+ * ext/dl/sym.c: Add DL.win32_last_error and DL.last_error.
+ Thanks, Kaoru Shirai.
+
+Sat Nov 8 06:19:38 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: To fix 'pthread-enabled Tcl/Tk' problem,
+ TclTkIp#_eval calls Tcl_Eval() on the mainloop thread only
+ (queueing a handler to the EventQueue).
+
+ * ext/tcltklib/README.1st: edit the description of '--with-pthread-ext'
+
+Fri Nov 7 23:23:04 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Pathname#+): if self or the argument is `.', return
+ another.
+ (Pathname#parent): if self is `.', return `..'.
+ (Pathname#children): if self is `.', don't prepend self for a
+ pathname in a result.
+ (Pathname#join): re-implemented using Pathname#+.
+ (Pathname#find): if self is `.', remove `./' prefix of yielding
+ pathname.
+
+Fri Nov 7 10:23:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (make_hostent): get rid of SEGV on aliases
+ lookup failure. (ruby-bugs:PR#1215)
+
+Fri Nov 7 04:08:05 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
+
+ * ext/zlib/zlib.c (Init_zlib): define Zlib::GzipReader#each_line as
+ an alias of Zlib::GzipReader#each.
+
+Fri Nov 7 01:03:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): save and restore rb_prohibit_interrupt.
+ [ruby-dev:21857]
+
+Thu Nov 6 18:05:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_inspect): show the path also at a closed file.
+ [ruby-dev:21851]
+
+Thu Nov 6 11:42:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_set_string, strio_reopen): check
+ tainted.
+
+ * ext/stringio/stringio.c (strio_copy, strio_ungetc, strio_write,
+ strio_putc): add infection.
+
+ * ext/stringio/stringio.c (strio_path): just nil. [ruby-dev:21846]
+
+ * ruby.c (proc_options): reserve searched script path in the
+ source file name table. [ruby-list:38765]
+
+ * lib/optparse.rb (OptionParser::Completion#complete): default not to
+ ignore case on completion. [ruby-talk:84726]
+
+ * win32/win32.c (make_cmdvector): process backslashes even if a quote
+ is not enclosed.
+
+Wed Nov 5 23:49:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * sample/openssl/gen_csr.rb: there (at least) is a CA which does not
+ accept DN in UTF8STRING format. it's a sample.
+
+Wed Nov 5 22:55:16 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * configure.in, eval.c, signal.c: : add '--with-pthread-ext'
+ option to fix the pthread trouble on 'tcltklib'
+
+ * ext/tcltklib/README.1st: add the description of '--with-pthread-ext'
+
+ * ext/tk/lib/tktext.rb : add TkText#text_copy, text_cut, text_paste
+ to support Tcl/Tk8.4's tk_textCopy, tk_textCut, tk_textPaste
+
+ * ext/tk/lib/tk.rb : add TkMenu#set_focus support Tcl/Tk's
+ tk_menuSetFocus
+
+Wed Nov 5 17:33:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): allow interrupt during loaded program
+ evaluation. [ruby-dev:21834]
+
+ * hash.c (rb_hash_fetch): always warn if default argument and a
+ block are supplied at the same time. [ruby-dev:21842]
+
+ * hash.c (env_fetch): ditto.
+
+ * array.c (rb_ary_fetch): ditto.
+
+Wed Nov 5 19:08:47 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):
+ do not remove next argument if empty value is placed.
+
+ * test/optparse: added.
+
+Wed Nov 5 17:05:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/ui/gtk/testrunner.rb: typo.
+
+Wed Nov 5 11:13:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * string.c: add #include "version.h". this file still depends on it.
+
+ * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
+ wince/Makefile.sub: add version.h dependency to string.c.
+
+Wed Nov 5 09:14:23 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb: revert to the previous revision.
+
+Wed Nov 5 08:39:51 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/https.rb (HTTPRequest#parse): set @client_cert_chain.
+
+ * lib/webrick/https.rb (HTTPRequest#meta_vars): create
+ SSL_CLIENT_CERT_CHAIN_n from @client_cert_chain.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_get_peer_cert_chain): return nil
+ if no cert-chain was given.
+
+Tue Nov 4 23:44:48 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub:
+ remove needless version.h dependency.
+
+Tue Nov 4 23:38:43 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * class.c, hash.c, string.c: remove #include "version.h".
+
+ * Makefile.in: remove needless version.h dependency.
+
+Tue Nov 4 06:54:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): fptr->f may be NULL, if IO is closed in the
+ signal handler.
+
+ * io.c (io_read): ditto.
+
+ * string.c (get_pat): remove 1.8.0 warning code.
+
+ * string.c (rb_str_match): extend warning until 1.8.2.
+
+ * string.c (rb_str_match2): ditto.
+
+ * class.c (class_instance_method_list): remove 1.8.0 warnings.
+ method_list now recurs. [ruby-dev:21816]
+
+ * class.c (rb_obj_singleton_methods): ditto.
+
+ * array.c (rb_ary_select): remove select with block.
+ [ruby-dev:21824]
+
+ * hash.c (rb_hash_select): ditto.
+
+ * hash.c (env_select): ditto.
+
+ * re.c (match_select): ditto.
+
+ * struct.c (rb_struct_select): ditto.
+
+Mon Nov 3 22:53:21 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/racc/parser.rb: synchronize with Racc 1.4.4.
+
+ * ext/racc/cparse/cparse.c: ditto.
+
+ * ext/racc/cparse/cparse.c (parse_main): should abort when
+ the length of LR state stack <=1, not ==0.
+
+Mon Nov 3 08:50:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (check_uid_switch): remove duplicated error messages.
+
+ * process.c (check_gid_switch): ditto.
+
+Sun Nov 2 02:28:33 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/ssl.rb: new option :SSLExtraChainCert.
+
+Sun Nov 2 01:02:04 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (rb_str_hash): Update the HASH_PERL alternative hash
+ algorithm in sync with Perl 5.8.
+
+ * st.c (strhash): Ditto.
+
+Sat Nov 1 18:21:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_peer_cert_chain): add new method
+ SSLSocket#peer_cert_chain.
+
+ * ext/openssl/ossl_x509req.c (GetX509ReqPtr): new function
+ which returns underlying X509_REQ.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_issuer_cert,
+ ossl_x509extfactory_set_subject_cert, ossl_x509extfactory_set_crl,
+ ossl_x509extfactory_set_subject_req, ossl_x509extfactory_set_config):
+ use underlying C struct without duplication not to leak momory.
+
+Sat Nov 1 01:49:03 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/mapping/factory.rb: mark marshalled basetype objects when
+ @allow_original_mapping is true. multi-referencing basetype node is
+ prohibited in SOAP/1.1 encoding but soap4r's original ruby object
+ mapping requires basetype to be marked to detect self referencing
+ loop. e.g. o = 1; o.instance_eval { @iv = o } soap4r's original
+ mapping is only used through soap/marshal API.
+
+ * test/soap/marshal/test_marshal.rb: add tests for self referencing
+ immutable objects.
+
+ * test/soap/calc/test_calc_cgi.rb: fix test name.
+
+Fri Oct 31 22:26:29 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/string_wce.c (strrchr): should decrement pointer.
+
+ * wince/Makefile.sub: correct a range of isdigit().
+
+Fri Oct 31 12:55:24 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in, lib/mkmf.rb: add RPATHFLAG for NetBSD.
+ [ruby-dev:21791]
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, win32/Makefile.sub: ditto.
+
+Fri Oct 31 01:38:14 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * wince/Makefile.sub, win32/Makefile.sub (.y.c): allow white spaces
+ at the beginning of line to remove by sed. (ruby-bugs-ja:PR#580)
+
+Fri Oct 31 01:02:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compar.c (cmp_equal): protect exceptions from <=> comparison
+ again. returns nil if any exception or error happened during
+ comparison.
+
+ * eval.c (search_required): should update *featurep when DLEXT2 is
+ defined. (ruby-bugs-ja:PR#581)
+
+Thu Oct 30 23:41:04 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb: add DRbArray
+
+ * lib/drb/invokemethod.rb: fix Hash#each problem. [ruby-dev:21773]
+
+ * lib/drb/unix.rb: add LoadError. [ruby-dev:21743]
+
+Thu Oct 30 23:19:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/generator.rb: better XML pretty printing.
+
+ * lib/soap/encodingstyle/soapHandler.rb: remove unnecessary namespace
+ assignment in the element which has "encodingStyle" attribute, and
+ add necessary namespace assignment for "arrayType" attribute.
+
+ * test/soap/calc/test_calc_cgi.rb: take over $DEBUG to ruby process
+ through CGI.
+
+Thu Oct 30 22:59:39 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/yaml2byte.c: HASH const too long. Thanks, matz.
+
+Thu Oct 30 19:13:53 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syck/MANIFEST: Add yamlbyte.h.
+
+Thu Oct 30 14:25:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (READ_DATA_BUFFERED): new macro to detect whether stdio
+ buffer filled.
+
+ * io.c (rb_io_fptr_cleanup): move path deallocation to
+ rb_io_fptr_finalize (finalizer called by GC).
+
+Thu Oct 30 13:23:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (logop): left may be NULL. [ruby-talk:84539]
+
+ * eval.c (rb_eval): NODE_CASE nd_head may be NULL.
+
+Thu Oct 30 10:14:51 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/test/unit/autorunner.rb: make fox runner work.
+
+Thu Oct 30 09:32:26 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_f_system): fixed lack of security check before
+ calling do_spawn() on win32. [ruby-talk:84555]
+
+Thu Oct 30 02:46:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): single array value to normal Proc#call
+ (i.e. not via lambda call), should be treated just like yield.
+ [ruby-dev:21726]
+
+Thu Oct 30 02:25:48 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/buffering.rb (Buffering#initialize):
+ add new method to inherit @sync from @io.sync.
+
+ * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): no need to
+ set sync flag explicitly.
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): call super.
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): set extra chain
+ certificates in @extra_chain_cert.
+
+Wed Oct 29 22:02:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/drb/drbtest.rb: use rbconfig.rb to make the path of ruby
+ interpreter to exec, instead of test/ruby/envutil.rb,
+
+Wed Oct 29 19:58:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/tcltklib/tcltklib.c (CONST84): define CONST84 when it is not
+ defined and TCL_MAJOR_VERSION >= 8.
+
+ * ext/tcltklib/tcltklib.c (VwaitVarProc, WaitVariableProc,
+ rb_threadVwaitProc): use CONST84 instead of CONST.
+
+ * ext/tcltklib/tcltklib.c (ip_rbTkWaitCommand,
+ ip_rb_threadTkWaitCommand): use CONST84 always.
+
+Wed Oct 29 17:27:05 2003 Tanaka Akira <akr@m17n.org>
+
+ * re.c (rb_reg_s_union, Init_Regexp): new method `Regexp.union'.
+
+ * lib/pathname.rb (realpath): examine Dir.pwd because it may have
+ symlinks.
+
+Wed Oct 29 17:16:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_longjmp): must not disturb original jump.
+ [ruby-dev:21733]
+
+Wed Oct 29 15:28:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_Proc): taint preallocated exception object
+ sysstack_error. [ruby-talk:84534]
+
+Wed Oct 29 11:27:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (ret_args): node may be NULL. [ruby-talk:84530]
+
+Tue Oct 28 15:20:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/tcltklib/tcltklib.c (VwaitVarProc, ip_rbVwaitObjCmd,
+ WaitVariableProc, WaitVisibilityProc, WaitWindowProc,
+ ip_rbTkWaitObjCmd, ip_rbTkWaitCommand, rb_threadVwaitProc,
+ rb_threadWaitVisibilityProc, rb_threadWaitWindowProc,
+ ip_rb_threadVwaitObjCmd, ip_rb_threadTkWaitObjCmd): prototype;
+ avoid VC++ warnings.
+
+Mon Oct 27 19:19:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_longjmp): ignore reentering error while warning.
+ [ruby-dev:21730]
+
+Mon Oct 27 00:23:50 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_ruby): bug fix on Win : hang-up when
+ calling 'exit' in the Tk callback procedure. [ruby-list:38656]
+
+Sat Oct 25 09:18:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_method_missing): protect exception from within
+ "inspect". (ruby-bugs:PR#1204)
+
+Fri Oct 24 23:26:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_each): Hash#each should yield single value.
+ [ruby-talk:84420]
+
+ * hash.c (env_each): ditto for ENV.each.
+
+Thu Oct 23 20:25:32 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (GenericServer#start): should rescue
+ IOError from IO::accept. [ruby-dev:21692]
+
+Thu Oct 23 17:59:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): initialize stack bottom for embedding.
+ [ruby-dev:21686]
+
+ * ext/dl/extconf.rb: move list of files to clean from DEPEND file,
+ to get rid of macro redefinitions.
+
+Thu Oct 23 13:44:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y: integrate operations for stack_type. [ruby-dev:21681]
+
+Thu Oct 23 00:41:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/calc/*, test/soap/helloworld/*: set logging threshold
+ to ERROR.
+
+Wed Oct 22 12:53:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
+ ignore tests which raised LoadError.
+
+ * test/drb/drbtest.rb, test/ruby/test_beginendblock.rb,
+ test/ruby/test_system.rb: avoid requiring same file twice.
+
+ * test/drb/test_drbssl.rb, test/drb/test_drbunix.rb: should not use
+ ARGV unless invoked directly. do not create test cases unless
+ required libraries are available.
+
+Wed Oct 22 02:31:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): should not ignore exit_value in END
+ execution. [ruby-dev:21670]
+
+Tue Oct 21 23:16:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): call finalizers and exit procs before
+ terminating threads.
+
+ * eval.c (ruby_cleanup): preserve ruby_errinfo before ruby_finalize_0().
+
+Tue Oct 21 15:57:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
+ prepend the directory of target file to the load path.
+
+Tue Oct 21 15:08:53 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (do_spawn, do_aspawn): should wait child process even
+ if callded with P_OVERLAY.
+
+ * win32/win32.c (do_spawn, do_aspawn): should return child's exit
+ status to parent.
+
+Tue Oct 21 00:35:02 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/calc/*, test/soap/helloworld/*: catch the exception from
+ test server thread and recover.
+
+Tue Oct 21 00:22:57 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * test/drb/*: import drb/runit.
+
+Mon Oct 20 23:55:47 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): set current node after arguments evaluation.
+ [ruby-dev:21632]
+
+ * eval.c (rb_yield_0): set current node and keep it at local jump.
+
+Mon Oct 20 22:01:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_cleanup): keep thread group for main thread.
+ [ruby-dev:21644]
+
+Mon Oct 20 18:28:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_catch): backout.
+
+Mon Oct 20 17:31:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (PUSH_FRAME): generate unique number to be TAG_JUMP()
+ destination.
+
+ * eval.c (localjump_destination): use unique number in ruby_frame
+ for localjump destination.
+
+Mon Oct 20 11:31:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_signal.rb (test_signal): restore old trap.
+
+Mon Oct 20 11:00:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_sweep): loosen page free condition to avoid add_heap()
+ race condition. [ruby-dev:21633]
+
+ * gc.c (gc_sweep): do not update malloc_limit when malloc_increase
+ is smaller than malloc_limit.
+
+Mon Oct 20 09:45:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/debug.rb (debug_command): remove debug print.
+
+Wed Oct 20 00:25:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (search_required): required name must not be changed before
+ loading. [ruby-dev:24492]
+
+Sun Oct 19 13:12:30 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (foreachline, dir_foreach): add obsolete warning.
+
+Sun Oct 19 00:14:22 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/calc/*, test/soap/helloworkd/*: changed port# of test
+ server. (17171)
+
+Sat Oct 18 23:01:32 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * missing/acosh.c (DBL_MANT_DIG): typo fix(ifdef -> ifndef).
+
+Sat Oct 18 05:48:59 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/rubyext.c: YAML::Syck::compile method.
+
+ * ext/syck/syck.c: Buffer edge bug.
+
+ * ext/syck/yaml2byte.c: YAML to bytecode converter.
+
+ * ext/syck/yamlbyte.h: Ditto.
+
+ * ext/syck/bytecode.c: Bytecode parser fixes to empty collections
+ and empty strings.
+
+ * ext/syck/token.c: Ditto.
+
+Fri Oct 17 23:07:38 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/enumerator/enumerator.c, ext/enumerator/enumerator.txt:
+ Provide Kernel#to_enum as an alias for Kernel#enum_for. Maybe
+ this is a better name.
+
+Fri Oct 17 23:00:30 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/generator.rb: Add rdoc documentation.
+
+Fri Oct 17 22:16:42 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: Reword and fix Overview.
+
+ * lib/set.rb: It is not necessary to require
+ 'test/unit/ui/console/testrunner'.
+
+Fri Oct 17 11:15:22 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_range.rb: added.
+
+ * MANIFEST: add test/ruby/test_range.rb.
+
+Fri Oct 17 03:21:23 2003 William Sobel <will.sobel@barra.com>
+
+ * ext/socket/socket.c (make_hostent): h_aliases may be NULL.
+ (ruby-bugs:PR#1195)
+
+ * ext/socket/socket.c (sock_s_gethostbyaddr): ditto.
+
+Fri Oct 17 00:12:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: (bug fix) instance variable @frame was used
+ without initializing on TkComposite module.
+
+Thu Oct 16 23:51:04 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: If $DEBUG == true and some exception is caused
+ in a callback operation, Ruby/Tk shows a (verbose) backtrace
+ information on the callback process.
+
+Thu Oct 16 17:09:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/debug.rb (DEBUGGER__::Context::debug_command): do not call
+ debug_silent_eval() when $1 is not set. (ruby-bugs:PR#1194)
+
+Thu Oct 16 16:54:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_upto): ("a"..."a").to_a should return [].
+ [ruby-core:01634]
+
+Thu Oct 16 16:40:51 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb:
+ Add Tk::EncodedString and Tk::UTF8_String class to support
+ characters using the \uXXXX escape to the UNICODE string.
+
+ * ext/tk/sample/{demos-en,demos-jp}/unicodeout.rb
+ new demo-scripts (samples of Tk::UTF8_String)
+
+ * ext/tk/sample/{demos-en,demos-jp}/widget
+ add entries for 'unicodeout.rb'
+
+Thu Oct 16 08:38:06 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/digest/test_digest.rb (test_eq): show failed class.
+
+ * test/ruby/test_iterator.rb (test_break, test_return_trace_func):
+ test localjump destination.
+
+Wed Oct 15 20:22:31 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/netHttpClient.rb: use URI::HTTP#request_uri instead of
+ instance_eval('path_query'). [ruby-list:38575]
+
+Wed Oct 15 17:24:45 2003 URABE Shyouhei <root@mput.dip.jp>
+
+ * lib/cgi.rb (CGI::Cookie): tiny typo fix.
+
+Wed Oct 15 15:00:54 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_run): just return FAILURE instead of parse error
+ count. [ruby-list:38569]
+
+Wed Oct 15 13:17:02 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/digest/digest.c (rb_digest_base_alloc): need to initialize
+ buffer. [ruby-dev:21622]
+
+Wed Oct 15 11:23:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): dump extended modules as well.
+
+ * marshal.c (r_object0): TYPE_USRMARSHAL should restore extended
+ modules before invoking marshal_load. these two fixes are done
+ by Masatoshi Seki <m_seki@mva.biglobe.ne.jp>.
+
+Wed Oct 15 09:30:34 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/enumerator/enumerator.c (enumerator_each): avoid VC++ warning.
+
+ * ext/syck/syck.h: include stdio.h for definition of FILE.
+
+Wed Oct 15 08:09:07 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/bytecode.c: Checkin of YAML bytecode support.
+
+ * ext/syck/gram.c: Ditto.
+
+ * ext/syck/syck.c: Ditto.
+
+ * ext/syck/token.c: Ditto.
+
+ * ext/syck/handler.c: Ditto.
+
+ * ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.
+
+ * ext/syck/rubyext.c: Ditto (on both counts).
+
+Wed Oct 15 05:05:53 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/generator.rb: A new library which converts an internal
+ iterator to an external iterator.
+
+ * lib/abbrev.rb: A new library which creates an abbreviation table
+ from a list.
+
+Wed Oct 15 04:31:51 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/demos-en/entry3.rb, ext/tk/sample/demos-jp/entry3.rb :
+ new demo-scripts
+
+ * ext/tk/sample/demos-en/widget, ext/tk/sample/demos-jp/widget :
+ add entries for 'entry3.rb'
+
+Wed Oct 15 04:31:47 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/digest/test_digest.rb: Moved from ext/digest/test.rb.
+
+Wed Oct 15 03:53:20 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: fixed trouble on auto-load Tcl commands (enbug
+ on the last commit).
+
+Wed Oct 15 00:25:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): argument parentheses preceded by spaces should
+ be warned; not error. [ruby-talk:84103]
+
+Wed Oct 15 00:20:15 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: replace Tcl/Tk's vwait and tkwait to
+ switch on threads smoothly and avoid seg-fault.
+
+ * ext/tcltklib/tcltklib.c: add TclTkIp._thread_vwait and
+ _thread_tkwait for waiting on a thread. (Because Tcl/Tk's vwait
+ and tkwait command wait on an eventloop.)
+
+ * ext/tk/lib/multi-tk.rb: support TclTkIp._thread_vwait and
+ _thread_tkwait.
+
+ * ext/tk/lib/tk.rb: now, TkVariable#wait has 2 arguments.
+ If 1st argument is true, waits on a thread. If false, waits on
+ an eventloop. If 2nd argument is true, checks existence of
+ rootwidgets. If false, doesn't. Default is wait(true, false).
+
+ * ext/tk/lib/tk.rb: add TkVariable#tkwait(arg) which is equal to
+ TkVariable#wait(arg, true). wait_visibility and wait_destroy
+ have an argument for waiting on a thread or an eventloop.
+
+ * ext/tk/lib/tk.rb: improve of accessing Tcl/Tk's special variables.
+
+ * ext/tk/lib/tkafter.rb: support 'wait on a thread' and 'wait on
+ an eventloop'.
+
+Wed Oct 15 00:10:24 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/baseData.rb: Introduce SOAPType as the common ancestor of
+ SOAPBasetype and SOAPCompoundtype.
+
+ * lib/soap/generator.rb, lib/soap/element.rb, lib/soap/encodingstyle/*:
+ Encoding methods signature change. Pass SOAPGenerator as a parameter.
+
+ * lib/soap/mapping/*, test/soap/marshal/test_marshal.rb: Refactoring
+ for better marshalling/unmarshalling support. Now I think SOAP
+ marshaller supports all kind of object graph which is supported by
+ Ruby's original marshaller. Of course there could be bugs as always.
+ Find it. :-)
+
+ * lib/soap/rpc/standaloneServer.rb: Set severity threshould to INFO.
+ DEBUG is too noisy.
+
+ * lib/xsd/datatypes.rb: DateTime#of is obsoleted. Use DateTime#offset.
+
+ * test/wsdl/emptycomplextype.wsdl, test/xsd/xmlschema.xml: Avoid
+ useless warning.
+
+Tue Oct 14 19:09:35 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_finalize_0): return the given exit status unless
+ SystemExit got raised.
+
+Tue Oct 14 11:53:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * intern.h (ruby_stop): never return.
+
+ * ruby.h (ruby_run): ditto.
+
+Tue Oct 14 04:43:55 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (realpath): make ELOOP check bit more robust.
+ (children): prepend self by default.
+ (chroot): obsoleted.
+
+Tue Oct 14 02:29:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_require_safe): segfault after loading .so.
+
+Tue Oct 14 02:05:23 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Setup*, ext/enumerator/*: Add ext/enumerator, a helper
+ module for the Enumerable interface.
+
+Mon Oct 13 23:55:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * test/ruby/envutil.rb: use Config::CONFIG["ruby_install_name"],
+ not "ruby".
+
+Mon Oct 13 23:57:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_feature_p): match by classified suffix.
+
+ * eval.c (rb_require_safe): require library in the specified safe
+ level.
+
+ * variable.c (rb_autoload, rb_autoload_load): restore safe level
+ when autoload was called. [ruby-dev:21338]
+
+ * intern.h: prototypes; rb_require_safe.
+
+ * test/runner.rb: accept non-option arguments.
+
+Mon Oct 13 20:49:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_new4): should not preserve FL_TAINT status in the
+ internal shared string. [ruby-dev:21601]
+
+ * string.c (rb_str_new4): ditto.
+
+ * eval.c: use EXIT_SUCCESS and EXIT_FAILURE for exit values.
+
+ * process.c: ditto. [ruby-list:38521]
+
+Mon Oct 13 19:51:02 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * lib/debug.rb (debug_command): should enter emacs mode when
+ assigned any value to the environment variable "EMACS".
+ On Meadow, (getenv "EMACS") is "meadow".
+
+Sun Oct 12 14:45:03 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/win32ole/extconf.rb: check "windows.h", not "windows".
+ [ruby-talk:84051]
+
+Sat Oct 11 20:41:03 2003 Corinna Vinschen <corinna@vinschen.de>
+
+ * file.c (eaccess): Use access(2) on Cygwin.
+
+Sat Oct 11 17:09:21 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/rexml/quickpath.rb (REXML::QuickPath::match):
+ escape '[' to avoid warning.
+
+Sat Oct 11 16:08:41 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (realpath): check existence of the file.
+
+ * lib/pathname.rb (realpath): re-implemented.
+ (realpath_root?, realpath_rec): removed
+
+Sat Oct 11 10:19:39 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb: handle exceptions correctly. Thanks, Gennady
+ Bystritsky.
+
+Fri Oct 10 07:50:54 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (is_defined): inheritance line adjustment as like as
+ rb_call_super().
+
+Fri Oct 10 01:19:00 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): add
+ optional argument to specify the DirectoryString type
+ (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString
+ for DirectoryString, and strongly requires to use UTF8String for
+ all certificates issued after December, 31 2003.
+
+ * ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto.
+
+Thu Oct 9 23:50:21 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): prevent thread from GC.
+ [ruby-dev:21572]
+
+Thu Oct 9 19:11:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): non-volatile should be restored from
+ volatile.
+
+Thu Oct 9 17:43:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (proc_save_safe_level, proc_get_safe_level,
+ proc_set_safe_level): save/restore safe level 1..4.
+
+Thu Oct 9 16:33:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_object0): remove unnecessary iv restoration for
+ USRMARSHAL. [ruby-dev:21582]
+
+ * marshal.c (w_object): dump generic instance variables from
+ a string from '_dump'.
+
+ * variable.c (rb_generic_ivar_table): return 0 if obj's FL_EXIVAR
+ is not set.
+
+ * time.c (time_dump): copy instance variables to dumped string, to
+ be included in the marshaled data.
+
+ * bignum.c (rb_big2ulong): add range check to ensure round trip.
+
+Thu Oct 9 15:45:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (uv_to_utf8): change message to "out of range", since
+ negative values are not "too big". [ruby-dev:21567]
+
+Thu Oct 9 14:05:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_set_end_proc, rb_exec_end_proc): restore safe level.
+ [ruby-dev:21557]
+
+Thu Oct 9 10:51:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_yield_0): no error if block is empty.
+
+Thu Oct 9 06:43:33 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (localjump_error): id should be ID.
+
+ * eval.c (rb_eval): nd_rval is set in copy_node_scope().
+
+ * eval.c (rb_yield_0): unused variable.
+
+ * eval.c (rb_yield_0): nothing to do for empty node.
+
+ * eval.c (call_end_proc, proc_invoke): adjust backtrace in END.
+ [ruby-dev:21551]
+
+ * eval.c (rb_thread_start_0): set the value by break as the result.
+ [ruby-dev:21552]
+
+ * eval.c (rb_thread_start_0, rb_thread_raise, rb_callcc): save
+ variables across THREAD_SAVE_CONTEXT.
+
+Thu Oct 9 12:05:46 2003 Eric Sunshine <sunshine@sunshineco.com>
+
+ * configure.in: revived NextStep, OpenStep, and Rhapsody ports which
+ had become unbuildable; enhanced --enable-fat-binary option so that
+ it accepts a list of desired architectures (rather than assuming a
+ fixed list), or defaults to a platform-appropriate list if user does
+ not provide an explicit list; made the default list of architectures
+ for MAB (fat binary) more comprehensive; now uses -fno-common even
+ when building the interpreter (in addition to using it for
+ extensions), thus allowing the interpreter to be embedded into a
+ plugin module of an external project (in addition to allowing
+ embedding directly into an application); added checks for
+ <netinet/in_systm.h> (needed by `socket' extension) and getcwd(); now
+ ensures that -I/usr/local/include is employed when extensions'
+ extconf.rb scripts invoke have_header() since extension checks on
+ NextStep and OpenStep will fail without it if the desired resource
+ resides in the /usr/local tree; fixed formatting of --help message.
+
+ * Makefile.in: $(LIBRUBY_A) rule now deletes the archive before
+ invoking $(AR) since `ar' on Apple/NeXT can not "update" MAB archives
+ (see configure's --enable-fat-binary option); added rule for new
+ missing/getcwd.c.
+
+ * defines.h: fixed endian handling during MAB build (see configure's
+ --enable-fat-binary option) to ensure that all portions of the
+ project see the correct WORDS_BIGENDIAN value (some extension modules
+ were getting the wrong endian setting); added missing constants
+ GETPGRP_VOID, WNOHANG, WUNTRACED, X_OK, and type pid_t for NextStep
+ and OpenStep; removed unnecessary and problematic HAVE_SYS_WAIT_H
+ define in NeXT section.
+
+ * dir.c: do not allow NAMLEN() macro to trust dirent::d_namlen on
+ NextStep since, on some installations, this value always resolves
+ uselessly to zero.
+
+ * dln.c: added error reporting to NextStep extension loader since the
+ previous behavior of failing silently was not useful; now ensures
+ that NSLINKMODULE_OPTION_BINDNOW compatibility constant is defined
+ for OpenStep and Rhapsody; no longer includes <mach-o/dyld.h> twice
+ on Rhapsody since this header lacks multiple-include protection,
+ which resulted in "redefinition" compilation errors.
+
+ * main.c: also create hard reference to objc_msgSend() on NeXT
+ platforms (in addition to Apple platforms).
+
+ * lib/mkmf.rb: now exports XCFLAGS from configure script to extension
+ makefiles so that extensions can be built MAB (see configure's
+ --enable-fat-binary option); also utilize XCFLAGS in cc_command()
+ (but not cpp_command() because MAB flags are incompatible with
+ direct invocation of `cpp').
+
+ * ext/curses/extconf.rb: now additionally checks for presence of these
+ curses functions which are not present on NextStep or Openstep:
+ bkgd(), bkgdset(), color(), curs(), getbkgd(), init(), scrl(), set(),
+ setscrreg(), wattroff(), wattron(), wattrset(), wbkgd(), wbkgdset(),
+ wscrl(), wsetscrreg()
+
+ * ext/curses/curses.c: added appropriate #ifdef's for additional set of
+ curses functions now checked by extconf.rb; fixed curses_bkgd() and
+ window_bkgd() to correctly return boolean result rather than numeric
+ result; fixed window_getbkgd() to correctly signal an error by
+ returning nil rather than -1.
+
+ * ext/etc/etc.c: setup_passwd() and setup_group() now check for null
+ pointers before invoking rb_tainted_str_new2() upon fields extracted
+ from `struct passwd' and `struct group' since null pointers in some
+ fields are common on NextStep/OpenStep (especially so for the
+ `pw_comment' field) and rb_tainted_str_new2() throws an exception
+ when it receives a null pointer.
+
+ * ext/pty/pty.c: include "util.h" for strdup()/ruby_strdup() for
+ platforms such as NextStep and OpenStep which lack strdup().
+
+ * ext/socket/getaddrinfo.c: cast first argument of getservbyname(),
+ gethostbyaddr(), and gethostbyname() from (const char*) to non-const
+ (char*) for older platforms such as NextStep and OpenStep.
+
+ * ext/socket/socket.c: include "util.h" for strdup()/ruby_strdup() for
+ platforms such as NextStep and OpenStep which lack strdup(); include
+ <netinet/in_systm.h> if present for NextStep and OpenStep; cast first
+ argument of gethostbyaddr() and getservbyname() from (const char*) to
+ non-const (char*) for older platforms.
+
+ * ext/syslog/syslog.c: include "util.h" for strdup()/ruby_strdup() for
+ platforms such as NextStep and OpenStep which lack strdup().
+
+Wed Oct 8 22:19:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit.rb: removed installation instructions.
+
+ * lib/test/unit/ui/testrunnermediator.rb: moved the run flag to a more
+ central location.
+
+ * lib/test/unit.rb: ditto.
+
+ * lib/test/unit.rb: extracted the running code in to AutoRunner.
+
+ * lib/test/unit/autorunner.rb: added.
+
+ * lib/test/unit/collector/objectspace.rb: extracted common test
+ collection functionality in to a module.
+
+ * lib/test/unit/collector.rb: ditto; added.
+
+ * test/testunit/collector/test_objectspace.rb: ditto.
+
+ * lib/test/unit/collector/dir.rb: added. Supports collecting tests out
+ of a directory structure.
+
+ * test/testunit/collector/test_dir.rb: added.
+
+ * test/runner.rb: simplified to use the new capabilities.
+
+Tue Oct 7 15:23:09 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.
+
+ * test/ruby/beginmainend.rb: add tests for nested BEGIN/END.
+
+ * test/ruby/endblockwarn.rb: new file added to test of END-in-method
+ warning.
+
+Tue Oct 7 12:23:47 2003 Tanaka Akira <akr@m17n.org>
+
+ * ext/fcntl/fcntl.c (Init_fcntl): define Fcntl::O_ACCMODE.
+
+ * ext/socket/extconf.rb: useless assignment removed.
+
+Tue Oct 7 09:13:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_beginendblock.rb (test_endinmethod): END{} is now
+ allowed in eval.
+
+Tue Oct 7 04:15:25 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt): should not expand mrhs if lhs is solely starred.
+
+Tue Oct 7 02:57:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): rhs of multiple assignment should not be
+ expanded using "to_a". [ruby-dev:21527]
+
+Tue Oct 7 01:42:34 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_get_asn1type): use appropriate
+ free function for ASN1_OBJECT.
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_sn): add new function for
+ ASN1::ObjectId#sn; it returns short name text representation of OID.
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_ln): add new function for
+ ASN1::ObjectId#ln; it returns long name text representation of OID.
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_oid): add new function for
+ ASN1::ObjectId#oid; it returns numerical representation of OID.
+
+Mon Oct 6 22:59:46 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/csv.rb (IOReader, BasicWriter): call binmode when a given IO
+ respond_to?(:binmode). record separator was wrong when you gave
+ text mode IO to Reader.parse and Writer.generate.
+
+ * test/csv/test_csv.rb: add tests for above change.
+
+Sun Oct 5 23:27:09 2003 Tanaka Akira <akr@m17n.org>
+
+ * ext/socket/extconf.rb: check recvmsg even if sendmsg is exists.
+
+ * ext/socket/socket.c (thread_read_select): restored.
+
+Mon Oct 6 16:23:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): wrong method name in the message.
+
+Mon Oct 6 16:02:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): END in method should cause warning.
+ [ruby-dev:21519]
+
+Mon Oct 6 15:17:23 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_iterator.rb (test_block_argument_without_paren):
+ added. (follows sample/test.rb)
+
+Mon Oct 6 11:57:06 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: added
+ test for eval-ed BEGIN END order.
+
+Mon Oct 6 09:19:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): should pass "weak" value to next level.
+ [ruby-dev:21496]
+
+ * eval.c (proc_alloc): should not use cached object if klass is
+ different. [ruby-talk:83685]
+
+Sun Oct 5 23:27:09 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb: version information is added in document.
+
+Sun Oct 5 23:07:03 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_f_END): block should be given. [ruby-dev:21497]
+
+Sun Oct 5 22:51:23 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/ext/openssl/extconf.rb: add check for some engine functions
+ unavailable in OpenSSL-0.9.6.
+
+ * lib/ext/openssl/ossl_engine.c: ditto.
+
+Sun Oct 5 17:56:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): fix evaluation order. [ruby-list:38431]
+
+Sun Oct 5 15:05:06 2003 akira yamada <akira@ruby-lang.org>
+
+ * test/uri/*: translated RUNIT to Test::Unit.
+
+Sun Oct 5 14:37:39 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/xsd/datatypes.rb: Rational -> Decimal string bug fix.
+
+ * test/soap/marshal/test_marshal.rb: ditto.
+
+ * test/soap/calc/test_calc_cgi.rb: add Config::CONFIG["EXEEXT"] to
+ RUBYBIN.
+
+Sun Oct 5 13:47:22 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: add tests
+ about scope, order and allowed syntax.
+
+Sun Oct 5 11:54:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/envutil.rb: added. split "rubybin" from test_system.rb.
+
+ * test/ruby/test_system.rb: use envutil.rb
+
+ * test/ruby/test_beginendblock.rb: added.
+
+ * test/ruby/beginmainend.rb: added. used in test_beginendblock.rb.
+
+Sun Oct 5 11:23:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * test/testunit/runit/test_testresult.rb: removed some unnecessary
+ cruft.
+
+Sun Oct 5 11:14:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/rubyunit.rb: aliasing TestCase into the top level is
+ problematic.
+
+ * lib/runit/assert.rb: fixed a couple of bugs caused by recent
+ refactoring in Test::Unit.
+
+ * test/testunit/runit/*: added.
+
+Sun Oct 5 10:55:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/open-uri.rb (URI::Generic#find_proxy): no_proxy support did not
+ work. [ruby-dev:21484]
+
+Sun Oct 5 09:52:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: will use pp for output if available.
+ Can be disabled by setting Assertions.use_pp = false.
+
+ * test/testunit/test_assertions.rb: made a small change to exception
+ formatting.
+
+Sun Oct 5 07:42:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: made small improvements to assertion
+ messages. Deprecated Assertions#assert_not_nil; use #assert instead.
+
+ * test/testunit/test_assertions.rb: ditto.
+
+ * test/testunit/util/test_procwrapper.rb: use #assert instead of
+ #assert_not_nil.
+
+Sun Oct 5 04:10:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: refactored message building.
+
+Sun Oct 5 03:40:22 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_asn1.h: global symbols should be declared
+ as external.
+
+Sun Oct 5 03:03:20 2003 akira yamada <akira@ruby-lang.org>
+
+ * test/ruby/test_exception.rb (test_else): added.
+
+Sun Oct 5 02:12:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: changed assertion messages to rely more
+ heavily on #inspect. Added backtrace filtering for exceptions in
+ assertion messages.
+
+ * test/testunit/test_assertions.rb: ditto.
+
+Sun Oct 5 02:12:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/acl.rb, lib/drb/ssl.rb: added.
+
+ * lib/drb/drb.rb: exit from a thread using 'break'.
+
+Sat Oct 4 21:49:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * gc.c (Init_stack): the type of space is changed to unsigned int
+ from double. [ruby-dev:21483]
+
+Sat Oct 4 17:52:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/netHttpClient.rb: follow http-access2. hosts which matches
+ ENV['no_proxy'] or ENV['NO_PROXY'] are not proxyed.
+ - [,:] separated. ("ruby-lang.org:rubyist.net")
+ - no regexp. (give "ruby-lang.org", not "*.ruby-lang.org")
+ - if you want specify host by IP address, give full address.
+ ("192.168.1.1, 192.168.1.2")
+
+ * lib/soap/rpc/cgistub.rb: return "Status: XXX MMM" line.
+
+ * test/runner.rb: give testsuite name.
+
+Sat Oct 4 15:16:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): instance variable dump do not cause error
+ for objects that cannot be dumped, if they traversed from
+ marshal_dump. they are just ignored.
+
+ * gc.c (Init_stack): cast "space" (doble value) into unsigned
+ int. should run on PowerPC.
+
+ * eval.c (rb_eval): should not execute else part if any exception
+ is caught. [ruby-dev:21482]
+
+ * parse.y (f_args): should allow unparenthesized block argument.
+
+ * parse.y (f_rest_arg): should allow unparenthesized rest
+ argument.
+
+Sat Oct 4 14:59:51 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (initialize): raise ArgumentError if argument has
+ '\0' character.
+ (relative_path_from): new method.
+ (each_entry): new method for replacement of dir_foreach.
+ (foreach, foreachline, dir_foreach, chdir): obsoleted.
+
+Sat Oct 4 12:58:48 2003 akira yamada <akira@ruby-lang.org>
+
+ * test/uri/* (6 files): added.
+
+Sat Oct 4 12:44:45 2003 akira yamada <akira@ruby-lang.org>
+
+ * lib/uri/ftp.rb, lib/uri/mailto.rb: renamed to #to_s from #to_str.
+
+Sat Oct 4 07:33:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/testsuite.rb: changed #<< to return self, and added
+ #delete.
+
+ * test/testunit/test_testsuite.rb: ditto. Also slightly refactored
+ #test_size.
+
+ * lib/test/unit/collector/objectspace.rb: collector now preserves the
+ hierarchy of suites.
+
+ * test/testunit/collector/test_objectspace.rb: ditto.
+
+Sat Oct 4 04:48:49 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/rubyext.c: default keys handled.
+
+ * ext/syck/syck.h: lowered default buffer size to 16k for increased
+ performance.
+
+ * test/yaml: checkin of basic unit tests.
+
+Sat Oct 4 04:24:19 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: add check for X509V3_set_nconf.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):
+ cannot implement if X509V3_set_nconf doesn't exist.
+
+Sat Oct 4 02:12:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/xsd/datatypes.rb: dump sign by itself. under the problematic
+ platform, sprintf("%+.10g", -0.0) => +0. sigh.
+
+ * sample/wsdl/amazon/*: update schema ver2 to ver3.
+
+Sat Oct 4 01:33:46 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (initialize): duplicate and freeze argument.
+ (to_s): return duplicated string.
+ (children): new method.
+ (each_line): new alias to foreachline.
+
+Fri Oct 3 16:13:19 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_asn1.c: add DER encoder and decoder.
+
+ * ext/openssl/ossl_asn1.h: add OpenSSL::ASN1 module.
+
+ * ext/openssl/ossl.c (Init_openssl): call Init_ossl_asn1.
+
+ * ext/openssl/extconf.rb: check if X509_ATTRIBUTE has field "single".
+
+ * ext/openssl/ossl_x509attr.c (ossl_x509attr_set_value): accept
+ DER encoded data argument.
+
+ * ext/openssl/ossl_x509attr.c (ossl_x509attr_get_value): return
+ DER encoded data in OpenSSL::ASN1 types.
+
+Fri Oct 3 13:02:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit.rb: refactored to use optparse.
+
+ * lib/test/unit.rb: added support for selecting the output
+ level from the command-line.
+
+ * lib/test/unit.rb: added a command-line switch to stop processing
+ the command-line, allowing arguments to be passed to tests.
+
+ * lib/test/unit.rb: changed the method for specifying a runner or a
+ filter from the command-line.
+
+ * lib/test/unit/collector/objectspace.rb: fixed a bug causing all
+ tests to be excluded when the filter was set to an empty array.
+
+ * test/testunit/collector/test_objectspace.rb: ditto.
+
+Fri Oct 3 08:14:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb (RubyLex::identify_identifier): support
+ 'class ::Foo' syntax. [ruby-talk:83514]
+
+Fri Oct 3 08:01:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: added a default message for #assert,
+ #assert_block, and #flunk.
+
+ * test/testunit/test_assertions.rb: ditto.
+
+ * lib/test/unit/failure.rb: failures now show a better trace of where
+ they occurred.
+
+ * test/testunit/test_failure.rb: ditto (added).
+
+ * lib/test/unit/testcase.rb: ditto.
+
+ * test/testunit/test_testcase.rb: ditto.
+
+ * lib/test/unit/util/backtracefilter.rb: added.
+
+ * test/testunit/util/test_backtracefilter.rb: added.
+
+ * lib/test/unit/error.rb: changed to use BacktraceFilter and improved
+ output.
+
+ * test/testunit/test_error.rb: ditto.
+
+Thu Oct 2 20:33:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_failure_initialize): conform with
+ orthodox initialization method.
+
+ * ext/iconv/iconv.c (iconv_fail): initialize exception instance
+ from the class, and do not share instance variables with the
+ others. [ruby-dev:21470]
+
+Thu Oct 2 18:20:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (Init_Time): define initialize. [ruby-dev:21469]
+
+Thu Oct 2 17:39:38 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_engine.c: add a new module OpenSSL::Engine.
+ it supports OpenSSL hardware cryptographic engine interface.
+
+ * ext/openssl/ossl_engine.h: ditto.
+
+ * ext/openssl/MANIFEST: add ossl_engine.c and ossl_engine.h.
+
+ * ext/openssl/extconf.rb: add check for openssl/engine.h.
+
+ * ext/openssl/ossl.c: call Init_ossl_engine().
+
+ * ext/openssl/ossl.h: include openssl/engine.h.
+
+ * ext/openssl/ossl_pkey_{rsa,dsa,dh}.c: check if underlying
+ EVP_PKEY referes engine.
+
+Thu Oct 2 17:22:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_load): restore instance variables (if any) before
+ loading from marshaled data.
+
+Thu Oct 2 14:19:15 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_fail): now yield erred substring, and
+ set error object to $!.
+
+ * ext/iconv/iconv.c (iconv_convert): error handler block should
+ return appended part and the rest. if rest is nil, the
+ conversion stops.
+
+Thu Oct 2 12:00:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_const_defined_0): look up constants in Object as
+ well. [ruby-dev:21458]
+
+ * test/ruby/test_defined.rb (TestDefined::test_defined): test for
+ constants.
+
+Thu Oct 2 11:17:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: should not capture an
+ AssertionFailedError unless explicitly requested.
+
+ * test/testunit/test_assertions.rb: ditto.
+
+ * test/testunit/collector/test_objectspace.rb: fixed a test failure
+ caused by methods being returned in different orders on different
+ platforms by moving test sorting from TestSuite into the locations
+ where suites are constructed. [ruby-talk:83156]
+
+ * lib/test/unit/testcase.rb: ditto.
+
+ * lib/test/unit/testsuite.rb: ditto.
+
+ * lib/test/unit/collector/objectspace.rb: ditto.
+
+Thu Oct 2 03:25:01 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval.c (rb_thread_raise): prototype; avoid VC++ warning.
+
+Thu Oct 2 01:37:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_mdump): new marshal dumper. _dump is still
+ available for compatibility.
+
+ * time.c (time_mload): new marshal loader.
+
+ * marshal.c (w_object): preserve instance variables for objects
+ with marshal_dump.
+
+ * marshal.c (r_object0): restore instance variables before calling
+ marshal_load.
+
+ * error.c (rb_warn_m): always return nil.
+
+Thu Oct 2 01:32:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_block_given_p): real required condition is
+ ruby_frame->prev->iter == ITER_CUR.
+
+ * eval.c (rb_block_given_p): ditto.
+
+ * eval.c (block_pass): update ruby_frame->iter only when previous
+ value is ITER_NOT.
+
+Thu Oct 2 01:02:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_const_defined_at): should exclude constants from
+ Object when TYPE(klass) == T_MODULE *and* exclude is on.
+ [ruby-dev:21458]
+
+ * variable.c (rb_const_get_0): do not lookup constants from Object
+ when TYPE(klass) == T_MODULE *and* exclude is on.
+
+Thu Oct 2 00:21:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/logger/test_logger.rb: unlinking file before close causes
+ problem under win32 box.
+
+ * lib/xsd/datatypes.rb(XSDFloat, XSDDouble): add +/- sign explicitly
+ when stringified and embedded into XML instance. Ruby's sprintf may
+ format -0.0 as "0.0" (no minus sign) depending on underlying C
+ sprintf implementation.
+
+ * test/xsd/test_xsd.rb, test/soap/test_basetype.rb: follow above change.
+
+ * test/soap/calc/*: give httpd config param "CGIInterpreter".
+ "/usr/bin/env ruby" thing does not work under non-Unix boxes.
+
+Sat Oct 2 00:42:20 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_byte): retrieve pointer from string value for each
+ time. [ruby-dev:24404]
+
+ * marshal.c (r_bytes0): ditto.
+
+ * enum.c (sort_by_i): re-entrance check added. [ruby-dev:24399]
+
+ * io.c (io_read): should freeze all reading buffer.
+ [ruby-dev:24400]
+
+ * string.c (rb_str_sum): should use bignums when bits is greater
+ than or equals to sizeof(long)*CHAR_BITS. [ruby-dev:24395]
+
+ * eval.c (specific_eval): defer pointer retrieval to prevent
+ unsafe sourcefile string modification. [ruby-dev:24382]
+
+ * string.c (rb_str_sum): wrong cast caused wrong result.
+ [ruby-dev:24385]
+
+ * enum.c (enum_sort_by): hide temporary array from
+ ObjectSpace.each_object. [ruby-dev:24386]
+
+ * string.c (rb_str_sum): check was done with false pointer.
+ [ruby-dev:24383]
+
+ * string.c (rb_str_sum): string may be altered. [ruby-dev:24381]
+
+Thu Oct 2 00:25:21 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (ruby_signal_name): adjust to the prototype.
+
+ * process.c (pst_inspect): ditto.
+
+ * ext/etc/etc.c (etc_getgrent, Init_etc): typo.
+
+Wed Oct 1 20:49:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (heaps): manage slots and limits together. [ruby-dev:21453]
+
+ * gc.c (add_heap): should not clear heaps slot even if realloc()
+ failed.
+
+Wed Oct 1 20:36:49 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST: add wince/mkconfig_wce.rb.
+
+Wed Oct 1 17:22:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/etc/etc.c: add new functions: setpwent, getpwent, endpwent,
+ setgrent, getgrent, endgrent.
+
+ * ext/socket/socket.c (sock_s_gethostbyname): do not reverse lookup.
+
+Wed Oct 1 17:01:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_load): Object scope had priority over required file
+ scope. [ruby-dev:21415]
+
+Wed Oct 1 14:09:53 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/mkconfig_wce.rb: sorry, forget to commit.
+
+Wed Oct 1 10:08:42 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/setup.mak: add sigmarionIII SDK support.
+
+ * wince/Makefile.sub: ditto.
+
+ * wince/mkexports.rb: fix linker error in SH4.
+
+ * wince/mkconfig_wce.rb: camouflage RUBY_PLATFORM for compiling ext.
+
+Wed Oct 1 08:02:52 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/time_wce.c (time): add zero check.
+
+Tue Sep 30 16:11:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * Makefile.in: copy lex.c from $(srcdir) if it's not the current
+ directory. [ruby-dev:21437]
+
+Tue Sep 30 11:29:23 2003 Tanaka Akira <akr@m17n.org>
+
+ * process.c (pst_inspect): describe stopped process "stopped".
+
+Tue Sep 30 09:31:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/runner.rb: glob for directories.
+
+Tue Sep 30 09:11:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): while/until should not capture break unless
+ they are destination of the break.
+
+Tue Sep 30 03:12:02 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (finish): revert to 1.93.
+
+ * lib/net/pop.rb (finish): revert to 1.60.
+
+ * lib/net/smtp.rb (finish): revert to 1.67.
+
+ * lib/net/http.rb (do_start): ensure to close socket if failed to
+ start session.
+
+ * lib/net/pop.rb (do_start): ditto.
+
+ * lib/net/smtp.rb (do_start): ditto.
+
+ * lib/net/smtp.rb: SMTP#started? wrongly returned false always.
+
+Tue Sep 30 02:54:49 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/ruby/test_iterator.rb: new test
+ test_break__nested_loop[123].
+
+Mon Sep 29 23:39:13 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (finish): does not raise IOError even if
+ !started?, to allow closing socket which was opened before
+ session started.
+
+ * lib/net/pop.rb (finish): ditto.
+
+ * lib/net/smtp.rb (finish): ditto.
+
+Mon Sep 29 19:06:51 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/win32ole/extconf.rb: add windows.h checking.
+ (ruby-bugs:PR#1185)
+
+Mon Sep 29 16:18:30 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: check if the given logdevice object respond_to :write
+ and :close, not is_a? IO. duck duck.
+
+ * test/logger/test_logger.rb: self IO.pipe reading/writing may be
+ locked by the flood. use tempfile.
+
+ * lib/wsdl/xmlSchema/data.rb: wrong constant reference.
+
+Mon Sep 29 16:11:23 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb: clean up temporary symlink.
+ Patched by NaHi. [ruby-dev:21420]
+
+Mon Sep 29 11:16:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_atfork): wrong format specifier.
+ [ruby-dev:21428]
+
+ * process.c (pst_inspect): better description.
+
+Mon Sep 29 02:31:44 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/utils.rb (Utils::su): use setgid and setuid to
+ set real and effective IDs. and setup group access list by
+ initgroups.
+
+Sun Sep 28 11:14:19 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * ext/digest/digest.c (Init_digest): `copy_object' was deprecated.
+ `initialize_copy' should be defined.
+
+ * ext/stringio/stringio.c (Init_stringio): ditto.
+
+Sat Sep 27 18:25:13 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/xsd/charset.rb: XSD::Charset.is_ces did return always true under
+ $KCODE = "NONE" environment. check added.
+
+ * test/xsd/test_xsd.rb: add tests for above fix.
+
+Sat Sep 27 15:58:50 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/rpc/cgistub.rb: make logging severity threshold higher.
+
+ * lib/soap/rpc/standaloneServer.rb: defer WEBrick server start to give
+ a chance to reset logging severity threshold.
+
+ * test/soap/calc/test_*, test/soap/helloworld/test_helloworld.rb: run
+ silent.
+
+Sat Sep 27 09:44:18 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/test_fileutils.rb: clear all errors on Windows.
+ [ruby-dev:21417]
+
+ * test/fileutils/test_nowrite.rb: ditto.
+
+Mon Sep 27 09:14:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_delete): comparison may change the capacity.
+ [ruby-dev:24348]
+
+ * array.c (rb_ary_fill): fill should honor length argument.
+ [ruby-dev:24346]
+
+ * array.c (rb_ary_replace): should not use ptr from shared array.
+ [ruby-dev:24345]
+
+ * ext/socket/socket.c (s_accept): don't retry for EWOULDBLOCK.
+ [ruby-talk:113807]
+
+Sat Sep 27 04:57:07 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_file.rb: new file. only asserts unlink-before-close
+ behaviour now.
+
+ * test/soap/marshal/test_digraph.rb: should close before unlink.
+ unlink-before-close pattern is not needed here.
+
+Sat Sep 27 03:32:37 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/soap/*, test/wsdl/*, test/xsd/*: move TestCase classes into
+ each module namespace. TestMarshal in
+ test/soap/marshal/test_marshal.rb crashed with
+ test/ruby/test_marshal.rb.
+
+Sat Sep 27 01:30:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): on win32, type of the 4th
+ argument of getsockopt is char *.
+
+Fri Sep 26 18:35:40 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/resolv-replace.rb: 1.8 compliance. [ruby-talk:82946]
+
+Fri Sep 26 17:39:27 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_marshal.rb: add test for ruby's objects.
+
+Fri Sep 26 09:52:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * defines.h (flush_register_windows): use volatile only for gcc on
+ Solaris. [ruby-dev:21403]
+
+ * lib/mkmf.rb (xsystem): use system directly to honor shell meta
+ charaters.
+
+Fri Sep 26 00:10:13 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/README: updated.
+
+Thu Sep 25 17:48:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl.c (ossl_buf2str): fix type of 1st argument for
+ rb_protect.
+
+ * ext/openssl/ossl_hmac.c (ossl_hmac_digest): should return meaningful
+ value.
+
+Thu Sep 25 09:00:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/ostruct.rb: Added OpenStruct#==.
+
+ * test/ostruct/test_ostruct.rb: Added.
+
+Thu Sep 25 07:55:26 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c, ext/openssl/ossl_pkey_dsa.c,
+ ext/openssl/ossl_pkey_rsa.c, ext/bigdecimal/bigdecimal.h: must
+ not use C++ or C99 style comment yet. (ruby-bugs:PR#1184)
+
+Thu Sep 25 00:23:22 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST: add SOAP4R.
+
+Thu Sep 25 00:13:15 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/soap/* (29 files): SOAP4R added.
+
+ * lib/wsdl/* (42 files): WSDL4R added.
+
+ * lib/xsd/* (12 files): XSD4R added.
+
+ * test/soap/* (16 files): added.
+
+ * test/wsdl/* (2 files): added.
+
+ * test/xsd/* (3 files): added.
+
+ * sample/soap/* (27 files): added.
+
+ * sample/wsdl/* (13 files): added.
+
+Wed Sep 24 02:08:11 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpservlet/cgihandler.rb: conform to mswin32.
+ [ruby-talk:82735], [ruby-talk:82748], [ruby-talk:82818]
+
+Tue Sep 23 23:10:16 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: add Logger#<<(msg) for writing msg without any
+ formatting.
+
+ * test/logger/test_logger.rb: ditto.
+
+Tue Sep 23 20:47:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_warn_m): should not warn if -W0 is specified.
+ [ruby-talk:82675]
+
+Mon Sep 22 21:28:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST: updated.
+
+Mon Sep 22 19:22:26 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * configure.in (AC_CHECK_FUNCS): add setuid and setgid.
+
+Mon Sep 22 12:34:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * util.c (ruby_strtod): skip preceding zeros before counting
+ digits in the mantissa. (ruby-bugs:PR#1181)
+
+Sun Sep 21 04:12:36 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspreq_initialize): the argument
+ should be a String.
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): ditt.
+
+ * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): ditto.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.
+
+Sat Sep 20 11:49:05 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: typo fixed.
+
+ * test/logger/test_logger.rb: new file.
+
+Fri Sep 19 11:39:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * test/testunit/*: Added.
+
+ * lib/test/unit.rb: Documentation update.
+
+ * lib/test/unit/ui/console/testrunner.rb (TestRunner#initialize):
+ Ditto.
+
+ * lib/test/unit.rb: Factored out an ObjectSpace collector.
+
+ * lib/test/unit/collector/objectspace.rb: Ditto.
+
+ * sample/testunit/*: Added.
+
+Fri Sep 19 01:00:48 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/log.rb (BasicLog#log): get rid of as ineffectual
+ condition.
+
+ * lib/webrick/log.rb (BasicLog#format): add "\n" to message.
+
+Thu Sep 18 22:43:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): should push PROT_PCALL tag for orphans.
+
+ * eval.c (proc_invoke): should update "result" for orphans.
+
+Thu Sep 18 20:33:03 2003 Tietew <tietew-ml-ruby-list@tietew.net>
+
+ * parse.y (str_xquote): do not prepend escapes in
+ backqoute literals. [ruby-list:38409]
+
+Thu Sep 18 20:30:17 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb: update document.
+
+Thu Sep 18 15:27:05 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: new file. Logger, formerly called devel-logger or
+ Devel::Logger.
+
+ * sample/logger/*: new file. samples of logger.rb.
+
+Wed Sep 17 23:41:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (localjump_destination): should not raise ThreadError
+ exception for "break". [ruby-dev:21348]
+
+ * eval.c (proc_invoke): use result instead of prot_tag->retval.
+ retval is no longer propagated to the ancestors.
+
+Wed Sep 17 20:34:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (tokadd_string, parse_string, yylex): escaped terminator
+ is now interpreted as is. [ruby-talk:82206]
+
+Wed Sep 17 18:52:36 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/fileutils/fileassertions.rb: new file.
+
+ * test/fileutils/test_fileutils.rb: new file.
+
+ * test/fileutils/test_nowrite.rb: new file.
+
+Wed Sep 17 18:51:02 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/strscan/test_stringscanner.rb: require test/unit.
+
+Wed Sep 17 18:35:34 2003 Minero Aoki <aamine@loveruby.net>
+
+ * test/strscan/test_stringscanner.rb: new file.
+
+Wed Sep 17 18:03:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl: all files are reviewed to simplify and avoid memory leak.
+
+ * ext/openssl/extconf.rb: add check for assert.h.
+
+ * ext/openssl/ossl.c (ossl_buf2str): new function to convert
+ C buffer to String and free buffer.
+
+ * ext/openssl/ossl.c (ossl_x509_ary2sk): new function to convert
+ Array of OpenSSL::X509 to STACK_OF(X509) with exception safe.
+
+ * ext/openssl/ossl.c (ossl_to_der, ossl_to_der_if_possible): new
+ functions to convert object to DER string.
+
+ * ext/openssl/ossl.h: ditto.
+
+ * ext/openssl/ossl_bio.c (ossl_membio2str): new function to convert
+ BIO to String object and free BIO.
+
+ * ext/openssl/ossl_bio.h: ditto.
+
+ * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_to_der): add for "to_der".
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_to_der): ditto.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_to_der): ditto.
+
+ * ext/openssl/ossl_x509ext.c (create_ext_from_array): removed
+ and reimplement in openssl/x509.rb.
+
+ * ext/openssl/ossl_x509attr.c: reimplemented and disable some
+ method temporarily. this class doesn't work fine without ASN.1
+ data support;-) I'll rewrite in near future.
+
+ * ext/openssl/lib/openssl/x509.c (X509::Attribute): get rid off
+ unused code.
+
+ * ext/openssl/lib/openssl/x509.c (X509::ExtensionFactory): refine all.
+
+Tue Sep 16 22:25:06 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/csv/test_csv.rb: add negative tests of row_sep.
+
+Tue Sep 16 18:02:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): should not translate character
+ class range edge. [ruby-list:38393]
+
+Tue Sep 16 16:47:56 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST: add test/csv/mac.csv.
+
+ * win32/Makefile.sub, bcc32/Makefile.sub (test): add phony NUL target.
+
+Mon Sep 15 19:02:52 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/csv.rb: add extra pamameter to specify row(record) separater
+ character. To parse Mac's CR separated CSV, do like this.
+ CSV.open("mac.csv", "r", ?,, ?\r) { |row| p row.to_a }
+ The 3rd parameter in this example ?, is for column separater and the
+ 4th ?\r is for row separater. Row separater is nil by default. Nil
+ separater means "\r\n" or "\n".
+
+ * test/csv/test_csv.rb: add tests for above feature.
+
+ * test/csv/mac.csv: added. Sample CR separated CSV file.
+
+Fri Sep 12 22:41:48 2003 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * ext/openssl/ossl.c: move ASN.1 stuff to ossl_asn1.[ch]
+
+ * ext/openssl/ossl.c: move BIO stuff to ossl_bio.[ch]
+
+ * ext/openssl/ossl_asn1.[ch]: new files
+
+ * ext/openssl/ossl_bio.[ch]: new files
+
+Fri Sep 12 12:30:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * intern.h (rb_disable_super, rb_enable_super): replace with dummy
+ expressions instead of prototypes. the functions remain yet for
+ binary compatibility. [ruby-talk:81758]
+
+Fri Sep 12 12:09:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_and): convert argument using 'to_int'.
+
+ * bignum.c (rb_big_or): ditto.
+
+ * bignum.c (rb_big_xor): ditto.
+
+Fri Sep 12 07:06:14 2003 David Black <dblack@superlink.net>
+
+ * lib/scanf.rb: Took out useless @matched_item variable; some small
+ refactoring.
+
+Thu Sep 11 08:43:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): allow "require" on $SAFE>0, if feature
+ name is not tainted.
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::stream):
+ Supports StringIO.
+
+Wed Sep 10 22:47:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl.h: add a workaround for win32 platform.
+ libeay32.dll doesn't export functions defined in conf_api.h.
+
+ * ext/openssl/ossl_config.c (ossl_config_initialize): ditto.
+
+ * ext/openssl/ossl_config.c (ossl_config_add_value): ditto.
+
+ * ext/openssl/ossl_config.c (set_conf_section_i): should check
+ if the argument is Array.
+
+Wed Sep 10 22:41:54 2003 Tietew <tietew@tietew.net>
+
+ * eval.c (win32_get_exception_list): avoid VC7 warning.
+ [ruby-win32:577]
+
+Tue Sep 9 10:39:51 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (struct tag): dst should be VALUE.
+
+Tue Sep 9 10:39:51 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (localjump_destination): stop at the scope where the current
+ block was created. [ruby-dev:21353]
+
+Tue Sep 9 05:17:04 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_config.rb: avoid compile error in OpenSSL-0.9.6.
+
+Tue Sep 9 02:41:35 2003 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * ext/openssl/ossl_config.c: Refine compatibility.
+
+Tue Sep 9 01:50:45 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpserver.rb (HTTPServer#access_log): add "\n" to
+ the message.
+
+ * lib/webrick/log.rb (BasicLog#log): add "\n" only if needed.
+
+Mon Sep 8 22:15:33 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: modify security check at creating
+ a new interpreter
+
+Mon Sep 8 20:00:12 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb, lib/optparse/version.rb: search also all
+ capital versions.
+
+Mon Sep 8 19:26:33 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl.h: include openssl/conf.h and openssl/conf_api.h.
+
+ * ext/openssl/ossl_config.c: refine all with backward compatibility.
+
+ * ext/openssl/ossl_config.h: export GetConfigPtr() and DupConfigPtr().
+
+ * ext/openssl/ossl_x509.c: added new constants under X509 module.
+ DEFAULT_CERT_AREA, DEFAULT_CERT_DIR, DEFAULT_CERT_FILE,
+ DEFAULT_CERT_DIR_ENV, DEFAULT_CERT_FILE_ENV and DEFAULT_PRIVATE_DIR.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_free): don't free
+ the members of the struct. it's left to GC.
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509_set_config): add for config=.
+
+ * ext/openssl/ossl_x509ext.c (Xossl_x509extfactory_initialize):
+ add attr readers: issuer_certificate, subject_certificate,
+ subject_request, crl and config.
+
+Mon Sep 8 18:26:41 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/accesslog.rb (AccessLog::setup_params): use req.port
+ instead of config[:Port] or req.request_uri.port.
+
+ * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): ditto.
+
+ * lib/webrick/httpservlet/filehandler.rb (FileHandler#dir_list): ditto.
+
+ * lib/webrick/config.rb: :Listen option never be used.
+
+ * lib/webrick/server.rb (GenericServer#initialize): don't use :Listen
+ option and add warning message.
+
+ * lib/webrick/log.rb (BasicLog#<<): shortcut of log(INFO, ...).
+
+ * lib/webrick/httpserver.rb (HTTPServer#accesslog): use << for logging.
+
+Sun Sep 7 16:08:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop_core): fixed signal-trap bug
+
+ * ext/tk/lib/*.rb : Ruby/Tk works at $SAFE == 4
+
+Sat Sep 6 02:26:34 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_*.rb: assert_same, assert_match, and so on.
+
+Sat Sep 6 18:45:46 2003 Mauricio Fernandez <batsman.geo@yahoo.com>
+
+ * parse.y (assignable): call rb_compile_error(), not rb_bug().
+ [ruby-core:01523]
+
+Sat Sep 6 17:40:41 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ruby_missing.c: rid of unnecessary backward
+ compatibility stuff. and remove DEFINE_ALLOC_WRAPPER from
+ all sources.
+
+ * ext/openssl/ossl_x509ext.c (X509::Extension.new): new method.
+
+ * ext/openssl/ossl_x509ext.c (X509::Extension#oid=): new method.
+
+ * ext/openssl/ossl_x509ext.c (X509::Extension#value=): new method.
+
+ * ext/openssl/ossl_x509ext.c (X509::Extension#critical=): new method.
+
+Sat Sep 6 01:23:22 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set.
+
+ * win32/win32.c (CreateChild): fix condition about whether to call
+ shell or not.
+
+Sat Sep 6 00:36:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * Makefile.in (test): phony target.
+
+ * lib/mkmf.rb (have_library, find_library): configure by library
+ name.
+
+ * lib/optparse.rb (OptionParser#order, #permute, #parse): allow an
+ array as argument.
+
+ * test/ruby/test_*.rb: moved invariants to left side in
+ assert_equal, and use assert_nil, assert_raises and so on.
+
+ * win32/win32.c (isInternalCmd): distinguish command.com and
+ cmd.exe.
+
+ * win32/win32.c (make_cmdvector): a character just after wildcard
+ was ignored. [ruby-core:01518]
+
+Fri Sep 5 20:27:08 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_*.rb: replace 'assert(a == b)' with assert_equal(a, b)'
+
+Fri Sep 5 18:00:51 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/x509.rb: new method X509::Name::parse.
+
+ * ext/openssl/ossl_digest.c: add ossl_digest_new().
+
+ * ext/openssl/ossl_digest.h: ditto.
+
+ * ext/openssl/ossl_cipher.c: add ossl_cipher_new().
+
+ * ext/openssl/ossl_cipher.h: ditto.
+
+Fri Sep 5 15:32:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): should not
+ search delimiter forward if found in backward.
+
+Fri Sep 5 13:32:48 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/runner.rb: arguments should be keys.
+
+Fri Sep 5 12:09:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * test/ruby/test_system.rb (test_system): check existence of ruby
+ interpreter.
+
+Fri Sep 5 11:32:17 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (--version): fix assignment/reference order.
+
+ * lib/optparse.rb (OptionParser#help): new; OptionParser#to_s may
+ be deprecated in future.
+
+ * lib/optparse/version.rb (OptionParser#show_version): hide Object.
+
+ * test/runner.rb: fix optparse usage.
+
+ * test/runner.rb: glob all testsuits if no tests given.
+
+Fri Sep 5 10:42:58 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/runner.rb: added. gets testcases from command line and runs it.
+
+ * test/ruby/test_gc.rb: remove useless part which was for dumping test
+ result.
+
+Fri Sep 5 09:28:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_gc.rb: added. splitter.rb which I made to split
+ sample/test.rb into test/ruby/test_* kindly removed GC test (the
+ last section in the original test) to reduce things to be worried.
+
+Fri Sep 5 03:00:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_iterator.rb (test_block_in_arg): add no block
+ given tests.
+
+ * test/ruby/test_iterator.rb (test_ljump): uncomment LocalJumpError
+ test.
+
+Fri Sep 5 01:10:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby: tests for ruby itself.
+
+ * test/ruby/test_*.rb: split sample/test.rb into 28 test/unit testcases.
+ some tests could not be translates... search '!!' mark to see it.
+
+ * test/csv/test_csv.rb: should require 'csv', not '../lib/csv'. test
+ runner should set load path correctly.
+
+Fri Sep 5 01:03:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/csv/test_csv.rb: close opened files for CSV::IOBuf explicitly.
+ opened file cannot be removed under win32 box.
+
+Thu Sep 4 23:59:40 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (tokadd_string): newlines have no special meanings in
+ %w/%W, otherwise they are ignored only when interpolation is
+ enabled. [ruby-dev:21325]
+
+Thu Sep 4 19:38:25 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/io/wait/.cvsignore: added.
+
+ * ext/openssl/.cvsignore: added.
+
+Thu Sep 4 19:28:24 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * sample/openssl: added. Sample of standard distribution library
+ should be locate in sample/{module_name}/*.
+
+ * ext/openssl/sample/*: removed. move to sample/openssl/*.
+
+Thu Sep 4 18:02:15 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/csv/test_csv.rb: use remove_const to reduce warnings. use
+ Dir.tmpdir to locate working files.
+
+Thu Sep 4 17:41:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-here-doc-beg-re): underscore also is
+ valid delimiter.
+
+ * misc/ruby-mode.el (ruby-here-doc-end-match): must quote
+ arbitrary string to use as regexp.
+
+ * misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): must not
+ call `ruby-here-doc-end-match' unless `ruby-here-doc-beg-re'
+ matched.
+
+Thu Sep 4 15:40:07 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/csv/test_csv.rb: run on test/unit original layer.
+
+Thu Sep 4 12:54:50 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/token.c: headerless documents with root-level spacing now
+ honored.
+
+Thu Sep 4 00:06:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (mark_frame_adj): need to adjust argv pointer if using
+ system's alloca. [ruby-core:01503]
+
+Wed Sep 3 21:33:20 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test: add test directory. Test::Unit aware testcases and needed
+ files should be located in this directory. dir/file name convention;
+ test/{module_name}/test_{testcase_name}.rb
+ test/{module_name}/{needed_files}
+ someday, someone will write testrunner which searches test_*.rb and
+ run testcases automatically.
+
+ * test/csv/*: add testcase for lib/csv.rb.
+
+Wed Sep 3 01:37:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_gets): should call next_argv() before type check
+ current_file. [ruby-list:38336]
+
+Tue Sep 2 20:37:15 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): warning
+ for skipping server verification.
+
+Tue Sep 2 23:36:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): should retrieve retval when pcall is true.
+
+Tue Sep 2 14:09:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/extconf.rb: check s6_addr8 in in6_addr (Tru64 UNIX).
+ the patch is submitted by nmu <nmu@users.sourceforge.jp>.
+
+ * ext/socket/getaddrinfo.c (getaddrinfo): should use in6_addr8 on
+ some platforms.
+
+ * ext/socket/getnameinfo.c (getnameinfo): ditto.
+
+Tue Sep 2 14:02:19 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception
+
+ * ext/tk/lib/{tk.rb, tkcanvas.rb, tkfont.rb, tktext.rb} :
+ bug fix and improvement of font control
+
+Tue Sep 2 09:51:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): should not handle exceptions within rescue
+ argument. [ruby-talk:80804]
+
+Tue Sep 2 00:44:37 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_memsearch): fix overrun. [ruby-talk:80759]
+
+Tue Sep 2 00:41:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (map_charset): use lower case keys.
+
+ * ext/iconv/iconv.c (iconv_fail): just yield error and return the
+ result if a block is given.
+
+ * ext/iconv/iconv.c (iconv_convert): yield error and append the
+ result if a block is given.
+
+ * ext/iconv/charset_alias.rb (charset_alias): optional third
+ argument.
+
+ * ext/iconv/charset_alias.rb (charset_alias): use CP932 instead of
+ SHIFT_JIS on cygwin.
+
+Mon Sep 1 18:34:25 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval): make tail recursion in ELSE clause of
+ RESCUE a jump.
+
+Mon Sep 1 18:00:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (aref_args): forgot to call NEW_SPLAT(). reported by
+ Dave Butcher.
+
+ * eval.c (Init_Thread): protect thgroup_default. suggested by Guy
+ Decoux in [ruby-talk:80623]
+
+Mon Sep 1 16:59:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_thread_switch): add RESTORE_EXIT; exit by another
+ thread termination.
+
+ * eval.c (rb_thread_start_0): should not error_print() within
+ terminated thread, because $stderr used by it might be
+ overriden now. [ruby-dev:21280]
+
+Sun Aug 31 22:46:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (TAG_DST()): take no argument.
+
+ * process.c (p_gid_sw_ensure): return VALUE.
+
+Sun Aug 31 22:27:10 2003 Hidetoshi NAGAI <nagai@dumbo.ai.kyutech.ac.jp>
+
+ * process.c (p_gid_sw_ensure): lack of function type
+
+Sun Aug 31 12:25:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb: --version takes an optional argument; "all" or
+ a list of package names.
+
+Sun Aug 31 10:17:02 2003 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb: yyyy/mm is not an acceptable format.
+
+ * lib/time.rb: follow above.
+
+Sat Aug 30 14:25:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_iter_break): should not call TAG_JUMP directly.
+
+Sat Aug 30 03:58:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (struct BLOCK): remove BLOCKTAG, use scope instead.
+
+ * eval.c (POP_TAG): no longer propagate retval. retval is now set
+ directly by localjump_destination().
+
+ * eval.c (localjump_destination): new function to cast
+ return/break local jump.
+
+ * eval.c (rb_yield_0): stop TAG_RETURN/TAG_BREAK escaping.
+
+Fri Aug 29 22:35:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * bigdecimal.c *.html: The 2nd arg. for add,sub,mult, and div is 0,
+ then result will be the same as +,-,*,/ respectively.
+
+Fri Aug 29 17:30:15 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * process.c: bug fix
+
+ * process.c: add rb_secure(2) to methods of Process::{UID,GID,Sys}
+
+ * process.c: deny handling IDs during evaluating the block given to
+ the Process::{UID,GID}.switch method
+
+ * ext/tcltklib/tcltklib.c : some methods have no effect if on slave-IP
+
+ * ext/tcltklib/tcltklib.c : can create a interpreter without Tk
+
+ * ext/tcltklib/tcltklib.c : bug fix on handling exceptions
+
+ * ext/tcltklib/MANUAL.euc : modify
+
+ * ext/tk/lib/tk.rb : freeze some core modules
+
+ * ext/tk/lib/multi-tk.rb : more secure
+
+ * ext/tk/lib/tk.rb: TkVariable.new(array) --> treat the array as the
+ Tk's list
+
+ * ext/tk/lib/tk.rb: improve accessibility of TkVariable object
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tkfont.rb, ext/tk/lib/tkcanvas.rb,
+ ext/tk/lib/tktext.rb : fix bug of font handling
+
+ * ext/tk/lib/tkfont.rb TkFont.new() accepts compound fonts
+
+Thu Aug 28 22:07:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_autoload_load): call const_missing if autoloading
+ constant is not defined to allow hook.
+
+ * eval.c (rb_eval): use rb_const_get_from() instead of
+ rb_const_get_at().
+
+ * eval.c (is_defined): forgot to check NODE_COLON3.
+
+Thu Aug 28 17:30:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_const_get_0): should check constants defined in
+ included modules, if klass is Object. [ruby-talk:79302]
+
+ * numeric.c (check_uint): check should be done using UINT_MAX, not
+ INT_MAX. this fix is submitted by Lyle Johnson
+ <lyle@knology.net> in [ruby-core:01486]
+
+Thu Aug 28 05:02:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (singleton): typo fixed (ruby-bugs-ja:PR#562)
+
+Thu Aug 28 02:37:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): *a = [1,2] now assigns [[1,2]] to a.
+ consistent with *a = [1], which set [[1]] to a.
+
+ * node.h: merge NODE_RESTARY to NODE_SPLAT.
+
+ * parse.y: rules simplified a bit by removing NODE_RESTARY.
+
+ * sample/test.rb: updated for new assignment behavior.
+
+Wed Aug 27 22:33:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_bug): should not use other methods; this function is
+ not for ordinary use. [ruby-dev:21259]
+
+Wed Aug 27 15:07:57 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb (check_response): AUTH CRAM-MD5 returns 334
+ response. [ruby-list:38279]
+
+Wed Aug 27 05:10:15 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (map_errno): support winsock error.
+
+ * win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,
+ kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime):
+ pass errno to map_errno().
+
+ * win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,
+ rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,
+ rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,
+ rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,
+ rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,
+ rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,
+ rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,
+ rb_w32_fclose, rb_w32_close): use map_errno().
+
+ * win32/win32.h: add winsock errors.
+
+Tue Aug 26 23:53:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/ostruct.rb (OpenStruct::method_missing): prohibit modifying
+ frozen OpenStruct. [ruby-talk:80214]
+
+Tue Aug 26 20:03:50 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_tmpsrc): add the hook for source.
+ [ruby-list:38122]
+
+Tue Aug 26 15:59:53 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * implicit.c (syck_type_id_to_taguri): corrected detection of
+ x-private types.
+
+Sun Aug 24 01:02:48 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): performance improvement.
+ [ruby-talk:79748]
+
+Sat Aug 23 23:41:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_expand_path): avoid calling rb_scan_args() for
+ apparent cases. [ruby-talk:79748]
+
+Sat Aug 23 18:56:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just
+ resize a string, rb_str_cat() disallows NULL. [ruby-dev:21237]
+
+Sat Aug 23 16:48:41 2003 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/ruby-lex.rb: bug fix for "foo" !~ /bar/. [ruby-talk:79942]
+
+Sat Aug 23 15:59:58 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_eval, rb_iterate, block_pass): reduce PUSH/POP_TAG and
+ EXEC_TAG() for retry. [ruby-dev:21216]
+
+Sat Aug 23 02:32:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_splat): should check if "values" is array.
+
+ * enum.c (each_with_index_i): typo.
+
+Fri Aug 22 17:07:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (inject_i): use rb_yield_values.
+
+ * enum.c (each_with_index_i): ditto.
+
+ * eval.c (rb_yield_splat): new function to call "yield *values".
+
+ * string.c (rb_str_scan): use rb_yield_splat().
+
+Fri Aug 22 06:13:22 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/rubyext.c: refactoring of the transfer method
+ dispatch. added yaml_org_handler for faster dispatch of
+ transfers to base types.
+
+ * lib/yaml/rubytypes.rb: removed handling of builtins from
+ Ruby library.
+
+ * ext/syck/token.c: quoted and block scalars are now implicit !str
+
+ * ext/syck/implicit.c: empty string detected as !null.
+
+Fri Aug 22 01:00:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (block_pass): improve passing current block.
+
+Fri Aug 22 00:13:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c: Int. overflow bug in multiplication
+ fixed, and VpNmlz() speed up.
+
+Wed Aug 20 16:44:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): many systems seem to have
+ a problem in select() after EINPROGRESS. [ruby-list:38080]
+
+Wed Aug 20 01:31:17 2003 why the lucky stiff <why@ruby-lang.org>
+
+ * ext/syck/syck.h: Parser definition problems on HP-UX.
+ [ruby-talk:79389]
+
+ * ext/syck/handler.c (syck_hdlr_get_anchor): Memory leak.
+
+ * ext/syck/syck.s (syck_io_file_read): Bad arguments to fread.
+
+ * ext/syck/rubyext.c: Tainting issues.
+
+Tue Aug 19 23:20:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c .h .html: to_s("+") implemented.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb: E implemented.
+
+Tue Aug 19 07:47:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/ssl.rb: new file; SSL/TLS enhancement for GenericServer.
+
+ * lib/webrick/https.rb: SSLSocket handling is moved to webrick/ssl.rb.
+
+ * lib/webrick/compat.rb (File::fnmatch): remove old migration code.
+
+ * lib/webrick/httpserver.rb (HTTPServer#run): ditto.
+
+ * lib/webrick/server.rb (GenericServer#listen): the body of this
+ method is pull out as Utils::create_lisnteners.
+
+ * lib/webrick/utils.rb (Utils::create_lisnteners): new method.
+
+ * lib/webrick/server.rb (GenericServer#start): should rescue
+ unknown errors. and refine comments.
+
+ * ext/openssl/lib/openssl/ssl.rb (SSLServer#accept): should close
+ socket if SSLSocket raises error.
+
+Tue Aug 19 11:19:33 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * io.c (next_argv): should not call GetOpenFile() if rb_stdout is
+ not a IO (T_FILE).
+
+Tue Aug 19 07:47:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c: sync_close is moved to SSLSocket as
+ a builtin.
+
+ * ext/openssl/lib/openssl/buffering.rb (Buffering#close): ditto.
+
+ * ext/openssl/lib/openssl/buffering.rb (Buffering#puts): should
+ add a return to the tails of each line.
+
+ * ext/openssl/lib/openssl/ssl.rb: new class OpenSSL::SSL::SSLServer.
+
+ * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): use sync_close.
+
+ * ext/openssl/sample/echo_svr.rb: use SSLServer.
+
+ * ext/openssl/sample/echo_cli.rb: add example of SSLSocket#sync_close.
+
+Tue Aug 19 01:24:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): Mac OS X standard
+ headers are inconsistent at this macro. [ruby-core:01432]
+
+ * ext/curses/extconf.rb: check if _XOPEN_SOURCE_EXTENDED breaks.
+
+ * ext/tcltklib/stubs.c: Status macro in X11/Xthreads.h bothers
+ winspool.h
+
+ * instruby.rb: make list at first instead of iterator.
+ [ruby-talk:79347]
+
+Mon Aug 18 11:23:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (glob_helper): preserve raw order for **.
+
+Sun Aug 17 23:39:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/extconf.rb (HAVE_VA_ARGS_MACRO): need to compile.
+
+Sun Aug 17 17:10:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/ssl.rb (SSLSocket#sync_close=): add a
+ method to specify if the underlying IO will be closed in
+ SSLSocket#close.
+
+ * ext/openssl/lib/openssl/buffering.rb: add forwarders to
+ setsockopt, getsockopt and fcntl.
+
+ * ext/openssl/lib/net/protocols.rb: enable sync for SSLSocket.
+
+Sun Aug 17 11:32:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): should not force to remake Makefile when
+ installation and so on.
+
+Sat Aug 16 23:58:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_symbol, w_object): get rid of warnings.
+
+ * re.c (rb_memsearch): ditto.
+
+ * time.c (time_dump): ditto.
+
+ * ext/extmk.rb (extmake): not continue making when extconf.rb
+ failed.
+
+ * ext/openssl/extconf.rb: check __VA_ARGS__ macro more precisely.
+
+ * ext/openssl/ossl.h: remove version.h dependency.
+
+ * ext/openssl/ruby_missing.h: ditto.
+
+ * lib/mkmf.rb (pkg_config): use --libs output except with
+ only-L for other options. [ruby-list:38099]
+
+ * lib/mkmf.rb (create_makefile): separate rule for static
+ library from shared object.
+
+ * win32/Makefile.sub, bcc32/Makefile.sub, wince/Makefile.sub:
+ define exec_prefix and libdir.
+
+Fri Aug 15 23:15:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c .h: Bug in combination of limit & div
+ method fixed.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb: atan() & sqrt() added.
+
+Fri Aug 15 12:01:43 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (HUGE_ST_INO): check whether struct stat.st_ino
+ is larger than long. [ruby-dev:21194]
+ http://www.geocities.co.jp/SiliconValley-PaloAlto/1409/ruby/beos.html
+
+ * error.c (syserr_eqq): errno might exceed Fixnum limit.
+
+ * error.c (Init_Exception): moved base initialization from
+ init_syserr().
+
+ * inits.c (rb_call_inits): postpone initializing errnos until
+ Bignum is available.
+
+Fri Aug 15 12:01:43 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): needed to let
+ keyname() and so on be declared.
+
+ * ext/curses/curses.c (curses_resizeterm, window_resize):
+ arguments conflicted with macros in term.h.
+
+ * ext/curses/curses.c (Curses module methods): ensure
+ initialized. [ruby-dev:21191]
+
+Fri Aug 15 02:08:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (id2ref): recycle check should be done by klass == 0.
+ [ruby-core:01408]
+
+Fri Aug 15 01:34:23 2003 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * ext/openssl/ossl_pkey.c: move generate_cb here
+
+ * ext/openssl/ossl_pkey_{dh|dsa|rsa}.c: adapt to this cb
+
+ * ext/openssl/openssl_missing.[ch]: add (0.9.6x, x<j) missing BN funcs
+
+ * ext/openssl/ossl_bn.c: use supplied funcs from openssl_missing.c
+
+Fri Aug 15 00:38:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c: Bug in div method fixed.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb: Newly added.
+
+ * ext/bigdecimal/sample/pi.rb: Changed so as to use math.rb.
+
+Thu Aug 14 21:19:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_Thread): Continuation#[] added. [ruby-talk:79028]
+
+Thu Aug 14 20:03:34 2003 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (OLE_FREE): should not call
+ ole_message_loop.
+
+ * ext/win32ole/win32ole.c (ole_event_free): ditto.
+
+ * ext/win32ole/win32ole.c (ole_initialize): stop calling
+ OleUninitialize at exit.
+
+Thu Aug 14 11:27:37 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (rb_data_object_alloc): check type of 1st argument.
+ [ruby-dev:21192]
+
+Thu Aug 14 00:21:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (mlhs_node): should allow "::Foo" (colon3) as lhs.
+
+ * parse.y (lhs): ditto.
+
+ * parse.y (yylex): should return tCOLON3 right after kCLASS.
+ [ruby-talk:78918]
+
+ * error.c (exc_initialize): was converting argument to string too
+ eagerly. Only check was needed. [ruby-talk:78958]
+
+Wed Aug 13 23:31:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c .h .html: Ambiguity of
+ BigDecimal::limit removed.
+
+Wed Aug 13 19:21:34 2003 Christian Neukirchen <chneukirchen@yahoo.de>
+
+ * lib/webrick/https.rb (HTTPServer#run): should set syncing-mode
+ to SSLSocket. [ruby-talk:78919]
+
+Wed Aug 13 18:13:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (POP_BLOCK): turn on BLOCK_LEFT flag when leaving block.
+
+ * eval.c (proc_invoke): unpack return/break destination when block
+ is already left.
+
+Wed Aug 13 15:58:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * object.c (rb_class_s_alloc): add function prototype to avoid VC++
+ warning.
+
+Wed Aug 13 13:50:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): should pass some
+ class to first argument of Data_Wrap_Struct(). (ruby-bugs:PR#1109)
+
+Tue Aug 12 16:55:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in: static link libraries to LIBRUBY_SO with static linked
+ ext. [ruby-dev:21157]
+
+ * ext/extmk.rb (extmake): sort extension library initialization order.
+
+ * ext/extmk.rb (extmake): compact $extlibs.
+
+Tue Aug 12 02:48:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (THREAD_SAVE_CONTEXT): should explicitly turn off the
+ flag before calling getcontext(2).
+
+ * eval.c (struct thread): add member to save backing store on
+ IA64. (ruby-bugs PR1086)
+
+ * eval.c (thread_mark): mark IA64 backing store region.
+
+ * eval.c (thread_free): free saved IA64 backing store.
+
+ * eval.c (rb_thread_save_context): save IA64 backing store as well.
+
+ * eval.c (rb_thread_restore_context): restore IA64 backing store.
+
+ * eval.c (THREAD_ALLOC): initialize IA64 members.
+
+Mon Aug 11 22:31:50 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+ * lib/debug.rb(debug_command): inspection command should inspect
+ resulting value even if it's nil. [ruby-dev:21180] by OMAE, jun
+ <jun66j5@ybb.ne.jp>.
+
+ * lib/debug.rb(debug_command): incomplete regexp.
+
+Mon Aug 11 17:33:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): do not use rb_block_given_p() for
+ check. [ruby-talk:78656]
+
+ * eval.c (BEGIN_CALLARGS): push ITER_NOT only when ITER_PRE.
+
+Sun Aug 10 10:43:05 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/buffering.rb: increase BLOCK_SIZE
+ from 1k to 16k bytes. [ruby-talk:78603]
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_s_alloc): enable
+ partial write to allow interruption in SSLSocket#write.
+
+Sun Aug 10 00:34:16 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * cygwin/GNUmakefile: remove unnecessary '--drive-name=$(CC)'
+ for ccache.
+
+Sat Aug 9 10:36:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): do not dump generic instance variable when
+ marshal_dump is defined.
+
+Sat Aug 9 00:35:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal.c: F style output(like 1234.56789) implemented
+ to to_s method.
+ * ext/bigdecimal_??.html: F style output(like 1234.56789)
+ implemented to to_s method.
+
+Fri Aug 8 12:33:17 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * bcc32/Makefile.sub: rubyw.exe should be a Windows GUI program.
+ add the -aa option to WLDFLAGS.
+
+Fri Aug 8 11:29:26 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * marshal.c (w_object): should set `c_arg' at first.
+
+Fri Aug 8 03:22:28 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httputils.rb (FormData#list): should not take
+ a side effect for the receiver.
+
+Thu Aug 7 14:40:37 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * cygwin/GNUmakefile: better --disbale-shared option support.
+
+ * cygwin/GNUmakefile: add forwarding DLL target for cygwin.
+
+Thu Aug 7 14:21:05 2003 Corinna Vinschen <vinschen@redhat.com>
+
+ * configure.in: Fix Cygwin specific naming of libraries to
+ be net distribution compliant. (ruby-bugs:PR#1077)
+ cygwin-ruby18.dll -> cygruby18.dll
+
+Thu Aug 7 12:51:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_at_exit): should not be called without a block.
+ block_given check added.
+
+Thu Aug 7 06:46:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): forgot to pop ruby_class.
+
+ * eval.c (rb_call0): update ruby_class as well as ruby_cref.
+ (ruby-bugs-ja:PR#540)
+
+Thu Aug 7 04:52:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): remove ruby_frame->cbase and unify to
+ ruby_cref. [ruby-talk:78141]
+
+Thu Aug 7 04:19:15 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * gc.c: FreeBSD/ia64's mcontext_t is a bit different from that of
+ Linux/ia64. This makes gc.c compile but miniruby coredumps for
+ the moment.
+
+Thu Aug 7 00:15:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
+
+ * ext/bigdecimal.c: Comparison results adjusted to Float's.
+ * ext/bigdecimal.c: Use rb_num_coerce_????(x,y) instead of own.
+
+Wed Aug 6 22:58:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/testcase.rb: Added equality checking.
+ * lib/test/unit/testsuite.rb: Added equality checking.
+ * lib/test/unit/assertions.rb: Fixed a warning.
+
+Wed Aug 6 17:28:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): pass LIBPATH to make ruby. [ruby-dev:21137]
+
+ * ext/extmk.rb (extmake): set library name as source file name in
+ Init_ext(). [ruby-dev:21137]
+
+ * lib/mkmf.rb (Logging::postpone): postpone logging messages after
+ heading message as the result of the block.
+
+ * lib/mkmf.rb (macro_defined?): append newline to src unless ended
+ with it.
+
+ * lib/mkmf.rb (have_library): treat nil function name as "main".
+ (ruby-bugs:PR#1083)
+
+ * lib/mkmf.rb (pkg_config): should append additional libraries to
+ $libs but not $LIBS. [ruby-dev:21137]
+
+ * ext/io/wait/extconf.rb: check DOSISH macro instead of platform.
+
+ * ext/digest/sha1/extconf.rb: have_library already appends library
+ name.
+
+Wed Aug 6 17:23:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c: initialize /* OK */ variables by Qnil to stop warnings.
+
+Wed Aug 6 04:58:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Setup*: add io/wait and openssl.
+
+Wed Aug 6 01:13:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_autoload): use ruby_cbase instead of ruby_class.
+
+ * eval.c (rb_f_autoload_p): ditto.
+
+ * class.c (rb_mod_init_copy): no longer implements independent
+ clone and dup methods. override "initialize_copy" instead.
+ [ruby-core:01352]
- * dir.c (ruby_glob0): no need to check never-NULL pointer.
- reported by Denis Denisov <denji0k AT gmail.com>.
+ * object.c (rb_class_s_alloc): define Class allocation function.
+ this makes Classes to follow clone framework that uses
+ initialize_copy.
- * win32/file.c (rb_file_expand_path_internal): ditto.
+ * object.c (rb_class_initialize): separate instantiation and
+ initialization.
- * win32/file.c (code_page_i): handle realloc failure.
- reported by Denis Denisov <denji0k AT gmail.com>.
+ * object.c (rb_obj_alloc): prohibit instantiation from
+ uninitialized class.
- * win32/stub.c (stub_sysinit): ditto.
+ * object.c (rb_class_superclass): check uninitialized class.
- * fix printf format conversion specifiers.
- reported by Denis Denisov <denji0k AT gmail.com>.
+ * array.c (rb_ary_fill): wrong index processing with block. this
+ fix was done by Koji Arai <JCA02266@nifty.ne.jp> [ruby-list:38029]
-Fri Dec 26 01:41:40 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * marshal.c (w_object): should preserve generic ivar for nil,
+ true, false, symbols, and fixnums.
- * tool/rbinstall.rb: skip installing bundle gems if zlib is unavailable.
- [Bug #10647] [ruby-dev:48787]
+ * marshal.c (w_uclass): base_klass check should be done after
+ rb_class_real().
-Fri Dec 26 01:24:42 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+Wed Aug 6 01:18:50 2003 Minero Aoki <aamine@loveruby.net>
- * tool/downloader.rb: support old versions of ruby.
+ * lib/net/http.rb: update document.
- * tool/downloader.rb: now can download gems by http if openssl is not
- available (this may be danger!)
+ * lib/net/pop.rb: ditto.
-Fri Dec 26 00:13:48 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/net/protocol.rb: ditto.
- * test/ruby/test_extlibs.rb: check existence of extension libraries
- which not depend on outer libraries. (experimental)
+Wed Aug 6 00:48:37 2003 Koji Arai <jca02266@nifty.ne.jp>
-Thu Dec 25 21:58:15 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (w_object): should recommend marshal_dump rather than
+ _dump_data.
- * ext/fiddle/extconf.rb: make PIC objects if it will be linked as
- a shared object eventually. [ruby-core:67128]
+Tue Aug 5 17:58:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-Thu Dec 25 19:01:13 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/fileutils.rb (install): should preserve timestamp only.
- * ext/fiddle/win32/libffi-3.2.1-mswin.patch: support mswin32.
+Tue Aug 5 17:31:59 2003 Ian Macdonald <ian@caliban.org>
-Thu Dec 25 17:30:40 2014 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/shell/command-processor.rb (Shell::CommandProcessor::rmdir):
+ simple typo.
- * gc.c (wmap_final_func): fix memory size shortage when realloc wmap.
- Fix SEGV during finalize of WeakRef on Solaris (though the SEGV
- could occur on all OS/platforms). [ruby-dev:48779] [Bug #10646]
+Tue Aug 5 15:47:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 25 17:27:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (rb_load): should preserve current source file/line.
- * configure.in (NET_LUID): include winsock2.h instead of windows.h.
- patch by Jon Forums in [ruby-core:67125]. [Bug #10640]
+Tue Aug 5 10:04:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-Thu Dec 25 16:14:10 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * string.c (str_new4): ptr may refer null_str.
- * ext/io/console/console.c (console_dev): send the given arguments
- to the opened console. as a special case, do nothing if :close
- is given.
+Mon Aug 4 17:25:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/lib/leakchecker.rb (LeakChecker#check_fd_leak): close if
- console.
+ * stable version 1.8.0 released.
-For the changes before 2.2.0, see doc/ChangeLog-2.2.0
-For the changes before 2.1.0, see doc/ChangeLog-2.1.0
-For the changes before 2.0.0, see doc/ChangeLog-2.0.0
-For the changes before 1.9.3, see doc/ChangeLog-1.9.3
For the changes before 1.8.0, see doc/ChangeLog-1.8.0
Local variables:
-coding: us-ascii
add-log-time-format: (lambda ()
(let* ((time (current-time))
- (system-time-locale "C")
(diff (+ (cadr time) 32400))
(lo (% diff 65536))
- (hi (+ (car time) (/ diff 65536))))
+ (hi (+ (car time) (/ diff 65536))))
(format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))
indent-tabs-mode: t
tab-width: 8
-change-log-indent-text: 2
end:
-vim: tabstop=8 shiftwidth=2
diff --git a/GPL b/GPL
index d159169d10..5b6e7c66c2 100644
--- a/GPL
+++ b/GPL
@@ -1,12 +1,12 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
- Preamble
+ Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
+the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
-
- GNU GENERAL PUBLIC LICENSE
+
+ GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
-
+
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-
+
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-
+
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
- NO WARRANTY
+ NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
Also add information on how to contact you by electronic and paper mail.
@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
+library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
diff --git a/KNOWNBUGS.rb b/KNOWNBUGS.rb
deleted file mode 100644
index 35a8e75876..0000000000
--- a/KNOWNBUGS.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# IMPORTANT: Always keep the first 7 lines (comments),
-# even if this file is otherwise empty.
-#
-# This test file includes tests which point out known bugs.
-# So all tests will cause failure.
-#
diff --git a/LEGAL b/LEGAL
index 2607f0082a..908eb270f5 100644
--- a/LEGAL
+++ b/LEGAL
@@ -5,90 +5,34 @@ All the files in this distribution are covered under either the Ruby's
license (see the file COPYING) or public-domain except some files
mentioned below.
-ccan/build_assert/build_assert.h
-ccan/check_type/check_type.h
-ccan/container_of/container_of.h
-ccan/str/str.h
-
- These files are licensed under the CC0.
-
- http://creativecommons.org/choose/zero/
-
-ccan/list/list.h
-
- This file is licensed under the MIT License.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-
-include/ruby/oniguruma.h:
-regcomp.c:
-regenc.[ch]:
-regerror.c:
-regexec.c:
-regint.h:
-regparse.[ch]:
-enc/ascii.c
-enc/big5.c
-enc/cp949.c
-enc/emacs_mule.c
-enc/encdb.c
-enc/euc_jp.c
-enc/euc_kr.c
-enc/euc_tw.c
-enc/gb18030.c
-enc/gb2312.c
-enc/gbk.c
-enc/iso_8859_1.c
-enc/iso_8859_10.c
-enc/iso_8859_11.c
-enc/iso_8859_13.c
-enc/iso_8859_14.c
-enc/iso_8859_15.c
-enc/iso_8859_16.c
-enc/iso_8859_2.c
-enc/iso_8859_3.c
-enc/iso_8859_4.c
-enc/iso_8859_5.c
-enc/iso_8859_6.c
-enc/iso_8859_7.c
-enc/iso_8859_8.c
-enc/iso_8859_9.c
-enc/koi8_r.c
-enc/koi8_u.c
-enc/shift_jis.c
-enc/unicode.c
-enc/us_ascii.c
-enc/utf_16be.c
-enc/utf_16le.c
-enc/utf_32be.c
-enc/utf_32le.c
-enc/utf_8.c
-enc/windows_1251.c
-
-Oniguruma ---- (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
-
-http://www.geocities.jp/kosako3/oniguruma/
-http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/oniguruma/
-http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/
-
- When this software is partly used or it is distributed with Ruby,
- this of Ruby follows the license of Ruby.
+regex.[ch]:
+
+ These files are under LGPL. Treat them as LGPL says. (See the file
+ LGPL for details)
+
+ Extended regular expression matching and search library.
+ Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file LGPL. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+ Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
+ Last change: May 21, 1993 by t^2
+ removed gapped buffer support, multiple syntax support by matz <matz@nts.co.jp>
+ Perl5 extension added by matz <matz@caelum.co.jp>
+ UTF-8 extension added Jan 16 1999 by Yoshida Masato <yoshidam@tau.bekkoame.ne.jp>
configure:
@@ -99,8 +43,9 @@ configure:
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-tool/config.guess:
-tool/config.sub:
+config.guess:
+config.sub:
+parse.c:
As long as you distribute these files with the file configure, they
are covered under the Ruby's license.
@@ -127,58 +72,7 @@ tool/config.sub:
configuration script generated by Autoconf, you may include it under
the same distribution terms that you use for the rest of that program.
-parse.c:
-
- This file is licensed under the GPL, but is incorporated into Ruby and
- redistributed under the terms of the Ruby license, as permitted by the
- exception to the GPL below.
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
- /* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
util.c (partly):
-
- Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
-
- Permission to use, copy, modify, and distribute this software for any
- purpose without fee is hereby granted, provided that this entire notice
- is included in all copies of any software which is or includes a copy
- or modification of this software and in all copies of the supporting
- documentation for such software.
-
- THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
- REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-
win32/win32.[ch]:
You can apply the Artistic License to these files. (or GPL,
@@ -189,32 +83,6 @@ win32/win32.[ch]:
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the perl README file.
-util.c (partly):
-
- Copyright (c) 2004-2008 David Schultz <das@FreeBSD.ORG>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
random.c
This file is under the new-style BSD license.
@@ -224,11 +92,11 @@ random.c
This is a faster version by taking Shawn Cokus's optimization,
Matthe Bellew's simplification, Isaku Wada's real version.
- Before using, initialize the state by using init_genrand(seed)
+ Before using, initialize the state by using init_genrand(seed)
or init_by_array(init_key, key_length).
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
- All rights reserved.
+ All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -241,8 +109,8 @@ random.c
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- 3. The names of its contributors may not be used to endorse or promote
- products derived from this software without specific prior written
+ 3. The names of its contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@@ -262,139 +130,72 @@ random.c
http://www.math.keio.ac.jp/matumoto/emt.html
email: matumoto@math.keio.ac.jp
-vm_dump.c:procstat_vm
-
- This file is under the new-style BSD license.
-
- Copyright (c) 2007 Robert N. M. Watson
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- $FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $
-
-vsnprintf.c:
-
- This file is under the old-style BSD license. Note that the
- paragraph 3 below is now null and void.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- IMPORTANT NOTE:
- --------------
- From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- paragraph 3 above is now null and void.
-
st.[ch]:
+x68/*:
missing/alloca.c:
missing/dup2.c:
-missing/erf.c:
missing/finite.c:
missing/hypot.c:
missing/isinf.c:
missing/isnan.c:
-missing/lgamma_r.c:
missing/memcmp.c:
missing/memmove.c:
+missing/strcasecmp.c:
missing/strchr.c:
+missing/streror.c:
+missing/strftime.c:
+missing/strncasecmp.c:
missing/strstr.c:
missing/strtol.c:
-missing/tgamma.c:
ext/digest/sha1/sha1.[ch]:
These files are all under public domain.
-missing/crypt.c:
+missing/strtod.c:
- This file is under the old-style BSD license. Note that the
- paragraph 3 below is now null and void.
+ This file will not be used on most platforms depending on how the
+ configure script results. In any case you must not receive any fee
+ with the file itself.
- Copyright (c) 1989, 1993
- The Regents of the University of California. All rights reserved.
+ Copyright (c) 1988-1993 The Regents of the University of California.
+ Copyright (c) 1994 Sun Microsystems, Inc.
- This code is derived from software contributed to Berkeley by
- Tom Truscott.
+ Permission to use, copy, modify, and distribute this
+ software and its documentation for any purpose and without
+ fee is hereby granted, provided that the above copyright
+ notice appear in all copies. The University of California
+ makes no representations about the suitability of this
+ software for any purpose. It is provided "as is" without
+ express or implied warranty.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
+missing/strtoul.c:
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
+ This file will not be used on most platforms depending on how the
+ configure script results. In any case you must not receive any fee
+ with the file itself.
+
+ Copyright 1988 Regents of the University of California
+
+ Permission to use, copy, modify, and distribute this
+ software and its documentation for any purpose and without
+ fee is hereby granted, provided that the above copyright
+ notice appear in all copies. The University of California
+ makes no representations about the suitability of this
+ software for any purpose. It is provided "as is" without
+ express or implied warranty.
-missing/setproctitle.c
+missing/erf.c:
+missing/crypt.c:
+missing/vsnprintf.c:
This file is under the old-style BSD license. Note that the
paragraph 3 below is now null and void.
- Copyright 2003 Damien Miller
- Copyright (c) 1983, 1995-1997 Eric P. Allman
- Copyright (c) 1988, 1993
- The Regents of the University of California. All rights reserved.
+ Copyright (c) 1990, 1993
+ The Regents of the University of California. All rights reserved.
+
+ This code is derived from software contributed to Berkeley by
+ Chris Torek.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -420,46 +221,10 @@ missing/setproctitle.c
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-missing/strlcat.c
-missing/strlcpy.c
-
- These files are under the new-style BSD license.
-
- Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-missing/langinfo.c
-
- This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
- Ruby uses a modified version. The file contains the following
- author/copyright notice:
-
- Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11
- Permission to use, copy, modify, and distribute this software
- for any purpose and without fee is hereby granted. The author
- disclaims all warranties with regard to this software.
+ IMPORTANT NOTE:
+ --------------
+ From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
+ paragraph 3 above is now null and void.
ext/digest/md5/md5.[ch]:
@@ -499,7 +264,18 @@ ext/digest/rmd160/rmd160.[ch]:
Copyright (c) Katholieke Universiteit Leuven
1996, All Rights Reserved
+ext/digest/rmd160/rmd160hl.c:
+ext/digest/sha1/sha1hl.c:
+
+ These files are under the beer-ware license.
+
+ "THE BEER-WARE LICENSE" (Revision 42):
+ <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you
+ can do whatever you want with this stuff. If we meet some day, and you think
+ this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
+
ext/digest/sha2/sha2.[ch]:
+ext/digest/sha2/sha2hl.c:
These files are under the new-style BSD license.
@@ -537,7 +313,7 @@ ext/nkf/nkf-utf8/utf8tbl.c:
copyrighted semi-public-domain software.
Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
- Everyone is permitted to do anything on this program
+ Everyone is permitted to do anything on this program
including copying, modifying, improving,
as long as you don't try to pretend that you wrote it.
i.e., the above copyright notice has to appear in all copies.
@@ -588,7 +364,7 @@ ext/win32ole/win32ole.c:
Other modifications Copyright (c) 1997, 1998 by Gurusamy Sarathy
<gsar@umich.edu> and Jan Dubois <jan.dubois@ibm.net>
-
+
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the README file
of the Perl distribution.
diff --git a/LGPL b/LGPL
new file mode 100644
index 0000000000..b1e3f5a263
--- /dev/null
+++ b/LGPL
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/Makefile.in b/Makefile.in
index ff475091ab..314e1ed256 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,35 +1,17 @@
SHELL = /bin/sh
-NULLCMD = @NULLCMD@
-n=$(NULLCMD)
-ECHO1 = $(V:1=$n)
-RUNCMD = $(SHELL)
-CDPATH = .
-CHDIR = @CHDIR@
-exec = exec
-NULL = /dev/null
-PATH_SEPARATOR = @PATH_SEPARATOR@
+NULLCMD = :
#### Start of system configuration section. ####
srcdir = @srcdir@
-top_srcdir = $(srcdir)
-hdrdir = $(srcdir)/include
-PLATFORM_DIR = @PLATFORM_DIR@
+VPATH = $(srcdir):$(srcdir)/missing
CC = @CC@
-CPP = @CPP@
-LD = @LD@
-YACC = bison
+YACC = @YACC@
PURIFY =
AUTOCONF = autoconf
-CONFIGURE = @CONFIGURE@
@SET_MAKE@
MKFILES = @MAKEFILES@
-BASERUBY = @BASERUBY@
-HAVE_BASERUBY = @HAVE_BASERUBY@
-TEST_RUNNABLE = @TEST_RUNNABLE@
-CROSS_COMPILING = @CROSS_COMPILING@
-DOXYGEN = @DOXYGEN@
prefix = @prefix@
exec_prefix = @exec_prefix@
@@ -42,79 +24,37 @@ datadir = @datadir@
arch = @arch@
sitearch = @sitearch@
sitedir = @sitedir@
-archlibdir = @archlibdir@
-ruby_version = @ruby_version@
TESTUI = console
TESTS =
-INSTALLDOC = @INSTALLDOC@
-DOCTARGETS = @RDOCTARGET@ @CAPITARGET@
+RDOCTARGET = @RDOCTARGET@
EXTOUT = @EXTOUT@
-arch_hdrdir = $(EXTOUT)/include/$(arch)
-VPATH = $(arch_hdrdir)/ruby:$(hdrdir)/ruby:$(srcdir):$(srcdir)/missing
+RIDATADIR = $(DESTDIR)$(datadir)/ri/$(MAJOR).$(MINOR)/system
empty =
-CC_VERSION = @CC_VERSION@
OUTFLAG = @OUTFLAG@$(empty)
-COUTFLAG = @COUTFLAG@$(empty)
-ARCH_FLAG = @ARCH_FLAG@
-CFLAGS_NO_ARCH = @CFLAGS@
-CFLAGS = $(CFLAGS_NO_ARCH) $(ARCH_FLAG)
-cflags = @cflags@
-optflags = @optflags@
-debugflags = @debugflags@
-warnflags = @warnflags@ @strict_warnflags@
-cppflags = @cppflags@
-INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir)
-XCFLAGS = @XCFLAGS@
-CPPFLAGS = @CPPFLAGS@ $(INCFLAGS)
+CFLAGS = @CFLAGS@ @XCFLAGS@ @ARCH_FLAG@
+CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@
LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
-EXTLDFLAGS = @EXTLDFLAGS@
+EXTLDFLAGS =
XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)
-EXTLIBS =
+EXTLIBS =
LIBS = @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@
LDSHARED = @LIBRUBY_LDSHARED@
-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(XLDFLAGS) $(ARCH_FLAG)
+DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) @ARCH_FLAG@
SOLIBS = @SOLIBS@
MAINLIBS = @MAINLIBS@
-ARCHMINIOBJS = @MINIOBJS@
-DLNOBJ = @DLNOBJ@
-ENCOBJS = @ENCOBJS@
-EXTOBJS = @EXTOBJS@
-BUILTIN_ENCOBJS = @BUILTIN_ENCOBJS@
-BUILTIN_TRANSSRCS = @BUILTIN_TRANSSRCS@
-BUILTIN_TRANSOBJS = @BUILTIN_TRANSOBJS@
-POSTLINK = @POSTLINK@
-
-RUBY_BASE_NAME=@RUBY_BASE_NAME@
-RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
+MINIOBJS = @MINIOBJS@
+
RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@
RUBY_SO_NAME=@RUBY_SO_NAME@
EXEEXT = @EXEEXT@
-LIBEXT = @LIBEXT@
PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
RUBY = $(RUBY_INSTALL_NAME)
-MINIRUBY = @MINIRUBY@\
- $(MINIRUBYOPT)
-# RUNRUBY_COMMAND:: runruby.rb or baseruby. do not append options directly
-RUNRUBY_COMMAND = @RUNRUBY_COMMAND@
-# RUNRUBY:: run ruby with RUN_OPTS which is passed to ruby
-RUNRUBY = @RUNRUBY@ $(RUN_OPTS)
-# RUNRUBY_DEBUGGER:: debugging option for runruby.rb
-RUNRUBY_DEBUGGER = --debugger='gdb -x run.gdb --quiet --args'
-XRUBY = @XRUBY@
-BTESTRUBY = @BTESTRUBY@\
- $(MINIRUBYOPT)
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-XRUBY_LIBDIR = @XRUBY_LIBDIR@
-XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@
-XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@
-BOOTSTRAPRUBY = @BOOTSTRAPRUBY@
+MINIRUBY = @MINIRUBY@ $(MINIRUBYOPT)
+RUNRUBY = @RUNRUBY@
#### End of system configuration section. ####
@@ -129,426 +69,112 @@ LIBRUBY = @LIBRUBY@
LIBRUBYARG = @LIBRUBYARG@
LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@
LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@
-LIBRUBY_RELATIVE = @LIBRUBY_RELATIVE@
-LIBRUBY_A_OBJS = @LIBRUBY_A_OBJS@
-
-DTRACE_REBUILD_OBJS = $(DTRACE_REBUILD:yes=$(DTRACE_DEPENDENT_OBJS))
-
-DTRACE_DEPENDENT_OBJS = array.$(OBJEXT) \
- eval.$(OBJEXT) \
- gc.$(OBJEXT) \
- hash.$(OBJEXT) \
- load.$(OBJEXT) \
- object.$(OBJEXT) \
- parse.$(OBJEXT) \
- string.$(OBJEXT) \
- symbol.$(OBJEXT) \
- vm.$(OBJEXT)
-
-THREAD_MODEL = @THREAD_MODEL@
PREP = @PREP@
ARCHFILE = @ARCHFILE@
SETUP =
EXTSTATIC = @EXTSTATIC@
-ENCSTATIC = @ENCSTATIC@
-SET_LC_MESSAGES = env LC_MESSAGES=C
-MAKEDIRS = @MKDIR_P@
-CP = cp
-MV = mv
RM = rm -f
-RMDIR = @RMDIR@
-RMDIRS = @RMDIRS@
-RMALL = @RMALL@
NM = @NM@
AR = @AR@
ARFLAGS = rcu
RANLIB = @RANLIB@
AS = @AS@
-ASFLAGS = @ASFLAGS@ $(INCFLAGS)
-IFCHANGE = $(srcdir)/tool/ifchange
-SET_LC_MESSAGES = env LC_MESSAGES=C
-OBJDUMP = @OBJDUMP@
-OBJCOPY = @OBJCOPY@
-VCS = @VCS@
-VCSUP = @VCSUP@
-DTRACE = @DTRACE@
-DTRACE_EXT = @DTRACE_EXT@
-DTRACE_OBJ = @DTRACE_OBJ@
-DTRACE_REBUILD= @DTRACE_REBUILD@
-DTRACE_GLOMMED_OBJ = $(DTRACE_REBUILD:yes=ruby-glommed.$(OBJEXT))
+ASFLAGS = @ASFLAGS@
OBJEXT = @OBJEXT@
-ASMEXT = S
-DLEXT = @DLEXT@
MANTYPE = @MANTYPE@
-SYMBOL_PREFIX = @SYMBOL_PREFIX@
INSTALLED_LIST= .installed.list
-
-NEWLINE_C = enc/trans/newline.c
-MINIPRELUDE_C = miniprelude.c
-PRELUDE_C = prelude.c
-RBCONFIG = .rbconfig.time
-
-SRC_FILE = $<
-OS_SRC_FILE = $<
-DEST_FILE = $@
-OS_DEST_FILE = $@
-
-MESSAGE_BEGIN = @for line in
-MESSAGE_END = ; do echo "$$line"; done
-ECHO_BEGIN = @sep=''; for word in
-ECHO_END = ; do echo @ECHO_N@ "$$sep'$$word'@ECHO_C@"; sep=' '; done; echo
-
-DESTDIR = @DESTDIR@
-
-configure_args = @configure_args@
#### End of variables
-.SUFFIXES: .inc .h .c .y .i .$(DTRACE_EXT)
-
all:
+.DEFAULT: all
+
# Prevent GNU make v3 from overflowing arg limit on SysV.
.NOEXPORT:
miniruby$(EXEEXT):
- @-if test -f $@; then $(MV) -f $@ $@.old; $(RM) $@.old; fi
- $(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(MAINLIBS) $(LIBS) $(OUTFLAG)$@
+ @$(RM) $@
+ $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@
$(PROGRAM):
@$(RM) $@
- $(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
- $(Q) $(POSTLINK)
+ $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) $(OUTFLAG)$@
# We must `rm' the library each time this rule is invoked because "updating" a
# MAB library on Apple/NeXT (see --enable-fat-binary in configure) is not
# supported.
$(LIBRUBY_A):
@$(RM) $@
- $(ECHO) linking static-library $@
- $(Q) $(AR) $(ARFLAGS) $@ $(LIBRUBY_A_OBJS) $(INITOBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS) $(DMYEXT)
@-$(RANLIB) $@ 2> /dev/null || true
- $(ECHO) verifying static-library $@
- @$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)conftest$(EXEEXT)
- @$(RM) conftest$(EXEEXT) conftest.c
$(LIBRUBY_SO):
@-$(PRE_LIBRUBY_UPDATE)
- $(ECHO) linking shared-library $@
- $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(EXTSOLIBS) $(OUTFLAG)$@
- -$(Q) $(OBJCOPY) -w -L '$(SYMBOL_PREFIX)Init_*' -L '$(SYMBOL_PREFIX)ruby_static_id_*' \
- -L '$(SYMBOL_PREFIX)*_threadptr_*' $@
- $(Q) $(POSTLINK)
- @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link rescue nil; \
+ $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(OUTFLAG)$@
+ @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \
File.symlink "$(LIBRUBY_SO)", link}' \
$(LIBRUBY_ALIASES) || true
-ruby_pc = @ruby_pc@
-$(ruby_pc):
- @./config.status --file=$@:$(srcdir)/template/ruby.pc.in
-
-ruby-runner.c: template/ruby-runner.c.in
- @./config.status --file=$@:$(srcdir)/template/$(@F).in
-
-ruby-runner$(EXEEXT): ruby-runner.c
- $(Q) $(PURIFY) $(CC) $(CFLAGS) $(CPPFLAGS) -DRUBY_INSTALL_NAME=$(RUBY_INSTALL_NAME) $(LDFLAGS) $(LIBS) $(OUTFLAG)$@ ruby-runner.c
-
-$(RBCONFIG): $(PREP)
-
-rbconfig.rb: $(RBCONFIG)
-
-install-cross: $(arch)-fake.rb $(RBCONFIG) rbconfig.rb $(arch_hdrdir)/ruby/config.h \
- $(LIBRUBY_A) $(LIBRUBY_SO) $(ARCHFILE)
- $(ECHO) installing cross-compiling stuff
- $(Q) $(MAKEDIRS) $(XRUBY_RUBYLIBDIR)/$(arch) $(XRUBY_RUBYHDRDIR)/$(arch)/ruby
- $(Q) sed '/^\$$:\.unshift/q' $(arch)-fake.rb > fake.rb
- $(Q) $(BASERUBY) -p \
- -e '~/^\s*CONFIG\["LDFLAGS"\]/ and' \
- -e '$$_[/(?=\s*"$$)/] = %q[ #{(CONFIG["LIBPATHFLAG"]%File.dirname(__FILE__)).strip}]' \
- rbconfig.rb > fake-rbconfig.rb
- $(INSTALL_SCRIPT) fake.rb $(XRUBY_RUBYLIBDIR)/$(arch)/fake.rb
- $(INSTALL_SCRIPT) fake-rbconfig.rb $(XRUBY_RUBYLIBDIR)/$(arch)/rbconfig.rb
- @$(RM) fake.rb fake-rbconfig.rb
- $(INSTALL_DATA) $(arch_hdrdir)/ruby/config.h $(XRUBY_RUBYHDRDIR)/$(arch)/ruby
- $(INSTALL_DATA) $(top_srcdir)/include/ruby/win32.h $(XRUBY_RUBYHDRDIR)/ruby
- $(INSTALL_DATA) $(LIBRUBY) $(LIBRUBY_A) $(XRUBY_RUBYLIBDIR)/$(arch)
- $(INSTALL_PROGRAM) $(LIBRUBY_SO) $(XRUBY_RUBYLIBDIR)/$(arch)
-
-Makefile: $(srcdir)/Makefile.in $(srcdir)/enc/Makefile.in
-
-$(MKFILES): config.status $(srcdir)/version.h
- @[ -f $@ ] && mv $@ $@.old
- MAKE=$(MAKE) $(SHELL) ./config.status $@
- @cmp $@ $@.old > /dev/null 2>&1 && echo $@ unchanged && exit 0; \
- { \
+fake.rb: Makefile
+ @echo ' \
+ class Object; \
+ CROSS_COMPILING = RUBY_PLATFORM; \
+ remove_const :RUBY_PLATFORM; \
+ remove_const :RUBY_VERSION; \
+ RUBY_PLATFORM = "@arch@"; \
+ RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"; \
+ end; \
+ if RUBY_PLATFORM =~ /mswin|bccwin|mingw/; \
+ class File; \
+ remove_const :ALT_SEPARATOR; \
+ ALT_SEPARATOR = "\\"; \
+ end; \
+ end; \
+ ' > $@
+
+Makefile: $(srcdir)/Makefile.in
+
+$(MKFILES): config.status $(srcdir)/common.mk
+ MAKE=$(MAKE) $(SHELL) ./config.status
+ @{ \
echo "all:; -@rm -f conftest.mk"; \
echo "conftest.mk: .force; @echo AUTO_REMAKE"; \
echo ".force:"; \
} > conftest.mk || exit 1; \
$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
- { echo "$@ updated, restart."; exit 1; }
-
-uncommon.mk: $(srcdir)/common.mk
- sed 's/{\$$([^(){}]*)[^{}]*}//g' $< > $@
-
-.PHONY: reconfig
-reconfig-args = $(srcdir)/$(CONFIGURE) $(configure_args)
-config.status-args = ./config.status --recheck
-reconfig-exec-0 = test -t 1 && { CONFIGURE_TTY=yes; export CONFIGURE_TTY; }; exec 3>&1; exit `exec 4>&1; { "$$@" 3>&- 4>&-; echo $$? 1>&4; } | fgrep -v '(cached)' 1>&3 3>&- 4>&-`
-reconfig-exec-1 = set -x; "$$@"
-
-reconfig config.status: $(srcdir)/$(CONFIGURE) $(srcdir)/enc/Makefile.in \
- $(srcdir)/include/ruby/version.h
- @PWD= MINIRUBY="$(MINIRUBY)"; export MINIRUBY; \
- set $(SHELL) $($@-args); $(reconfig-exec-$(V))
-
-$(srcdir)/$(CONFIGURE): $(srcdir)/configure.in $(srcdir)/aclocal.m4
- $(CHDIR) $(srcdir) && exec $(AUTOCONF) -o $(@F)
-
-incs: id.h
-all-incs: probes.h
-
-# Things which should be considered:
-# * with gperf v.s. without gperf
-# * committers may have various versions of gperf
-# * ./configure v.s. ../ruby/configure
-# * GNU make v.s. HP-UX make # HP-UX make invokes the action if lex.c and keywords has same mtime.
-# * svn checkout generate a file with mtime as current time
-# * ext4 and XFS has a mtime with fractional part
-lex.c: defs/keywords
- @\
- if cmp -s $(srcdir)/defs/lex.c.src $?; then \
- [ $(Q) ] && echo copying $@ || set -x; \
- $(CP) $(srcdir)/lex.c.blt $@; \
- else \
- [ $(Q) ] && echo generating $@ || set -x; \
- gperf -C -P -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? \
- | sed 's/(long)&((\(struct stringpool_t\) *\*)0)->\(stringpool_[a-z0-9]*\)/offsetof(\1, \2)/g' \
- > $@.tmp && \
- $(MV) $@.tmp $@ && \
- $(CP) $? $(srcdir)/defs/lex.c.src && \
- $(CP) $@ $(srcdir)/lex.c.blt; \
- fi
-
-NAME2CTYPE_OPTIONS = -7 -c -j1 -i1 -t -C -P -T -H uniname2ctype_hash -Q uniname2ctype_pool -N uniname2ctype_p
-
-enc/unicode/name2ctype.h: enc/unicode/name2ctype.kwd
- $(MAKEDIRS) $(@D)
- @set +e; \
- if cmp -s $(?:.kwd=.src) $?; then \
- set -x; \
- $(CP) $(?:.kwd=.h.blt) $@; \
- else \
- trap '$(RM) $@-1.h $@-2.h' 0 && \
- set -x; \
- sed '/^#ifdef USE_UNICODE_PROPERTIES/,/^#endif/d' $? | gperf $(NAME2CTYPE_OPTIONS) > $@-1.h && \
- sed '/^#ifdef USE_UNICODE_PROPERTIES/d;/^#endif/d' $? | gperf $(NAME2CTYPE_OPTIONS) > $@-2.h && \
- diff -DUSE_UNICODE_PROPERTIES $@-1.h $@-2.h > $@.tmp || :; \
- $(MV) $@.tmp $@ && \
- $(CP) $? $(?:.kwd=.src) && \
- $(CP) $@ $(?:.kwd=.h.blt); \
- fi
-
-JIS_PROPS_OPTIONS = -k1,3 -7 -c -j1 -i1 -t -C -P -t --ignore-case -H onig_jis_property_hash -Q onig_jis_property_pool -N onig_jis_property
-
-enc/jis/props.h: enc/jis/props.kwd
- $(MAKEDIRS) $(@D)
- @set +e; \
- if cmp -s $(?:.kwd=.src) $?; then \
- set -x; \
- $(CP) $(?:.kwd=.h.blt) $@; \
- else \
- set -x; \
- gperf $(JIS_PROPS_OPTIONS) $? | \
- sed 's/(int)(long)&((\([a-zA-Z_0-9 ]*[a-zA-Z_0-9]\) *\*)0)->\([a-zA-Z0-9_]*\),/(char)offsetof(\1, \2),/g' > $@ && \
- $(CP) $? $(?:.kwd=.src) && \
- $(CP) $@ $(?:.kwd=.h.blt); \
- fi
+ { echo "Makefile updated, restart."; exit 1; }
+
+config.status: $(srcdir)/configure
+ MINIRUBY="$(MINIRUBY)" $(SHELL) ./config.status --recheck
+
+$(srcdir)/configure: $(srcdir)/configure.in
+ cd $(srcdir) && $(AUTOCONF)
+
+lex.c: keywords
+ @-$(RM) $@
+ gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? > $@ || \
+ cp "$(srcdir)/$@" .
+
+.y.c:
+ $(YACC) $<
+ sed '/^#/s|y\.tab\.c|$@|' y.tab.c > $@
+ rm -f y.tab.c
.c.@OBJEXT@:
- @$(ECHO) compiling $<
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
.s.@OBJEXT@:
- @$(ECHO) assembling $<
- $(Q) $(AS) $(ASFLAGS) -o $@ $<
-
-.c.S:
- @$(ECHO) translating $<
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -S $<
-
-.c.i:
- @$(ECHO) preprocessing $<
- $(Q) $(CPP) $(warnflags) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -E $< > $@
-
-.d.h:
- @$(ECHO) translating probes $<
- $(Q) $(DTRACE) -o $@.tmp -h -C $(INCFLAGS) -s $<
- $(Q) sed -e 's/RUBY_/RUBY_DTRACE_/g' -e 's/PROBES_H_TMP/RUBY_PROBES_H/' -e 's/(char \*/(const char */g' -e 's/, char \*/, const char */g' $@.tmp > $@
- $(Q) $(RM) $@.tmp
-
-.dmyh.h:
- @$(ECHO) copying dummy $(DEST_FILE)
- $(Q) $(CP) $(OS_SRC_FILE) $(OS_DEST_FILE)
-
-probes.stamp: $(DTRACE_REBUILD_OBJS)
- $(Q) if test -f $@ -o -f probes.$(OBJEXT); then \
- $(RM) $(DTRACE_REBUILD_OBJS) $@; \
- $(ECHO0) "rebuilding objects which were modified by \"dtrace -G\""; \
- $(MAKE) $(DTRACE_REBUILD_OBJS); \
- fi
- $(Q) touch $@
-
-probes.@OBJEXT@: $(srcdir)/probes.d $(DTRACE_REBUILD:yes=probes.stamp)
- @$(ECHO) processing probes in object files
- $(Q) $(RM) $@
- $(Q) $(DTRACE) -G -C $(INCFLAGS) -s $(srcdir)/probes.d -o $@ $(DTRACE_REBUILD_OBJS)
-
-# DTrace static library hacks described here:
-# http://mail.opensolaris.org/pipermail/dtrace-discuss/2005-August/000207.html
-ruby-glommed.$(OBJEXT):
- @$(ECHO) generating a glommed object with DTrace probes for static library
- $(Q) $(LD) -r -o $@ $(OBJS)
+ $(AS) $(ASFLAGS) -o $@ $<
clean-local::
- $(Q)$(RM) ext/extinit.c ext/extinit.$(OBJEXT) ext/ripper/y.output \
- enc/encinit.c enc/encinit.$(OBJEXT)
- -$(Q)$(RM) $(pkgconfig_DATA)
+ @$(RM) ext/extinit.c ext/extinit.$(OBJEXT)
distclean-local::
- $(Q)$(RM) ext/config.cache $(RBCONFIG) Doxyfile
- -$(Q)$(RM) run.gdb
- -$(Q)$(RM) $(INSTALLED_LIST) $(arch_hdrdir)/ruby/config.h verconf.h
- -$(Q)$(RMDIRS) $(arch_hdrdir)/ruby 2> /dev/null || true
-
-clean-ext distclean-ext realclean-ext::
- @cd ext 2>/dev/null || exit 0; set dummy `echo "${EXTS}" | tr , ' '`; shift; \
- test "$$#" = 0 && set .; \
- set dummy `\
- find "$$@" -name Makefile -print | sed 's:^\./::;s:/Makefile$$::' | sort; \
- `; shift; \
- cd ..; \
- for dir do \
- echo $(@:-ext=)ing "$$dir"; \
- (cd "ext/$$dir" && exec $(MAKE) $(MFLAGS) $(@:-ext=)) && \
- case "$@" in \
- *distclean-ext*|*realclean-ext*) \
- $(RMDIRS) "ext/$$dir" 2> /dev/null || true;; \
- esac; \
- done
- -$(Q)$(RM) ext/extinit.$(OBJEXT)
-
-distclean-ext realclean-ext::
- -$(Q)$(RM) ext/extinit.c
- -$(Q)$(RMDIR) ext 2> /dev/null || true
-
-clean-extout:
-
-clean-enc distclean-enc realclean-enc:
- @test -f "$(ENC_MK)" || exit 0; \
- echo $(@:-enc=ing) encodings; \
- exec $(MAKE) -f $(ENC_MK) $(MFLAGS) $(@:-enc=)
+ @$(RM) ext/config.cache $(RBCONFIG)
ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)
- $(ECHO) compiling $@
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c
-
-enc/encinit.$(OBJEXT): enc/encinit.c $(SETUP)
-
-up::
- @$(CHDIR) "$(srcdir)" && LC_TIME=C exec $(VCSUP)
-
-after-update:: update-config_files common-srcs
-
-update-mspec:
- @$(CHDIR) $(srcdir); \
- if [ -d spec/mspec ]; then \
- echo updating mspec ...; \
- $(Q1:0=:) set -x; \
- cd spec/mspec && \
- exec git pull; \
- else \
- echo retrieving mspec ...; \
- $(Q1:0=:) set -x; \
- exec git clone $(MSPEC_GIT_URL) spec/mspec; \
- fi
-
-update-rubyspec: update-mspec
- @$(CHDIR) $(srcdir); \
- if [ -d spec/rubyspec ]; then \
- echo updating rubyspec ...; \
- $(Q1:0=:) set -x; \
- cd spec/rubyspec && \
- exec git pull; \
- else \
- echo retrieving rubyspec ...; \
- $(Q1:0=:) set -x; \
- exec git clone $(RUBYSPEC_GIT_URL) spec/rubyspec; \
- fi
-
-test-rubyspec-precheck:
- @if [ ! -d $(srcdir)/spec/rubyspec ]; then echo No rubyspec here. make update-rubyspec first.; exit 1; fi
-
-update-doclie:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/doclie ]; then \
- echo updating doclie ...; \
- $(Q1:0=:) set -x; \
- cd coverage/doclie && \
- git fetch && \
- exec git checkout $(DOCLIE_GIT_REF); \
- else \
- echo retrieving doclie ...; \
- $(Q1:0=:) set -x; \
- exec git clone --branch $(DOCLIE_GIT_REF) $(DOCLIE_GIT_URL) coverage/doclie; \
- fi
-
-update-simplecov-html:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/simplecov-html ]; then \
- echo updating simplecov-html ...; \
- $(Q1:0=:) set -x; \
- cd coverage/simplecov-html && \
- git fetch && \
- exec git checkout $(SIMPLECOV_HTML_GIT_REF); \
- else \
- echo retrieving simplecov-html ...; \
- exec git clone --branch $(SIMPLECOV_HTML_GIT_REF) $(SIMPLECOV_HTML_GIT_URL) coverage/simplecov-html; \
- fi
-
-update-simplecov:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/simplecov ]; then \
- echo updating simplecov ...; \
- $(Q1:0=:) set -x; \
- cd coverage/simplecov && \
- git fetch && \
- exec git checkout $(SIMPLECOV_GIT_REF); \
- else \
- echo retrieving simplecov ...; \
- $(Q1:0=:) set -x; \
- exec git clone --branch $(SIMPLECOV_GIT_REF) $(SIMPLECOV_GIT_URL) coverage/simplecov; \
- fi
-
-update-coverage: update-simplecov update-simplecov-html update-doclie
-
-INSNS = opt_sc.inc optinsn.inc optunifs.inc insns.inc insns_info.inc \
- vmtc.inc vm.inc
-
-$(INSNS): $(srcdir)/insns.def vm_opts.h \
- $(srcdir)/defs/opt_operand.def $(srcdir)/defs/opt_insn_unif.def \
- $(srcdir)/tool/instruction.rb $(srcdir)/tool/insns2vm.rb
- $(ECHO) generating $@
- $(Q) $(BASERUBY) -Ku $(srcdir)/tool/insns2vm.rb $(INSNS2VMOPT) $@
-
-verconf.h: $(RBCONFIG)
-
-loadpath: verconf.h
- @$(CPP) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/loadpath.c | \
- sed -e '1,/^const char ruby_initial_load_paths/d;/;/,$$d' \
- -e '/^ /!d;s/ *"\\0"$$//;s/" *"//g'
+ $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ -c ext/extinit.c
diff --git a/NEWS b/NEWS
index be722bc9de..de1dafb533 100644
--- a/NEWS
+++ b/NEWS
@@ -1,404 +1,115 @@
-# -*- rdoc -*-
-
-= NEWS for Ruby 2.3.0
+= NEWS
This document is a list of user visible feature changes made between
-releases except for bug fixes.
+releases excluding bug fixes.
Note that each entry is kept so brief that no reason behind or
reference information is supplied with. For a full list of changes
-with all sufficient information, see the ChangeLog file or Redmine
-(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>)
-
-== Changes since the 2.2.0 release
-
-=== Language changes
-
-* frozen-string-literal pragma:
-
- * new pragma, frozen-string-literal has been experimentally introduced.
- [Feature #8976]
- * besides, --enable/--disable=frozen-string-literal options also have
- been introduced. [Feature #8976]
- * command line options --debug or --debug=frozen-string-literal enable
- additional debugging mode which shows created location with at frozen
- object error (RuntimeError).
- [Feature #11725]
-
-* safe navigation operator:
-
- * new method call syntax, `object&.foo', method #foo is called on
- `object' if it is not nil.
- this is similar to `try!' in Active Support, except:
- * method name is syntactically required
- obj.try! {} # valid
- obj&. {} # syntax error
- * arguments are evaluated only if a call is made:
- obj.try!(:foo, bar()) # bar() is always evaluated
- obj&.foo(bar()) # bar() is conditionally evaluated
- * attribute assignment is valid
- obj&.attr += 1
- [Feature #11537]
-
-* the did_you_mean gem:
-
- * When a NameError or NoMethodError occurs because of a typo in the name,
- the did_you_mean gem automatically suggests other names similar to the
- method name.
-
- "Yuki".starts_with?("Y")
- # => NoMethodError: undefined method `starts_with?' for "Yuki":String
- # Did you mean? start_with?
-
-* indented here document:
-
- * new string literal, here document starts with `<<~`.
- refer doc/syntax/literals.rdoc for more details.
- [Feature #9098]
-
-=== Core classes updates (outstanding ones only)
-
-* ARGF
-
- * ARGF.read_nonblock supports `exception: false' like IO#read_nonblock.
- [Feature #11358]
-
-* Array
-
- * Array#bsearch_index [Feature #10730]
- * Array#dig [Feature #11643]
-
-* Comparable
-
- * Comparable#== no longer rescues exceptions [Feature #7688]
-
-* Encoding
-
- * new Encoding::IBM037 (alias ebcdic-cp-us; dummy)
-
-* Enumerable
-
- * Enumerable#grep_v is added as inverse version of Enumerable#grep.
- [Feature #11049]
- * Enumerable#chunk_while [Feature #10769]
-
-* Enumerator::Lazy
-
- * Enumerator::Lazy#grep_v [Feature #11773]
-
-* File
-
- * File.mkfifo [Feature #11536]
- * Add File::TMPFILE corresponding to O_TMPFILE
-
-* Hash
-
- * Hash#fetch_values [Feature #10017]
- * Hash#dig [Feature #11643]
- * Hash#<=, Hash#<, Hash#>=, Hash#> [Feature #10984]
- * Hash#to_proc [Feature #11653]
-
-* IO
-
- * new mode flag File::SHARE_DELETE is available.
- this flag means to permit deleting opened file on Windows, but currently
- this affect only files opened as binary. [Feature #11218]
-
- * new option parameter `flags' is added.
- this parameter is bitwise-ORed to oflags generated by normal mode argument.
- [Feature #11253]
-
- * IO#advise no longer raises Errno::ENOSYS in cases where it was
- detected at build time but not available at runtime. [Feature #11806]
-
-* Kernel
-
- * Kernel#loop, when stopped by a StopIteration exception, returns
- what the enumerator has returned instead of nil. [Feature #11498]
-
-* Module
- * Module#deprecate_constant [Feature #11398]
-
-* NameError
- * NameError#receiver is added to take the receiver object. [Feature #10881]
-
-* Numeric
+with all sufficient information, see the ChangeLog file.
- * Numeric#positive? and Numeric#negative? are added, which return
- true when the receiver is positive and negative respectively.
- [Feature #11151]
+== Changes with Ruby 1.8.5
-* Proc
+=== New platforms/build tools support
- * Proc#call (and also #[], #===, #yield) are optimized.
- Backtrace doesn't show each method (show block lines directly).
- TracePoint also ignores these calls. [Feature #11569]
+* IA64 HP-UX
-* Queue (Thread::Queue)
+* Visual C++ 8 SP1
- * Queue#close is added to notice a termination. [Feature #10600]
+* autoconf 2.6x
-* Regexp/String: Updated Unicode version from 7.0.0 to 8.0.0
+=== Library updates (outstanding ones only)
-* RubyVM::InstructionSequence
- * add the following methods as a primitive tool of iseq loader.
- See sample/iseq_loader.rb for usage.
- Note that loader does not have verifier so it is easy to cause
- critical problem by loading modified/broken binary data.
- See [Feature #11788] for more details. (experimental feature)
- * RubyVM::InstructionSequence#to_binary(extra_data = nil)
- * RubyVM::InstructionSequence.load_from_binary(binary)
- * RubyVM::InstructionSequence.load_from_binary_extra_data(binary)
+* date
-* String
+ * Updated based on date2 4.0.3.
- * String#+@ and String#-@ are added to get mutable/frozen strings.
- [Feature #11782]
+* digest
- * String.new now accepts new option parameter `encoding'.
- [Feature #11785]
+ * New internal APIs for C and Ruby.
-* Struct
- * Struct#dig [Feature #11688]
+ * Support for autoloading.
-* Thread
- * Thread#name, Thread#name= are added to handle thread names [Feature #11251]
-
-=== Core classes compatibility issues (excluding feature bug fixes)
-
-* Array
- * Array#select!, Array#keep_if, Array#reject!, and Array#delete_if
- no longer changes the receiver array instantly every time the
- block is called. [Feature #10714]
-
- * Array#flatten and Array#flatten! no longer try to call #to_ary
- method on elements beyond the given level. [Bug #10748]
-
- * Array#inspect doesn't raise error even if its content returns
- a string which is not compatible with Encoding.default_external
- as inspected result. [Feature #11801]
-
-* Enumerable
- * Enumerable#chunk and Enumerable#slice_before no longer takes the
- initial_state argument. [Feature #10958]
- Use a local variable instead to maintain a state.
-
-* File::Stat
- * On Windows File::Stat#ino always returned 0, but now returns
- BY_HANDLE_FILE_INFORMATION.nFileIndexHigh/Low. [Feature #11216]
-
-* Hash
- * Hash#inspect doesn't raise error even if its content returns
- a string which is not compatible with Encoding.default_external
- as inspected result. [Feature #11801]
-
-* IO
- * IO#close doesn't raise when the IO object is closed. [Feature #10718]
- * IO#each_codepoint raises an exception at incomplete character
- before EOF when conversion takes place. [Bug #11444]
-
-* Module
- * Module#define_method and Object.define_singleton_method now
- require method body, Proc, Method, or a block, and raise
- ArgumentError if no block is given directly. [Bug #11283]
-
-* pack/unpack (Array/String)
- * j and J directives for pointer width integer type. [Feature #11215]
-
-
-=== Stdlib updates (outstanding ones only)
-
-* Logger
-
- * Logger#level= now supports symbol and string levels such as :debug, :info,
- :warn, :error, :fatal (case insensitive) [Feature #11695]
- * Logger#reopen is added to reopen a log device. [Feature #11696]
-
-* io/wait
- * IO#wait_readable no longer checks FIONREAD, it may be used for
- non-bytestream IO such as listen sockets.
-
-* Net::FTP
- * Net::FTP#mlst is added.
- * Net::FTP#mlsd is added.
+ * See below for new features and compatibility issues.
* nkf
- * Merge nkf 2.1.4.
-
-* ObjectSpace (objspace)
- * ObjectSpace.count_symbols is added.
- * ObjectSpace.count_imemo_objects is added.
- * ObjectSpace.internal_class_of is added.
- * ObjectSpace.internal_super_of is added.
-
-* OpenSSL
- * OpenSSL::SSL::SSLSocket#accept_nonblock and
- OpenSSL::SSL::SSLSocket#connect_nonblock supports `exception: false`.
- [Feature #10532]
-
-* Pathname
- * Pathname#descend and Pathname#ascend supported blockless form.
- [Feature #11052]
-
-* Socket
- * Socket#connect_nonblock, Socket#accept_nonblock,
- TCPServer#accept_nonblock, UNIXServer#accept_nonblock,
- BasicSocket#recv_nonblock, BasicSocket#recvmsg_nonblock,
- BasicSocket#sendmsg_nonblock all support `exception: false` to return
- :wait_readable or :wait_writable symbols instead of raising
- IO::WaitReadable or IO::WaitWritable exceptions
- [Feature #10532] [Feature #11229]
- * BasicSocket#recv and BasicSocket#recv_nonblock allow an output
- String buffer argument like IO#read and IO#read_nonblock to reduce
- GC overhead [Feature #11242]
-
-* StringIO
- * In read-only mode, StringIO#set_encoding no longer sets the encoding
- of its buffer string. Setting the encoding of the string directly
- without StringIO#set_encoding may cause unpredictable behavior now.
- [Bug #11827]
-
-* timeout
- * Object#timeout is now warned as deprecated when called.
-
-=== Stdlib compatibility issues (excluding feature bug fixes)
-
-* ext/coverage/coverage.c
- * Coverage.peek_result: new method to allow coverage to be captured without
- stopping the coverage tool. [Feature #10816]
-
-* Fiddle
- * Fiddle::Function#call releases the GVL. [Feature #11607]
-
-* io-console
- * Update to io-console 0.4.5, and change the license to BSD 2-clause
- "Simplified" License.
-
-* lib/base64.rb
- * Base64.urlsafe_encode64: added a "padding" option to suppress
- the padding character ("="). [Feature #10740]
- * Base64.urlsafe_decode64: now it accepts not only correctly-padded
- input but also unpadded input. [Feature #10740]
-
-* lib/drb/drb.rb
- * removed unused argument. https://github.com/ruby/ruby/pull/515
-
-* lib/matrix.rb
- * Add Vector#round. https://github.com/ruby/ruby/pull/802
-
-* lib/webrick/utils.rb
- * removed unused argument. https://github.com/ruby/ruby/pull/356
-
-* Net::FTP
- * Connections are in passive mode per default now. The default mode can
- be changed by Net::FTP.default_passive=. [Feature #11612]
-
-* Net::HTTP
- * default value of Net::HTTP#open_timeout is now 60 (was nil).
-
-* Net::Telnet
- * Net::Telnet is extracted to net-telnet gem. It's unmaintain code.
- [Feature #11083]
-
-* Psych
- * Updated to Psych 2.0.17
-
-* Rake
- * Rake is removed from stdlib. [Feature #11025]
-
-* RDoc
- * Updated to RDoc 4.2.1. For full release notes see:
-
- https://github.com/rdoc/rdoc/blob/master/History.rdoc#421--2015-12-22
-* RubyGems
- * Updated to RubyGems 2.5.1. For full release notes see:
+ * Updated based on nkf as of 2007-01-28.
- http://docs.seattlerb.org/rubygems/History_txt.html#label-2.5.0+-2F+2015-11-03
- and
- http://docs.seattlerb.org/rubygems/History_txt.html#label-2.5.1+-2F+2015-12-10
+* tk
-=== Built-in global variables compatibility issues
+ * Tk::X_Scrollable (Y_Scrollable) is renamed to Tk::XScrollable
+ (YScrollable). Tk::X_Scrollable (Y_Scrollable) is still available,
+ but it is an alias name.
-* $SAFE
- * $SAFE=2 and $SAFE=3 are obsolete. If $SAFE is set to 2 or larger,
- an ArgumentError is raised. [Feature #5455]
+ * Updated Tile extension support based on Tile 0.7.8.
-=== C API updates
+ * Support --without-X11 configure option for non-X11 versions of
+ Tcl/Tk (e.g. Tcl/Tk Aqua).
-* rb_define_class_id_under() now raises a TypeError exception when the
- class is already defined but its superclass does not match the given
- superclass, as well as definitions in ruby level.
+ * New sample script: irbtkw.rbw -- IRB on Ruby/Tk. It has no trouble
+ about STDIN blocking on Windows.
-* rb_timespec_now() is added to fetch current datetime as struct timespec.
- [Feature #11558]
+=== New methods and features
-* rb_time_timespec_new() is added to create a time object with epoch,
- nanosecond, and UTC/localtime/time offset arguments. [Feature #11558]
+* builtin classes
-* rb_autoload() deprecated, use rb_funcall() instead. [Feature #11664]
+ * New method: Kernel#instance_variable_defined?
-* rb_compile_error_with_enc(), rb_compile_error(), and rb_compile_bug()
- deprecated. these functions are exposed but only for internal use.
- external libraries should not use them.
+ * New method: Module#class_variable_defined?
-=== Supported platform changes
+ * New feature: Dir::glob() can now take an array of glob patterns.
-* OS/2 is no longer supported
+* digest
-* BeOS is no longer supported
+ * New digest class methods: file
-* Borland-C is no longer supported
+ * New digest instance methods: clone, reset, new,
+ inspect, digest_length (alias size or length),
+ block_length()
-* Haiku now stable and best effort
+ * New library: digest/bubblebabble
-=== Implementation improvements
+ * New function: Digest(name)
-* Optimize Proc#call to eliminate method frame construction.
- [Feature #11569]
+* fileutils
-* Reconsidering method entry data structure.
- [Bug #11278]
+ * New option for FileUtils.cp_r(): :remove_destination
-* Introducing new table data structure for ID keys tables used by
- method table and so on. New table structure is simple and fast
- than st_table. [Feature #11420]
+* thread
-* Machine code level tuning for object allocation and method calling
- code. r52099, r52254
+ * Replaced with much faster mutex implementation in C.
+ The former implementation is available with a
+ configure option `--disable-fastthread'.
-* RubyVM::InstructionSequence is extended for future improvement.
- [Feature #11788]
+* webrick
-* Case dispatch is now optimized for all special constant literals
- including nil, true, and false. Previously, only literal strings,
- symbols, integers and floats compiled to optimized case dispatch.
- [Feature #11769]
+ * New method: WEBrick::Cookie.parse_set_cookies()
-* Instance variables on non-pure Ruby classes (T_DATA, T_FILE,
- etc..) is less expensive to store than before. [Feature #11170]
+=== Compatibility issues (excluding feature bug fixes)
-* All accesses to members of big Struct objects are performed in
- constant-time. Previously, Struct elements beyond the first 10
- 10 elements used a linear scan. [Feature #10585]
+* builtin classes
-* The Set class got several speed up.
- [Misc #10754], [r52591]
+ * String#intern now raises SecurityError when $SAFE level is greater
+ than zero.
-* Socket and I/O-related improvements
+* fileutils
- * Calling overhead of most of new keyword-using I/O methods in
- [Feature #11229] is reduced by avoiding the inefficient C API
- to parse keywords. [Feature #11339]
+ * A minor implementation change breaks Rake <=0.7.1.
+ Updating Rake to 0.7.2 fixes the problem.
- * The standard library is updated to use the improved
- exception-free non-blocking I/O from [Feature #11229].
- This has the additional benefit of quieter $DEBUG output in
- addition to reducing expensive exceptions. [Feature #11044]
+* digest
- * (Linux-only) waiting on a single FD anywhere in the stdlib no longer
- uses select(2), making it immune to slowdowns with high-numbered FDs.
- [Feature #11081] [Feature #11377]
+ * The constructor does no longer take an initial
+ string to feed; digest() and hexdigest() now do,
+ instead. The following examples show how to
+ migrate:
-* CGI.escapeHTML is optimized with C extention.
- https://github.com/ruby/ruby/pull/1164
+ # Before
+ md = Digest::MD5.new("string")
+ # After (works with any version)
+ md = Digest::MD5.new.update("string")
+
+ # Before
+ hd = Digest::MD5.new("string").hexdigest
+ # After (works with any version)
+ hd = Digest::MD5.hexdigest("string")
diff --git a/README b/README
new file mode 100644
index 0000000000..cf836415ad
--- /dev/null
+++ b/README
@@ -0,0 +1,114 @@
+* What's Ruby
+
+Ruby is the interpreted scripting language for quick and
+easy object-oriented programming. It has many features to
+process text files and to do system management tasks (as in
+Perl). It is simple, straight-forward, and extensible.
+
+
+* Features of Ruby
+
+ + Simple Syntax
+ + *Normal* Object-Oriented features(ex. class, method calls)
+ + *Advanced* Object-Oriented features(ex. Mix-in, Singleton-method)
+ + Operator Overloading
+ + Exception Handling
+ + Iterators and Closures
+ + Garbage Collection
+ + Dynamic Loading of Object files(on some architecture)
+ + Highly Portable(works on many UNIX machines, and on DOS,
+ Windows, Mac, BeOS etc.)
+
+
+* How to get Ruby
+
+The Ruby distribution files can be found in the following FTP site:
+
+ ftp://ftp.ruby-lang.org/pub/ruby/
+
+The latest source code of this version series can be checked out
+through SVN with the following command:
+
+ $ svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_6/
+
+The trunk of the Ruby source tree can be checked out with the
+following command:
+
+ $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
+
+There are some other branches under development. Try the following
+command and see the list of branches:
+
+ $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
+
+
+* Ruby home-page
+
+The URL of the Ruby home-page is:
+
+ http://www.ruby-lang.org/
+
+
+* Mailing list
+
+There is a mailing list to talk about Ruby.
+To subscribe this list, please send the following phrase
+
+ subscribe YourFirstName YourFamilyName
+e.g.
+ subscribe Joseph Smith
+
+in the mail body (not subject) to the address <ruby-talk-ctl@ruby-lang.org>.
+
+
+* How to compile and install
+
+This is what you need to do to compile and install Ruby:
+
+ 1. If ./configure does not exist or is older than configure.in,
+ run autoconf to (re)generate configure.
+
+ 2. Run ./configure, which will generate config.h and Makefile.
+
+ 3. Edit defines.h if you need. Usually this step will not be needed.
+
+ 4. Remove comment mark(#) before the module names from ext/Setup (or
+ add module names if not present), if you want to link modules
+ statically.
+
+ If you don't want to compile non static extension modules
+ (probably on architectures which does not allow dynamic loading),
+ remove comment mark from the line "#option nodynamic" in
+ ext/Setup.
+
+ 5. Run make.
+
+ 6. Optionally, run 'make test' to check whether the compiled Ruby
+ interpreter works well. If you see the message "test succeeded",
+ your ruby works as it should (hopefully).
+
+ 7. Run 'make install'
+
+ You may have to be a super user to install ruby.
+
+If you fail to compile ruby, please send the detailed error report with
+the error log and machine/OS type, to help others.
+
+
+* Copying
+
+See the file COPYING.
+
+
+* The Author
+
+Feel free to send comments and bug reports to the author. Here is the
+author's latest mail address:
+
+ matz@netlab.jp
+
+-------------------------------------------------------
+created at: Thu Aug 3 11:57:36 JST 1995
+Local variables:
+mode: indented-text
+end:
diff --git a/README.EXT b/README.EXT
index 48b8d964c4..2fc2fd606a 100644
--- a/README.EXT
+++ b/README.EXT
@@ -1 +1,1159 @@
-Moved to doc/extension.rdoc
+.\" README.EXT - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995
+
+This document explains how to make extension libraries for Ruby.
+
+1. Basic knowledge
+
+In C, variables have types and data do not have types. In contrast,
+Ruby variables do not have a static type, and data themselves have
+types, so data will need to be converted between the languages.
+
+Data in Ruby are represented by the C type `VALUE'. Each VALUE data
+has its data-type.
+
+To retrieve C data from a VALUE, you need to:
+
+ (1) Identify the VALUE's data type
+ (2) Convert the VALUE into C data
+
+Converting to the wrong data type may cause serious problems.
+
+
+1.1 Data-types
+
+The Ruby interpreter has the following data types:
+
+ T_NIL nil
+ T_OBJECT ordinary object
+ T_CLASS class
+ T_MODULE module
+ T_FLOAT floating point number
+ T_STRING string
+ T_REGEXP regular expression
+ T_ARRAY array
+ T_FIXNUM Fixnum(31bit integer)
+ T_HASH associative array
+ T_STRUCT (Ruby) structure
+ T_BIGNUM multi precision integer
+ T_FILE IO
+ T_TRUE true
+ T_FALSE false
+ T_DATA data
+ T_SYMBOL symbol
+
+In addition, there are several other types used internally:
+
+ T_ICLASS
+ T_MATCH
+ T_UNDEF
+ T_VARMAP
+ T_SCOPE
+ T_NODE
+
+Most of the types are represented by C structures.
+
+1.2 Check Data Type of the VALUE
+
+The macro TYPE() defined in ruby.h shows the data type of the VALUE.
+TYPE() returns the constant number T_XXXX described above. To handle
+data types, your code will look something like this:
+
+ switch (TYPE(obj)) {
+ case T_FIXNUM:
+ /* process Fixnum */
+ break;
+ case T_STRING:
+ /* process String */
+ break;
+ case T_ARRAY:
+ /* process Array */
+ break;
+ default:
+ /* raise exception */
+ rb_raise(rb_eTypeError, "not valid value");
+ break;
+ }
+
+There is the data-type check function
+
+ void Check_Type(VALUE value, int type)
+
+which raises an exception if the VALUE does not have the type specified.
+
+There are also faster check macros for fixnums and nil.
+
+ FIXNUM_P(obj)
+ NIL_P(obj)
+
+1.3 Convert VALUE into C data
+
+The data for type T_NIL, T_FALSE, T_TRUE are nil, true, false
+respectively. They are singletons for the data type.
+
+The T_FIXNUM data is a 31bit length fixed integer (63bit length on
+some machines), which can be converted to a C integer by using the
+FIX2INT() macro. There is also NUM2INT() which converts any Ruby
+numbers into C integers. The NUM2INT() macro includes a type check, so
+an exception will be raised if the conversion failed. NUM2DBL() can
+be used to retrieve the double float value in the same way.
+
+In version 1.7 or later it is recommended that you use the new macros
+StringValue() and StringValuePtr() to get a char* from a VALUE.
+StringValue(var) replaces var's value with the result of "var.to_str()".
+StringValuePtr(var) does same replacement and returns char*
+representation of var. These macros will skip the replacement if var is
+a String. Notice that the macros take only the lvalue as their
+argument, to change the value of var in place.
+
+In version 1.6 or earlier, STR2CSTR() was used to do the same thing
+but now it is deprecated in version 1.7, because STR2CSTR() has a risk
+of a dangling pointer problem in the to_str() impliclit conversion.
+
+Other data types have corresponding C structures, e.g. struct RArray
+for T_ARRAY etc. The VALUE of the type which has the corresponding structure
+can be cast to retrieve the pointer to the struct. The casting macro
+will be of the form RXXXX for each data type; for instance, RARRAY(obj).
+See "ruby.h".
+
+For example, `RSTRING(str)->len' is the way to get the size of the
+Ruby String object. The allocated region can be accessed by
+`RSTRING(str)->ptr'. For arrays, use `RARRAY(ary)->len' and
+`RARRAY(ary)->ptr' respectively.
+
+Notice: Do not change the value of the structure directly, unless you
+are responsible for the result. This ends up being the cause of interesting
+bugs.
+
+1.4 Convert C data into VALUE
+
+To convert C data to Ruby values:
+
+ * FIXNUM
+
+ left shift 1 bit, and turn on LSB.
+
+ * Other pointer values
+
+ cast to VALUE.
+
+You can determine whether a VALUE is pointer or not by checking its LSB.
+
+Notice Ruby does not allow arbitrary pointer values to be a VALUE. They
+should be pointers to the structures which Ruby knows about. The known
+structures are defined in <ruby.h>.
+
+To convert C numbers to Ruby values, use these macros.
+
+ INT2FIX() for integers within 31bits.
+ INT2NUM() for arbitrary sized integer.
+
+INT2NUM() converts an integer into a Bignum if it is out of the FIXNUM
+range, but is a bit slower.
+
+1.5 Manipulating Ruby data
+
+As I already mentioned, it is not recommended to modify an object's internal
+structure. To manipulate objects, use the functions supplied by the Ruby
+interpreter. Some (not all) of the useful functions are listed below:
+
+ String functions
+
+ rb_str_new(const char *ptr, long len)
+
+ Creates a new Ruby string.
+
+ rb_str_new2(const char *ptr)
+
+ Creates a new Ruby string from a C string. This is equivalent to
+ rb_str_new(ptr, strlen(ptr)).
+
+ rb_tainted_str_new(const char *ptr, long len)
+
+ Creates a new tainted Ruby string. Strings from external data
+ sources should be tainted.
+
+ rb_tainted_str_new2(const char *ptr)
+
+ Creates a new tainted Ruby string from a C string.
+
+ rb_str_cat(VALUE str, const char *ptr, long len)
+
+ Appends len bytes of data from ptr to the Ruby string.
+
+ Array functions
+
+ rb_ary_new()
+
+ Creates an array with no elements.
+
+ rb_ary_new2(long len)
+
+ Creates an array with no elements, allocating internal buffer
+ for len elements.
+
+ rb_ary_new3(long n, ...)
+
+ Creates an n-element array from the arguments.
+
+ rb_ary_new4(long n, VALUE *elts)
+
+ Creates an n-element array from a C array.
+
+ rb_ary_push(VALUE ary, VALUE val)
+ rb_ary_pop(VALUE ary)
+ rb_ary_shift(VALUE ary)
+ rb_ary_unshift(VALUE ary, VALUE val)
+
+ Array operations. The first argument to each functions must be an
+ array. They may dump core if other types are given.
+
+2. Extending Ruby with C
+
+2.1 Addding new features to Ruby
+
+You can add new features (classes, methods, etc.) to the Ruby
+interpreter. Ruby provides APIs for defining the following things:
+
+ * Classes, Modules
+ * Methods, Singleton Methods
+ * Constants
+
+2.1.1 Class/module definition
+
+To define a class or module, use the functions below:
+
+ VALUE rb_define_class(const char *name, VALUE super)
+ VALUE rb_define_module(const char *name)
+
+These functions return the newly created class or module. You may
+want to save this reference into a variable to use later.
+
+To define nested classes or modules, use the functions below:
+
+ VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
+ VALUE rb_define_module_under(VALUE outer, const char *name)
+
+2.1.2 Method/singleton method definition
+
+To define methods or singleton methods, use these functions:
+
+ void rb_define_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+
+ void rb_define_singleton_method(VALUE object, const char *name,
+ VALUE (*func)(), int argc)
+
+The `argc' represents the number of the arguments to the C function,
+which must be less than 17. But I doubt you'll need that many.
+
+If `argc' is negative, it specifies the calling sequence, not number of
+the arguments.
+
+If argc is -1, the function will be called as:
+
+ VALUE func(int argc, VALUE *argv, VALUE obj)
+
+where argc is the actual number of arguments, argv is the C array of
+the arguments, and obj is the receiver.
+
+If argc is -2, the arguments are passed in a Ruby array. The function
+will be called like:
+
+ VALUE func(VALUE obj, VALUE args)
+
+where obj is the receiver, and args is the Ruby array containing
+actual arguments.
+
+There are two more functions to define methods. One is to define
+private methods:
+
+ void rb_define_private_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+
+The other is to define module functions, which are private AND singleton
+methods of the module. For example, sqrt is the module function
+defined in Math module. It can be called in the following way:
+
+ Math.sqrt(4)
+
+or
+
+ include Math
+ sqrt(4)
+
+To define module functions, use:
+
+ void rb_define_module_function(VALUE module, const char *name,
+ VALUE (*func)(), int argc)
+
+Oh, in addition, function-like methods, which are private methods defined
+in the Kernel module, can be defined using:
+
+ void rb_define_global_function(const char *name, VALUE (*func)(), int argc)
+
+To define an alias for the method,
+
+ void rb_define_alias(VALUE module, const char* new, const char* old);
+
+To define and undefine the `allocate' class method,
+
+ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
+ void rb_undef_alloc_func(VALUE klass);
+
+func have to take the klass as the argument and return a newly
+allocated instance. This instance should be empty as possible,
+without any expensive (including external) resources.
+
+2.1.3 Constant definition
+
+We have 2 functions to define constants:
+
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
+ void rb_define_global_const(const char *name, VALUE val)
+
+The former is to define a constant under specified class/module. The
+latter is to define a global constant.
+
+2.2 Use Ruby features from C
+
+There are several ways to invoke Ruby's features from C code.
+
+2.2.1 Evaluate Ruby Programs in a String
+
+The easiest way to use Ruby's functionality from a C program is to
+evaluate the string as Ruby program. This function will do the job:
+
+ VALUE rb_eval_string(const char *str)
+
+Evaluation is done under the current context, thus current local variables
+of the innermost method (which is defined by Ruby) can be accessed.
+
+2.2.2 ID or Symbol
+
+You can invoke methods directly, without parsing the string. First I need
+to explain about ID. ID is the integer number to represent Ruby's
+identifiers such as variable names. The Ruby data type corresponding to ID
+is Symbol. It can be accessed from Ruby in the form:
+
+ :Identifier
+
+You can get the ID value from a string within C code by using
+
+ rb_intern(const char *name)
+
+You can retrieve ID from Ruby object (Symbol or String) given as an
+argument by using
+
+ rb_to_id(VALUE symbol)
+
+You can convert C ID to Ruby Symbol by using
+
+ VALUE ID2SYM(ID id)
+
+and to convert Ruby Symbol object to ID, use
+
+ ID SYM2ID(VALUE symbol)
+
+2.2.3 Invoke Ruby method from C
+
+To invoke methods directly, you can use the function below
+
+ VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
+
+This function invokes a method on the recv, with the method name
+specified by the symbol mid.
+
+2.2.4 Accessing the variables and constants
+
+You can access class variables and instance variables using access
+functions. Also, global variables can be shared between both environments.
+There's no way to access Ruby's local variables.
+
+The functions to access/modify instance variables are below:
+
+ VALUE rb_ivar_get(VALUE obj, ID id)
+ VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
+
+id must be the symbol, which can be retrieved by rb_intern().
+
+To access the constants of the class/module:
+
+ VALUE rb_const_get(VALUE obj, ID id)
+
+See 2.1.3 for defining new constant.
+
+3. Information sharing between Ruby and C
+
+3.1 Ruby constants that C can be accessed from C
+
+The following Ruby constants can be referred from C.
+
+ Qtrue
+ Qfalse
+
+Boolean values. Qfalse is false in C also (i.e. 0).
+
+ Qnil
+
+Ruby nil in C scope.
+
+3.2 Global variables shared between C and Ruby
+
+Information can be shared between the two environments using shared global
+variables. To define them, you can use functions listed below:
+
+ void rb_define_variable(const char *name, VALUE *var)
+
+This function defines the variable which is shared by both environments.
+The value of the global variable pointed to by `var' can be accessed
+through Ruby's global variable named `name'.
+
+You can define read-only (from Ruby, of course) variables using the
+function below.
+
+ void rb_define_readonly_variable(const char *name, VALUE *var)
+
+You can defined hooked variables. The accessor functions (getter and
+setter) are called on access to the hooked variables.
+
+ void rb_define_hooked_variable(constchar *name, VALUE *var,
+ VALUE (*getter)(), void (*setter)())
+
+If you need to supply either setter or getter, just supply 0 for the
+hook you don't need. If both hooks are 0, rb_define_hooked_variable()
+works just like rb_define_variable().
+
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*setter)())
+
+This function defines a Ruby global variable without a corresponding C
+variable. The value of the variable will be set/get only by hooks.
+
+The prototypes of the getter and setter functions are as follows:
+
+ (*getter)(ID id, void *data, struct global_entry* entry);
+ (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);
+
+3.3 Encapsulate C data into a Ruby object
+
+To wrap and objectify a C pointer as a Ruby object (so called
+DATA), use Data_Wrap_Struct().
+
+ Data_Wrap_Struct(klass, mark, free, ptr)
+
+Data_Wrap_Struct() returns a created DATA object. The klass argument
+is the class for the DATA object. The mark argument is the function
+to mark Ruby objects pointed by this data. The free argument is the
+function to free the pointer allocation. If this is -1, the pointer
+will be just freed. The functions mark and free will be called from
+garbage collector.
+
+You can allocate and wrap the structure in one step.
+
+ Data_Make_Struct(klass, type, mark, free, sval)
+
+This macro returns an allocated Data object, wrapping the pointer to
+the structure, which is also allocated. This macro works like:
+
+ (sval = ALLOC(type), Data_Wrap_Struct(klass, mark, free, sval))
+
+Arguments klass, mark, and free work like their counterparts in
+Data_Wrap_Struct(). A pointer to the allocated structure will be
+assigned to sval, which should be a pointer of the type specified.
+
+To retrieve the C pointer from the Data object, use the macro
+Data_Get_Struct().
+
+ Data_Get_Struct(obj, type, sval)
+
+A pointer to the structure will be assigned to the variable sval.
+
+See the example below for details.
+
+4. Example - Creating dbm extension
+
+OK, here's the example of making an extension library. This is the
+extension to access DBMs. The full source is included in the ext/
+directory in the Ruby's source tree.
+
+(1) make the directory
+
+ % mkdir ext/dbm
+
+Make a directory for the extension library under ext directory.
+
+(2) design the library
+
+You need to design the library features, before making it.
+
+(3) write C code.
+
+You need to write C code for your extension library. If your library
+has only one source file, choosing ``LIBRARY.c'' as a file name is
+preferred. On the other hand, in case your library has multiple source
+files, avoid choosing ``LIBRARY.c'' for a file name. It may conflict
+with an intermediate file ``LIBRARY.o'' on some platforms.
+
+Ruby will execute the initializing function named ``Init_LIBRARY'' in
+the library. For example, ``Init_dbm()'' will be executed when loading
+the library.
+
+Here's the example of an initializing function.
+
+--
+Init_dbm()
+{
+ /* define DBM class */
+ cDBM = rb_define_class("DBM", rb_cObject);
+ /* DBM includes Enumerate module */
+ rb_include_module(cDBM, rb_mEnumerable);
+
+ /* DBM has class method open(): arguments are received as C array */
+ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
+
+ /* DBM instance method close(): no args */
+ rb_define_method(cDBM, "close", fdbm_close, 0);
+ /* DBM instance method []: 1 argument */
+ rb_define_method(cDBM, "[]", fdbm_fetch, 1);
+ :
+
+ /* ID for a instance variable to store DBM data */
+ id_dbm = rb_intern("dbm");
+}
+--
+
+The dbm extension wraps the dbm struct in the C environment using
+Data_Make_Struct.
+
+--
+struct dbmdata {
+ int di_size;
+ DBM *di_dbm;
+};
+
+
+obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);
+--
+
+This code wraps the dbmdata structure into a Ruby object. We avoid wrapping
+DBM* directly, because we want to cache size information.
+
+To retrieve the dbmdata structure from a Ruby object, we define the
+following macro:
+
+--
+#define GetDBM(obj, dbmp) {\
+ Data_Get_Struct(obj, struct dbmdata, dbmp);\
+ if (dbmp->di_dbm == 0) closed_dbm();\
+}
+--
+
+This sort of complicated macro does the retrieving and close checking for
+the DBM.
+
+There are three kinds of way to receive method arguments. First,
+methods with a fixed number of arguments receive arguments like this:
+
+--
+static VALUE
+fdbm_delete(obj, keystr)
+ VALUE obj, keystr;
+{
+ :
+}
+--
+
+The first argument of the C function is the self, the rest are the
+arguments to the method.
+
+Second, methods with an arbitrary number of arguments receive
+arguments like this:
+
+--
+static VALUE
+fdbm_s_open(argc, argv, klass)
+ int argc;
+ VALUE *argv;
+ VALUE klass;
+{
+ :
+ if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) {
+ mode = 0666; /* default value */
+ }
+ :
+}
+--
+
+The first argument is the number of method arguments, the second
+argument is the C array of the method arguments, and the third
+argument is the receiver of the method.
+
+You can use the function rb_scan_args() to check and retrieve the
+arguments. For example, "11" means that the method requires at least one
+argument, and at most receives two arguments.
+
+Methods with an arbitrary number of arguments can receive arguments
+by Ruby's array, like this:
+
+--
+static VALUE
+fdbm_indexes(obj, args)
+ VALUE obj, args;
+{
+ :
+}
+--
+
+The first argument is the receiver, the second one is the Ruby array
+which contains the arguments to the method.
+
+** Notice
+
+GC should know about global variables which refer to Ruby's objects, but
+are not exported to the Ruby world. You need to protect them by
+
+ void rb_global_variable(VALUE *var)
+
+(4) prepare extconf.rb
+
+If the file named extconf.rb exists, it will be executed to generate
+Makefile.
+
+extconf.rb is the file for checking compilation conditions etc. You
+need to put
+
+ require 'mkmf'
+
+at the top of the file. You can use the functions below to check
+various conditions.
+
+ have_library(lib, func): check whether library containing function exists.
+ have_func(func, header): check whether function exists
+ have_header(header): check whether header file exists
+ create_makefile(target): generate Makefile
+
+The value of the variables below will affect the Makefile.
+
+ $CFLAGS: included in CFLAGS make variable (such as -O)
+ $CPPFLAGS: included in CPPFLAGS make variable (such as -I, -D)
+ $LDFLAGS: included in LDFLAGS make variable (such as -L)
+ $objs: list of object file names
+
+Normally, the object files list is automatically generated by searching
+source files, but you must define them explicitly if any sources will
+be generated while building.
+
+If a compilation condition is not fulfilled, you should not call
+``create_makefile''. The Makefile will not be generated, compilation will
+not be done.
+
+(5) prepare depend (optional)
+
+If the file named depend exists, Makefile will include that file to
+check dependencies. You can make this file by invoking
+
+ % gcc -MM *.c > depend
+
+It's harmless. Prepare it.
+
+(6) generate Makefile
+
+Try generating the Makefile by:
+
+ ruby extconf.rb
+
+You don't need this step if you put the extension library under the ext
+directory of the ruby source tree. In that case, compilation of the
+interpreter will do this step for you.
+
+(7) make
+
+Type
+
+ make
+
+to compile your extension. You don't need this step either if you have
+put the extension library under the ext directory of the ruby source tree.
+
+(8) debug
+
+You may need to rb_debug the extension. Extensions can be linked
+statically by adding the directory name in the ext/Setup file so that
+you can inspect the extension with the debugger.
+
+(9) done, now you have the extension library
+
+You can do anything you want with your library. The author of Ruby
+will not claim any restrictions on your code depending on the Ruby API.
+Feel free to use, modify, distribute or sell your program.
+
+Appendix A. Ruby source files overview
+
+ruby language core
+
+ class.c
+ error.c
+ eval.c
+ gc.c
+ object.c
+ parse.y
+ variable.c
+
+utility functions
+
+ dln.c
+ regex.c
+ st.c
+ util.c
+
+ruby interpreter implementation
+
+ dmyext.c
+ inits.c
+ main.c
+ ruby.c
+ version.c
+
+class library
+
+ array.c
+ bignum.c
+ compar.c
+ dir.c
+ enum.c
+ file.c
+ hash.c
+ io.c
+ marshal.c
+ math.c
+ numeric.c
+ pack.c
+ prec.c
+ process.c
+ random.c
+ range.c
+ re.c
+ signal.c
+ sprintf.c
+ string.c
+ struct.c
+ time.c
+
+Appendix B. Ruby extension API reference
+
+** Types
+
+ VALUE
+
+The type for the Ruby object. Actual structures are defined in ruby.h,
+such as struct RString, etc. To refer the values in structures, use
+casting macros like RSTRING(obj).
+
+** Variables and constants
+
+ Qnil
+
+const: nil object
+
+ Qtrue
+
+const: true object(default true value)
+
+ Qfalse
+
+const: false object
+
+** C pointer wrapping
+
+ Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
+
+Wrap a C pointer into a Ruby object. If object has references to other
+Ruby objects, they should be marked by using the mark function during
+the GC process. Otherwise, mark should be 0. When this object is no
+longer referred by anywhere, the pointer will be discarded by free
+function.
+
+ Data_Make_Struct(klass, type, mark, free, sval)
+
+This macro allocates memory using malloc(), assigns it to the variable
+sval, and returns the DATA encapsulating the pointer to memory region.
+
+ Data_Get_Struct(data, type, sval)
+
+This macro retrieves the pointer value from DATA, and assigns it to
+the variable sval.
+
+** Checking data types
+
+TYPE(value)
+FIXNUM_P(value)
+NIL_P(value)
+void Check_Type(VALUE value, int type)
+void Check_SafeStr(VALUE value)
+
+** Data type conversion
+
+FIX2INT(value)
+INT2FIX(i)
+NUM2INT(value)
+INT2NUM(i)
+NUM2DBL(value)
+rb_float_new(f)
+StringValue(value)
+StringValuePtr(value)
+StringValueCStr(value)
+rb_str_new2(s)
+
+** defining class/module
+
+ VALUE rb_define_class(const char *name, VALUE super)
+
+Defines a new Ruby class as a subclass of super.
+
+ VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
+
+Creates a new Ruby class as a subclass of super, under the module's
+namespace.
+
+ VALUE rb_define_module(const char *name)
+
+Defines a new Ruby module.
+
+ VALUE rb_define_module_under(VALUE module, const char *name)
+
+Defines a new Ruby module under the module's namespace.
+
+ void rb_include_module(VALUE klass, VALUE module)
+
+Includes module into class. If class already includes it, just
+ignored.
+
+ void rb_extend_object(VALUE object, VALUE module)
+
+Extend the object with the module's attributes.
+
+** Defining Global Variables
+
+ void rb_define_variable(const char *name, VALUE *var)
+
+Defines a global variable which is shared between C and Ruby. If name
+contains a character which is not allowed to be part of the symbol,
+it can't be seen from Ruby programs.
+
+ void rb_define_readonly_variable(const char *name, VALUE *var)
+
+Defines a read-only global variable. Works just like
+rb_define_variable(), except the defined variable is read-only.
+
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), VALUE (*setter)())
+
+Defines a virtual variable, whose behavior is defined by a pair of C
+functions. The getter function is called when the variable is
+referenced. The setter function is called when the variable is set to a
+value. The prototype for getter/setter functions are:
+
+ VALUE getter(ID id)
+ void setter(VALUE val, ID id)
+
+The getter function must return the value for the access.
+
+ void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), VALUE (*setter)())
+
+Defines hooked variable. It's a virtual variable with a C variable.
+The getter is called as
+
+ VALUE getter(ID id, VALUE *var)
+
+returning a new value. The setter is called as
+
+ void setter(VALUE val, ID id, VALUE *var)
+
+GC requires C global variables which hold Ruby values to be marked.
+
+ void rb_global_variable(VALUE *var)
+
+Tells GC to protect these variables.
+
+** Constant Definition
+
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
+
+Defines a new constant under the class/module.
+
+ void rb_define_global_const(const char *name, VALUE val)
+
+Defines a global constant. This is just the same as
+
+ rb_define_const(cKernal, name, val)
+
+** Method Definition
+
+ rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+Defines a method for the class. func is the function pointer. argc
+is the number of arguments. if argc is -1, the function will receive
+3 arguments: argc, argv, and self. if argc is -2, the function will
+receive 2 arguments, self and args, where args is a Ruby array of
+the method arguments.
+
+ rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+Defines a private method for the class. Arguments are same as
+rb_define_method().
+
+ rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+Defines a singleton method. Arguments are same as rb_define_method().
+
+ rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)
+
+Retrieve argument from argc, argv. The fmt is the format string for
+the arguments, such as "12" for 1 non-optional argument, 2 optional
+arguments. If `*' appears at the end of fmt, it means the rest of
+the arguments are assigned to the corresponding variable, packed in
+an array.
+
+** Invoking Ruby method
+
+ VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
+
+Invokes a method. To retrieve mid from a method name, use rb_intern().
+
+ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
+
+Invokes a method, passing arguments by an array of values.
+
+ VALUE rb_eval_string(const char *str)
+
+Compiles and executes the string as a Ruby program.
+
+ ID rb_intern(const char *name)
+
+Returns ID corresponding to the name.
+
+ char *rb_id2name(ID id)
+
+Returns the name corresponding ID.
+
+ char *rb_class2name(VALUE klass)
+
+Returns the name of the class.
+
+ int rb_respond_to(VALUE object, ID id)
+
+Returns true if the object responds to the message specified by id.
+
+** Instance Variables
+
+ VALUE rb_iv_get(VALUE obj, const char *name)
+
+Retrieve the value of the instance variable. If the name is not
+prefixed by `@', that variable shall be inaccessible from Ruby.
+
+ VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
+
+Sets the value of the instance variable.
+
+** Control Structure
+
+ VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
+
+Calls the function func1, supplying func2 as the block. func1 will be
+called with the argument arg1. func2 receives the value from yield as
+the first argument, arg2 as the second argument.
+
+ VALUE rb_yield(VALUE val)
+
+Evaluates the block with value val.
+
+ VALUE rb_rescue(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
+
+Calls the function func1, with arg1 as the argument. If an exception
+occurs during func1, it calls func2 with arg2 as the argument. The
+return value of rb_rescue() is the return value from func1 if no
+exception occurs, from func2 otherwise.
+
+ VALUE rb_ensure(VALUE (*func1)(), void *arg1, void (*func2)(), void *arg2)
+
+Calls the function func1 with arg1 as the argument, then calls func2
+with arg2 if execution terminated. The return value from
+rb_ensure() is that of func1.
+
+** Exceptions and Errors
+
+ void rb_warn(const char *fmt, ...)
+
+Prints a warning message according to a printf-like format.
+
+ void rb_warning(const char *fmt, ...)
+
+Prints a warning message according to a printf-like format, if
+$VERBOSE is true.
+
+void rb_raise(rb_eRuntimeError, const char *fmt, ...)
+
+Raises RuntimeError. The fmt is a format string just like printf().
+
+ void rb_raise(VALUE exception, const char *fmt, ...)
+
+Raises a class exception. The fmt is a format string just like printf().
+
+ void rb_fatal(const char *fmt, ...)
+
+Raises a fatal error, terminates the interpreter. No exception handling
+will be done for fatal errors, but ensure blocks will be executed.
+
+ void rb_bug(const char *fmt, ...)
+
+Terminates the interpreter immediately. This function should be
+called under the situation caused by the bug in the interpreter. No
+exception handling nor ensure execution will be done.
+
+** Initialize and Start the Interpreter
+
+The embedding API functions are below (not needed for extension libraries):
+
+ void ruby_init()
+
+Initializes the interpreter.
+
+ void ruby_options(int argc, char **argv)
+
+Process command line arguments for the interpreter.
+
+ void ruby_run()
+
+Starts execution of the interpreter.
+
+ void ruby_script(char *name)
+
+Specifies the name of the script ($0).
+
+** Hooks for the Interpreter Events
+
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_t events)
+
+Adds a hook function for the specified interpreter events.
+events should be Or'ed value of:
+
+ RUBY_EVENT_LINE
+ RUBY_EVENT_CLASS
+ RUBY_EVENT_END
+ RUBY_EVENT_CALL
+ RUBY_EVENT_RETURN
+ RUBY_EVENT_C_CALL
+ RUBY_EVENT_C_RETURN
+ RUBY_EVENT_RAISE
+ RUBY_EVENT_ALL
+
+The definition of rb_event_hook_func_t is below:
+
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, NODE *node,
+ VALUE self, ID id, VALUE klass)
+
+ int rb_remove_event_hook(rb_event_hook_func_t func)
+
+Removes the specified hook function.
+
+Appendix C. Functions Available in extconf.rb
+
+These functions are available in extconf.rb:
+
+ have_macro(macro, headers)
+
+Checks whether macro is defined with header. Returns true if the macro
+is defined.
+
+ have_library(lib, func)
+
+Checks whether the library exists, containing the specified function.
+Returns true if the library exists.
+
+ find_library(lib, func, path...)
+
+Checks whether a library which contains the specified function exists in
+path. Returns true if the library exists.
+
+ have_func(func, header)
+
+Checks whether func exists with header. Returns true if the function
+exists. To check functions in an additional library, you need to
+check that library first using have_library().
+
+ have_var(var, header)
+
+Checks whether var exists with header. Returns true if the variable
+exists. To check variables in an additional library, you need to
+check that library first using have_library().
+
+ have_header(header)
+
+Checks whether header exists. Returns true if the header file exists.
+
+ find_header(header, path...)
+
+Checks whether header exists in path. Returns true if the header file
+exists.
+
+ have_struct_member(type, member, header)
+
+Checks whether type has member with header. Returns true if the type
+is defined and has the member.
+
+ have_type(type, header, opt)
+
+Checks whether type is defined with header. Returns true if the type
+is defined.
+
+ check_sizeof(type, header)
+
+Checks the size of type in char with header. Returns the size if the
+type is defined, otherwise nil.
+
+ create_makefile(target)
+
+Generates the Makefile for the extension library. If you don't invoke
+this method, the compilation will not be done.
+
+ find_executable(bin, path)
+
+Finds command in path, which is File::PATH_SEPARATOR-separated list of
+directories. If path is nil or omitted, environment varialbe PATH
+will be used. Returns the path name of the command if it is found,
+otherwise nil.
+
+ with_config(withval[, default=nil])
+
+Parses the command line options and returns the value specified by
+--with-<withval>.
+
+ enable_config(config, *defaults)
+ disable_config(config, *defaults)
+
+Parses the command line options for boolean. Returns true if
+--enable-<config> is given, or false if --disable-<config> is given.
+Otherwise, yields defaults to the given block and returns the result
+if it is called with a block, or returns defaults.
+
+ dir_config(target[, default_dir])
+ dir_config(target[, default_include, default_lib])
+
+Parses the command line options and adds the directories specified by
+--with-<target>-dir, --with-<target>-include, and/or --with-<target>-lib
+to $CFLAGS and/or $LDFLAGS. --with-<target>-dir=/path is equivalent to
+--with-<target>-include=/path/include --with-<target>-lib=/path/lib.
+Returns an array of the added directories ([include_dir, lib_dir]).
+
+ pkg_config(pkg)
+
+Obtains the information for pkg by pkg-config command. The actual
+command name can be overriden by --with-pkg-config command line
+option.
+
+/*
+ * Local variables:
+ * fill-column: 70
+ * end:
+ */
diff --git a/README.EXT.ja b/README.EXT.ja
index f884ecbb0e..30c4d520ba 100644
--- a/README.EXT.ja
+++ b/README.EXT.ja
@@ -1 +1,1258 @@
-doc/extension.ja.rdocã«ç§»å‹•ã—ã¾ã—ãŸ
+.\" README.EXT.ja - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995
+
+Ruby¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Îºî¤êÊý¤òÀâÌÀ¤·¤Þ¤¹¡¥
+
+1¡¥´ðÁÃÃμ±
+
+C¤ÎÊÑ¿ô¤Ë¤Ï·¿¤¬¤¢¤ê¡¤¥Ç¡¼¥¿¤Ë¤Ï·¿¤¬¤¢¤ê¤Þ¤»¤ó¡¥¤Ç¤¹¤«¤é¡¤¤¿
+¤È¤¨¤Ð¥Ý¥¤¥ó¥¿¤òint¤ÎÊÑ¿ô¤ËÂåÆþ¤¹¤ë¤È¡¤¤½¤ÎÃͤÏÀ°¿ô¤È¤·¤Æ¼è
+¤ê°·¤ï¤ì¤Þ¤¹¡¥µÕ¤ËRuby¤ÎÊÑ¿ô¤Ë¤Ï·¿¤¬¤Ê¤¯¡¤¥Ç¡¼¥¿¤Ë·¿¤¬¤¢¤ê¤Þ
+¤¹¡¥¤³¤Î°ã¤¤¤Î¤¿¤á¡¤C¤ÈRuby¤ÏÁê¸ß¤ËÊÑ´¹¤·¤Ê¤±¤ì¤Ð¡¤¤ª¸ß¤¤¤Î
+¥Ç¡¼¥¿¤ò¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡¥
+
+Ruby¤Î¥Ç¡¼¥¿¤ÏVALUE¤È¤¤¤¦C¤Î·¿¤Çɽ¸½¤µ¤ì¤Þ¤¹¡¥VALUE·¿¤Î¥Ç¡¼
+¥¿¤Ï¤½¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ò¼«Ê¬¤ÇÃΤäƤ¤¤Þ¤¹¡¥¤³¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤È
+¤¤¤¦¤Î¤Ï¥Ç¡¼¥¿(¥ª¥Ö¥¸¥§¥¯¥È)¤Î¼ÂºÝ¤Î¹½Â¤¤ò°ÕÌ£¤·¤Æ¤¤¤Æ¡¤Ruby
+¤Î¥¯¥é¥¹¤È¤Ï¤Þ¤¿°ã¤Ã¤¿¤â¤Î¤Ç¤¹¡¥
+
+VALUE¤«¤éC¤Ë¤È¤Ã¤Æ°ÕÌ£¤Î¤¢¤ë¥Ç¡¼¥¿¤ò¼è¤ê½Ð¤¹¤¿¤á¤Ë¤Ï
+
+ (1) VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤òÃΤë
+ (2) VALUE¤òC¤Î¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë
+
+¤ÎξÊý¤¬É¬ÍפǤ¹¡¥(1)¤ò˺¤ì¤ë¤È´Ö°ã¤Ã¤¿¥Ç¡¼¥¿¤ÎÊÑ´¹¤¬¹Ô¤ï¤ì
+¤Æ¡¤ºÇ°­¥×¥í¥°¥é¥à¤¬core dump¤·¤Þ¤¹¡¥
+
+1.1 ¥Ç¡¼¥¿¥¿¥¤¥×
+
+Ruby¤Ë¤Ï¥æ¡¼¥¶¤¬»È¤¦²ÄǽÀ­¤Î¤¢¤ë°Ê²¼¤Î¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡¥
+
+ T_NIL nil
+ T_OBJECT Ä̾ï¤Î¥ª¥Ö¥¸¥§¥¯¥È
+ T_CLASS ¥¯¥é¥¹
+ T_MODULE ¥â¥¸¥å¡¼¥ë
+ T_FLOAT ÉâÆ°¾®¿ôÅÀ¿ô
+ T_STRING ʸ»úÎó
+ T_REGEXP Àµµ¬É½¸½
+ T_ARRAY ÇÛÎó
+ T_FIXNUM Fixnum(31bitĹÀ°¿ô)
+ T_HASH Ï¢ÁÛÇÛÎó
+ T_STRUCT (Ruby¤Î)¹½Â¤ÂÎ
+ T_BIGNUM ¿ÇÜĹÀ°¿ô
+ T_FILE Æþ½ÐÎÏ
+ T_TRUE ¿¿
+ T_FALSE µ¶
+ T_DATA ¥Ç¡¼¥¿
+ T_SYMBOL ¥·¥ó¥Ü¥ë
+
+¤½¤Î¾¤ËÆâÉô¤ÇÍøÍѤµ¤ì¤Æ¤¤¤ë°Ê²¼¤Î¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡¥
+
+ T_ICLASS
+ T_MATCH
+ T_UNDEF
+ T_VARMAP
+ T_SCOPE
+ T_NODE
+
+¤Û¤È¤ó¤É¤Î¥¿¥¤¥×¤ÏC¤Î¹½Â¤ÂΤǼÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥
+
+1.2 VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ò¥Á¥§¥Ã¥¯¤¹¤ë
+
+ruby.h¤Ç¤ÏTYPE()¤È¤¤¤¦¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Æ¡¤VALUE¤Î¥Ç¡¼¥¿
+¥¿¥¤¥×¤òÃΤ뤳¤È¤¬½ÐÍè¤Þ¤¹¡¥TYPE()¥Þ¥¯¥í¤Ï¾å¤Ç¾Ò²ð¤·¤¿T_XXXX
+¤Î·Á¼°¤ÎÄê¿ô¤òÊÖ¤·¤Þ¤¹¡¥VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤Ë±þ¤¸¤Æ½èÍý¤¹¤ë
+¾ì¹ç¤Ë¤Ï¡¤TYPE()¤ÎÃͤÇʬ´ô¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥
+
+ switch (TYPE(obj)) {
+ case T_FIXNUM:
+ /* FIXNUM¤Î½èÍý */
+ break;
+ case T_STRING:
+ /* ʸ»úÎó¤Î½èÍý */
+ break;
+ case T_ARRAY:
+ /* ÇÛÎó¤Î½èÍý */
+ break;
+ default:
+ /* Îã³°¤òȯÀ¸¤µ¤»¤ë */
+ rb_raise(rb_eTypeError, "not valid value");
+ break;
+ }
+
+¤½¤ì¤È¥Ç¡¼¥¿¥¿¥¤¥×¤ò¥Á¥§¥Ã¥¯¤·¤Æ¡¤Àµ¤·¤¯¤Ê¤±¤ì¤ÐÎã³°¤òȯÀ¸¤¹
+¤ë´Ø¿ô¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡¥
+
+ void Check_Type(VALUE value, int type)
+
+¤³¤Î´Ø¿ô¤Ïvalue¤¬type¤Ç̵¤±¤ì¤Ð¡¤Îã³°¤òȯÀ¸¤µ¤»¤Þ¤¹¡¥°ú¿ô¤È
+¤·¤ÆÍ¿¤¨¤é¤ì¤¿VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤¬Àµ¤·¤¤¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤¹
+¤ë¤¿¤á¤Ë¤Ï¡¤¤³¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+FIXNUM¤ÈNIL¤Ë´Ø¤·¤Æ¤Ï¤è¤ê¹â®¤ÊȽÊÌ¥Þ¥¯¥í¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡¥
+
+ FIXNUM_P(obj)
+ NIL_P(obj)
+
+1.3 VALUE¤òC¤Î¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë
+
+¥Ç¡¼¥¿¥¿¥¤¥×¤¬T_NIL, T_FALSE, T_TRUE¤Ç¤¢¤ë»þ¡¤¥Ç¡¼¥¿¤Ï¤½¤ì¤¾
+¤ìnil, false, true¤Ç¤¹¡¥¤³¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ò¤È
+¤Ä¤º¤Ä¤·¤«Â¸ºß¤·¤Þ¤»¤ó¡¥
+
+¥Ç¡¼¥¿¥¿¥¤¥×¤¬T_FIXNUM¤Î»þ¡¤¤³¤ì¤Ï31bit¤Î¥µ¥¤¥º¤ò»ý¤ÄÀ°¿ô¤Ç
+¤¹¡¥FIXNUM¤òC¤ÎÀ°¿ô¤ËÊÑ´¹¤¹¤ë¤¿¤á¤Ë¤Ï¥Þ¥¯¥í¡ÖFIX2INT()¡×¤ò»È
+¤¤¤Þ¤¹¡¥¤½¤ì¤«¤é¡¤FIXNUM¤Ë¸Â¤é¤ºRuby¤Î¥Ç¡¼¥¿¤òÀ°¿ô¤ËÊÑ´¹¤¹¤ë
+¡ÖNUM2INT()¡×¤È¤¤¤¦¥Þ¥¯¥í¤¬¤¢¤ê¤Þ¤¹¡¥¤³¤Î¥Þ¥¯¥í¤Ï¥Ç¡¼¥¿¥¿¥¤
+¥×¤Î¥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤Þ¤¹(À°¿ô¤ËÊÑ´¹¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë¤ÏÎã³°¤¬
+ȯÀ¸¤¹¤ë)¡¥Æ±Íͤ˥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤ëÊÑ´¹¥Þ¥¯¥í¤Ïdouble¤ò
+¼è¤ê½Ð¤¹¡ÖNUM2DBL()¡×¤¬¤¢¤ê¤Þ¤¹¡£
+
+char* ¤ò¼è¤ê½Ð¤¹¾ì¹ç¡¢version 1.6 °ÊÁ°¤Ç¤Ï¡ÖSTR2CSTR()¡×¤È
+¤¤¤¦¥Þ¥¯¥í¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ì¤Ï to_str() ¤Ë¤è¤ë°ÅÌÛ¤Î
+·¿ÊÑ´¹·ë²Ì¤¬ GC ¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤¿¤á¡¢version 1.7 °Ê¹ß¤Ç¤Ï
+obsolete ¤È¤Ê¤ê¡¢Âå¤ï¤ê¤Ë StringValue() ¤È StringValuePtr()
+¤ò»È¤¦»ö¤ò¿ä¾©¤·¤Æ¤¤¤Þ¤¹¡£StringValue(var) ¤Ï var ¤¬ String
+ ¤Ç¤¢¤ì¤Ð²¿¤â¤»¤º¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð var ¤ò var.to_str() ¤Î·ë²Ì¤Ë
+ÃÖ¤­´¹¤¨¤ë¥Þ¥¯¥í¡¢StringValuePtr(var) ¤ÏƱÍÍ¤Ë var ¤òÃÖ¤­´¹¤¨
+¤Æ¤«¤é var ¤Îʸ»úÎóɽ¸½¤ËÂФ¹¤ë char* ¤òÊÖ¤¹¥Þ¥¯¥í¤Ç¤¹¡£var ¤Î
+ÆâÍÆ¤òľÀÜÃÖ¤­´¹¤¨¤ë½èÍý¤¬Æþ¤ë¤Î¤Ç¡¢var ¤Ï lvalue ¤Ç¤¢¤ëɬÍפ¬
+¤¢¤ê¤Þ¤¹¡£
+
+¤½¤ì°Ê³°¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ÏÂбþ¤¹¤ëC¤Î¹½Â¤ÂΤ¬¤¢¤ê¤Þ¤¹¡¥Âбþ¤¹
+¤ë¹½Â¤ÂΤΤ¢¤ëVALUE¤Ï¤½¤Î¤Þ¤Þ¥­¥ã¥¹¥È(·¿ÊÑ´¹)¤¹¤ì¤Ð¹½Â¤ÂΤÎ
+¥Ý¥¤¥ó¥¿¤ËÊÑ´¹¤Ç¤­¤Þ¤¹¡¥
+
+¹½Â¤ÂΤϡÖstruct RXxxxx¡×¤È¤¤¤¦Ì¾Á°¤Çruby.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ
+¤¹¡¥Î㤨¤Ðʸ»úÎó¤Ï¡Östruct RString¡×¤Ç¤¹¡¥¼ÂºÝ¤Ë»È¤¦²ÄǽÀ­¤¬
+¤¢¤ë¤Î¤Ïʸ»úÎó¤ÈÇÛÎ󤯤餤¤À¤È»×¤¤¤Þ¤¹¡¥
+
+ruby.h¤Ç¤Ï¹½Â¤ÂΤإ­¥ã¥¹¥È¤¹¤ë¥Þ¥¯¥í¤â¡ÖRXXXXX()¡×(Á´ÉôÂçʸ
+»ú¤Ë¤·¤¿¤â¤Î)¤È¤¤¤¦Ì¾Á°¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹(Îã: RSTRING())¡¥
+
+Î㤨¤Ð¡¤Ê¸»úÎóstr¤ÎŤµ¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¡ÖRSTRING(str)->len¡×¤È
+¤·¡¤Ê¸»úÎóstr¤òchar*¤È¤·¤ÆÆÀ¤ë¤¿¤á¤Ë¤Ï¡ÖRSTRING(str)->ptr¡×
+¤È¤·¤Þ¤¹¡¥ÇÛÎó¤Î¾ì¹ç¤Ë¤Ï¡¤¤½¤ì¤¾¤ì¡ÖRARRAY(ary)->len¡×¡¤
+¡ÖRARRAY(ary)->ptr¡×¤È¤Ê¤ê¤Þ¤¹¡¥
+
+Ruby¤Î¹½Â¤ÂΤòľÀÜ¥¢¥¯¥»¥¹¤¹¤ë»þ¤Ëµ¤¤ò¤Ä¤±¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³
+¤È¤Ï¡¤ÇÛÎó¤äʸ»úÎó¤Î¹½Â¤ÂΤÎÃæ¿È¤Ï»²¾È¤¹¤ë¤À¤±¤Ç¡¤Ä¾ÀÜÊѹ¹¤·
+¤Ê¤¤¤³¤È¤Ç¤¹¡¥Ä¾ÀÜÊѹ¹¤·¤¿¾ì¹ç¡¤¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆâÍÆ¤ÎÀ°¹çÀ­¤¬
+¤È¤ì¤Ê¤¯¤Ê¤Ã¤Æ¡¤»×¤ï¤Ì¥Ð¥°¤Î¸¶°ø¤Ë¤Ê¤ê¤Þ¤¹¡¥
+
+1.4 C¤Î¥Ç¡¼¥¿¤òVALUE¤ËÊÑ´¹¤¹¤ë
+
+VALUE¤Î¼ÂºÝ¤Î¹½Â¤¤Ï
+
+ * FIXNUM¤Î¾ì¹ç
+
+ 1bitº¸¥·¥Õ¥È¤·¤Æ¡¤LSB¤òΩ¤Æ¤ë¡¥
+
+ * ¤½¤Î¾¤Î¥Ý¥¤¥ó¥¿¤Î¾ì¹ç
+
+ ¤½¤Î¤Þ¤ÞVALUE¤Ë¥­¥ã¥¹¥È¤¹¤ë¡¥
+
+¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥¤è¤Ã¤Æ¡¤LSB¤ò¥Á¥§¥Ã¥¯¤¹¤ì¤ÐVALUE¤¬FIXNUM¤«¤É
+¤¦¤«¤ï¤«¤ë¤ï¤±¤Ç¤¹(¥Ý¥¤¥ó¥¿¤ÎLSB¤¬Î©¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤ò²¾Äꤷ¤Æ
+¤¤¤ë)¡¥
+
+¤Ç¤¹¤«¤é¡¤FIXNUM°Ê³°¤ÎRuby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤ÂΤÏñ¤ËVALUE
+¤Ë¥­¥ã¥¹¥È¤¹¤ë¤À¤±¤ÇVALUE¤ËÊÑ´¹½ÐÍè¤Þ¤¹¡¥¤¿¤À¤·¡¤Ç¤°Õ¤Î¹½Â¤
+ÂΤ¬VALUE¤Ë¥­¥ã¥¹¥È½ÐÍè¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¥­¥ã¥¹¥È¤¹¤ë¤Î
+¤ÏRuby¤ÎÃΤäƤ¤¤ë¹½Â¤ÂÎ(ruby.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ëstruct RXxxx
+¤Î¤â¤Î)¤À¤±¤Ç¤¹¡¥
+
+FIXNUM¤Ë´Ø¤·¤Æ¤ÏÊÑ´¹¥Þ¥¯¥í¤ò·Ðͳ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥C¤ÎÀ°¿ô
+¤«¤éVALUE¤ËÊÑ´¹¤¹¤ë¥Þ¥¯¥í¤Ï°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡¥É¬Íפ˱þ¤¸
+¤Æ»È¤¤Ê¬¤±¤Æ¤¯¤À¤µ¤¤¡¥
+
+ INT2FIX() ¤â¤È¤ÎÀ°¿ô¤¬31bit°ÊÆâ¤Ë¼ý¤Þ¤ë¼«¿®¤¬¤¢¤ë»þ
+ INT2NUM() Ǥ°Õ¤ÎÀ°¿ô¤«¤éVALUE¤Ø
+
+INT2NUM()¤ÏÀ°¿ô¤¬FIXNUM¤ÎÈϰϤ˼ý¤Þ¤é¤Ê¤¤¾ì¹ç¡¤Bignum¤ËÊÑ´¹
+¤·¤Æ¤¯¤ì¤Þ¤¹(¤¬¡¤¾¯¤·ÃÙ¤¤)¡¥
+
+1.5 Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë
+
+ÀèÄø¤â½Ò¤Ù¤¿Ä̤ꡤRuby¤Î¹½Â¤ÂΤò¥¢¥¯¥»¥¹¤¹¤ë»þ¤ËÆâÍÆ¤Î¹¹¿·¤ò
+¹Ô¤¦¤³¤È¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥¤Ç¡¤Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë»þ¤Ë¤Ï
+Ruby¤¬ÍѰդ·¤Æ¤¤¤ë´Ø¿ô¤òÍѤ¤¤Æ¤¯¤À¤µ¤¤¡¥
+
+¤³¤³¤Ç¤Ï¤â¤Ã¤È¤â»È¤ï¤ì¤ë¤Ç¤¢¤í¤¦Ê¸»úÎó¤ÈÇÛÎó¤ÎÀ¸À®/Áàºî¤ò¹Ô
+¤¤´Ø¿ô¤ò¤¢¤²¤Þ¤¹(Á´Éô¤Ç¤Ï¤Ê¤¤¤Ç¤¹)¡¥
+
+ ʸ»úÎó¤ËÂФ¹¤ë´Ø¿ô
+
+ rb_str_new(const char *ptr, long len)
+
+ ¿·¤·¤¤Ruby¤Îʸ»úÎó¤òÀ¸À®¤¹¤ë¡¥
+
+ rb_str_new2(const char *ptr)
+
+ C¤Îʸ»úÎ󤫤éRuby¤Îʸ»úÎó¤òÀ¸À®¤¹¤ë¡¥¤³¤Î´Ø¿ô¤Îµ¡Ç½¤Ï
+ rb_str_new(ptr, strlen(ptr))¤ÈƱÅù¤Ç¤¢¤ë¡¥
+
+ rb_tainted_str_new(const char *ptr, long len)
+
+ ±øÀ÷¥Þ¡¼¥¯¤¬Éղ䵤줿¿·¤·¤¤Ruby¤Îʸ»úÎó¤òÀ¸À®¤¹¤ë¡¥³°Éô
+ ¤«¤é¤Î¥Ç¡¼¥¿¤Ë´ð¤Å¤¯Ê¸»úÎó¤Ë¤Ï±øÀ÷¥Þ¡¼¥¯¤¬Éղ䵤ì¤ë¤Ù¤­
+ ¤Ç¤¢¤ë¡¥
+
+ rb_tainted_str_new2(const char *ptr)
+
+ C¤Îʸ»úÎ󤫤鱸À÷¥Þ¡¼¥¯¤¬Éղ䵤줿Ruby¤Îʸ»úÎó¤òÀ¸À®¤¹¤ë¡¥
+
+ rb_str_cat(VALUE str, const char *ptr, long len)
+
+ Ruby¤Îʸ»úÎóstr¤Ëlen¥Ð¥¤¥È¤Îʸ»úÎóptr¤òÄɲ乤롥
+
+ ÇÛÎó¤ËÂФ¹¤ë´Ø¿ô
+
+ rb_ary_new()
+
+ Í×ÁǤ¬0¤ÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥
+
+ rb_ary_new2(long len)
+
+ Í×ÁǤ¬0¤ÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥lenÍ×ÁÇʬ¤ÎÎΰè¤ò¤¢¤é¤«¤¸¤á³ä¤ê
+ Åö¤Æ¤Æ¤ª¤¯¡¥
+
+ rb_ary_new3(long n, ...)
+
+ °ú¿ô¤Ç»ØÄꤷ¤¿nÍ×ÁǤò´Þ¤àÇÛÎó¤òÀ¸À®¤¹¤ë¡¥
+
+ rb_ary_new4(long n, VALUE *elts)
+
+ ÇÛÎó¤ÇÍ¿¤¨¤¿nÍ×ÁǤÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥
+
+ rb_ary_push(VALUE ary, VALUE val)
+ rb_ary_pop(VALUE ary)
+ rb_ary_shift(VALUE ary)
+ rb_ary_unshift(VALUE ary, VALUE val)
+
+ Array¤ÎƱ̾¤Î¥á¥½¥Ã¥É¤ÈƱ¤¸Æ¯¤­¤ò¤¹¤ë´Ø¿ô¡¥Âè1°ú¿ô¤Ïɬ¤º
+ ÇÛÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¥
+
+2¡¥Ruby¤Îµ¡Ç½¤ò»È¤¦
+
+¸¶ÍýŪ¤ËRuby¤Ç½ñ¤±¤ë¤³¤È¤ÏC¤Ç¤â½ñ¤±¤Þ¤¹¡¥Ruby¤½¤Î¤â¤Î¤¬C¤Çµ­
+½Ò¤µ¤ì¤Æ¤¤¤ë¤ó¤Ç¤¹¤«¤é¡¤ÅöÁ³¤È¤¤¤¨¤ÐÅöÁ³¤Ê¤ó¤Ç¤¹¤±¤É¡¥¤³¤³¤Ç
+¤ÏRuby¤Î³ÈÄ¥¤Ë»È¤¦¤³¤È¤¬Â¿¤¤¤À¤í¤¦¤Èͽ¬¤µ¤ì¤ëµ¡Ç½¤òÃæ¿´¤Ë¾Ò
+²ð¤·¤Þ¤¹¡¥
+
+2.1 Ruby¤Ëµ¡Ç½¤òÄɲ乤ë
+
+Ruby¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë´Ø¿ô¤ò»È¤¨¤ÐRuby¥¤¥ó¥¿¥×¥ê¥¿¤Ë¿·¤·¤¤µ¡Ç½
+¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡¥Ruby¤Ç¤Ï°Ê²¼¤Îµ¡Ç½¤òÄɲä¹¤ë´Ø¿ô¤¬
+Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡¥
+
+ * ¥¯¥é¥¹¡¤¥â¥¸¥å¡¼¥ë
+ * ¥á¥½¥Ã¥É¡¤ÆÃ°Û¥á¥½¥Ã¥É¤Ê¤É
+ * Äê¿ô
+
+¤Ç¤Ï½ç¤Ë¾Ò²ð¤·¤Þ¤¹¡¥
+
+2.1.1 ¥¯¥é¥¹/¥â¥¸¥å¡¼¥ëÄêµÁ
+
+¥¯¥é¥¹¤ä¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¤¿¤á¤Ë¤Ï¡¤°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+ VALUE rb_define_class(const char *name, VALUE super)
+ VALUE rb_define_module(const char *name)
+
+¤³¤ì¤é¤Î´Ø¿ô¤Ï¿·¤·¤¯ÄêµÁ¤µ¤ì¤¿¥¯¥é¥¹¤ä¥â¥¸¥å¡¼¥ë¤òÊÖ¤·¤Þ¤¹¡¥
+¥á¥½¥Ã¥É¤äÄê¿ô¤ÎÄêµÁ¤Ë¤³¤ì¤é¤ÎÃͤ¬É¬ÍפʤΤǡ¤¤Û¤È¤ó¤É¤Î¾ì¹ç
+¤ÏÌá¤êÃͤòÊÑ¿ô¤Ë³ÊǼ¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡¥
+
+¥¯¥é¥¹¤ä¥â¥¸¥å¡¼¥ë¤ò¾¤Î¥¯¥é¥¹¤ÎÆâÉô¤Ë¥Í¥¹¥È¤·¤ÆÄêµÁ¤¹¤ë»þ¤Ë
+¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+ VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
+ VALUE rb_define_module_under(VALUE outer, const char *name)
+
+2.1.2 ¥á¥½¥Ã¥É/ÆÃ°Û¥á¥½¥Ã¥ÉÄêµÁ
+
+¥á¥½¥Ã¥É¤äÆÃ°Û¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+ void rb_define_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+
+ void rb_define_singleton_method(VALUE object, const char *name,
+ VALUE (*func)(), int argc)
+
+
+ǰ¤Î¤¿¤áÀâÌÀ¤¹¤ë¤È¡ÖÆÃ°Û¥á¥½¥Ã¥É¡×¤È¤Ï¡¤¤½¤ÎÆÃÄê¤Î¥ª¥Ö¥¸¥§¥¯
+¥È¤ËÂФ·¤Æ¤À¤±Í­¸ú¤Ê¥á¥½¥Ã¥É¤Ç¤¹¡¥Ruby¤Ç¤Ï¤è¤¯Smalltalk¤Ë¤ª
+¤±¤ë¥¯¥é¥¹¥á¥½¥Ã¥É¤È¤·¤Æ¡¤¥¯¥é¥¹¤ËÂФ¹¤ëÆÃ°Û¥á¥½¥Ã¥É¤¬»È¤ï¤ì
+¤Þ¤¹¡¥
+
+¤³¤ì¤é¤Î´Ø¿ô¤Î argc¤È¤¤¤¦°ú¿ô¤ÏC¤Î´Ø¿ô¤ØÅϤµ¤ì¤ë°ú¿ô¤Î¿ô(¤È
+·Á¼°)¤ò·è¤á¤Þ¤¹¡¥argc¤¬0°Ê¾å¤Î»þ¤Ï´Ø¿ô¤Ë°ú¤­ÅϤ¹°ú¿ô¤Î¿ô¤ò°Õ
+Ì£¤·¤Þ¤¹¡¥16¸Ä°Ê¾å¤Î°ú¿ô¤Ï»È¤¨¤Þ¤»¤ó(¤¬¡¤Íפê¤Þ¤»¤ó¤è¤Í¡¤¤½
+¤ó¤Ê¤Ë)¡¥¼ÂºÝ¤Î´Ø¿ô¤Ë¤ÏÀèÆ¬¤Î°ú¿ô¤È¤·¤Æself¤¬Í¿¤¨¤é¤ì¤Þ¤¹¤Î
+¤Ç¡¤»ØÄꤷ¤¿¿ô¤è¤ê1¿¤¤°ú¿ô¤ò»ý¤Ä¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥
+
+argc¤¬Éé¤Î»þ¤Ï°ú¿ô¤Î¿ô¤Ç¤Ï¤Ê¤¯¡¤·Á¼°¤ò»ØÄꤷ¤¿¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥
+argc¤¬-1¤Î»þ¤Ï°ú¿ô¤òÇÛÎó¤ËÆþ¤ì¤ÆÅϤµ¤ì¤Þ¤¹¡¥argc¤¬-2¤Î»þ¤Ï°ú
+¿ô¤ÏRuby¤ÎÇÛÎó¤È¤·¤ÆÅϤµ¤ì¤Þ¤¹¡¥
+
+¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ï¤â¤¦Æó¤Ä¤¢¤ê¤Þ¤¹¡¥¤Ò¤È¤Ä¤Ïprivate¥á
+¥½¥Ã¥É¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ç¡¤°ú¿ô¤Ïrb_define_method()¤ÈƱ¤¸¤Ç¤¹¡¥
+
+ void rb_define_private_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+
+private¥á¥½¥Ã¥É¤È¤Ï´Ø¿ô·Á¼°¤Ç¤·¤«¸Æ¤Ó½Ð¤¹¤³¤È¤Î½ÐÍè¤Ê¤¤¥á¥½¥Ã
+¥É¤Ç¤¹¡¥
+
+¤â¤¦¤Ò¤È¤Ä¤Ï¥â¥¸¥å¡¼¥ë´Ø¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¤Ç¤¹¡¥¥â¥¸¥å¡¼¥ë´Ø¿ô
+¤È¤Ï¥â¥¸¥å¡¼¥ë¤ÎÆÃ°Û¥á¥½¥Ã¥É¤Ç¤¢¤ê¡¤Æ±»þ¤Ëprivate¥á¥½¥Ã¥É¤Ç
+¤â¤¢¤ë¤â¤Î¤Ç¤¹¡¥Îã¤ò¤¢¤²¤ë¤ÈMath¥â¥¸¥å¡¼¥ë¤Îsqrt()¤Ê¤É¤¬¤¢¤²
+¤é¤ì¤Þ¤¹¡¥¤³¤Î¥á¥½¥Ã¥É¤Ï
+
+ Math.sqrt(4)
+
+¤È¤¤¤¦·Á¼°¤Ç¤â
+
+ include Math
+ sqrt(4)
+
+¤È¤¤¤¦·Á¼°¤Ç¤â»È¤¨¤Þ¤¹¡¥¥â¥¸¥å¡¼¥ë´Ø¿ô¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ï°Ê²¼¤Î
+Ä̤ê¤Ç¤¹¡¥
+
+ void rb_define_module_function(VALUE module, const char *name,
+ VALUE (*func)(), int argc)
+
+´Ø¿ôŪ¥á¥½¥Ã¥É(Kernel¥â¥¸¥å¡¼¥ë¤Îprivate method)¤òÄêµÁ¤¹¤ë¤¿
+¤á¤Î´Ø¿ô¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡¥
+
+ void rb_define_global_function(const char *name, VALUE (*func)(), int argc)
+
+
+¥á¥½¥Ã¥É¤ÎÊÌ̾¤òÄêµÁ¤¹¤ë¤¿¤á¤Î´Ø¿ô¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
+
+ void rb_define_alias(VALUE module, const char* new, const char* old);
+
+¥¯¥é¥¹¥á¥½¥Ã¥Éallocate¤òÄêµÁ¤·¤¿¤êºï½ü¤·¤¿¤ê¤¹¤ë¤¿¤á¤Î´Ø¿ô¤Ï
+°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
+
+ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
+ void rb_undef_alloc_func(VALUE klass);
+
+func¤Ï¥¯¥é¥¹¤ò°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤Ã¤Æ¡¢¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥¤¥ó
+¥¹¥¿¥ó¥¹¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£¤³¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢³°Éô¥ê
+¥½¡¼¥¹¤Ê¤É¤ò´Þ¤Þ¤Ê¤¤¡¢¤Ç¤­¤ë¤À¤±¡Ö¶õ¡×¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¤¤¿¤Û¤¦
+¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£
+
+2.1.3 Äê¿ôÄêµÁ
+
+³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤¬É¬ÍפÊÄê¿ô¤Ï¤¢¤é¤«¤¸¤áÄêµÁ¤·¤Æ¤ª¤¤¤¿Êý¤¬Îɤ¤
+¤Ç¤·¤ç¤¦¡¥Äê¿ô¤òÄêµÁ¤¹¤ë´Ø¿ô¤ÏÆó¤Ä¤¢¤ê¤Þ¤¹¡¥
+
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
+ void rb_define_global_const(const char *name, VALUE val)
+
+Á°¼Ô¤ÏÆÃÄê¤Î¥¯¥é¥¹/¥â¥¸¥å¡¼¥ë¤Ë°¤¹¤ëÄê¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¡¤¸å
+¼Ô¤Ï¥°¥í¡¼¥Ð¥ë¤ÊÄê¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¤Ç¤¹¡¥
+
+2.2 Ruby¤Îµ¡Ç½¤òC¤«¤é¸Æ¤Ó½Ð¤¹
+
+´û¤Ë¡Ø1.5 Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë¡Ù¤Ç°ìÉô¾Ò²ð¤·¤¿¤è¤¦¤Ê´Ø¿ô¤ò
+»È¤¨¤Ð¡¤Ruby¤Îµ¡Ç½¤ò¼Â¸½¤·¤Æ¤¤¤ë´Ø¿ô¤òľÀܸƤӽФ¹¤³¤È¤¬½ÐÍè
+¤Þ¤¹¡¥
+
+# ¤³¤Î¤è¤¦¤Ê´Ø¿ô¤Î°ìÍ÷ɽ¤Ï¤¤¤Þ¤Î¤È¤³¤í¤¢¤ê¤Þ¤»¤ó¡¥¥½¡¼¥¹¤ò¸«
+# ¤ë¤·¤«¤Ê¤¤¤Ç¤¹¤Í¡¥
+
+¤½¤ì°Ê³°¤Ë¤âRuby¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤¹ÊýË¡¤Ï¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡¥
+
+2.2.1 Ruby¤Î¥×¥í¥°¥é¥à¤òeval¤¹¤ë
+
+C¤«¤éRuby¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤¹¤â¤Ã¤È¤â´Êñ¤ÊÊýË¡¤È¤·¤Æ¡¤Ê¸»úÎó¤Ç
+Í¿¤¨¤é¤ì¤¿Ruby¤Î¥×¥í¥°¥é¥à¤òɾ²Á¤¹¤ë°Ê²¼¤Î´Ø¿ô¤¬¤¢¤ê¤Þ¤¹¡¥
+
+ VALUE rb_eval_string(const char *str)
+
+¤³¤Îɾ²Á¤Ï¸½ºß¤Î´Ä¶­¤Ç¹Ô¤ï¤ì¤Þ¤¹¡¥¤Ä¤Þ¤ê¡¤¸½ºß¤Î¥í¡¼¥«¥ëÊÑ¿ô
+¤Ê¤É¤ò¼õ¤±·Ñ¤®¤Þ¤¹¡¥
+
+2.2.2 ID¤Þ¤¿¤Ï¥·¥ó¥Ü¥ë
+
+C¤«¤éʸ»úÎó¤ò·Ðͳ¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤­¤Þ
+¤¹¡¥¤½¤ÎÁ°¤Ë¡¤Ruby¥¤¥ó¥¿¥×¥ê¥¿Æâ¤Ç¥á¥½¥Ã¥É¤äÊÑ¿ô̾¤ò»ØÄꤹ¤ë
+»þ¤Ë»È¤ï¤ì¤Æ¤¤¤ëID¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡¥
+
+ID¤È¤ÏÊÑ¿ô̾¡¤¥á¥½¥Ã¥É̾¤òɽ¤¹À°¿ô¤Ç¤¹¡¥Ruby¤Ç¤ÏID¤ËÂбþ¤¹¤ë
+¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¥·¥ó¥Ü¥ë(Symbol)¤¬¤¢¤ê¡¤
+
+ :¼±ÊÌ»Ò
+
+¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹¡¥C¤«¤é¤³¤ÎÀ°¿ô¤òÆÀ¤ë¤¿¤á¤Ë¤Ï´Ø¿ô
+
+ rb_intern(const char *name)
+
+¤ò»È¤¤¤Þ¤¹¡¥Ruby¤«¤é°ú¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤¿¥·¥ó¥Ü¥ë(¤Þ¤¿¤Ïʸ»ú
+Îó)¤òID¤ËÊÑ´¹¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+ rb_to_id(VALUE symbol)
+
+ID¤«¤é¥·¥ó¥Ü¥ë¤òÆÀ¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥
+
+ VALUE ID2SYM(ID id)
+
+¥·¥ó¥Ü¥ë¤«¤éID¤òÆÀ¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥
+
+ ID SYM2ID(VALUE symbol)
+
+2.2.3 C¤«¤éRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹
+
+C¤«¤éʸ»úÎó¤ò·Ðͳ¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤Ë¤Ï°Ê²¼
+¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥
+
+ VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
+
+¤³¤Î´Ø¿ô¤Ï¥ª¥Ö¥¸¥§¥¯¥Èrecv¤Îmid¤Ç»ØÄꤵ¤ì¤ë¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð
+¤·¤Þ¤¹¡¥¤½¤Î¾¤Ë°ú¿ô¤Î»ØÄê¤Î»ÅÊý¤¬°ã¤¦°Ê²¼¤Î´Ø¿ô¤â¤¢¤ê¤Þ¤¹¡¥
+
+ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
+ VALUE rb_apply(VALUE recv, ID mid, VALUE args)
+
+apply¤Ë¤Ï°ú¿ô¤È¤·¤ÆRuby¤ÎÇÛÎó¤òÍ¿¤¨¤Þ¤¹¡¥
+
+2.2.4 ÊÑ¿ô/Äê¿ô¤ò»²¾È/¹¹¿·¤¹¤ë
+
+C¤«¤é´Ø¿ô¤ò»È¤Ã¤Æ»²¾È¡¦¹¹¿·¤Ç¤­¤ë¤Î¤Ï¡¤Äê¿ô¡¤¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ
+¿ô¤Ç¤¹¡¥Âç°èÊÑ¿ô¤Ï°ìÉô¤Î¤â¤Î¤ÏC¤ÎÂç°èÊÑ¿ô¤È¤·¤Æ¥¢¥¯¥»¥¹¤Ç¤­
+¤Þ¤¹¡¥¥í¡¼¥«¥ëÊÑ¿ô¤ò»²¾È¤¹¤ëÊýË¡¤Ï¸ø³«¤·¤Æ¤¤¤Þ¤»¤ó¡¥
+
+¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ò»²¾È¡¦¹¹¿·¤¹¤ë´Ø¿ô¤Ï°Ê²¼¤ÎÄÌ
+¤ê¤Ç¤¹¡¥
+
+ VALUE rb_ivar_get(VALUE obj, ID id)
+ VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
+
+id¤Ïrb_intern()¤ÇÆÀ¤é¤ì¤ë¤â¤Î¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥
+
+Äê¿ô¤ò»²¾È¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥
+
+ VALUE rb_const_get(VALUE obj, ID id)
+
+Äê¿ô¤ò¿·¤·¤¯ÄêµÁ¤¹¤ë¤¿¤á¤Ë¤Ï¡Ø2.1.3 Äê¿ôÄêµÁ¡Ù¤Ç¾Ò²ð¤µ
+¤ì¤Æ¤¤¤ë´Ø¿ô¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥
+
+3¡¥Ruby¤ÈC¤È¤Î¾ðÊó¶¦Í­
+
+C¸À¸ì¤ÈRuby¤Î´Ö¤Ç¾ðÊó¤ò¶¦Í­¤¹¤ëÊýË¡¤Ë¤Ä¤¤¤Æ²òÀ⤷¤Þ¤¹¡¥
+
+3.1 C¤«¤é»²¾È¤Ç¤­¤ëRuby¤ÎÄê¿ô
+
+°Ê²¼¤ÎRuby¤ÎÄê¿ô¤ÏC¤Î¥ì¥Ù¥ë¤«¤é»²¾È¤Ç¤­¤Þ¤¹¡¥
+
+ Qtrue
+ Qfalse
+
+ ¿¿µ¶ÃÍ¡¥Qfalse¤ÏC¸À¸ì¤Ç¤âµ¶¤È¤ß¤Ê¤µ¤ì¤Þ¤¹(¤Ä¤Þ¤ê0)¡¥
+
+ Qnil
+
+ C¸À¸ì¤«¤é¸«¤¿¡Önil¡×¡¥
+
+3.2 C¤ÈRuby¤Ç¶¦Í­¤µ¤ì¤ëÂç°èÊÑ¿ô
+
+C¤ÈRuby¤ÇÂç°èÊÑ¿ô¤ò»È¤Ã¤Æ¾ðÊó¤ò¶¦Í­¤Ç¤­¤Þ¤¹¡¥¶¦Í­¤Ç¤­¤ëÂç°è
+ÊÑ¿ô¤Ë¤Ï¤¤¤¯¤Ä¤«¤Î¼ïÎब¤¢¤ê¤Þ¤¹¡¥¤½¤Î¤Ê¤«¤Ç¤â¤Ã¤È¤âÎɤ¯»È¤ï
+¤ì¤ë¤È»×¤ï¤ì¤ë¤Î¤Ïrb_define_variable()¤Ç¤¹¡¥
+
+ void rb_define_variable(const char *name, VALUE *var)
+
+¤³¤Î´Ø¿ô¤ÏRuby¤ÈC¤È¤Ç¶¦Í­¤¹¤ëÂç°èÊÑ¿ô¤òÄêµÁ¤·¤Þ¤¹¡¥ÊÑ¿ô̾¤¬
+`$'¤Ç»Ï¤Þ¤é¤Ê¤¤»þ¤Ë¤Ï¼«Æ°Åª¤ËÄɲ䵤ì¤Þ¤¹¡¥¤³¤ÎÊÑ¿ô¤ÎÃͤòÊÑ
+¹¹¤¹¤ë¤È¼«Æ°Åª¤ËRuby¤ÎÂбþ¤¹¤ëÊÑ¿ô¤ÎÃͤâÊѤï¤ê¤Þ¤¹¡¥
+
+¤Þ¤¿Ruby¦¤«¤é¤Ï¹¹¿·¤Ç¤­¤Ê¤¤ÊÑ¿ô¤â¤¢¤ê¤Þ¤¹¡¥¤³¤Îread only¤Î
+ÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤ÇÄêµÁ¤·¤Þ¤¹¡¥
+
+ void rb_define_readonly_variable(const char *name, VALUE *var)
+
+¤³¤ì¤éÊÑ¿ô¤Î¾¤Ëhook¤ò¤Ä¤±¤¿Âç°èÊÑ¿ô¤òÄêµÁ¤Ç¤­¤Þ¤¹¡¥hookÉÕ¤­
+¤ÎÂç°èÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤òÍѤ¤¤ÆÄêµÁ¤·¤Þ¤¹¡¥hookÉÕ¤­Âç°èÊÑ¿ô¤Î
+Ãͤλ²¾È¤äÀßÄê¤Ïhook¤Ç¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥
+
+ void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), void (*setter)())
+
+¤³¤Î´Ø¿ô¤ÏC¤Î´Ø¿ô¤Ë¤è¤Ã¤Æhook¤Î¤Ä¤±¤é¤ì¤¿Âç°èÊÑ¿ô¤òÄêµÁ¤·¤Þ
+¤¹¡¥ÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ï´Ø¿ôgetter¤¬¡¤ÊÑ¿ô¤ËÃͤ¬¥»¥Ã¥È¤µ¤ì
+¤¿»þ¤Ë¤Ï´Ø¿ôsetter¤¬¸Æ¤Ð¤ì¤ë¡¥hook¤ò»ØÄꤷ¤Ê¤¤¾ì¹ç¤Ïgetter¤ä
+setter¤Ë0¤ò»ØÄꤷ¤Þ¤¹¡¥
+
+# getter¤âsetter¤â0¤Ê¤é¤Ðrb_define_variable()¤ÈƱ¤¸¤Ë¤Ê¤ë¡¥
+
+¤½¤ì¤«¤é¡¤C¤Î´Ø¿ô¤Ë¤è¤Ã¤Æ¼Â¸½¤µ¤ì¤ëRuby¤ÎÂç°èÊÑ¿ô¤òÄêµÁ¤¹¤ë
+´Ø¿ô¤¬¤¢¤ê¤Þ¤¹¡¥
+
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*setter)())
+
+¤³¤Î´Ø¿ô¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤¿Ruby¤ÎÂç°èÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ï
+getter¤¬¡¤ÊÑ¿ô¤ËÃͤ¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ïsetter¤¬¸Æ¤Ð¤ì¤Þ¤¹¡¥
+
+getter¤Èsetter¤Î»ÅÍͤϰʲ¼¤ÎÄ̤ê¤Ç¤¹¡¥
+
+ (*getter)(ID id, void *data, struct global_entry* entry);
+ (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);
+
+3.3 C¤Î¥Ç¡¼¥¿¤òRuby¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤¹¤ë
+
+C¤ÎÀ¤³¦¤ÇÄêµÁ¤µ¤ì¤¿¥Ç¡¼¥¿(¹½Â¤ÂÎ)¤òRuby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ
+¼è¤ê°·¤¤¤¿¤¤¾ì¹ç¤¬¤¢¤ê¤¨¤Þ¤¹¡¥¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¤Data¤È¤¤¤¦
+Ruby¥ª¥Ö¥¸¥§¥¯¥È¤ËC¤Î¹½Â¤ÂÎ(¤Ø¤Î¥Ý¥¤¥ó¥¿)¤ò¤¯¤ë¤à¤³¤È¤ÇRuby
+¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¼è¤ê°·¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡¥
+
+Data¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Æ¹½Â¤ÂΤòRuby¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥«¥×¥»¥ë
+²½¤¹¤ë¤¿¤á¤Ë¤Ï¡¤°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥
+
+ Data_Wrap_Struct(klass, mark, free, ptr)
+
+¤³¤Î¥Þ¥¯¥í¤ÎÌá¤êÃͤÏÀ¸À®¤µ¤ì¤¿Data¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡¥
+
+klass¤Ï¤³¤ÎData¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¯¥é¥¹¤Ç¤¹¡¥ptr¤Ï¥«¥×¥»¥ë²½¤¹¤ë
+C¤Î¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¹¡¥mark¤Ï¤³¤Î¹½Â¤ÂΤ¬Ruby¤Î¥ª¥Ö¥¸¥§
+¥¯¥È¤Ø¤Î»²¾È¤¬¤¢¤ë»þ¤Ë»È¤¦´Ø¿ô¤Ç¤¹¡¥¤½¤Î¤è¤¦¤Ê»²¾È¤ò´Þ¤Þ¤Ê¤¤
+»þ¤Ë¤Ï0¤ò»ØÄꤷ¤Þ¤¹¡¥
+
+# ¤½¤Î¤è¤¦¤Ê»²¾È¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥
+
+free¤Ï¤³¤Î¹½Â¤ÂΤ¬¤â¤¦ÉÔÍפˤʤä¿»þ¤Ë¸Æ¤Ð¤ì¤ë´Ø¿ô¤Ç¤¹¡¥¤³¤Î
+´Ø¿ô¤¬¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿¤«¤é¸Æ¤Ð¤ì¤Þ¤¹¡¥¤³¤ì¤¬-1¤Î¾ì¹ç¤Ï¡¤Ã±
+½ã¤Ë³«Êü¤µ¤ì¤Þ¤¹¡¥
+
+C¤Î¹½Â¤ÂΤγäÅö¤ÈData¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®¤òƱ»þ¤Ë¹Ô¤¦¥Þ¥¯¥í¤È
+¤·¤Æ°Ê²¼¤Î¤â¤Î¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡¥
+
+ Data_Make_Struct(klass, type, mark, free, sval)
+
+¤³¤Î¥Þ¥¯¥í¤ÎÌá¤êÃͤÏÀ¸À®¤µ¤ì¤¿Data¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡¥
+
+klass, mark, free¤ÏData_Wrap_Struct¤ÈƱ¤¸Æ¯¤­¤ò¤·¤Þ¤¹¡¥type
+¤Ï³ä¤êÅö¤Æ¤ëC¹½Â¤ÂΤη¿¤Ç¤¹¡¥³ä¤êÅö¤Æ¤é¤ì¤¿¹½Â¤ÂΤÏÊÑ¿ôsval
+¤ËÂåÆþ¤µ¤ì¤Þ¤¹¡¥¤³¤ÎÊÑ¿ô¤Î·¿¤Ï (type*) ¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥
+
+Data¥ª¥Ö¥¸¥§¥¯¥È¤«¤é¥Ý¥¤¥ó¥¿¤ò¼è¤ê½Ð¤¹¤Î¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤òÍѤ¤
+¤Þ¤¹¡¥
+
+ Data_Get_Struct(obj, type, sval)
+
+C¤Î¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤ÏÊÑ¿ôsval¤ËÂåÆþ¤µ¤ì¤Þ¤¹¡¥
+
+¤³¤ì¤é¤ÎData¤Î»È¤¤Êý¤Ï¤Á¤ç¤Ã¤Èʬ¤«¤ê¤Ë¤¯¤¤¤Î¤Ç¡¤¸å¤ÇÀâÌÀ¤¹¤ë
+ÎãÂê¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡¥
+
+4¡¥ÎãÂê - dbm¥Ñ¥Ã¥±¡¼¥¸¤òºî¤ë
+
+¤³¤³¤Þ¤Ç¤ÎÀâÌÀ¤Ç¤È¤ê¤¢¤¨¤º³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ïºî¤ì¤ë¤Ï¤º¤Ç¤¹¡¥
+Ruby¤Îext¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¹¤Ç¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëdbm¥é¥¤¥Ö¥é¥ê¤òÎã¤Ë
+¤·¤ÆÃʳ¬Åª¤ËÀâÌÀ¤·¤Þ¤¹¡¥
+
+(1) ¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ë
+
+ % mkdir ext/dbm
+
+Ruby 1.1¤«¤é¤ÏǤ°Õ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç¥À¥¤¥Ê¥ß¥Ã¥¯¥é¥¤¥Ö¥é¥ê¤òºî
+¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡¥Ruby¤ËÀÅŪ¤Ë¥ê¥ó¥¯¤¹¤ë¾ì¹ç¤Ë
+¤ÏRuby¤òŸ³«¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¡¤ext¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¤Ë³ÈÄ¥
+¥é¥¤¥Ö¥é¥êÍѤΥǥ£¥ì¥¯¥È¥ê¤òºî¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥Ì¾Á°¤ÏŬÅö¤Ë
+Áª¤ó¤Ç¹½¤¤¤Þ¤»¤ó¡¥
+
+(2) À߷פ¹¤ë
+
+¤Þ¤¢¡¤ÅöÁ³¤Ê¤ó¤Ç¤¹¤±¤É¡¤¤É¤¦¤¤¤¦µ¡Ç½¤ò¼Â¸½¤¹¤ë¤«¤É¤¦¤«¤Þ¤ºÀß
+·×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥¤É¤ó¤Ê¥¯¥é¥¹¤ò¤Ä¤¯¤ë¤«¡¤¤½¤Î¥¯¥é¥¹¤Ë¤Ï
+¤É¤ó¤Ê¥á¥½¥Ã¥É¤¬¤¢¤ë¤«¡¤¥¯¥é¥¹¤¬Ä󶡤¹¤ëÄê¿ô¤Ê¤É¤Ë¤Ä¤¤¤ÆÀß·×
+¤·¤Þ¤¹¡¥
+
+(3) C¥³¡¼¥É¤ò½ñ¤¯
+
+³ÈÄ¥¥é¥¤¥Ö¥é¥êËÜÂΤȤʤëC¸À¸ì¤Î¥½¡¼¥¹¤ò½ñ¤­¤Þ¤¹¡¥C¸À¸ì¤Î¥½¡¼
+¥¹¤¬¤Ò¤È¤Ä¤Î»þ¤Ë¤Ï¡Ö¥é¥¤¥Ö¥é¥ê̾.c¡×¤òÁª¤Ö¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡¥C
+¸À¸ì¤Î¥½¡¼¥¹¤¬Ê£¿ô¤Î¾ì¹ç¤Ë¤ÏµÕ¤Ë¡Ö¥é¥¤¥Ö¥é¥ê̾.c¡×¤È¤¤¤¦¥Õ¥¡
+¥¤¥ë̾¤ÏÈò¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È¥â¥¸¥å¡¼
+¥ëÀ¸À®»þ¤ËÃæ´ÖŪ¤ËÀ¸À®¤µ¤ì¤ë¡Ö¥é¥¤¥Ö¥é¥ê̾.o¡×¤È¤¤¤¦¥Õ¥¡¥¤¥ë
+¤È¤¬¾×ÆÍ¤¹¤ë¤«¤é¤Ç¤¹¡¥
+
+Ruby¤Ï³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤¹¤ë»þ¤Ë¡ÖInit_¥é¥¤¥Ö¥é¥ê̾¡×¤È
+¤¤¤¦´Ø¿ô¤ò¼«Æ°Åª¤Ë¼Â¹Ô¤·¤Þ¤¹¡¥dbm¥é¥¤¥Ö¥é¥ê¤Î¾ì¹ç¡ÖInit_dbm¡×
+¤Ç¤¹¡¥¤³¤Î´Ø¿ô¤ÎÃæ¤Ç¥¯¥é¥¹¡¤¥â¥¸¥å¡¼¥ë¡¤¥á¥½¥Ã¥É¡¤Äê¿ô¤Ê¤É¤Î
+ÄêµÁ¤ò¹Ô¤¤¤Þ¤¹¡¥dbm.c¤«¤é°ìÉô°úÍѤ·¤Þ¤¹¡¥
+
+--
+Init_dbm()
+{
+ /* DBM¥¯¥é¥¹¤òÄêµÁ¤¹¤ë */
+ cDBM = rb_define_class("DBM", rb_cObject);
+ /* DBM¤ÏEnumerate¥â¥¸¥å¡¼¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë */
+ rb_include_module(cDBM, rb_mEnumerable);
+
+ /* DBM¥¯¥é¥¹¤Î¥¯¥é¥¹¥á¥½¥Ã¥Éopen(): °ú¿ô¤ÏC¤ÎÇÛÎó¤Ç¼õ¤±¤ë */
+ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
+
+ /* DBM¥¯¥é¥¹¤Î¥á¥½¥Ã¥Éclose(): °ú¿ô¤Ï¤Ê¤· */
+ rb_define_method(cDBM, "close", fdbm_close, 0);
+ /* DBM¥¯¥é¥¹¤Î¥á¥½¥Ã¥É[]: °ú¿ô¤Ï1¸Ä */
+ rb_define_method(cDBM, "[]", fdbm_fetch, 1);
+ :
+
+ /* DBM¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ë¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô̾¤Î¤¿¤á¤ÎID */
+ id_dbm = rb_intern("dbm");
+}
+--
+
+DBM¥é¥¤¥Ö¥é¥ê¤Ïdbm¤Î¥Ç¡¼¥¿¤ÈÂбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ê¤ë¤Ï¤º¤Ç
+¤¹¤«¤é¡¤C¤ÎÀ¤³¦¤Îdbm¤òRuby¤ÎÀ¤³¦¤Ë¼è¤ê¹þ¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡¥
+
+
+dbm.c¤Ç¤ÏData_Make_Struct¤ò°Ê²¼¤Î¤è¤¦¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡¥
+
+--
+struct dbmdata {
+ int di_size;
+ DBM *di_dbm;
+};
+
+
+obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);
+--
+
+¤³¤³¤Ç¤Ïdbmstruct¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤òData¤Ë¥«¥×¥»¥ë²½¤·¤Æ¤¤
+¤Þ¤¹¡¥DBM*¤òľÀÜ¥«¥×¥»¥ë²½¤·¤Ê¤¤¤Î¤Ïclose()¤·¤¿»þ¤Î½èÍý¤ò¹Í
+¤¨¤Æ¤Î¤³¤È¤Ç¤¹¡¥
+
+Data¥ª¥Ö¥¸¥§¥¯¥È¤«¤édbmstruct¹½Â¤ÂΤΥݥ¤¥ó¥¿¤ò¼è¤ê½Ð¤¹¤¿¤á
+¤Ë°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡¥
+
+--
+#define GetDBM(obj, dbmp) {\
+ Data_Get_Struct(obj, struct dbmdata, dbmp);\
+ if (dbmp->di_dbm == 0) closed_dbm();\
+}
+--
+
+¤Á¤ç¤Ã¤ÈÊ£»¨¤Ê¥Þ¥¯¥í¤Ç¤¹¤¬¡¤Íפ¹¤ë¤Ëdbmdata¹½Â¤ÂΤΥݥ¤¥ó¥¿
+¤Î¼è¤ê½Ð¤·¤È¡¤close¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤ò¤Þ¤È¤á¤Æ¤¤
+¤ë¤À¤±¤Ç¤¹¡¥
+
+DBM¥¯¥é¥¹¤Ë¤Ï¤¿¤¯¤µ¤ó¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¤¬¡¤Ê¬Îह¤ë¤È3¼ïÎà¤Î
+°ú¿ô¤Î¼õ¤±Êý¤¬¤¢¤ê¤Þ¤¹¡¥¤Ò¤È¤Ä¤Ï°ú¿ô¤Î¿ô¤¬¸ÇÄê¤Î¤â¤Î¤Ç¡¤Îã¤È
+¤·¤Æ¤Ïdelete¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡¥delete¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤ë
+fdbm_delete()¤Ï¤³¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥
+
+--
+static VALUE
+fdbm_delete(obj, keystr)
+ VALUE obj, keystr;
+{
+ :
+}
+--
+
+°ú¿ô¤Î¿ô¤¬¸ÇÄê¤Î¥¿¥¤¥×¤ÏÂè1°ú¿ô¤¬self¡¤Âè2°ú¿ô°Ê¹ß¤¬¥á¥½¥Ã¥É
+¤Î°ú¿ô¤È¤Ê¤ê¤Þ¤¹¡¥
+
+°ú¿ô¤Î¿ô¤¬ÉÔÄê¤Î¤â¤Î¤ÏC¤ÎÇÛÎó¤Ç¼õ¤±¤ë¤â¤Î¤ÈRuby¤ÎÇÛÎó¤Ç¼õ¤±
+¤ë¤â¤Î¤È¤¬¤¢¤ê¤Þ¤¹¡¥dbm¥é¥¤¥Ö¥é¥ê¤ÎÃæ¤Ç¡¤C¤ÎÇÛÎó¤Ç¼õ¤±¤ë¤â¤Î
+¤ÏDBM¤Î¥¯¥é¥¹¥á¥½¥Ã¥É¤Ç¤¢¤ëopen()¤Ç¤¹¡¥¤³¤ì¤ò¼ÂÁõ¤·¤Æ¤¤¤ë´Ø
+¿ôfdbm_s_open()¤Ï¤³¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥
+
+--
+static VALUE
+fdbm_s_open(argc, argv, klass)
+ int argc;
+ VALUE *argv;
+ VALUE klass;
+{
+ :
+ if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) {
+ mode = 0666; /* default value */
+ }
+ :
+}
+--
+
+¤³¤Î¥¿¥¤¥×¤Î´Ø¿ô¤ÏÂè1°ú¿ô¤¬Í¿¤¨¤é¤ì¤¿°ú¿ô¤Î¿ô¡¤Âè2°ú¿ô¤¬Í¿¤¨
+¤é¤ì¤¿°ú¿ô¤ÎÆþ¤Ã¤Æ¤¤¤ëÇÛÎó¤Ë¤Ê¤ê¤Þ¤¹¡¥self¤ÏÂè3°ú¿ô¤È¤·¤ÆÍ¿
+¤¨¤é¤ì¤Þ¤¹¡¥
+
+¤³¤ÎÇÛÎó¤ÇÍ¿¤¨¤é¤ì¤¿°ú¿ô¤ò²òÀϤ¹¤ë¤¿¤á¤Î´Ø¿ô¤¬open()¤Ç¤â»È¤ï
+¤ì¤Æ¤¤¤ërb_scan_args()¤Ç¤¹¡¥Âè3°ú¿ô¤Ë»ØÄꤷ¤¿¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë
+½¾¤¤¡¤Âè4ÊÑ¿ô°Ê¹ß¤Ë»ØÄꤷ¤¿ÊÑ¿ô¤ËÃͤòÂåÆþ¤·¤Æ¤¯¤ì¤Þ¤¹¡¥¤³¤Î
+¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¡¤Âè1ʸ»úÌܤ¬¾Êά¤Ç¤­¤Ê¤¤°ú¿ô¤Î¿ô¡¤Âè2ʸ»úÌܤ¬
+¾Êά¤Ç¤­¤ë°ú¿ô¤Î¿ô¡¤Âè3ʸ»úÌܤ¬Âбþ¤¹¤ëÁê¼ê¤¬Ìµ¤¤¤¢¤Þ¤ê¤Î°ú
+¿ô¤¬¤¢¤ë¤«¤É¤¦¤«¤ò¼¨¤¹"*"¤Ç¤¹¡¥2ʸ»úÌܤÈ3ʸ»úÌܤϾÊά¤Ç¤­¤Þ
+¤¹¡¥dbm.c¤ÎÎã¤Ç¤Ï¡¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï"11"¤Ç¤¹¤«¤é¡¤°ú¿ô¤ÏºÇÄã1¤Ä
+¤Ç¡¤2¤Ä¤Þ¤Çµö¤µ¤ì¤ë¤È¤¤¤¦°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡¥¾Êά¤µ¤ì¤Æ¤¤¤ë»þ¤Î
+ÊÑ¿ô¤ÎÃͤÏnil(C¸À¸ì¤Î¥ì¥Ù¥ë¤Ç¤ÏQnil)¤Ë¤Ê¤ê¤Þ¤¹¡¥
+
+Ruby¤ÎÇÛÎó¤Ç°ú¿ô¤ò¼õ¤±¼è¤ë¤â¤Î¤Ïindexes¤¬¤¢¤ê¤Þ¤¹¡¥¼ÂÁõ¤Ï¤³
+¤¦¤Ç¤¹¡¥
+
+--
+static VALUE
+fdbm_indexes(obj, args)
+ VALUE obj, args;
+{
+ :
+}
+--
+
+Âè1°ú¿ô¤Ïself¡¤Âè2°ú¿ô¤ÏRuby¤ÎÇÛÎó¤Ç¤¹¡¥
+
+** Ãí°Õ»ö¹à
+
+Ruby¤È¶¦Í­¤Ï¤·¤Ê¤¤¤¬Ruby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò³ÊǼ¤¹¤ë²ÄǽÀ­¤Î¤¢¤ë
+C¤ÎÂç°èÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤ÆRuby¥¤¥ó¥¿¥×¥ê¥¿¤ËÊÑ¿ô¤Î¸ºß
+¤ò¶µ¤¨¤Æ¤¢¤²¤Æ¤¯¤À¤µ¤¤¡¥¤Ç¤Ê¤¤¤ÈGC¤Ç¥È¥é¥Ö¥ë¤òµ¯¤³¤·¤Þ¤¹¡¥
+
+ void rb_global_variable(VALUE *var)
+
+(4) extconf.rb¤òÍѰդ¹¤ë
+
+Makefile¤òºî¤ë¾ì¹ç¤Î¿÷·¿¤Ë¤Ê¤ëextconf.rb¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºî¤ê
+¤Þ¤¹¡¥extconf.rb¤Ï¥é¥¤¥Ö¥é¥ê¤Î¥³¥ó¥Ñ¥¤¥ë¤ËɬÍפʾò·ï¤Î¥Á¥§¥Ã
+¥¯¤Ê¤É¤ò¹Ô¤¦¤³¤È¤¬ÌÜŪ¤Ç¤¹¡¥¤Þ¤º¡¤
+
+ require 'mkmf'
+
+¤òextconf.rb¤ÎÀèÆ¬¤ËÃÖ¤­¤Þ¤¹¡¥extconf.rb¤ÎÃæ¤Ç¤Ï°Ê²¼¤ÎRuby´Ø
+¿ô¤ò»È¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥
+
+ have_library(lib, func): ¥é¥¤¥Ö¥é¥ê¤Î¸ºß¥Á¥§¥Ã¥¯
+ have_func(func, header): ´Ø¿ô¤Î¸ºß¥Á¥§¥Ã¥¯
+ have_header(header): ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¸ºß¥Á¥§¥Ã¥¯
+ create_makefile(target): Makefile¤ÎÀ¸À®
+
+°Ê²¼¤ÎÊÑ¿ô¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥
+
+ $CFLAGS: ¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄɲÃŪ¤Ë»ØÄꤹ¤ë¥Õ¥é¥°(-O¤Ê¤É)
+ $CPPFLAGS: ¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÄɲÃŪ¤Ë»ØÄꤹ¤ë¥Õ¥é¥°(-I¤ä-D¤Ê¤É)
+ $LDFLAGS: ¥ê¥ó¥¯»þ¤ËÄɲÃŪ¤Ë»ØÄꤹ¤ë¥Õ¥é¥°(-L¤Ê¤É)
+ $objs: ¥ê¥ó¥¯¤µ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë̾¤Î¥ê¥¹¥È
+
+¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤Ï¡¢Ä̾ï¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¸¡º÷¤·
+¤Æ¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤Þ¤¹¤¬¡¢make¤ÎÅÓÃæ¤Ç¥½¡¼¥¹¤òÀ¸À®¤¹¤ë¤è¤¦¤Ê
+¾ì¹ç¤ÏÌÀ¼¨Åª¤Ë»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+
+¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¾ò·ï¤¬Â·¤ï¤º¡¤¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó
+¥Ñ¥¤¥ë¤·¤Ê¤¤»þ¤Ë¤Ïcreate_makefile¤ò¸Æ¤Ð¤Ê¤±¤ì¤ÐMakefile¤ÏÀ¸
+À®¤µ¤ì¤º¡¤¥³¥ó¥Ñ¥¤¥ë¤â¹Ô¤ï¤ì¤Þ¤»¤ó¡¥
+
+(5) depend¤òÍѰդ¹¤ë
+
+¤â¤·¡¤¥Ç¥£¥ì¥¯¥È¥ê¤Ëdepend¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ì¤Ð¡¤
+Makefile¤¬°Í¸´Ø·¸¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡¥
+
+ % gcc -MM *.c > depend
+
+¤Ê¤É¤Çºî¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¤¢¤Ã¤ÆÂ»¤Ï̵¤¤¤Ç¤·¤ç¤¦¡¥
+
+(6) Makefile¤òÀ¸À®¤¹¤ë
+
+Makefile¤ò¼ÂºÝ¤ËÀ¸À®¤¹¤ë¤¿¤á¤Ë¤Ï
+
+ ruby extconf.rb
+
+¤È¤·¤Þ¤¹¡¥extconf.rb¤Ë require 'mkmf' ¤Î¹Ô¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¥¨¥é¡¼
+¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¤°ú¿ô¤òÄɲä·¤Æ
+
+ ruby -r mkmf extconf.rb
+
+¤È¤·¤Æ¤¯¤À¤µ¤¤¡¥
+
+¥Ç¥£¥ì¥¯¥È¥ê¤òext°Ê²¼¤ËÍѰդ·¤¿¾ì¹ç¤Ë¤ÏRubyÁ´ÂΤÎmake¤Î»þ¤Ë
+¼«Æ°Åª¤ËMakefile¤¬À¸À®¤µ¤ì¤Þ¤¹¤Î¤Ç¡¤¤³¤Î¥¹¥Æ¥Ã¥×¤ÏÉÔÍפǤ¹¡¥
+
+(7) make¤¹¤ë
+
+ưŪ¥ê¥ó¥¯¥é¥¤¥Ö¥é¥ê¤òÀ¸À®¤¹¤ë¾ì¹ç¤Ë¤Ï¤½¤Î¾ì¤Çmake¤·¤Æ¤¯¤À¤µ
+¤¤¡¥É¬ÍפǤ¢¤ì¤Ð make install ¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥
+
+ext°Ê²¼¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÍѰդ·¤¿¾ì¹ç¤Ï¡¤Ruby¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç
+make¤ò¼Â¹Ô¤¹¤ë¤ÈMakefile¤òÀ¸À®¤«¤émake¡¤É¬Íפˤè¤Ã¤Æ¤Ï¤½¤Î¥â
+¥¸¥å¡¼¥ë¤ÎRuby¤Ø¤Î¥ê¥ó¥¯¤Þ¤Ç¼«Æ°Åª¤Ë¼Â¹Ô¤·¤Æ¤¯¤ì¤Þ¤¹¡¥
+extconf.rb¤ò½ñ¤­´¹¤¨¤ë¤Ê¤É¤·¤ÆMakefile¤ÎºÆÀ¸À®¤¬É¬Íפʻþ¤Ï¤Þ
+¤¿Ruby¥Ç¥£¥ì¥¯¥È¥ê¤Çmake¤·¤Æ¤¯¤À¤µ¤¤¡¥
+
+³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ïmake install¤ÇRuby¥é¥¤¥Ö¥é¥ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î
+²¼¤Ë¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡¥¤â¤·³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤È¶¨Ä´¤·¤Æ»È¤¦Ruby¤Çµ­
+½Ò¤µ¤ì¤¿¥×¥í¥°¥é¥à¤¬¤¢¤ê¡¤Ruby¥é¥¤¥Ö¥é¥ê¤ËÃÖ¤­¤¿¤¤¾ì¹ç¤Ë¤Ï¡¤
+³ÈÄ¥¥é¥¤¥Ö¥é¥êÍѤΥǥ£¥ì¥¯¥È¥ê¤Î²¼¤Ë lib ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê
+¤òºî¤ê¡¤¤½¤³¤Ë ³ÈÄ¥»Ò .rb ¤Î¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤ª¤±¤ÐƱ»þ¤Ë¥¤¥ó
+¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥
+
+(8) ¥Ç¥Ð¥Ã¥°
+
+¤Þ¤¢¡¤¥Ç¥Ð¥Ã¥°¤·¤Ê¤¤¤Èư¤«¤Ê¤¤¤Ç¤·¤ç¤¦¤Í¡¥ext/Setup¤Ë¥Ç¥£¥ì
+¥¯¥È¥ê̾¤ò½ñ¤¯¤ÈÀÅŪ¤Ë¥ê¥ó¥¯¤¹¤ë¤Î¤Ç¥Ç¥Ð¥Ã¥¬¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê
+¤ê¤Þ¤¹¡¥¤½¤Îʬ¥³¥ó¥Ñ¥¤¥ë¤¬ÃÙ¤¯¤Ê¤ê¤Þ¤¹¤±¤É¡¥
+
+(9) ¤Ç¤­¤¢¤¬¤ê
+
+¸å¤Ï¤³¤Ã¤½¤ê»È¤¦¤Ê¤ê¡¤¹­¤¯¸ø³«¤¹¤ë¤Ê¤ê¡¤Çä¤ë¤Ê¤ê¡¤¤´¼«Í³¤Ë¤ª
+»È¤¤¤¯¤À¤µ¤¤¡¥Ruby¤Îºî¼Ô¤Ï³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë´Ø¤·¤Æ°ìÀڤθ¢Íø¤ò
+¼çÄ¥¤·¤Þ¤»¤ó¡¥
+
+Appendix A. Ruby¤Î¥½¡¼¥¹¥³¡¼¥É¤ÎʬÎà
+
+Ruby¤Î¥½¡¼¥¹¤Ï¤¤¤¯¤Ä¤«¤ËʬÎह¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¤³¤Î¤¦¤Á¥¯¥é
+¥¹¥é¥¤¥Ö¥é¥ê¤ÎÉôʬ¤Ï´ðËÜŪ¤Ë³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ÈƱ¤¸ºî¤êÊý¤Ë¤Ê¤Ã
+¤Æ¤¤¤Þ¤¹¡¥¤³¤ì¤é¤Î¥½¡¼¥¹¤Ïº£¤Þ¤Ç¤ÎÀâÌÀ¤Ç¤Û¤È¤ó¤ÉÍý²ò¤Ç¤­¤ë¤È
+»×¤¤¤Þ¤¹¡¥
+
+Ruby¸À¸ì¤Î¥³¥¢
+
+ class.c
+ error.c
+ eval.c
+ gc.c
+ object.c
+ parse.y
+ variable.c
+
+¥æ¡¼¥Æ¥£¥ê¥Æ¥£´Ø¿ô
+
+ dln.c
+ regex.c
+ st.c
+ util.c
+
+Ruby¥³¥Þ¥ó¥É¤Î¼ÂÁõ
+
+ dmyext.c
+ inits.c
+ main.c
+ ruby.c
+ version.c
+
+¥¯¥é¥¹¥é¥¤¥Ö¥é¥ê
+
+ array.c
+ bignum.c
+ compar.c
+ dir.c
+ enum.c
+ file.c
+ hash.c
+ io.c
+ marshal.c
+ math.c
+ numeric.c
+ pack.c
+ prec.c
+ process.c
+ random.c
+ range.c
+ re.c
+ signal.c
+ sprintf.c
+ string.c
+ struct.c
+ time.c
+
+Appendix B. ³ÈÄ¥ÍÑ´Ø¿ô¥ê¥Õ¥¡¥ì¥ó¥¹
+
+C¸À¸ì¤«¤éRuby¤Îµ¡Ç½¤òÍøÍѤ¹¤ëAPI¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡¥
+
+** ·¿
+
+VALUE
+
+ Ruby¥ª¥Ö¥¸¥§¥¯¥È¤òɽ¸½¤¹¤ë·¿¡¥É¬Íפ˱þ¤¸¤Æ¥­¥ã¥¹¥È¤·¤ÆÍѤ¤¤ë¡¥
+ ÁȤ߹þ¤ß·¿¤òɽ¸½¤¹¤ëC¤Î·¿¤Ïruby.h¤Ëµ­½Ò¤·¤Æ¤¢¤ëR¤Ç»Ï¤Þ¤ë¹½Â¤
+ ÂΤǤ¢¤ë¡¥VALUE·¿¤ò¤³¤ì¤é¤Ë¥­¥ã¥¹¥È¤¹¤ë¤¿¤á¤ËR¤Ç»Ï¤Þ¤ë¹½Â¤ÂÎ
+ ̾¤òÁ´¤ÆÂçʸ»ú¤Ë¤·¤¿Ì¾Á°¤Î¥Þ¥¯¥í¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¡¥
+
+** ÊÑ¿ô¡¦Äê¿ô
+
+Qnil
+
+ Äê¿ô: nil¥ª¥Ö¥¸¥§¥¯¥È
+
+Qtrue
+
+ Äê¿ô: true¥ª¥Ö¥¸¥§¥¯¥È(¿¿¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ)
+
+Qfalse
+
+ Äê¿ô: false¥ª¥Ö¥¸¥§¥¯¥È
+
+** C¥Ç¡¼¥¿¤Î¥«¥×¥»¥ë²½
+
+Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
+
+ C¤ÎǤ°Õ¤Î¥Ý¥¤¥ó¥¿¤ò¥«¥×¥»¥ë²½¤·¤¿Ruby¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡¥¤³
+ ¤Î¥Ý¥¤¥ó¥¿¤¬Ruby¤«¤é¥¢¥¯¥»¥¹¤µ¤ì¤Ê¤¯¤Ê¤Ã¤¿»þ¡¤free¤Ç»ØÄꤷ¤¿
+ ´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë¡¥¤Þ¤¿¡¤¤³¤Î¥Ý¥¤¥ó¥¿¤Î»Ø¤¹¥Ç¡¼¥¿¤¬Â¾¤ÎRuby¥ª¥Ö
+ ¥¸¥§¥¯¥È¤ò»Ø¤·¤Æ¤¤¤ë¾ì¹ç¡¤mark¤Ë»ØÄꤹ¤ë´Ø¿ô¤Ç¥Þ¡¼¥¯¤¹¤ëɬÍ×
+ ¤¬¤¢¤ë¡¥
+
+Data_Make_Struct(klass, type, mark, free, sval)
+
+ type·¿¤Î¥á¥â¥ê¤òmalloc¤·¡¤ÊÑ¿ôsval¤ËÂåÆþ¤·¤¿¸å¡¤¤½¤ì¤ò¥«¥×¥»
+ ¥ë²½¤·¤¿¥Ç¡¼¥¿¤òÊÖ¤¹¥Þ¥¯¥í¡¥
+
+Data_Get_Struct(data, type, sval)
+
+ data¤«¤étype·¿¤Î¥Ý¥¤¥ó¥¿¤ò¼è¤ê½Ð¤·ÊÑ¿ôsval¤ËÂåÆþ¤¹¤ë¥Þ¥¯¥í¡¥
+
+** ·¿¥Á¥§¥Ã¥¯
+
+TYPE(value)
+FIXNUM_P(value)
+NIL_P(value)
+void Check_Type(VALUE value, int type)
+void Check_SafeStr(VALUE value)
+
+** ·¿ÊÑ´¹
+
+FIX2INT(value)
+INT2FIX(i)
+NUM2INT(value)
+INT2NUM(i)
+NUM2DBL(value)
+rb_float_new(f)
+StringValue(value)
+StringValuePtr(value)
+StringValueCStr(value)
+rb_str_new2(s)
+
+** ¥¯¥é¥¹/¥â¥¸¥å¡¼¥ëÄêµÁ
+
+VALUE rb_define_class(const char *name, VALUE super)
+
+ super¤Î¥µ¥Ö¥¯¥é¥¹¤È¤·¤Æ¿·¤·¤¤Ruby¥¯¥é¥¹¤òÄêµÁ¤¹¤ë¡¥
+
+VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
+
+ super¤Î¥µ¥Ö¥¯¥é¥¹¤È¤·¤Æ¿·¤·¤¤Ruby¥¯¥é¥¹¤òÄêµÁ¤·¡¤module¤Î
+ Äê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡¥
+
+VALUE rb_define_module(const char *name)
+
+ ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¡¥
+
+VALUE rb_define_module_under(VALUE module, const char *name)
+
+ ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤·¡¤module¤ÎÄê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡¥
+
+void rb_include_module(VALUE klass, VALUE module)
+
+ ¥â¥¸¥å¡¼¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¡¥class¤¬¤¹¤Ç¤Ëmodule¤ò¥¤¥ó¥¯
+ ¥ë¡¼¥É¤·¤Æ¤¤¤ë»þ¤Ë¤Ï²¿¤â¤·¤Ê¤¤(¿½Å¥¤¥ó¥¯¥ë¡¼¥É¤Î¶Ø»ß)¡¥
+
+void rb_extend_object(VALUE object, VALUE module)
+
+ ¥ª¥Ö¥¸¥§¥¯¥È¤ò¥â¥¸¥å¡¼¥ë(¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É)¤Ç³ÈÄ¥¤¹¤ë¡¥
+
+** Âç°èÊÑ¿ôÄêµÁ
+
+void rb_define_variable(const char *name, VALUE *var)
+
+ Ruby¤ÈC¤È¤Ç¶¦Í­¤¹¤ë¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ô̾¤¬`$'¤Ç
+ »Ï¤Þ¤é¤Ê¤¤»þ¤Ë¤Ï¼«Æ°Åª¤ËÄɲ䵤ì¤ë¡¥name¤È¤·¤ÆRuby¤Î¼±ÊÌ»Ò
+ ¤È¤·¤Æµö¤µ¤ì¤Ê¤¤Ê¸»ú(Î㤨¤Ð` ')¤ò´Þ¤à¾ì¹ç¤Ë¤ÏRuby¥×¥í¥°¥é
+ ¥à¤«¤é¤Ï¸«¤¨¤Ê¤¯¤Ê¤ë¡¥
+
+void rb_define_readonly_variable(const char *name, VALUE *var)
+
+ Ruby¤ÈC¤È¤Ç¶¦Í­¤¹¤ëread only¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥
+ read only¤Ç¤¢¤ë¤³¤È°Ê³°¤Ïrb_define_variable()¤ÈƱ¤¸¡¥
+
+void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*setter)())
+
+ ´Ø¿ô¤Ë¤è¤Ã¤Æ¼Â¸½¤µ¤ì¤ëRubyÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿
+ »þ¤Ë¤Ïgetter¤¬¡¤ÊÑ¿ô¤ËÃͤ¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ïsetter¤¬¸Æ¤Ð¤ì
+ ¤ë¡¥
+
+void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), void (*setter)())
+
+ ´Ø¿ô¤Ë¤è¤Ã¤Æhook¤Î¤Ä¤±¤é¤ì¤¿¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ô
+ ¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ïgetter¤¬¡¤´Ø¿ô¤ËÃͤ¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ï
+ setter¤¬¸Æ¤Ð¤ì¤ë¡¥getter¤äsetter¤Ë0¤ò»ØÄꤷ¤¿»þ¤Ë¤Ïhook¤ò
+ »ØÄꤷ¤Ê¤¤¤Î¤ÈƱ¤¸»ö¤Ë¤Ê¤ë¡¥
+
+void rb_global_variable(VALUE *var)
+
+ GC¤Î¤¿¤á¡¤Ruby¥×¥í¥°¥é¥à¤«¤é¤Ï¥¢¥¯¥»¥¹¤µ¤ì¤Ê¤¤¤¬, Ruby¥ª¥Ö
+ ¥¸¥§¥¯¥È¤ò´Þ¤àÂç°èÊÑ¿ô¤ò¥Þ¡¼¥¯¤¹¤ë¡¥
+
+** Äê¿ô
+
+void rb_define_const(VALUE klass, const char *name, VALUE val)
+
+ Äê¿ô¤òÄêµÁ¤¹¤ë¡¥
+
+void rb_define_global_const(const char *name, VALUE val)
+
+ Âç°èÄê¿ô¤òÄêµÁ¤¹¤ë¡¥
+
+ rb_define_const(rb_cObject, name, val)
+
+ ¤ÈƱ¤¸°ÕÌ£¡¥
+
+** ¥á¥½¥Ã¥ÉÄêµÁ
+
+rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+ ¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥argc¤Ïself¤ò½ü¤¯°ú¿ô¤Î¿ô¡¥argc¤¬-1¤Î»þ,
+ ´Ø¿ô¤Ë¤Ï°ú¿ô¤Î¿ô(self¤ò´Þ¤Þ¤Ê¤¤)¤òÂè1°ú¿ô, °ú¿ô¤ÎÇÛÎó¤òÂè2
+ °ú¿ô¤È¤¹¤ë·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë(Âè3°ú¿ô¤Ïself)¡¥argc¤¬-2¤Î»þ,
+ Âè1°ú¿ô¤¬self, Âè2°ú¿ô¤¬args(args¤Ï°ú¿ô¤ò´Þ¤àRuby¤ÎÇÛÎó)¤È
+ ¤¤¤¦·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë¡¥
+
+rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+ private¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥°ú¿ô¤Ïrb_define_method()¤ÈƱ¤¸¡¥
+
+rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
+
+ ÆÃ°Û¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥°ú¿ô¤Ïrb_define_method()¤ÈƱ¤¸¡¥
+
+rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)
+
+ argc, argv·Á¼°¤ÇÍ¿¤¨¤é¤ì¤¿°ú¿ô¤òʬ²ò¤¹¤ë¡¥fmt¤Ïɬ¿Ü°ú¿ô¤Î¿ô,
+ Éղðú¿ô¤Î¿ô, »Ä¤ê¤Î°ú¿ô¤¬¤¢¤ë¤«¤ò»ØÄꤹ¤ëʸ»úÎó¤Ç, "¿ô»ú
+ ¿ô»ú*"¤È¤¤¤¦·Á¼°¤Ç¤¢¤ë¡¥ 2 ÈÖÌܤοô»ú¤È"*"¤Ï¤½¤ì¤¾¤ì¾Êά²Ä
+ ǽ¤Ç¤¢¤ë¡¥É¬¿Ü°ú¿ô¤¬°ì¤Ä¤â¤Ê¤¤¾ì¹ç¤Ï0¤ò»ØÄꤹ¤ë¡¥Âè3°ú¿ô°Ê
+ ¹ß¤ÏÊÑ¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç, ³ºÅö¤¹¤ëÍ×ÁǤ¬¤½¤ÎÊÑ¿ô¤Ë³ÊǼ¤µ¤ì¤ë¡¥
+ Éղðú¿ô¤ËÂбþ¤¹¤ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤ÏÊÑ¿ô¤ËQnil¤¬
+ ÂåÆþ¤µ¤ì¤ë¡¥
+
+** Ruby¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·
+
+VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
+
+ ¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¡¥Ê¸»úÎ󤫤émid¤òÆÀ¤ë¤¿¤á¤Ë¤Ïrb_intern()¤ò
+ »È¤¦¡¥
+
+VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
+
+ ¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¡¥°ú¿ô¤òargc, argv·Á¼°¤ÇÅϤ¹¡¥
+
+VALUE rb_eval_string(const char *str)
+
+ ʸ»úÎó¤òRuby¥¹¥¯¥ê¥×¥È¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¡¦¼Â¹Ô¤¹¤ë¡¥
+
+ID rb_intern(const char *name)
+
+ ʸ»úÎó¤ËÂбþ¤¹¤ëID¤òÊÖ¤¹¡¥
+
+char *rb_id2name(ID id)
+
+ ID¤ËÂбþ¤¹¤ëʸ»úÎó¤òÊÖ¤¹(¥Ç¥Ð¥Ã¥°ÍÑ)¡¥
+
+char *rb_class2name(VALUE klass)
+
+ ¥¯¥é¥¹¤Î̾Á°¤òÊÖ¤¹(¥Ç¥Ð¥Ã¥°ÍÑ)¡¥¥¯¥é¥¹¤¬Ì¾Á°¤ò»ý¤¿¤Ê¤¤»þ¤Ë¤Ï,
+ ÁÄÀè¤òÁ̤äÆÌ¾Á°¤ò»ý¤Ä¥¯¥é¥¹¤Î̾Á°¤òÊÖ¤¹¡¥
+
+int rb_respond_to(VALUE obj, ID id)
+
+ obj¤¬id¤Ç¼¨¤µ¤ì¤ë¥á¥½¥Ã¥É¤ò»ý¤Ä¤«¤É¤¦¤«¤òÊÖ¤¹¡£
+
+** ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô
+
+VALUE rb_iv_get(VALUE obj, const char *name)
+
+ obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ÎÃͤòÆÀ¤ë¡¥`@'¤Ç»Ï¤Þ¤é¤Ê¤¤¥¤¥ó¥¹¥¿¥ó
+ ¥¹ÊÑ¿ô¤Ï Ruby¥×¥í¥°¥é¥à¤«¤é¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¡Ö±£¤ì¤¿¡×¥¤¥ó
+ ¥¹¥¿¥ó¥¹ÊÑ¿ô¤Ë¤Ê¤ë¡¥Äê¿ô¤ÏÂçʸ»ú¤Î̾Á°¤ò»ý¤Ä¥¯¥é¥¹(¤Þ¤¿¤Ï
+ ¥â¥¸¥å¡¼¥ë)¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡¥
+
+VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
+
+ obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤òval¤Ë¥»¥Ã¥È¤¹¤ë¡¥
+
+** À©¸æ¹½Â¤
+
+VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
+
+ func2¤ò¥Ö¥í¥Ã¥¯¤È¤·¤ÆÀßÄꤷ, func1¤ò¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ö¡¥
+ func1¤Ë¤Ï arg1¤¬°ú¿ô¤È¤·¤ÆÅϤµ¤ì, func2¤Ë¤ÏÂè1°ú¿ô¤Ë¥¤¥Æ¥ì¡¼
+ ¥¿¤«¤éÍ¿¤¨¤é¤ì¤¿ÃÍ, Âè2°ú¿ô¤Ëarg2¤¬ÅϤµ¤ì¤ë¡¥
+
+VALUE rb_yield(VALUE val)
+
+ val¤òÃͤȤ·¤Æ¥¤¥Æ¥ì¡¼¥¿¥Ö¥í¥Ã¥¯¤ò¸Æ¤Ó½Ð¤¹¡¥
+
+VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
+
+ ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤Ë¸Æ¤Ó½Ð¤¹¡¥func1¤Î¼Â¹ÔÃæ¤ËÎã³°¤¬È¯À¸
+ ¤·¤¿»þ¤Ë¤Ï func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ö¡¥Ìá¤êÃͤÏÎã³°¤¬È¯À¸
+ ¤·¤Ê¤«¤Ã¤¿»þ¤Ïfunc1¤ÎÌá¤êÃÍ, Îã³°¤¬È¯À¸¤·¤¿»þ¤Ë¤Ïfunc2¤ÎÌá
+ ¤êÃͤǤ¢¤ë¡¥
+
+VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, void (*func2)(), VALUE arg2)
+
+ ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤·, ¼Â¹Ô½ªÎ»¸å(¤¿¤È¤¨Îã³°¤¬
+ ȯÀ¸¤·¤Æ¤â) func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤¹¤ë¡¥Ìá¤êÃͤÏfunc1
+ ¤ÎÌá¤êÃͤǤ¢¤ë(Îã³°¤¬È¯À¸¤·¤¿»þ¤ÏÌá¤é¤Ê¤¤)¡¥
+
+** Îã³°¡¦¥¨¥é¡¼
+
+void rb_warning(const char *fmt, ...)
+
+ rb_verbose»þ¤Ëɸ½à¥¨¥é¡¼½ÐÎϤ˷ٹð¾ðÊó¤òɽ¼¨¤¹¤ë¡¥°ú¿ô¤Ï
+ printf()¤ÈƱ¤¸¡¥
+
+void rb_raise(rb_eRuntimeError, const char *fmt, ...)
+
+ RuntimeErrorÎã³°¤òȯÀ¸¤µ¤»¤ë¡¥°ú¿ô¤Ïprintf()¤ÈƱ¤¸¡¥
+
+void rb_raise(VALUE exception, const char *fmt, ...)
+
+ exception¤Ç»ØÄꤷ¤¿Îã³°¤òȯÀ¸¤µ¤»¤ë¡¥fmt°Ê²¼¤Î°ú¿ô¤Ï
+ printf()¤ÈƱ¤¸¡¥
+
+void rb_fatal(const char *fmt, ...)
+
+ Ã×̿ŪÎã³°¤òȯÀ¸¤µ¤»¤ë¡¥Ä̾ï¤ÎÎã³°½èÍý¤Ï¹Ô¤Ê¤ï¤ì¤º, ¥¤¥ó¥¿¡¼
+ ¥×¥ê¥¿¤¬½ªÎ»¤¹¤ë(¤¿¤À¤·ensure¤Ç»ØÄꤵ¤ì¤¿¥³¡¼¥É¤Ï½ªÎ»Á°¤Ë
+ ¼Â¹Ô¤µ¤ì¤ë)¡¥
+
+void rb_bug(const char *fmt, ...)
+
+ ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ê¤É¥×¥í¥°¥é¥à¤Î¥Ð¥°¤Ç¤·¤«È¯À¸¤¹¤ë¤Ï¤º¤Î¤Ê¤¤
+ ¾õ¶·¤Î»þ¸Æ¤Ö¡¥¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ï¥³¥¢¥À¥ó¥×¤·Ä¾¤Á¤Ë½ªÎ»¤¹¤ë¡¥
+ Îã³°½èÍý¤Ï°ìÀڹԤʤï¤ì¤Ê¤¤¡¥
+
+** Ruby¤Î½é´ü²½¡¦¼Â¹Ô
+
+Ruby¤ò¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËËä¤á¹þ¤à¾ì¹ç¤Ë¤Ï°Ê²¼¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹
+¤ò»È¤¦¡¥Ä̾ï¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë¤ÏɬÍפʤ¤¡¥
+
+void ruby_init()
+
+ Ruby¥¤¥ó¥¿¥×¥ê¥¿¤Î½é´ü²½¤ò¹Ô¤Ê¤¦¡¥
+
+void ruby_options(int argc, char **argv)
+
+ Ruby¥¤¥ó¥¿¥×¥ê¥¿¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤Î½èÍý¤ò¹Ô¤Ê¤¦¡¥
+
+void ruby_run()
+
+ Ruby¥¤¥ó¥¿¥×¥ê¥¿¤ò¼Â¹Ô¤¹¤ë¡¥
+
+void ruby_script(char *name)
+
+ Ruby¤Î¥¹¥¯¥ê¥×¥È̾($0)¤òÀßÄꤹ¤ë¡¥
+
+
+Appendix C. extconf.rb¤Ç»È¤¨¤ë´Ø¿ô¤¿¤Á
+
+extconf.rb¤ÎÃæ¤Ç¤ÏÍøÍѲÄǽ¤Ê¥³¥ó¥Ñ¥¤¥ë¾ò·ï¥Á¥§¥Ã¥¯¤Î´Ø¿ô¤Ï°Ê
+²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡¥
+
+have_macro(macro, headers)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¥Þ¥¯¥ímacro¤¬ÄêµÁ¤µ
+ ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þtrue
+ ¤òÊÖ¤¹¡¥
+
+have_library(lib, func)
+
+ ´Ø¿ôfunc¤òÄêµÁ¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥êlib¤Î¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥
+ ¥é¥¤¥Ö¥é¥ê¤¬Â¸ºß¤¹¤ë»þ¡¤true¤òÊÖ¤¹¡¥
+
+find_library(lib, func, path...)
+
+ ´Ø¿ôfunc¤òÄêµÁ¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥êlib¤Î¸ºß¤ò -Lpath ¤òÄɲÃ
+ ¤·¤Ê¤¬¤é¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥é¥¤¥Ö¥é¥ê¤¬¸«ÉÕ¤«¤Ã¤¿»þ¡¤true¤òÊÖ¤¹¡¥
+
+have_func(func, header)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ´Ø¿ôfunc¤Î¸ºß¤ò¥Á¥§¥Ã
+ ¥¯¤¹¤ë¡¥func¤¬É¸½à¤Ç¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¥é¥¤¥Ö¥é¥êÆâ¤Î¤â¤Î¤Ç¤¢
+ ¤ë»þ¤Ë¤ÏÀè¤Ëhave_library¤Ç¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ª¤¯
+ »ö¡¥´Ø¿ô¤¬Â¸ºß¤¹¤ë»þtrue¤òÊÖ¤¹¡¥
+
+have_var(var, header)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤ÆÊÑ¿ôvar¤Î¸ºß¤ò¥Á¥§¥Ã
+ ¥¯¤¹¤ë¡¥var¤¬É¸½à¤Ç¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¥é¥¤¥Ö¥é¥êÆâ¤Î¤â¤Î¤Ç¤¢
+ ¤ë»þ¤Ë¤ÏÀè¤Ëhave_library¤Ç¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ª¤¯
+ »ö¡¥ÊÑ¿ô¤¬Â¸ºß¤¹¤ë»þtrue¤òÊÖ¤¹¡¥
+
+have_header(header)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹
+ ¤ë»þtrue¤òÊÖ¤¹¡¥
+
+find_header(header, path...)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤Î¸ºß¤ò -Ipath ¤òÄɲ䷤ʤ¬¤é¥Á¥§¥Ã¥¯
+ ¤¹¤ë¡¥¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬¸«ÉÕ¤«¤Ã¤¿»þ¡¤true¤òÊÖ¤¹¡¥
+
+have_struct_member(type, member, header)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤Ë¥á¥ó¥Ðmember
+ ¤¬Â¸ºß¤¹¤ë¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Æ¡¤member¤ò
+ »ý¤Ä¤¹¤ë»þtrue¤òÊÖ¤¹¡¥
+
+have_type(type, header, opt)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤¬Â¸ºß¤¹¤ë¤«¤ò
+ ¥Á¥§¥Ã¥¯¤¹¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þtrue¤òÊÖ¤¹¡¥
+
+check_sizeof(type, header)
+
+ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤Îcharñ°Ì¥µ¥¤
+ ¥º¤òÄ´¤Ù¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þ¤½¤Î¥µ¥¤¥º¤òÊÖ¤¹¡¥ÄêµÁ¤µ
+ ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ïnil¤òÊÖ¤¹¡¥
+
+create_makefile(target)
+
+ ³ÈÄ¥¥é¥¤¥Ö¥é¥êÍѤÎMakefile¤òÀ¸À®¤¹¤ë¡¥¤³¤Î´Ø¿ô¤ò¸Æ¤Ð¤Ê¤±¤ì
+ ¤Ð¤½¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Ê¤¤¡¥target¤Ï¥â¥¸¥å¡¼¥ë̾
+ ¤òɽ¤¹¡¥
+
+find_executable(command, path)
+
+ ¥³¥Þ¥ó¥Écommand¤òFile::PATH_SEPARATOR¤Ç¶èÀÚ¤é¤ì¤¿¥Ñ¥¹Ì¾¤Î
+ ¥ê¥¹¥Èpath¤«¤éõ¤¹¡¥path¤¬nil¤Þ¤¿¤Ï¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï¡¤´Ä¶­
+ ÊÑ¿ôPATH¤ÎÃͤò»ÈÍѤ¹¤ë¡¥¼Â¹Ô²Äǽ¤Ê¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç
+ ¤Ï¥Ñ¥¹¤ò´Þ¤à¥Õ¥¡¥¤¥ë̾¡¤¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ïnil¤òÊÖ¤¹¡¥
+
+with_config(withval[, default=nil])
+
+ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--with-<withval>¤Ç»ØÄꤵ¤ì¤¿¥ª¥×¥·¥ç¥óÃͤòÆÀ¤ë¡¥
+
+enable_config(config, *defaults)
+disable_config(config, *defaults)
+
+ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--enable-<config>¤Þ¤¿¤Ï
+ --disable-<config>¤Ç»ØÄꤵ¤ì¤¿¿¿µ¶ÃͤòÆÀ¤ë¡¥
+ --enable-<config>¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ïtrue¡¤
+ --disable-<config>¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ïfalse¤òÊÖ¤¹¡¥
+ ¤É¤Á¤é¤â»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¤¥Ö¥í¥Ã¥¯¤Ä¤­¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï
+ *defaults¤òyield¤·¤¿·ë²Ì¡¤¥Ö¥í¥Ã¥¯¤Ê¤·¤Ê¤é*defaults¤òÊÖ¤¹¡¥
+
+dir_config(target[, default_dir])
+dir_config(target[, default_include, default_lib])
+
+ ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--with-<target>-dir, --with-<target>-include,
+ --with-<target>-lib¤Î¤¤¤º¤ì¤«¤Ç»ØÄꤵ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò
+ $CFLAGS ¤ä $LDFLAGS ¤ËÄɲ乤롥--with-<target>-dir=/path¤Ï
+ --with-<target>-include=/path/include --with-<target>-lib=/path/lib
+ ¤ÈÅù²Á¤Ç¤¢¤ë¡¥Äɲ䵤줿 include ¥Ç¥£¥ì¥¯¥È¥ê¤È lib ¥Ç¥£¥ì¥¯¥È¥ê¤Î
+ ÇÛÎó¤òÊÖ¤¹¡¥ ([include_dir, lib_dir])
+
+pkg_config(pkg)
+
+ pkg-config¥³¥Þ¥ó¥É¤«¤é¥Ñ¥Ã¥±¡¼¥¸pkg¤Î¾ðÊó¤òÆÀ¤ë¡¥
+ pkg-config¤Î¼ÂºÝ¤Î¥³¥Þ¥ó¥É̾¤Ï¡¤--with-pkg-config¥³¥Þ¥ó¥É
+ ¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ç»ØÄê²Äǽ¡¥
+
+/*
+ * Local variables:
+ * fill-column: 60
+ * end:
+ */
diff --git a/README.ja b/README.ja
new file mode 100644
index 0000000000..df8cfc03f4
--- /dev/null
+++ b/README.ja
@@ -0,0 +1,160 @@
+* Ruby¤È¤Ï
+
+Ruby¤Ï¥·¥ó¥×¥ë¤«¤Ä¶¯ÎϤʥª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥¹¥¯¥ê¥×¥È¸À¸ì¤Ç¤¹¡¥
+Ruby¤ÏºÇ½é¤«¤é½ã¿è¤Ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¸À¸ì¤È¤·¤ÆÀ߷פµ¤ì¤Æ¤¤¤Þ
+¤¹¤«¤é¡¤¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥×¥í¥°¥é¥ß¥ó¥°¤ò¼ê·Ú¤Ë¹Ô¤¦»ö¤¬½ÐÍè¤Þ
+¤¹¡¥¤â¤Á¤í¤óÄ̾ï¤Î¼ê³¤­·¿¤Î¥×¥í¥°¥é¥ß¥ó¥°¤â²Äǽ¤Ç¤¹¡¥
+
+Ruby¤Ï¥Æ¥­¥¹¥È½èÍý´Ø·¸¤ÎǽÎϤʤɤËÍ¥¤ì¡¤Perl¤ÈƱ¤¸¤¯¤é¤¤¶¯ÎÏ
+¤Ç¤¹¡¥¤µ¤é¤Ë¥·¥ó¥×¥ë¤Êʸˡ¤È¡¤Îã³°½èÍý¤ä¥¤¥Æ¥ì¡¼¥¿¤Ê¤É¤Îµ¡¹½
+¤Ë¤è¤Ã¤Æ¡¤¤è¤êʬ¤«¤ê¤ä¤¹¤¤¥×¥í¥°¥é¥ß¥ó¥°¤¬½ÐÍè¤Þ¤¹¡¥
+
+
+* Ruby¤ÎÆÃĹ
+
+ + ¥·¥ó¥×¥ë¤Êʸˡ
+ + ÉáÄ̤Υª¥Ö¥¸¥§¥¯¥È»Ø¸þµ¡Ç½(¥¯¥é¥¹¡¤¥á¥½¥Ã¥É¥³¡¼¥ë¤Ê¤É)
+ + ÆÃ¼ì¤Ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þµ¡Ç½(Mixin, ÆÃ°Û¥á¥½¥Ã¥É¤Ê¤É)
+ + ±é»»»Ò¥ª¡¼¥Ð¡¼¥í¡¼¥É
+ + Îã³°½èÍýµ¡Ç½
+ + ¥¤¥Æ¥ì¡¼¥¿¤È¥¯¥í¡¼¥¸¥ã
+ + ¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿
+ + ¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥Ç¥£¥ó¥° (¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤è¤ë)
+ + °Ü¿¢À­¤¬¹â¤¤¡¥Â¿¤¯¤ÎUNIX¾å¤Çư¤¯¤À¤±¤Ç¤Ê¤¯¡¤DOS¤äWindows¡¤
+ Mac¡¤BeOS¤Ê¤É¤Î¾å¤Ç¤âư¤¯
+
+
+* Æþ¼êË¡
+
+** FTP¤Ç
+
+°Ê²¼¤Î¾ì½ê¤Ë¤ª¤¤¤Æ¤¢¤ê¤Þ¤¹¡¥
+
+ ftp://ftp.ruby-lang.org/pub/ruby/
+
+** Subversion¤Ç
+
+ËÜ¥Ö¥é¥ó¥Á¤ÎRuby¤ÎºÇ¿·¤Î¥½¡¼¥¹¥³¡¼¥É¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡¥
+
+ $ svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_6/
+
+³«È¯Àèü¤Î¥½¡¼¥¹¥³¡¼¥É¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡¥
+
+ $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
+
+¾¤Ë³«È¯Ãæ¤Î¥Ö¥é¥ó¥Á¤Î°ìÍ÷¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¸«¤é¤ì¤Þ¤¹¡¥
+
+ $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
+
+
+* ¥Û¡¼¥à¥Ú¡¼¥¸
+
+Ruby¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤ÎURL¤Ï
+
+ http://www.ruby-lang.org/
+
+¤Ç¤¹¡¥
+
+
+* ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È
+
+Ruby¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤¬¤¢¤ê¤Þ¤¹¡£»²²Ã´õ˾¤ÎÊý¤Ï
+
+ ruby-list-ctl@ruby-lang.org
+
+¤Þ¤ÇËÜʸ¤Ë
+
+ subscribe YourFirstName YourFamilyName
+
+¤È½ñ¤¤¤ÆÁ÷¤Ã¤Æ²¼¤µ¤¤¡£
+
+Ruby³«È¯¼Ô¸þ¤±¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤â¤¢¤ê¤Þ¤¹¡£¤³¤Á¤é¤Ç¤Ïruby¤Î¥Ð
+¥°¡¢¾­Íè¤Î»ÅÍͳÈÄ¥¤Ê¤É¼ÂÁõ¾å¤ÎÌäÂê¤Ë¤Ä¤¤¤ÆµÄÏÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+»²²Ã´õ˾¤ÎÊý¤Ï
+
+ ruby-dev-ctl@ruby-lang.org
+
+¤Þ¤Çruby-list¤ÈƱÍͤÎÊýË¡¤Ç¥á¡¼¥ë¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+Ruby³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ë¤Ä¤¤¤ÆÏ䷹礦ruby-ext¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤È
+¿ô³Ø´Ø·¸¤ÎÏÃÂê¤Ë¤Ä¤¤¤ÆÏ䷹礦ruby-math¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤È
+±Ñ¸ì¤ÇÏ䷹礦ruby-talk¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤â¤¢¤ê¤Þ¤¹¡£»²²ÃÊýË¡
+¤Ï¤É¤ì¤âƱ¤¸¤Ç¤¹¡£
+
+
+* ¥³¥ó¥Ñ¥¤¥ë¡¦¥¤¥ó¥¹¥È¡¼¥ë
+
+°Ê²¼¤Î¼ê½ç¤Ç¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡¥
+
+ 1. ¤â¤·configure¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤¤¡¢¤â¤·¤¯¤Ï
+ configure.in¤è¤ê¸Å¤¤¤è¤¦¤Ê¤é¡¢autoconf¤ò¼Â¹Ô¤·¤Æ
+ ¿·¤·¤¯configure¤òÀ¸À®¤¹¤ë
+
+ 2. configure¤ò¼Â¹Ô¤·¤ÆMakefile¤Ê¤É¤òÀ¸À®¤¹¤ë
+
+ 3. (ɬÍפʤé¤Ð)defines.h¤òÊÔ½¸¤¹¤ë
+
+ ¿ʬ¡¤É¬Í×̵¤¤¤È»×¤¤¤Þ¤¹¡¥
+
+ 4. (ɬÍפʤé¤Ð)ext/Setup¤ËÀÅŪ¤Ë¥ê¥ó¥¯¤¹¤ë³ÈÄ¥¥â¥¸¥å¡¼¥ë¤ò
+ »ØÄꤹ¤ë
+
+ ext/Setup¤Ëµ­½Ò¤·¤¿¥â¥¸¥å¡¼¥ë¤ÏÀÅŪ¤Ë¥ê¥ó¥¯¤µ¤ì¤Þ¤¹¡¥
+
+ ¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥Ç¥£¥ó¥°¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥¢¡¼¥­¥Æ¥¯
+ ¥Á¥ã¤Ç¤ÏSetup¤Î1¹ÔÌܤΡÖoption nodynamic¡×¤È¤¤¤¦¹Ô¤Î¥³
+ ¥á¥ó¥È¤ò³°¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥¤Þ¤¿¡¤¤³¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç
+ ³ÈÄ¥¥â¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¤¤¢¤é¤«¤¸¤áÀÅŪ¤Ë¥ê¥ó
+ ¥¯¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥
+
+ 5. make¤ò¼Â¹Ô¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë
+
+ 6. make test¤Ç¥Æ¥¹¥È¤ò¹Ô¤¦¡¥
+
+ ¡Ötest succeeded¡×¤Èɽ¼¨¤µ¤ì¤ì¤ÐÀ®¸ù¤Ç¤¹¡¥¤¿¤À¤·¥Æ¥¹¥È
+ ¤ËÀ®¸ù¤·¤Æ¤â´°àú¤À¤ÈÊݾڤµ¤ì¤Æ¤¤¤ëÌõ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥
+
+ 7. make install
+
+ root¤Çºî¶È¤¹¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡¥
+
+¤â¤·¡¤¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¤Ï¥¨¥é¡¼¤Î¥í¥°¤È¥Þ
+¥·¥ó¡¤OS¤Î¼ïÎà¤ò´Þ¤à¤Ç¤­¤ë¤À¤±¾Ü¤·¤¤¥ì¥Ý¡¼¥È¤òºî¼Ô¤ËÁ÷¤Ã¤Æ¤¯
+¤À¤µ¤ë¤È¾¤ÎÊý¤Î¤¿¤á¤Ë¤â¤Ê¤ê¤Þ¤¹¡¥
+
+
+* °Ü¿¢
+
+UNIX¤Ç¤¢¤ì¤Ðconfigure¤¬¤Û¤È¤ó¤É¤Îº¹°Û¤òµÛ¼ý¤·¤Æ¤¯¤ì¤ë¤Ï¤º¤Ç
+¤¹¤¬¡¤»×¤ï¤Ì¸«Íî¤È¤·¤¬¤¢¤Ã¤¿¾ì¹ç(¤¢¤ë¤Ë°ã¤¤¤Ê¤¤)¡¤ºî¼Ô¤Ë¤½¤Î
+¤³¤È¤ò¥ì¥Ý¡¼¥È¤¹¤ì¤Ð¡¤²ò·è¤Ç¤­¤ë¤«¤âÃΤì¤Þ¤»¤ó¡¥
+
+¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤â¤Ã¤È¤â°Í¸¤¹¤ë¤Î¤ÏGCÉô¤Ç¤¹¡¥Ruby¤ÎGC¤ÏÂоÝ
+¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤¬setjmp()¤Ë¤è¤Ã¤ÆÁ´¤Æ¤Î¥ì¥¸¥¹¥¿¤ò jmp_buf¤Ë
+³ÊǼ¤¹¤ë¤³¤È¤È¡¤jmp_buf¤È¥¹¥¿¥Ã¥¯¤¬32bit¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ
+¤¤¤ë¤³¤È¤ò²¾Äꤷ¤Æ¤¤¤Þ¤¹¡¥ÆÃ¤ËÁ°¼Ô¤¬À®Î©¤·¤Ê¤¤¾ì¹ç¤ÎÂбþ¤ÏÈó
+¾ï¤Ëº¤Æñ¤Ç¤·¤ç¤¦¡¥¸å¼Ô¤Î²ò·è¤ÏÈæ³ÓŪ´Êñ¤Ç¡¤gc.c¤Ç¥¹¥¿¥Ã¥¯¤ò
+¥Þ¡¼¥¯¤·¤Æ¤¤¤ëÉôʬ¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤Î¥Ð¥¤¥È¿ô¤À¤±¤º¤é¤·¤Æ¥Þ¡¼
+¥¯¤¹¤ë¥³¡¼¥É¤òÄɲ乤ë¤À¤±¤ÇºÑ¤ß¤Þ¤¹¡¥¡Ödefined(THINK_C)¡×¤Ç
+³ç¤é¤ì¤Æ¤¤¤ëÉôʬ¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤
+
+# ¼ÂºÝ¤Ë¤ÏRuby¤ÏThink C¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤»¤ó¡¥
+
+¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¤ò»ý¤ÄCPU¤Ç¤Ï¡¤¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¤ò¥¹¥¿¥Ã
+¥¯¤Ë¥Õ¥é¥Ã¥·¥å¤¹¤ë¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤òÄɲ乤ëɬÍפ¬¤¢¤ë¤«¤âÃÎ
+¤ì¤Þ¤»¤ó¡¥
+
+
+* ÇÛÉÛ¾ò·ï
+
+COPYING.ja¥Õ¥¡¥¤¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+
+* Ãø¼Ô
+
+¥³¥á¥ó¥È¡¤¥Ð¥°¥ì¥Ý¡¼¥È¤½¤Î¾¤Ï matz@netlab.jp ¤Þ¤Ç¡¥
+-------------------------------------------------------
+created at: Thu Aug 3 11:57:36 JST 1995
+Local variables:
+mode: indented-text
+end:
diff --git a/README.ja.md b/README.ja.md
deleted file mode 100644
index eee54a9171..0000000000
--- a/README.ja.md
+++ /dev/null
@@ -1,171 +0,0 @@
-# Rubyã¨ã¯
-
-Rubyã¯ã‚·ãƒ³ãƒ—ルã‹ã¤å¼·åŠ›ãªã‚ªãƒ–ジェクト指å‘スクリプト言語ã§ã™ï¼Ž Rubyã¯ç´”粋ãªã‚ªãƒ–ジェクト指å‘言語ã¨ã—ã¦è¨­è¨ˆã•れã¦ã„ã‚‹ã®ã§ï¼Œ
-オブジェクト指å‘プログラミングを手軽ã«è¡Œã†äº‹ãŒå‡ºæ¥ã¾ã™ï¼Žã‚‚ã¡ã‚ã‚“æ™®é€šã®æ‰‹ç¶šãåž‹ã®ãƒ—ログラミングもå¯èƒ½ã§ã™ï¼Ž
-
-Rubyã¯ãƒ†ã‚­ã‚¹ãƒˆå‡¦ç†é–¢ä¿‚ã®èƒ½åŠ›ãªã©ã«å„ªã‚Œï¼ŒPerlã¨åŒã˜ãらã„強力ã§ã™ï¼Žã•らã«ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡æ³•ã¨ï¼Œ
-例外処ç†ã‚„イテレータãªã©ã®æ©Ÿæ§‹ã«ã‚ˆã£ã¦ï¼Œã‚ˆã‚Šåˆ†ã‹ã‚Šã‚„ã™ã„プログラミングãŒå‡ºæ¥ã¾ã™ï¼Ž
-
-## Rubyã®ç‰¹é•·
-
-* ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡æ³•
-* 普通ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘æ©Ÿèƒ½(クラス,メソッドコールãªã©)
-* 特殊ãªã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘æ©Ÿèƒ½(Mixin, 特異メソッドãªã©)
-* 演算å­ã‚ªãƒ¼ãƒãƒ¼ãƒ­ãƒ¼ãƒ‰
-* ä¾‹å¤–å‡¦ç†æ©Ÿèƒ½
-* イテレータã¨ã‚¯ãƒ­ãƒ¼ã‚¸ãƒ£
-* ガーベージコレクタ
-* ダイナミックローディング (アーキテクãƒãƒ£ã«ã‚ˆã‚‹)
-* ç§»æ¤æ€§ãŒé«˜ã„.多ãã®Unix-like/POSIX互æ›ãƒ—ラットフォーム上ã§å‹•ãã ã‘ã§ãªã,Windows, Mac OS
- X,BeOSãªã©ã®ä¸Šã§ã‚‚å‹•ã cf.
- http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatformsJa
-
-
-## 入手法
-
-### FTPã§
-
-以下ã®å ´æ‰€ã«ãŠã„ã¦ã‚りã¾ã™ï¼Ž
-
-ftp://ftp.ruby-lang.org/pub/ruby/
-
-### Subversionã§
-
-開発先端ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§å–å¾—ã§ãã¾ã™ï¼Ž
-
- $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
-
-ä»–ã«é–‹ç™ºä¸­ã®ãƒ–ランãƒã®ä¸€è¦§ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¦‹ã‚‰ã‚Œã¾ã™ï¼Ž
-
- $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
-
-### Gitã§
-
-Subversionã®ãƒŸãƒ©ãƒ¼ã‚’GitHubã«å…¬é–‹ã—ã¦ã„ã¾ã™ï¼Ž 以下ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãƒªãƒã‚¸ãƒˆãƒªã‚’å–å¾—ã§ãã¾ã™ï¼Ž
-
- $ git clone git://github.com/ruby/ruby.git
-
-## ホームページ
-
-Rubyã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã®URLã¯
-
-http://www.ruby-lang.org/
-
-ã§ã™ï¼Ž
-
-## メーリングリスト
-
-Rubyã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚りã¾ã™ï¼Žå‚åŠ å¸Œæœ›ã®æ–¹ã¯
-
-mailto:ruby-list-request@ruby-lang.org
-
-ã¾ã§æœ¬æ–‡ã«
-
- subscribe
-
-ã¨æ›¸ã„ã¦é€ã£ã¦ä¸‹ã•ã„.
-
-Ruby開発者å‘ã‘メーリングリストもã‚りã¾ã™ï¼Žã“ã¡ã‚‰ã§ã¯rubyã®ãƒã‚°ï¼Œå°†æ¥ã®ä»•様拡張ãªã©å®Ÿè£…上ã®å•題ã«ã¤ã„ã¦è­°è«–ã•れã¦ã„ã¾ã™ï¼Ž å‚åŠ å¸Œæœ›ã®æ–¹ã¯
-
-mailto:ruby-dev-request@ruby-lang.org
-
-ã¾ã§ruby-listã¨åŒæ§˜ã®æ–¹æ³•ã§ãƒ¡ãƒ¼ãƒ«ã—ã¦ãã ã•ã„.
-
-Ruby拡張モジュールã«ã¤ã„ã¦è©±ã—åˆã†ruby-extãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¨æ•°å­¦é–¢ä¿‚ã®è©±é¡Œã«ã¤ã„ã¦è©±ã—åˆã†ruby-mathメーリングリストã¨
-英語ã§rubyã«ã¤ã„ã¦è©±ã—åˆã†ruby-talkメーリングリストもã‚りã¾ã™ï¼Žå‚加方法ã¯ã©ã‚Œã‚‚åŒã˜ã§ã™ï¼Ž
-
-## コンパイル・インストール
-
-ä»¥ä¸‹ã®æ‰‹é †ã§è¡Œã£ã¦ãã ã•ã„.
-
-1. ã‚‚ã— `configure` ファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„,もã—ã㯠`configure.in` よりå¤ã„よã†ãªã‚‰ï¼Œ `autoconf` を実行ã—ã¦
- æ–°ã—ã `configure` を生æˆã™ã‚‹
-
-2. `configure` を実行ã—㦠`Makefile` ãªã©ã‚’生æˆã™ã‚‹
-
- 環境ã«ã‚ˆã£ã¦ã¯ãƒ‡ãƒ•ォルトã®Cコンパイラ用オプションãŒä»˜ãã¾ã™ï¼Ž `configure` オプション㧠`optflags=..`
- `warnflags=..` ç­‰ã§ä¸Šæ›¸ãã§ãã¾ã™ï¼Ž
-
-3. (å¿…è¦ãªã‚‰ã°)`defines.h` を編集ã™ã‚‹
-
- 多分,必è¦ç„¡ã„ã¨æ€ã„ã¾ã™ï¼Ž
-
-4. (å¿…è¦ãªã‚‰ã°)`ext/Setup` ã«é™çš„ã«ãƒªãƒ³ã‚¯ã™ã‚‹æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’指定ã™ã‚‹
-
- `ext/Setup` ã«è¨˜è¿°ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é™çš„ã«ãƒªãƒ³ã‚¯ã•れã¾ã™ï¼Ž
-
- ダイナミックローディングをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„アーキテクãƒãƒ£ã§ã¯ `Setup` ã®1行目ã®ã€Œ`option nodynamic`ã€ã¨ã„ã†è¡Œã®ã‚³
- メントを外ã™å¿…è¦ãŒã‚りã¾ã™ï¼Žã¾ãŸï¼Œã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’利用ã™ã‚‹ãŸã‚ã«ã¯ï¼Œã‚らã‹ã˜ã‚é™çš„ã«ãƒªãƒ³ã‚¯ã‚’ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ï¼Ž
-
-5. `make` を実行ã—ã¦ã‚³ãƒ³ãƒ‘イルã™ã‚‹
-
-6. `make check`ã§ãƒ†ã‚¹ãƒˆã‚’行ã†ï¼Ž
-
- 「`check succeeded`ã€ã¨è¡¨ç¤ºã•ã‚Œã‚Œã°æˆåŠŸã§ã™ï¼ŽãŸã ã—ãƒ†ã‚¹ãƒˆã«æˆåŠŸã—ã¦ã‚‚完璧ã ã¨ä¿è¨¼ã•れã¦ã„る訳ã§ã¯ã‚りã¾ã›ã‚“.
-
-7. `make install`
-
- 以下ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作ã£ã¦ï¼Œãã“ã«ãƒ•ァイルをインストー ルã—ã¾ã™ï¼Ž
-
- * `${DESTDIR}${prefix}/bin`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib`
- * `${DESTDIR}${prefix}/lib/ruby`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/share/man/man1`
- * `${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system`
-
-
- Rubyã®APIãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ'*x.y.z*'ã§ã‚れã°ï¼Œ`${MAJOR}`ã¯
- '*x*'ã§ï¼Œ`${MINOR}`ã¯'*y*',`${TEENY}`ã¯'*z*'ã§ã™ï¼Ž
-
- **注æ„**: APIãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® `teeny` ã¯ï¼ŒRubyプログラムã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã¯ç•°ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ï¼Ž
-
- `root` ã§ä½œæ¥­ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“.
-
-
-ã‚‚ã—,コンパイル時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯ã‚¨ãƒ©ãƒ¼ã®ãƒ­ã‚°ã¨ãƒžã‚·ãƒ³ï¼ŒOSã®ç¨®é¡žã‚’å«ã‚€ã§ãã‚‹ã ã‘詳ã—ã„レãƒãƒ¼ãƒˆã‚’作者ã«é€ã£ã¦ä¸‹ã•ã‚‹ã¨ä»–ã®æ–¹ã®ãŸã‚ã«ã‚‚ãªã‚Šã¾ã™ï¼Ž
-
-## ç§»æ¤
-
-UNIXã§ã‚れ㰠`configure` ãŒã»ã¨ã‚“ã©ã®å·®ç•°ã‚’å¸åŽã—ã¦ãれるã¯ãšã§ã™ãŒï¼Œæ€ã‚ã¬è¦‹è½ã¨ã—ãŒã‚ã£ãŸå ´åˆ(ã‚る事ãŒå¤šã„),作者ã«ãã®
-ã“ã¨ã‚’報告ã™ã‚Œã°ï¼Œè§£æ±ºã§ãã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ï¼Ž
-
-アーキテクãƒãƒ£ã«ã‚‚ã£ã¨ã‚‚ä¾å­˜ã™ã‚‹ã®ã¯GC部ã§ã™ï¼ŽRubyã®GCã¯å¯¾è±¡
-ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãŒ`setjmp()`ã¾ãŸã¯`getcontext()`ã«ã‚ˆã£ã¦å…¨ã¦ã®ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’ `jmp_buf` ã‚„ `ucontext_t`
-ã«æ ¼ç´ã™ã‚‹ã“ã¨ã¨ï¼Œ `jmp_buf` ã‚„ `ucontext_t` ã¨ã‚¹ã‚¿ãƒƒã‚¯ãŒ32bitアラインメントã•れã¦ã„ã‚‹ã“ã¨ã‚’仮定
-ã—ã¦ã„ã¾ã™ï¼Žç‰¹ã«å‰è€…ãŒæˆç«‹ã—ãªã„å ´åˆã®å¯¾å¿œã¯éžå¸¸ã«å›°é›£ã§ã—ょã†ï¼Ž 後者ã®è§£æ±ºã¯æ¯”較的簡å˜ã§ï¼Œ `gc.c` ã§ã‚¹ã‚¿ãƒƒã‚¯ã‚’マークã—ã¦ã„ã‚‹
-部分ã«ã‚¢ãƒ©ã‚¤ãƒ³ãƒ¡ãƒ³ãƒˆã®ãƒã‚¤ãƒˆæ•°ã ã‘ãšã‚‰ã—ã¦ãƒžãƒ¼ã‚¯ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追加ã™ã‚‹ã ã‘ã§æ¸ˆã¿ã¾ã™ï¼Ž`defined(__mc68000__)`ã§æ‹¬ã‚‰ã‚Œã¦ã„
-る部分をå‚考ã«ã—ã¦ãã ã•ã„.
-
-レジスタウィンドウをæŒã¤CPUã§ã¯ï¼Œãƒ¬ã‚¸ã‚¹ã‚¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’スタックã«ãƒ•ラッシュã™ã‚‹ã‚¢ã‚»ãƒ³ãƒ–ラコードを追加ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“.
-
-## é…布æ¡ä»¶
-
-`COPYING.ja` ファイルをå‚ç…§ã—ã¦ãã ã•ã„.
-
-## フィードãƒãƒƒã‚¯
-
-Rubyã«é–¢ã™ã‚‹è³ªå•㯠Ruby-Talk(英語)や Ruby-List(日本語) (https://www.ruby-lang.org/ja/community/mailing-lists) や,
-stackoverflow (http://ja.stackoverflow.com/) ãªã©ã®Webã‚µã‚¤ãƒˆã«æŠ•ç¨¿ã—ã¦ãã ã•ã„.
-
-ãƒã‚°å ±å‘Šã¯ http://bugs.ruby-lang.org ã§å—ã‘付ã‘ã¦ã„ã¾ã™ï¼Ž
-
-
-## 著者
-
-Rubyã®ã‚ªãƒªã‚¸ãƒŠãƒ«ç‰ˆã¯ï¼Œ1995å¹´ã«ã¾ã¤ã‚‚ã¨ã‚†ãã²ã‚æ°ã«ã‚ˆã£ã¦è¨­è¨ˆãƒ»é–‹ç™ºã•れã¾ã—ãŸï¼Ž
-
-<mailto:matz@ruby-lang.org>
-
----
-created at: Thu Aug 3 11:57:36 JST 1995
diff --git a/README.md b/README.md
deleted file mode 100644
index 14fb7aa213..0000000000
--- a/README.md
+++ /dev/null
@@ -1,164 +0,0 @@
-# What's Ruby
-
-Ruby is the interpreted scripting language for quick and easy object-oriented
-programming. It has many features to process text files and to do system
-management tasks (as in Perl). It is simple, straight-forward, and
-extensible.
-
-## Features of Ruby
-
-* Simple Syntax
-* **Normal** Object-oriented Features (e.g. class, method calls)
-* **Advanced** Object-oriented Features (e.g. Mix-in, Singleton-method)
-* Operator Overloading
-* Exception Handling
-* Iterators and Closures
-* Garbage Collection
-* Dynamic Loading of Object Files (on some architectures)
-* Highly Portable (works on many Unix-like/POSIX compatible platforms as
- well as Windows, Mac OS X, BeOS, etc.) cf.
- http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatforms
-
-
-## How to get Ruby
-
-For a complete list of ways to install Ruby, including using third-party tools
-like rvm, see:
-
-http://www.ruby-lang.org/en/downloads/
-
-The Ruby distribution files can be found on the following FTP site:
-
-ftp://ftp.ruby-lang.org/pub/ruby/
-
-The trunk of the Ruby source tree can be checked out with the following
-command:
-
- $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
-
-Or if you are using git then use the following command:
-
- $ git clone git://github.com/ruby/ruby.git
-
-There are some other branches under development. Try the following command
-to see the list of branches:
-
- $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
-
-Or if you are using git then use the following command:
-
- $ git ls-remote git://github.com/ruby/ruby.git
-
-## Ruby home page
-
-The URL of the Ruby home page is:
-
-http://www.ruby-lang.org/
-
-## Mailing list
-
-There is a mailing list to talk about Ruby. To subscribe this list, please
-send the following phrase:
-
- subscribe
-
-in the mail body (not subject) to the address
-<mailto:ruby-talk-request@ruby-lang.org>.
-
-## How to compile and install
-
-This is what you need to do to compile and install Ruby:
-
-1. If you want to use Microsoft Visual C++ to compile ruby, read
- win32/README.win32 instead of this document.
-
-2. If `./configure` does not exist or is older than configure.in, run
- `autoconf` to (re)generate configure.
-
-3. Run `./configure`, which will generate `config.h` and `Makefile`.
-
- Some C compiler flags may be added by default depending on your
- environment. Specify `optflags=..` and `warnflags=..` as necessary to
- override them.
-
-4. Edit `defines.h` if you need. Usually this step will not be needed.
-
-5. Remove comment mark(`#`) before the module names from `ext/Setup` (or add
- module names if not present), if you want to link modules statically.
-
- If you don't want to compile non static extension modules (probably on
- architectures which do not allow dynamic loading), remove comment mark
- from the line "`#option nodynamic`" in `ext/Setup`.
-
- Usually this step will not be needed.
-
-6. Run `make`.
-
-7. Optionally, run '`make check`' to check whether the compiled Ruby
- interpreter works well. If you see the message "`check succeeded`", your
- ruby works as it should (hopefully).
-
-8. Run '`make install`'
-
- This command will create following directories and install files onto
- them.
-
- * `${DESTDIR}${prefix}/bin`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib`
- * `${DESTDIR}${prefix}/lib/ruby`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/share/man/man1`
- * `${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system`
-
-
- If Ruby's API version is '*x.y.z*', the `${MAJOR}` is '*x*', the
- `${MINOR}` is '*y*', and the `${TEENY}` is '*z*'.
-
- **NOTE**: teeny of the API version may be different from one of Ruby's
- program version
-
- You may have to be a super user to install ruby.
-
-
-If you fail to compile ruby, please send the detailed error report with the
-error log and machine/OS type, to help others.
-
-Some extension libraries may not get compiled because of lack of necessary
-external libraries and/or headers, then you will need to run '`make distclean-ext`'
-to remove old configuration after installing them in such case.
-
-## Copying
-
-See the file `COPYING`.
-
-## Feedback
-
-Questions about the Ruby language can be asked on the Ruby-Talk mailing list
-(http://www.ruby-lang.org/en/community/mailing-lists) or on websites like
-(http://stackoverflow.com).
-
-Bug reports should be filed at http://bugs.ruby-lang.org. Read [HowToReport] for more information.
-
-[HowToReport]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReport
-
-##Contributing
-
-See the file `CONTRIBUTING.md`
-
-
-## The Author
-
-Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in
-1995.
-
-<mailto:matz@ruby-lang.org>
diff --git a/ToDo b/ToDo
new file mode 100644
index 0000000000..b55e399edf
--- /dev/null
+++ b/ToDo
@@ -0,0 +1,126 @@
+Language Spec.
+
+- Class#allocate - basicNew
+- class Foo::Bar<Baz .. end, module Boo::Bar .. end
+* operator !! for rescue. ???
+* objectify characters
+* ../... outside condition invokes operator method too.
+* ... inside condition turns off just before right condition.???
+* package or access control for global variables??
+* named arguments like foo(nation:="german") or foo(nation: "german").
+* method to retrieve argument information (needs new C API)
+* multiple return values, yield values. maybe incompatible ???
+* cascading method invocation ???
+* def Class#method .. end ??
+* def Foo::Bar::baz() .. end ??
+* I18N (or M17N) script/string/regexp
+* Fixnum 0 as false ????
+* discourage use of symbol variables (e.g. $/, etc.) in manual
+* discourage use of Perlish features by giving warnings.
+* non confusing in-block local variable (is it possible?)
+ + remove scope by block
+ + variables appears within block may have independent values.
+* Regexp: make /o thread safe.
+* decide whether begin with rescue or ensure make do..while loop.
+* a +1 to be a+1, not a(+1).
+* unify == and eql? again
+* to_i returns nil if str contains no digit.
+* raise exception by `` error
+* jar like combined library package. -> RubyGems?
+* resumable Exception via Exception#resume.
+* method combination, e.g. before, after, around, etc.
+* .. or something like defadvice in Emacs.
+* property - for methods, or for objects in general.
+* "in" modifier, to annotate, or to encourage assertion.
+* selector namespace - something like generic-flet in CLOS, to help RubyBehavior
+* private instance variable (as in Python?) @_foo in class Foo => @_Foo_foo
+* warn/error "bare word" method, like "foo", you should type "foo()"
+* clarify evaluation order of operator argument (=~, .., ...)
+* :symbol => value hash in the form of {symbol: value, ...} ??
+
+Hacking Interpreter
+
+- generational GC
+* non-blocking open (e.g. for named pipe) for thread
+* avoid blocking with gethostbyname/gethostbyaddr (use fork ???)
+* objectify interpreters ???
+* remove rb_eval() recursions
+* syntax tree -> bytecode ???
+* scrambled script, or script filter
+* setuid ruby
+* performance tune for in-block (dynamic) local variables.
+* give warnings to assign magic variables.
+* export rb_io_{addstr,printf,puts,print}
+* autoload should work with threads [ruby-talk:4589]
+* remove stdio dependency from IOs.
+* warn for inconsistent local variable usage (lv m and method m at the same time).
+* MicroRuby
+* Built-in Interactive Ruby.
+* Parser API
+* trap every method invocation, which can be enabled by e.g. trap_call :method.
+* unify Errno exceptions of same errno, or new exception comparison scheme.
+* 2.times{|i| if i==0 then a = 15 else puts eval("a") end} should print nil.
+* Thread#max_stack_size attribute (possible??)
+
+Standard Libraries
+
+- Module#define_method which takes a name and a body (block, proc or method).
+- Enume#inject
+- Array#fetch
+- IO::for_fd
+- Process::waitall [ruby-talk:4557]
+- Process::Status
+- File::lchown, File::lchmod; xxx - still need work for non existing platforms
+- move Time::times to Process.
+- Enumerable#sort_by for Schwartzian transformation
+- fork_and_kill_other_threads.
+- signal list (Signal::trap, Signal::list).
+- move NameError under StandardError.
+- Integer#to_s(base)
+- Hash::new{default}
+- hash etc. should handle self referenceing array/hash
+- Array#select(n1,n2...) works like Array#indexes(n1,n2...)
+- use Mersenne Twister RNG for random.
+- deprecate Array#indexes, and Array#indices.
+- remove dependency on MAXPATHLEN.
+* String#scanf(?)
+* Object#fmt(?)
+* Time::strptime
+* Integer[num], Float[num]; Fixnum[num]?
+* method to retrieve non-number trailer for to_i/to_f.
+* Stream or Port, abstract superclass of IO ?
+* String#{pred,prev}, String#downto
+* optional stepsize argument for succ()
+* Ruby module -- Ruby::Version, Ruby::Interpreter
+* introduce Boolean class; super of TrueClass, FalseClass
+* synchronized method - synchronized{...}, synchronized :foo, :bar
+* Array#&, Array#| to allow duplication. ???
+* way to specify immortal (fork endurance) thread;
+* or raise ForkException to every thread but fork caller.
+* new user-defined marshal scheme. _dump(dumper), _load(restorer)
+* library to load per-user profile seeking .ruby_profile or ruby.ini file.
+* warning framework (warn, warning for Ruby level)
+* marshal should not depend on sprintf (works bad with locale).
+* ternary arg pow: a.pow(b,c) == a**b%c
+* new caller(), e.g. call_stack; needs better name.
+* pointer share mechanism similar to one in String for Array.
+* require "1.6" etc. by /usr/lib/ruby/1.6/1.6.rb ;-)
+* save both "feature names" and "normalized path" in $"
+* implement Mutex_m (or MutexMixin) using Mutex.
+
+Extension Libraries
+
+* ptk.rb pTk wrapper that is compatible to tk.rb
+* Berkeley DB extension
+* BitVector
+* thread-safe fcgi
+
+Ruby Libraries
+
+* urllib.rb, nttplib.rb, etc.
+* format like perl's
+
+Tools
+
+* freeze or undump to bundle everything
+* bundle using zlib
diff --git a/aclocal.m4 b/aclocal.m4
deleted file mode 100644
index 30fccd52fe..0000000000
--- a/aclocal.m4
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- autoconf -*-
-
-AC_DEFUN([_COLORIZE_RESULT_PREPARE], [
- msg_checking= msg_result_yes= msg_result_no= msg_result_other= msg_reset=
- AS_IF([test "x${CONFIGURE_TTY}" = xyes -o -t 1], [
- msg_begin="`tput smso 2>/dev/null`"
- AS_CASE(["$msg_begin"], ['@<:@'*m],
- [msg_begin="`echo "$msg_begin" | sed ['s/[0-9]*m$//']`"
- msg_checking="${msg_begin}33m"
- AS_IF([test ${TEST_COLORS:+set}], [
- msg_result_yes=[`expr ":$TEST_COLORS:" : ".*:pass=\([^:]*\):"`]
- msg_result_no=[`expr ":$TEST_COLORS:" : ".*:fail=\([^:]*\):"`]
- msg_result_other=[`expr ":$TEST_COLORS:" : ".*:skip=\([^:]*\):"`]
- ])
- msg_result_yes="${msg_begin}${msg_result_yes:-32;1}m"
- msg_result_no="${msg_begin}${msg_result_no:-31;1}m"
- msg_result_other="${msg_begin}${msg_result_other:-33;1}m"
- msg_reset="${msg_begin}m"
- ])
- AS_UNSET(msg_begin)
- ])
- AS_REQUIRE_SHELL_FN([colorize_result],
- [AS_FUNCTION_DESCRIBE([colorize_result], [MSG], [Colorize result])],
- [AS_CASE(["$[]1"],
- [yes], [AS_ECHO(["${msg_result_yes}$[]1${msg_reset}]")],
- [no], [AS_ECHO(["${msg_result_no}$[]1${msg_reset}]")],
- [AS_ECHO(["${msg_result_other}$[]1${msg_reset}]")])])
-])
-
-AC_DEFUN([COLORIZE_RESULT], [AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
- AS_LITERAL_IF([$1],
- [m4_case([$1],
- [yes], [AS_ECHO(["${msg_result_yes}$1${msg_reset}"])],
- [no], [AS_ECHO(["${msg_result_no}$1${msg_reset}"])],
- [AS_ECHO(["${msg_result_other}$1${msg_reset}"])])],
- [colorize_result "$1"]) dnl
-])
-
-AC_DEFUN([AC_CHECKING],[dnl
-AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
-AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])
-
-AC_DEFUN([AC_MSG_RESULT], [dnl
-{ _AS_ECHO_LOG([result: $1])
-COLORIZE_RESULT([$1]); dnl
-}])
diff --git a/addr2line.c b/addr2line.c
deleted file mode 100644
index c8faf48d62..0000000000
--- a/addr2line.c
+++ /dev/null
@@ -1,1208 +0,0 @@
-/**********************************************************************
-
- addr2line.c -
-
- $Author$
-
- Copyright (C) 2010 Shinichiro Hamaji
-
-**********************************************************************/
-
-#include "ruby/config.h"
-#include "ruby/missing.h"
-#include "addr2line.h"
-
-#include <stdio.h>
-#include <errno.h>
-
-#ifdef USE_ELF
-
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#ifdef __OpenBSD__
-#include <elf_abi.h>
-#else
-#include <elf.h>
-#endif
-
-/* Make alloca work the best possible way. */
-#ifdef __GNUC__
-# ifndef atarist
-# ifndef alloca
-# define alloca __builtin_alloca
-# endif
-# endif /* atarist */
-#else
-# ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
-#pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca();
-# endif
-# endif /* AIX */
-# endif /* HAVE_ALLOCA_H */
-#endif /* __GNUC__ */
-
-#ifdef HAVE_DLADDR
-# include <dlfcn.h>
-#endif
-
-#define DW_LNS_copy 0x01
-#define DW_LNS_advance_pc 0x02
-#define DW_LNS_advance_line 0x03
-#define DW_LNS_set_file 0x04
-#define DW_LNS_set_column 0x05
-#define DW_LNS_negate_stmt 0x06
-#define DW_LNS_set_basic_block 0x07
-#define DW_LNS_const_add_pc 0x08
-#define DW_LNS_fixed_advance_pc 0x09
-#define DW_LNS_set_prologue_end 0x0a /* DWARF3 */
-#define DW_LNS_set_epilogue_begin 0x0b /* DWARF3 */
-#define DW_LNS_set_isa 0x0c /* DWARF3 */
-
-/* Line number extended opcode name. */
-#define DW_LNE_end_sequence 0x01
-#define DW_LNE_set_address 0x02
-#define DW_LNE_define_file 0x03
-#define DW_LNE_set_discriminator 0x04 /* DWARF4 */
-
-#ifndef ElfW
-# if SIZEOF_VOIDP == 8
-# define ElfW(x) Elf64##_##x
-# else
-# define ElfW(x) Elf32##_##x
-# endif
-#endif
-#ifndef ELF_ST_TYPE
-# if SIZEOF_VOIDP == 8
-# define ELF_ST_TYPE ELF64_ST_TYPE
-# else
-# define ELF_ST_TYPE ELF32_ST_TYPE
-# endif
-#endif
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
-int kprintf(const char *fmt, ...);
-
-typedef struct {
- const char *dirname;
- const char *filename;
- const char *path; /* object path */
- int line;
-
- uintptr_t base_addr;
- uintptr_t saddr;
- const char *sname; /* function name */
-} line_info_t;
-typedef struct obj_info obj_info_t;
-struct obj_info {
- const char *path; /* object path */
- int fd;
- void *mapped;
- size_t mapped_size;
- uintptr_t base_addr;
- obj_info_t *next;
-};
-
-/* Avoid consuming stack as this module may be used from signal handler */
-static char binary_filename[PATH_MAX];
-
-static unsigned long
-uleb128(char **p)
-{
- unsigned long r = 0;
- int s = 0;
- for (;;) {
- unsigned char b = *(unsigned char *)(*p)++;
- if (b < 0x80) {
- r += (unsigned long)b << s;
- break;
- }
- r += (b & 0x7f) << s;
- s += 7;
- }
- return r;
-}
-
-static long
-sleb128(char **p)
-{
- long r = 0;
- int s = 0;
- for (;;) {
- unsigned char b = *(unsigned char *)(*p)++;
- if (b < 0x80) {
- if (b & 0x40) {
- r -= (0x80 - b) << s;
- }
- else {
- r += (b & 0x3f) << s;
- }
- break;
- }
- r += (b & 0x7f) << s;
- s += 7;
- }
- return r;
-}
-
-static const char *
-get_nth_dirname(unsigned long dir, char *p)
-{
- if (!dir--) {
- return "";
- }
- while (dir--) {
- while (*p) p++;
- p++;
- if (!*p) {
- kprintf("Unexpected directory number %lu in %s\n",
- dir, binary_filename);
- return "";
- }
- }
- return p;
-}
-
-static void
-fill_filename(int file, char *include_directories, char *filenames,
- line_info_t *line)
-{
- int i;
- char *p = filenames;
- char *filename;
- unsigned long dir;
- for (i = 1; i <= file; i++) {
- filename = p;
- if (!*p) {
- /* Need to output binary file name? */
- kprintf("Unexpected file number %d in %s\n",
- file, binary_filename);
- return;
- }
- while (*p) p++;
- p++;
- dir = uleb128(&p);
- /* last modified. */
- uleb128(&p);
- /* size of the file. */
- uleb128(&p);
-
- if (i == file) {
- line->filename = filename;
- line->dirname = get_nth_dirname(dir, include_directories);
- }
- }
-}
-
-static void
-fill_line(int num_traces, void **traces, uintptr_t addr, int file, int line,
- char *include_directories, char *filenames,
- obj_info_t *obj, line_info_t *lines, int offset)
-{
- int i;
- addr += obj->base_addr;
- for (i = offset; i < num_traces; i++) {
- uintptr_t a = (uintptr_t)traces[i];
- /* We assume one line code doesn't result >100 bytes of native code.
- We may want more reliable way eventually... */
- if (addr < a && a < addr + 100) {
- fill_filename(file, include_directories, filenames, &lines[i]);
- lines[i].line = line;
- }
- }
-}
-
-static void
-parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
- obj_info_t *obj, line_info_t *lines, int offset)
-{
- char *p, *cu_end, *cu_start, *include_directories, *filenames;
- unsigned long unit_length;
- int default_is_stmt, line_base;
- unsigned int header_length, minimum_instruction_length, line_range,
- opcode_base;
- /* unsigned char *standard_opcode_lengths; */
-
- /* The registers. */
- unsigned long addr = 0;
- unsigned int file = 1;
- unsigned int line = 1;
- /* unsigned int column = 0; */
- int is_stmt;
- /* int basic_block = 0; */
- /* int end_sequence = 0; */
- /* int prologue_end = 0; */
- /* int epilogue_begin = 0; */
- /* unsigned int isa = 0; */
-
- p = *debug_line;
-
- unit_length = *(unsigned int *)p;
- p += sizeof(unsigned int);
- if (unit_length == 0xffffffff) {
- unit_length = *(unsigned long *)p;
- p += sizeof(unsigned long);
- }
-
- cu_end = p + unit_length;
-
- /*dwarf_version = *(unsigned short *)p;*/
- p += 2;
-
- header_length = *(unsigned int *)p;
- p += sizeof(unsigned int);
-
- cu_start = p + header_length;
-
- minimum_instruction_length = *(unsigned char *)p;
- p++;
-
- is_stmt = default_is_stmt = *(unsigned char *)p;
- p++;
-
- line_base = *(signed char *)p;
- p++;
-
- line_range = *(unsigned char *)p;
- p++;
-
- opcode_base = *(unsigned char *)p;
- p++;
-
- /* standard_opcode_lengths = (unsigned char *)p - 1; */
- p += opcode_base - 1;
-
- include_directories = p;
-
- /* skip include directories */
- while (*p) {
- while (*p) p++;
- p++;
- }
- p++;
-
- filenames = p;
-
- p = cu_start;
-
-#define FILL_LINE() \
- do { \
- fill_line(num_traces, traces, addr, file, line, \
- include_directories, filenames, \
- obj, lines, offset); \
- /*basic_block = prologue_end = epilogue_begin = 0;*/ \
- } while (0)
-
- while (p < cu_end) {
- unsigned long a;
- unsigned char op = *p++;
- switch (op) {
- case DW_LNS_copy:
- FILL_LINE();
- break;
- case DW_LNS_advance_pc:
- a = uleb128(&p);
- addr += a;
- break;
- case DW_LNS_advance_line: {
- long a = sleb128(&p);
- line += a;
- break;
- }
- case DW_LNS_set_file:
- file = (unsigned int)uleb128(&p);
- break;
- case DW_LNS_set_column:
- /*column = (unsigned int)*/(void)uleb128(&p);
- break;
- case DW_LNS_negate_stmt:
- is_stmt = !is_stmt;
- break;
- case DW_LNS_set_basic_block:
- /*basic_block = 1; */
- break;
- case DW_LNS_const_add_pc:
- a = ((255 - opcode_base) / line_range) *
- minimum_instruction_length;
- addr += a;
- break;
- case DW_LNS_fixed_advance_pc:
- a = *(unsigned char *)p++;
- addr += a;
- break;
- case DW_LNS_set_prologue_end:
- /* prologue_end = 1; */
- break;
- case DW_LNS_set_epilogue_begin:
- /* epilogue_begin = 1; */
- break;
- case DW_LNS_set_isa:
- /* isa = (unsigned int)*/(void)uleb128(&p);
- break;
- case 0:
- a = *(unsigned char *)p++;
- op = *p++;
- switch (op) {
- case DW_LNE_end_sequence:
- /* end_sequence = 1; */
- FILL_LINE();
- addr = 0;
- file = 1;
- line = 1;
- /* column = 0; */
- is_stmt = default_is_stmt;
- /* end_sequence = 0; */
- /* isa = 0; */
- break;
- case DW_LNE_set_address:
- addr = *(unsigned long *)p;
- p += sizeof(unsigned long);
- break;
- case DW_LNE_define_file:
- kprintf("Unsupported operation in %s\n",
- binary_filename);
- break;
- case DW_LNE_set_discriminator:
- /* TODO:currently ignore */
- uleb128(&p);
- break;
- default:
- kprintf("Unknown extended opcode: %d in %s\n",
- op, binary_filename);
- }
- break;
- default: {
- unsigned long addr_incr;
- unsigned long line_incr;
- a = op - opcode_base;
- addr_incr = (a / line_range) * minimum_instruction_length;
- line_incr = line_base + (a % line_range);
- addr += (unsigned int)addr_incr;
- line += (unsigned int)line_incr;
- FILL_LINE();
- }
- }
- }
- *debug_line = p;
-}
-
-static void
-parse_debug_line(int num_traces, void **traces,
- char *debug_line, unsigned long size,
- obj_info_t *obj, line_info_t *lines, int offset)
-{
- char *debug_line_end = debug_line + size;
- while (debug_line < debug_line_end) {
- parse_debug_line_cu(num_traces, traces, &debug_line, obj, lines, offset);
- }
- if (debug_line != debug_line_end) {
- kprintf("Unexpected size of .debug_line in %s\n",
- binary_filename);
- }
-}
-
-/* read file and fill lines */
-static uintptr_t
-fill_lines(int num_traces, void **traces, int check_debuglink,
- obj_info_t **objp, line_info_t *lines, int offset);
-
-static void
-append_obj(obj_info_t **objp) {
- obj_info_t *newobj = calloc(1, sizeof(obj_info_t));
- if (*objp) (*objp)->next = newobj;
- *objp = newobj;
-}
-
-static void
-follow_debuglink(char *debuglink, int num_traces, void **traces,
- obj_info_t **objp, line_info_t *lines, int offset)
-{
- /* Ideally we should check 4 paths to follow gnu_debuglink,
- but we handle only one case for now as this format is used
- by some linux distributions. See GDB's info for detail. */
- static const char global_debug_dir[] = "/usr/lib/debug";
- char *p, *subdir;
- obj_info_t *o1 = *objp, *o2;
-
- p = strrchr(binary_filename, '/');
- if (!p) {
- return;
- }
- p[1] = '\0';
-
- subdir = (char *)alloca(strlen(binary_filename) + 1);
- strcpy(subdir, binary_filename);
- strcpy(binary_filename, global_debug_dir);
- strlcat(binary_filename, subdir, PATH_MAX);
- strlcat(binary_filename, debuglink, PATH_MAX);
-
- append_obj(objp);
- o2 = *objp;
- o2->base_addr = o1->base_addr;
- o2->path = o1->path;
- fill_lines(num_traces, traces, 0, objp, lines, offset);
-}
-
-/* read file and fill lines */
-static uintptr_t
-fill_lines(int num_traces, void **traces, int check_debuglink,
- obj_info_t **objp, line_info_t *lines, int offset)
-{
- int i, j;
- char *shstr;
- char *section_name;
- ElfW(Ehdr) *ehdr;
- ElfW(Shdr) *shdr, *shstr_shdr;
- ElfW(Shdr) *debug_line_shdr = NULL, *gnu_debuglink_shdr = NULL;
- int fd;
- off_t filesize;
- char *file;
- ElfW(Shdr) *symtab_shdr = NULL, *strtab_shdr = NULL;
- ElfW(Shdr) *dynsym_shdr = NULL, *dynstr_shdr = NULL;
- obj_info_t *obj = *objp;
- uintptr_t dladdr_fbase = 0;
-
- fd = open(binary_filename, O_RDONLY);
- if (fd < 0) {
- goto fail;
- }
- filesize = lseek(fd, 0, SEEK_END);
- if (filesize < 0) {
- int e = errno;
- close(fd);
- kprintf("lseek: %s\n", strerror(e));
- goto fail;
- }
-#if SIZEOF_OFF_T > SIZEOF_SIZE_T
- if (filesize > (off_t)SIZE_MAX) {
- close(fd);
- kprintf("Too large file %s\n", binary_filename);
- goto fail;
- }
-#endif
- lseek(fd, 0, SEEK_SET);
- /* async-signal unsafe */
- file = (char *)mmap(NULL, (size_t)filesize, PROT_READ, MAP_SHARED, fd, 0);
- if (file == MAP_FAILED) {
- int e = errno;
- close(fd);
- kprintf("mmap: %s\n", strerror(e));
- goto fail;
- }
-
- ehdr = (ElfW(Ehdr) *)file;
- if (memcmp(ehdr->e_ident, "\177ELF", 4) != 0) {
- /*
- * Huh? Maybe filename was overridden by setproctitle() and
- * it match non-elf file.
- */
- close(fd);
- goto fail;
- }
-
- obj->fd = fd;
- obj->mapped = file;
- obj->mapped_size = (size_t)filesize;
-
- shdr = (ElfW(Shdr) *)(file + ehdr->e_shoff);
-
- shstr_shdr = shdr + ehdr->e_shstrndx;
- shstr = file + shstr_shdr->sh_offset;
-
- for (i = 0; i < ehdr->e_shnum; i++) {
- section_name = shstr + shdr[i].sh_name;
- switch (shdr[i].sh_type) {
- case SHT_STRTAB:
- if (!strcmp(section_name, ".strtab")) {
- strtab_shdr = shdr + i;
- }
- else if (!strcmp(section_name, ".dynstr")) {
- dynstr_shdr = shdr + i;
- }
- break;
- case SHT_SYMTAB:
- /* if (!strcmp(section_name, ".symtab")) */
- symtab_shdr = shdr + i;
- break;
- case SHT_DYNSYM:
- /* if (!strcmp(section_name, ".dynsym")) */
- dynsym_shdr = shdr + i;
- break;
- case SHT_PROGBITS:
- if (!strcmp(section_name, ".debug_line")) {
- debug_line_shdr = shdr + i;
- }
- else if (!strcmp(section_name, ".gnu_debuglink")) {
- gnu_debuglink_shdr = shdr + i;
- }
- break;
- }
- }
-
- if (offset == -1) {
- /* main executable */
- offset = 0;
- if (dynsym_shdr && dynstr_shdr) {
- char *strtab = file + dynstr_shdr->sh_offset;
- ElfW(Sym) *symtab = (ElfW(Sym) *)(file + dynsym_shdr->sh_offset);
- int symtab_count = (int)(dynsym_shdr->sh_size / sizeof(ElfW(Sym)));
- for (j = 0; j < symtab_count; j++) {
- ElfW(Sym) *sym = &symtab[j];
- Dl_info info;
- void *h, *s;
- if (ELF_ST_TYPE(sym->st_info) != STT_FUNC || sym->st_size <= 0) continue;
- h = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);
- if (!h) continue;
- s = dlsym(h, strtab + sym->st_name);
- if (!s) continue;
- if (dladdr(s, &info)) {
- dladdr_fbase = (uintptr_t)info.dli_fbase;
- break;
- }
- }
- if (ehdr->e_type == ET_EXEC) {
- obj->base_addr = 0;
- }
- else {
- /* PIE (position-independent executable) */
- obj->base_addr = dladdr_fbase;
- }
- }
- }
-
- if (!symtab_shdr) {
- symtab_shdr = dynsym_shdr;
- strtab_shdr = dynstr_shdr;
- }
-
- if (symtab_shdr && strtab_shdr) {
- char *strtab = file + strtab_shdr->sh_offset;
- ElfW(Sym) *symtab = (ElfW(Sym) *)(file + symtab_shdr->sh_offset);
- int symtab_count = (int)(symtab_shdr->sh_size / sizeof(ElfW(Sym)));
- for (j = 0; j < symtab_count; j++) {
- ElfW(Sym) *sym = &symtab[j];
- uintptr_t saddr = (uintptr_t)sym->st_value + obj->base_addr;
- if (ELF_ST_TYPE(sym->st_info) != STT_FUNC || sym->st_size <= 0) continue;
- for (i = offset; i < num_traces; i++) {
- uintptr_t d = (uintptr_t)traces[i] - saddr;
- if (lines[i].line > 0 || d <= 0 || d > (uintptr_t)sym->st_size)
- continue;
- /* fill symbol name and addr from .symtab */
- lines[i].sname = strtab + sym->st_name;
- lines[i].saddr = saddr;
- lines[i].path = obj->path;
- lines[i].base_addr = obj->base_addr;
- }
- }
- }
-
- if (!debug_line_shdr) {
- /* This file doesn't have .debug_line section,
- let's check .gnu_debuglink section instead. */
- if (gnu_debuglink_shdr && check_debuglink) {
- follow_debuglink(file + gnu_debuglink_shdr->sh_offset,
- num_traces, traces,
- objp, lines, offset);
- }
- goto finish;
- }
-
- parse_debug_line(num_traces, traces,
- file + debug_line_shdr->sh_offset,
- debug_line_shdr->sh_size,
- obj, lines, offset);
-finish:
- return dladdr_fbase;
-fail:
- return (uintptr_t)-1;
-}
-
-#define HAVE_MAIN_EXE_PATH
-#if defined(__FreeBSD__)
-# include <sys/sysctl.h>
-#endif
-/* ssize_t main_exe_path(void)
- *
- * store the path of the main executable to `binary_filename`,
- * and returns strlen(binary_filename).
- * it is NUL terminated.
- */
-#if defined(__linux__)
-ssize_t
-main_exe_path(void)
-{
-# define PROC_SELF_EXE "/proc/self/exe"
- ssize_t len = readlink(PROC_SELF_EXE, binary_filename, PATH_MAX);
- binary_filename[len] = 0;
- return len;
-}
-#elif defined(__FreeBSD__)
-ssize_t
-main_exe_path(void)
-{
- int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
- size_t len = PATH_MAX;
- int err = sysctl(mib, 4, binary_filename, &len, NULL, 0);
- if (err) {
- kprintf("Can't get the path of ruby");
- return -1;
- }
- len--; /* sysctl sets strlen+1 */
- return len;
-}
-#else
-#undef HAVE_MAIN_EXE_PATH
-#endif
-
-void
-rb_dump_backtrace_with_lines(int num_traces, void **traces)
-{
- int i;
- /* async-signal unsafe */
- line_info_t *lines = (line_info_t *)calloc(num_traces, sizeof(line_info_t));
- obj_info_t *obj = NULL;
- /* 2 is NULL + main executable */
- void **dladdr_fbases = (void **)calloc(num_traces+2, sizeof(void *));
-#ifdef HAVE_MAIN_EXE_PATH
- char *main_path = NULL; /* used on printing backtrace */
- ssize_t len;
- if ((len = main_exe_path()) > 0) {
- main_path = (char *)alloca(len + 1);
- if (main_path) {
- uintptr_t addr;
- memcpy(main_path, binary_filename, len+1);
- append_obj(&obj);
- obj->path = main_path;
- addr = fill_lines(num_traces, traces, 1, &obj, lines, -1);
- if (addr != (uintptr_t)-1) {
- dladdr_fbases[0] = (void *)addr;
- }
- }
- }
-#endif
-
- /* fill source lines by reading dwarf */
- for (i = 0; i < num_traces; i++) {
- Dl_info info;
- if (lines[i].line) continue;
- if (dladdr(traces[i], &info)) {
- const char *path;
- void **p;
-
- /* skip symbols which is in already checked objects */
- /* if the binary is strip-ed, this may effect */
- for (p=dladdr_fbases; *p; p++) {
- if (*p == info.dli_fbase) {
- lines[i].path = info.dli_fname;
- lines[i].sname = info.dli_sname;
- goto next_line;
- }
- }
- *p = info.dli_fbase;
-
- append_obj(&obj);
- obj->base_addr = (uintptr_t)info.dli_fbase;
- path = info.dli_fname;
- obj->path = path;
- lines[i].path = path;
- strcpy(binary_filename, path);
- fill_lines(num_traces, traces, 1, &obj, lines, i);
- }
-next_line:
- continue;
- }
-
- /* output */
- for (i = 0; i < num_traces; i++) {
- line_info_t *line = &lines[i];
- uintptr_t addr = (uintptr_t)traces[i];
- uintptr_t d = addr - line->saddr;
- if (!line->path) {
- kprintf("[0x%lx]\n", addr);
- }
- else if (!line->saddr || !line->sname) {
- kprintf("%s [0x%lx]\n", line->path, addr);
- }
- else if (line->line <= 0) {
- kprintf("%s(%s+0x%lx) [0x%lx]\n", line->path, line->sname,
- d, addr);
- }
- else if (!line->filename) {
- kprintf("%s(%s+0x%lx) [0x%lx] ???:%d\n", line->path, line->sname,
- d, addr, line->line);
- }
- else if (line->dirname && line->dirname[0]) {
- kprintf("%s(%s+0x%lx) [0x%lx] %s/%s:%d\n", line->path, line->sname,
- d, addr, line->dirname, line->filename, line->line);
- }
- else {
- kprintf("%s(%s+0x%lx) [0x%lx] %s:%d\n", line->path, line->sname,
- d, addr, line->filename, line->line);
- }
- /* FreeBSD's backtrace may show _start and so on */
- if (line->sname && strcmp("main", line->sname) == 0)
- break;
- }
-
- /* free */
- while (obj) {
- obj_info_t *o = obj;
- obj = o->next;
- if (o->fd) {
- munmap(o->mapped, o->mapped_size);
- close(o->fd);
- }
- free(o);
- }
- free(lines);
- free(dladdr_fbases);
-}
-
-/* From FreeBSD's lib/libstand/printf.c */
-/*-
- * Copyright (c) 1986, 1988, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)subr_prf.c 8.3 (Berkeley) 1/21/94
- */
-
-#include <stdarg.h>
-#define MAXNBUF (sizeof(intmax_t) * CHAR_BIT + 1)
-extern int rb_toupper(int c);
-#define toupper(c) rb_toupper(c)
-#define hex2ascii(hex) (hex2ascii_data[hex])
-char const hex2ascii_data[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static inline int imax(int a, int b) { return (a > b ? a : b); }
-static int kvprintf(char const *fmt, void (*func)(int), void *arg, int radix, va_list ap);
-
-static void putce(int c)
-{
- char s[1];
- ssize_t ret;
-
- s[0] = (char)c;
- ret = write(2, s, 1);
- (void)ret;
-}
-
-int
-kprintf(const char *fmt, ...)
-{
- va_list ap;
- int retval;
-
- va_start(ap, fmt);
- retval = kvprintf(fmt, putce, NULL, 10, ap);
- va_end(ap);
- return retval;
-}
-
-/*
- * Put a NUL-terminated ASCII number (base <= 36) in a buffer in reverse
- * order; return an optional length and a pointer to the last character
- * written in the buffer (i.e., the first character of the string).
- * The buffer pointed to by `nbuf' must have length >= MAXNBUF.
- */
-static char *
-ksprintn(char *nbuf, uintmax_t num, int base, int *lenp, int upper)
-{
- char *p, c;
-
- p = nbuf;
- *p = '\0';
- do {
- c = hex2ascii(num % base);
- *++p = upper ? toupper(c) : c;
- } while (num /= base);
- if (lenp)
- *lenp = (int)(p - nbuf);
- return (p);
-}
-
-/*
- * Scaled down version of printf(3).
- *
- * Two additional formats:
- *
- * The format %b is supported to decode error registers.
- * Its usage is:
- *
- * printf("reg=%b\n", regval, "<base><arg>*");
- *
- * where <base> is the output base expressed as a control character, e.g.
- * \10 gives octal; \20 gives hex. Each arg is a sequence of characters,
- * the first of which gives the bit number to be inspected (origin 1), and
- * the next characters (up to a control character, i.e. a character <= 32),
- * give the name of the register. Thus:
- *
- * kvprintf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
- *
- * would produce output:
- *
- * reg=3<BITTWO,BITONE>
- *
- * XXX: %D -- Hexdump, takes pointer and separator string:
- * ("%6D", ptr, ":") -> XX:XX:XX:XX:XX:XX
- * ("%*D", len, ptr, " " -> XX XX XX XX ...
- */
-static int
-kvprintf(char const *fmt, void (*func)(int), void *arg, int radix, va_list ap)
-{
-#define PCHAR(c) {int cc=(c); if (func) (*func)(cc); else *d++ = cc; retval++; }
- char nbuf[MAXNBUF];
- char *d;
- const char *p, *percent, *q;
- unsigned char *up;
- int ch, n;
- uintmax_t num;
- int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
- int cflag, hflag, jflag, tflag, zflag;
- int dwidth, upper;
- char padc;
- int stop = 0, retval = 0;
-
- num = 0;
- if (!func)
- d = (char *) arg;
- else
- d = NULL;
-
- if (fmt == NULL)
- fmt = "(fmt null)\n";
-
- if (radix < 2 || radix > 36)
- radix = 10;
-
- for (;;) {
- padc = ' ';
- width = 0;
- while ((ch = (unsigned char)*fmt++) != '%' || stop) {
- if (ch == '\0')
- return (retval);
- PCHAR(ch);
- }
- percent = fmt - 1;
- qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0;
- sign = 0; dot = 0; dwidth = 0; upper = 0;
- cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0;
-reswitch: switch (ch = (unsigned char)*fmt++) {
- case '.':
- dot = 1;
- goto reswitch;
- case '#':
- sharpflag = 1;
- goto reswitch;
- case '+':
- sign = 1;
- goto reswitch;
- case '-':
- ladjust = 1;
- goto reswitch;
- case '%':
- PCHAR(ch);
- break;
- case '*':
- if (!dot) {
- width = va_arg(ap, int);
- if (width < 0) {
- ladjust = !ladjust;
- width = -width;
- }
- } else {
- dwidth = va_arg(ap, int);
- }
- goto reswitch;
- case '0':
- if (!dot) {
- padc = '0';
- goto reswitch;
- }
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- for (n = 0;; ++fmt) {
- n = n * 10 + ch - '0';
- ch = *fmt;
- if (ch < '0' || ch > '9')
- break;
- }
- if (dot)
- dwidth = n;
- else
- width = n;
- goto reswitch;
- case 'b':
- num = (unsigned int)va_arg(ap, int);
- p = va_arg(ap, char *);
- for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;)
- PCHAR(*q--);
-
- if (num == 0)
- break;
-
- for (tmp = 0; *p;) {
- n = *p++;
- if (num & (1 << (n - 1))) {
- PCHAR(tmp ? ',' : '<');
- for (; (n = *p) > ' '; ++p)
- PCHAR(n);
- tmp = 1;
- } else
- for (; *p > ' '; ++p)
- continue;
- }
- if (tmp)
- PCHAR('>');
- break;
- case 'c':
- PCHAR(va_arg(ap, int));
- break;
- case 'D':
- up = va_arg(ap, unsigned char *);
- p = va_arg(ap, char *);
- if (!width)
- width = 16;
- while(width--) {
- PCHAR(hex2ascii(*up >> 4));
- PCHAR(hex2ascii(*up & 0x0f));
- up++;
- if (width)
- for (q=p;*q;q++)
- PCHAR(*q);
- }
- break;
- case 'd':
- case 'i':
- base = 10;
- sign = 1;
- goto handle_sign;
- case 'h':
- if (hflag) {
- hflag = 0;
- cflag = 1;
- } else
- hflag = 1;
- goto reswitch;
- case 'j':
- jflag = 1;
- goto reswitch;
- case 'l':
- if (lflag) {
- lflag = 0;
- qflag = 1;
- } else
- lflag = 1;
- goto reswitch;
- case 'n':
- if (jflag)
- *(va_arg(ap, intmax_t *)) = retval;
- else if (qflag)
- *(va_arg(ap, int64_t *)) = retval;
- else if (lflag)
- *(va_arg(ap, long *)) = retval;
- else if (zflag)
- *(va_arg(ap, size_t *)) = retval;
- else if (hflag)
- *(va_arg(ap, short *)) = retval;
- else if (cflag)
- *(va_arg(ap, char *)) = retval;
- else
- *(va_arg(ap, int *)) = retval;
- break;
- case 'o':
- base = 8;
- goto handle_nosign;
- case 'p':
- base = 16;
- sharpflag = (width == 0);
- sign = 0;
- num = (uintptr_t)va_arg(ap, void *);
- goto number;
- case 'q':
- qflag = 1;
- goto reswitch;
- case 'r':
- base = radix;
- if (sign)
- goto handle_sign;
- goto handle_nosign;
- case 's':
- p = va_arg(ap, char *);
- if (p == NULL)
- p = "(null)";
- if (!dot)
- n = (int)strlen (p);
- else
- for (n = 0; n < dwidth && p[n]; n++)
- continue;
-
- width -= n;
-
- if (!ladjust && width > 0)
- while (width--)
- PCHAR(padc);
- while (n--)
- PCHAR(*p++);
- if (ladjust && width > 0)
- while (width--)
- PCHAR(padc);
- break;
- case 't':
- tflag = 1;
- goto reswitch;
- case 'u':
- base = 10;
- goto handle_nosign;
- case 'X':
- upper = 1;
- case 'x':
- base = 16;
- goto handle_nosign;
- case 'y':
- base = 16;
- sign = 1;
- goto handle_sign;
- case 'z':
- zflag = 1;
- goto reswitch;
-handle_nosign:
- sign = 0;
- if (jflag)
- num = va_arg(ap, uintmax_t);
- else if (qflag)
- num = va_arg(ap, uint64_t);
- else if (tflag)
- num = va_arg(ap, ptrdiff_t);
- else if (lflag)
- num = va_arg(ap, unsigned long);
- else if (zflag)
- num = va_arg(ap, size_t);
- else if (hflag)
- num = (unsigned short)va_arg(ap, int);
- else if (cflag)
- num = (unsigned char)va_arg(ap, int);
- else
- num = va_arg(ap, unsigned int);
- goto number;
-handle_sign:
- if (jflag)
- num = va_arg(ap, intmax_t);
- else if (qflag)
- num = va_arg(ap, int64_t);
- else if (tflag)
- num = va_arg(ap, ptrdiff_t);
- else if (lflag)
- num = va_arg(ap, long);
- else if (zflag)
- num = va_arg(ap, ssize_t);
- else if (hflag)
- num = (short)va_arg(ap, int);
- else if (cflag)
- num = (char)va_arg(ap, int);
- else
- num = va_arg(ap, int);
-number:
- if (sign && (intmax_t)num < 0) {
- neg = 1;
- num = -(intmax_t)num;
- }
- p = ksprintn(nbuf, num, base, &n, upper);
- tmp = 0;
- if (sharpflag && num != 0) {
- if (base == 8)
- tmp++;
- else if (base == 16)
- tmp += 2;
- }
- if (neg)
- tmp++;
-
- if (!ladjust && padc == '0')
- dwidth = width - tmp;
- width -= tmp + imax(dwidth, n);
- dwidth -= n;
- if (!ladjust)
- while (width-- > 0)
- PCHAR(' ');
- if (neg)
- PCHAR('-');
- if (sharpflag && num != 0) {
- if (base == 8) {
- PCHAR('0');
- } else if (base == 16) {
- PCHAR('0');
- PCHAR('x');
- }
- }
- while (dwidth-- > 0)
- PCHAR('0');
-
- while (*p)
- PCHAR(*p--);
-
- if (ladjust)
- while (width-- > 0)
- PCHAR(' ');
-
- break;
- default:
- while (percent < fmt)
- PCHAR(*percent++);
- /*
- * Since we ignore an formatting argument it is no
- * longer safe to obey the remaining formatting
- * arguments as the arguments will no longer match
- * the format specs.
- */
- stop = 1;
- break;
- }
- }
-#undef PCHAR
-}
-#else /* defined(USE_ELF) */
-#error not supported
-#endif
diff --git a/addr2line.h b/addr2line.h
deleted file mode 100644
index d99f010934..0000000000
--- a/addr2line.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**********************************************************************
-
- addr2line.h -
-
- $Author$
-
- Copyright (C) 2010 Shinichiro Hamaji
-
-**********************************************************************/
-
-#ifndef RUBY_ADDR2LINE_H
-#define RUBY_ADDR2LINE_H
-
-#ifdef USE_ELF
-
-void
-rb_dump_backtrace_with_lines(int num_traces, void **traces);
-
-#endif /* USE_ELF */
-
-#endif /* RUBY_ADDR2LINE_H */
diff --git a/array.c b/array.c
index dd14837b76..503a7adba3 100644
--- a/array.c
+++ b/array.c
@@ -3,500 +3,164 @@
array.c -
$Author$
+ $Date$
created at: Fri Aug 6 09:46:12 JST 1993
- Copyright (C) 1993-2007 Yukihiro Matsumoto
+ Copyright (C) 1993-2003 Yukihiro Matsumoto
Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
Copyright (C) 2000 Information-technology Promotion Agency, Japan
**********************************************************************/
-#include "internal.h"
-#include "ruby/util.h"
-#include "ruby/st.h"
-#include "probes.h"
-#include "id.h"
-
-#ifndef ARRAY_DEBUG
-# define NDEBUG
-#endif
-#include <assert.h>
+#include "ruby.h"
+#include "util.h"
+#include "st.h"
VALUE rb_cArray;
-
-static ID id_cmp, id_div, id_power;
+static ID id_cmp;
#define ARY_DEFAULT_SIZE 16
-#define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
-
-# define ARY_SHARED_P(ary) \
- (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
- FL_TEST((ary),ELTS_SHARED)!=0)
-# define ARY_EMBED_P(ary) \
- (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
- FL_TEST((ary), RARRAY_EMBED_FLAG)!=0)
-
-#define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr)
-#define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len)
-#define ARY_EMBED_PTR(a) (assert(ARY_EMBED_P(a)), RARRAY(a)->as.ary)
-#define ARY_EMBED_LEN(a) \
- (assert(ARY_EMBED_P(a)), \
- (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
- (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)))
-#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), RARRAY(a)->as.heap.aux.capa * sizeof(VALUE))
-
-#define ARY_OWNS_HEAP_P(a) (!FL_TEST((a), ELTS_SHARED|RARRAY_EMBED_FLAG))
-#define FL_SET_EMBED(a) do { \
- assert(!ARY_SHARED_P(a)); \
- FL_SET((a), RARRAY_EMBED_FLAG); \
-} while (0)
-#define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK)
-#define FL_SET_SHARED(ary) do { \
- assert(!ARY_EMBED_P(ary)); \
- FL_SET((ary), ELTS_SHARED); \
-} while (0)
-#define FL_UNSET_SHARED(ary) FL_UNSET((ary), ELTS_SHARED)
-
-#define ARY_SET_PTR(ary, p) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RARRAY(ary)->as.heap.ptr = (p); \
-} while (0)
-#define ARY_SET_EMBED_LEN(ary, n) do { \
- long tmp_n = (n); \
- assert(ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK; \
- RBASIC(ary)->flags |= (tmp_n) << RARRAY_EMBED_LEN_SHIFT; \
-} while (0)
-#define ARY_SET_HEAP_LEN(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
- RARRAY(ary)->as.heap.len = (n); \
-} while (0)
-#define ARY_SET_LEN(ary, n) do { \
- if (ARY_EMBED_P(ary)) { \
- ARY_SET_EMBED_LEN((ary), (n)); \
- } \
- else { \
- ARY_SET_HEAP_LEN((ary), (n)); \
- } \
- assert(RARRAY_LEN(ary) == (n)); \
-} while (0)
-#define ARY_INCREASE_PTR(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RARRAY(ary)->as.heap.ptr += (n); \
-} while (0)
-#define ARY_INCREASE_LEN(ary, n) do { \
- assert(!OBJ_FROZEN(ary)); \
- if (ARY_EMBED_P(ary)) { \
- ARY_SET_EMBED_LEN((ary), RARRAY_LEN(ary)+(n)); \
- } \
- else { \
- RARRAY(ary)->as.heap.len += (n); \
- } \
-} while (0)
-
-#define ARY_CAPA(ary) (ARY_EMBED_P(ary) ? RARRAY_EMBED_LEN_MAX : \
- ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : RARRAY(ary)->as.heap.aux.capa)
-#define ARY_SET_CAPA(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!ARY_SHARED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RARRAY(ary)->as.heap.aux.capa = (n); \
-} while (0)
-
-#define ARY_SHARED(ary) (assert(ARY_SHARED_P(ary)), RARRAY(ary)->as.heap.aux.shared)
-#define ARY_SET_SHARED(ary, value) do { \
- const VALUE _ary_ = (ary); \
- const VALUE _value_ = (value); \
- assert(!ARY_EMBED_P(_ary_)); \
- assert(ARY_SHARED_P(_ary_)); \
- assert(ARY_SHARED_ROOT_P(_value_)); \
- RB_OBJ_WRITE(_ary_, &RARRAY(_ary_)->as.heap.aux.shared, _value_); \
-} while (0)
-#define RARRAY_SHARED_ROOT_FLAG FL_USER5
-#define ARY_SHARED_ROOT_P(ary) (FL_TEST((ary), RARRAY_SHARED_ROOT_FLAG))
-#define ARY_SHARED_NUM(ary) \
- (assert(ARY_SHARED_ROOT_P(ary)), RARRAY(ary)->as.heap.aux.capa)
-#define ARY_SHARED_OCCUPIED(ary) (ARY_SHARED_NUM(ary) == 1)
-#define ARY_SET_SHARED_NUM(ary, value) do { \
- assert(ARY_SHARED_ROOT_P(ary)); \
- RARRAY(ary)->as.heap.aux.capa = (value); \
-} while (0)
-#define FL_SET_SHARED_ROOT(ary) do { \
- assert(!ARY_EMBED_P(ary)); \
- FL_SET((ary), RARRAY_SHARED_ROOT_FLAG); \
-} while (0)
-
-#define ARY_SET(a, i, v) RARRAY_ASET((assert(!ARY_SHARED_P(a)), (a)), (i), (v))
+#define ARY_MAX_SIZE (LONG_MAX / sizeof(VALUE))
void
-rb_mem_clear(register VALUE *mem, register long size)
+rb_mem_clear(mem, size)
+ register VALUE *mem;
+ register long size;
{
while (size--) {
*mem++ = Qnil;
}
}
-static void
-ary_mem_clear(VALUE ary, long beg, long size)
-{
- RARRAY_PTR_USE(ary, ptr, {
- rb_mem_clear(ptr + beg, size);
- });
-}
-
static inline void
-memfill(register VALUE *mem, register long size, register VALUE val)
+memfill(mem, size, val)
+ register VALUE *mem;
+ register long size;
+ register VALUE val;
{
while (size--) {
*mem++ = val;
}
}
-static void
-ary_memfill(VALUE ary, long beg, long size, VALUE val)
-{
- RARRAY_PTR_USE(ary, ptr, {
- memfill(ptr + beg, size, val);
- RB_OBJ_WRITTEN(ary, Qundef, val);
- });
-}
-
-static void
-ary_memcpy0(VALUE ary, long beg, long argc, const VALUE *argv, VALUE buff_owner_ary)
-{
-#if 1
- assert(!ARY_SHARED_P(buff_owner_ary));
-
- if (argc > (int)(128/sizeof(VALUE)) /* is magic number (cache line size) */) {
- rb_gc_writebarrier_remember(buff_owner_ary);
- RARRAY_PTR_USE(ary, ptr, {
- MEMCPY(ptr+beg, argv, VALUE, argc);
- });
- }
- else {
- int i;
- RARRAY_PTR_USE(ary, ptr, {
- for (i=0; i<argc; i++) {
- RB_OBJ_WRITE(buff_owner_ary, &ptr[i+beg], argv[i]);
- }
- });
- }
-#else
- /* giveup write barrier (traditional way) */
- RARRAY_PTR(buff_owner_ary);
- MEMCPY(RARRAY_PTR(ary)+beg, argv, VALUE, argc);
-#endif
-}
-
-static void
-ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
-{
- ary_memcpy0(ary, beg, argc, argv, ary);
-}
-
-static void
-ary_resize_capa(VALUE ary, long capacity)
-{
- assert(RARRAY_LEN(ary) <= capacity);
- assert(!OBJ_FROZEN(ary));
- assert(!ARY_SHARED_P(ary));
- if (capacity > RARRAY_EMBED_LEN_MAX) {
- if (ARY_EMBED_P(ary)) {
- long len = ARY_EMBED_LEN(ary);
- VALUE *ptr = ALLOC_N(VALUE, (capacity));
- MEMCPY(ptr, ARY_EMBED_PTR(ary), VALUE, len);
- FL_UNSET_EMBED(ary);
- ARY_SET_PTR(ary, ptr);
- ARY_SET_HEAP_LEN(ary, len);
- }
- else {
- SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity, RARRAY(ary)->as.heap.aux.capa);
- }
- ARY_SET_CAPA(ary, (capacity));
- }
- else {
- if (!ARY_EMBED_P(ary)) {
- long len = RARRAY_LEN(ary);
- const VALUE *ptr = RARRAY_CONST_PTR(ary);
-
- if (len > capacity) len = capacity;
- MEMCPY((VALUE *)RARRAY(ary)->as.ary, ptr, VALUE, len);
- FL_SET_EMBED(ary);
- ARY_SET_LEN(ary, len);
- ruby_xfree((VALUE *)ptr);
- }
- }
-}
-
-static inline void
-ary_shrink_capa(VALUE ary)
-{
- long capacity = ARY_HEAP_LEN(ary);
- long old_capa = RARRAY(ary)->as.heap.aux.capa;
- assert(!ARY_SHARED_P(ary));
- assert(old_capa >= capacity);
- if (old_capa > capacity)
- REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity);
-}
-
-static void
-ary_double_capa(VALUE ary, long min)
-{
- long new_capa = ARY_CAPA(ary) / 2;
-
- if (new_capa < ARY_DEFAULT_SIZE) {
- new_capa = ARY_DEFAULT_SIZE;
- }
- if (new_capa >= ARY_MAX_SIZE - min) {
- new_capa = (ARY_MAX_SIZE - min) / 2;
- }
- new_capa += min;
- ary_resize_capa(ary, new_capa);
-}
-
-static void
-rb_ary_decrement_share(VALUE shared)
-{
- if (shared) {
- long num = ARY_SHARED_NUM(shared) - 1;
- if (num == 0) {
- rb_ary_free(shared);
- rb_gc_force_recycle(shared);
- }
- else if (num > 0) {
- ARY_SET_SHARED_NUM(shared, num);
- }
- }
-}
-
-static void
-rb_ary_unshare(VALUE ary)
-{
- VALUE shared = RARRAY(ary)->as.heap.aux.shared;
- rb_ary_decrement_share(shared);
- FL_UNSET_SHARED(ary);
-}
+#define ARY_TMPLOCK FL_USER1
static inline void
-rb_ary_unshare_safe(VALUE ary)
-{
- if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
- }
-}
-
-static VALUE
-rb_ary_increment_share(VALUE shared)
+rb_ary_modify_check(ary)
+ VALUE ary;
{
- long num = ARY_SHARED_NUM(shared);
- if (num >= 0) {
- ARY_SET_SHARED_NUM(shared, num + 1);
- }
- return shared;
+ if (OBJ_FROZEN(ary)) rb_error_frozen("array");
+ if (FL_TEST(ary, ARY_TMPLOCK))
+ rb_raise(rb_eRuntimeError, "can't modify array during iteration");
+ if (!OBJ_TAINTED(ary) && rb_safe_level() >= 4)
+ rb_raise(rb_eSecurityError, "Insecure: can't modify array");
}
static void
-rb_ary_set_shared(VALUE ary, VALUE shared)
-{
- rb_ary_increment_share(shared);
- FL_SET_SHARED(ary);
- ARY_SET_SHARED(ary, shared);
-}
-
-static inline void
-rb_ary_modify_check(VALUE ary)
+rb_ary_modify(ary)
+ VALUE ary;
{
- rb_check_frozen(ary);
-}
+ VALUE *ptr;
-void
-rb_ary_modify(VALUE ary)
-{
rb_ary_modify_check(ary);
- if (ARY_SHARED_P(ary)) {
- long shared_len, len = RARRAY_LEN(ary);
- VALUE shared = ARY_SHARED(ary);
- if (len <= RARRAY_EMBED_LEN_MAX) {
- const VALUE *ptr = ARY_HEAP_PTR(ary);
- FL_UNSET_SHARED(ary);
- FL_SET_EMBED(ary);
- MEMCPY((VALUE *)ARY_EMBED_PTR(ary), ptr, VALUE, len);
- rb_ary_decrement_share(shared);
- ARY_SET_EMBED_LEN(ary, len);
- }
- else if (ARY_SHARED_OCCUPIED(shared) && len > ((shared_len = RARRAY_LEN(shared))>>1)) {
- long shift = RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared);
- FL_UNSET_SHARED(ary);
- ARY_SET_PTR(ary, RARRAY_CONST_PTR(shared));
- ARY_SET_CAPA(ary, shared_len);
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+shift, VALUE, len);
- });
- FL_SET_EMBED(shared);
- rb_ary_decrement_share(shared);
- }
- else {
- VALUE *ptr = ALLOC_N(VALUE, len);
- MEMCPY(ptr, RARRAY_CONST_PTR(ary), VALUE, len);
- rb_ary_unshare(ary);
- ARY_SET_CAPA(ary, len);
- ARY_SET_PTR(ary, ptr);
- }
-
- rb_gc_writebarrier_remember(ary);
- }
-}
-
-static VALUE
-ary_ensure_room_for_push(VALUE ary, long add_len)
-{
- long old_len = RARRAY_LEN(ary);
- long new_len = old_len + add_len;
- long capa;
-
- if (old_len > ARY_MAX_SIZE - add_len) {
- rb_raise(rb_eIndexError, "index %ld too big", new_len);
- }
- if (ARY_SHARED_P(ary)) {
- if (new_len > RARRAY_EMBED_LEN_MAX) {
- VALUE shared = ARY_SHARED(ary);
- if (ARY_SHARED_OCCUPIED(shared)) {
- if (RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared) + new_len <= RARRAY_LEN(shared)) {
- rb_ary_modify_check(ary);
- return shared;
- }
- else {
- /* if array is shared, then it is likely it participate in push/shift pattern */
- rb_ary_modify(ary);
- capa = ARY_CAPA(ary);
- if (new_len > capa - (capa >> 6)) {
- ary_double_capa(ary, new_len);
- }
- return ary;
- }
- }
- }
- }
- rb_ary_modify(ary);
- capa = ARY_CAPA(ary);
- if (new_len > capa) {
- ary_double_capa(ary, new_len);
+ if (FL_TEST(ary, ELTS_SHARED)) {
+ ptr = ALLOC_N(VALUE, RARRAY(ary)->len);
+ FL_UNSET(ary, ELTS_SHARED);
+ RARRAY(ary)->aux.capa = RARRAY(ary)->len;
+ MEMCPY(ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+ RARRAY(ary)->ptr = ptr;
}
-
- return ary;
}
-/*
- * call-seq:
- * ary.freeze -> ary
- *
- * Calls Object#freeze on +ary+ to prevent any further
- * modification. A RuntimeError will be raised if a modification
- * attempt is made.
- *
- */
-
VALUE
-rb_ary_freeze(VALUE ary)
+rb_ary_freeze(ary)
+ VALUE ary;
{
return rb_obj_freeze(ary);
}
/*
* call-seq:
- * ary.frozen? -> true or false
+ * array.frozen? -> true or false
*
- * Return +true+ if this array is frozen (or temporarily frozen
- * while being sorted). See also Object#frozen?
+ * Return <code>true</code> if this array is frozen (or temporarily frozen
+ * while being sorted).
*/
static VALUE
-rb_ary_frozen_p(VALUE ary)
+rb_ary_frozen_p(ary)
+ VALUE ary;
{
if (OBJ_FROZEN(ary)) return Qtrue;
+ if (FL_TEST(ary, ARY_TMPLOCK)) return Qtrue;
return Qfalse;
}
-/* This can be used to take a snapshot of an array (with
- e.g. rb_ary_replace) and check later whether the array has been
- modified from the snapshot. The snapshot is cheap, though if
- something does modify the array it will pay the cost of copying
- it. If Array#pop or Array#shift has been called, the array will
- be still shared with the snapshot, but the array length will
- differ. */
-VALUE
-rb_ary_shared_with_p(VALUE ary1, VALUE ary2)
-{
- if (!ARY_EMBED_P(ary1) && ARY_SHARED_P(ary1) &&
- !ARY_EMBED_P(ary2) && ARY_SHARED_P(ary2) &&
- RARRAY(ary1)->as.heap.aux.shared == RARRAY(ary2)->as.heap.aux.shared &&
- RARRAY(ary1)->as.heap.len == RARRAY(ary2)->as.heap.len) {
- return Qtrue;
- }
- return Qfalse;
-}
-
+static VALUE ary_alloc _((VALUE));
static VALUE
-ary_alloc(VALUE klass)
+ary_alloc(klass)
+ VALUE klass;
{
- NEWOBJ_OF(ary, struct RArray, klass, T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0));
- /* Created array is:
- * FL_SET_EMBED((VALUE)ary);
- * ARY_SET_EMBED_LEN((VALUE)ary, 0);
- */
- return (VALUE)ary;
-}
+ NEWOBJ(ary, struct RArray);
+ OBJSETUP(ary, klass, T_ARRAY);
-static VALUE
-empty_ary_alloc(VALUE klass)
-{
- RUBY_DTRACE_CREATE_HOOK(ARRAY, 0);
- return ary_alloc(klass);
+ ary->len = 0;
+ ary->ptr = 0;
+ ary->aux.capa = 0;
+
+ return (VALUE)ary;
}
static VALUE
-ary_new(VALUE klass, long capa)
+ary_new(klass, len)
+ VALUE klass;
+ long len;
{
- VALUE ary,*ptr;
+ VALUE ary = ary_alloc(klass);
- if (capa < 0) {
+ if (len < 0) {
rb_raise(rb_eArgError, "negative array size (or size too big)");
}
- if (capa > ARY_MAX_SIZE) {
+ if (len > ARY_MAX_SIZE) {
rb_raise(rb_eArgError, "array size too big");
}
-
- RUBY_DTRACE_CREATE_HOOK(ARRAY, capa);
-
- ary = ary_alloc(klass);
- if (capa > RARRAY_EMBED_LEN_MAX) {
- ptr = ALLOC_N(VALUE, capa);
- FL_UNSET_EMBED(ary);
- ARY_SET_PTR(ary, ptr);
- ARY_SET_CAPA(ary, capa);
- ARY_SET_HEAP_LEN(ary, 0);
- }
+ if (len == 0) len++;
+ RARRAY(ary)->ptr = ALLOC_N(VALUE, len);
+ RARRAY(ary)->aux.capa = len;
return ary;
}
VALUE
-rb_ary_new_capa(long capa)
+rb_ary_new2(len)
+ long len;
{
- return ary_new(rb_cArray, capa);
+ return ary_new(rb_cArray, len);
}
+
VALUE
-rb_ary_new(void)
+rb_ary_new()
{
- return rb_ary_new2(RARRAY_EMBED_LEN_MAX);
+ return rb_ary_new2(ARY_DEFAULT_SIZE);
}
+#ifdef HAVE_STDARG_PROTOTYPES
+#include <stdarg.h>
+#define va_init_list(a,b) va_start(a,b)
+#else
+#include <varargs.h>
+#define va_init_list(a,b) va_start(a)
+#endif
+
VALUE
-(rb_ary_new_from_args)(long n, ...)
+#ifdef HAVE_STDARG_PROTOTYPES
+rb_ary_new3(long n, ...)
+#else
+rb_ary_new3(n, va_alist)
+ long n;
+ va_dcl
+#endif
{
va_list ar;
VALUE ary;
@@ -504,240 +168,120 @@ VALUE
ary = rb_ary_new2(n);
- va_start(ar, n);
+ va_init_list(ar, n);
for (i=0; i<n; i++) {
- ARY_SET(ary, i, va_arg(ar, VALUE));
+ RARRAY(ary)->ptr[i] = va_arg(ar, VALUE);
}
va_end(ar);
- ARY_SET_LEN(ary, n);
+ RARRAY(ary)->len = n;
return ary;
}
VALUE
-rb_ary_new_from_values(long n, const VALUE *elts)
+rb_ary_new4(n, elts)
+ long n;
+ const VALUE *elts;
{
VALUE ary;
ary = rb_ary_new2(n);
if (n > 0 && elts) {
- ary_memcpy(ary, 0, n, elts);
- ARY_SET_LEN(ary, n);
+ MEMCPY(RARRAY(ary)->ptr, elts, VALUE, n);
}
- return ary;
-}
+ /* This assignment to len will be moved to the above "if" block in Ruby 1.9 */
+ RARRAY(ary)->len = n;
-VALUE
-rb_ary_tmp_new(long capa)
-{
- return ary_new(0, capa);
-}
-
-VALUE
-rb_ary_tmp_new_fill(long capa)
-{
- VALUE ary = ary_new(0, capa);
- ary_memfill(ary, 0, capa, Qnil);
- ARY_SET_LEN(ary, capa);
return ary;
}
-void
-rb_ary_free(VALUE ary)
-{
- if (ARY_OWNS_HEAP_P(ary)) {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
- }
-}
-
-RUBY_FUNC_EXPORTED size_t
-rb_ary_memsize(VALUE ary)
-{
- if (ARY_OWNS_HEAP_P(ary)) {
- return RARRAY(ary)->as.heap.aux.capa * sizeof(VALUE);
- }
- else {
- return 0;
- }
-}
-
-static inline void
-ary_discard(VALUE ary)
-{
- rb_ary_free(ary);
- RBASIC(ary)->flags |= RARRAY_EMBED_FLAG;
- RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK;
-}
-
-static VALUE
-ary_make_shared(VALUE ary)
-{
- assert(!ARY_EMBED_P(ary));
- if (ARY_SHARED_P(ary)) {
- return ARY_SHARED(ary);
- }
- else if (ARY_SHARED_ROOT_P(ary)) {
- return ary;
- }
- else if (OBJ_FROZEN(ary)) {
- ary_shrink_capa(ary);
- FL_SET_SHARED_ROOT(ary);
- ARY_SET_SHARED_NUM(ary, 1);
- return ary;
- }
- else {
- long capa = ARY_CAPA(ary), len = RARRAY_LEN(ary);
- NEWOBJ_OF(shared, struct RArray, 0, T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0));
- FL_UNSET_EMBED(shared);
-
- ARY_SET_LEN((VALUE)shared, capa);
- ARY_SET_PTR((VALUE)shared, RARRAY_CONST_PTR(ary));
- ary_mem_clear((VALUE)shared, len, capa - len);
- FL_SET_SHARED_ROOT(shared);
- ARY_SET_SHARED_NUM((VALUE)shared, 1);
- FL_SET_SHARED(ary);
- ARY_SET_SHARED(ary, (VALUE)shared);
- OBJ_FREEZE(shared);
- return (VALUE)shared;
- }
-}
-
-static VALUE
-ary_make_substitution(VALUE ary)
+VALUE
+rb_assoc_new(car, cdr)
+ VALUE car, cdr;
{
- long len = RARRAY_LEN(ary);
+ VALUE ary;
- if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE subst = rb_ary_new2(len);
- ary_memcpy(subst, 0, len, RARRAY_CONST_PTR(ary));
- ARY_SET_EMBED_LEN(subst, len);
- return subst;
- }
- else {
- return rb_ary_increment_share(ary_make_shared(ary));
- }
-}
+ ary = rb_ary_new2(2);
+ RARRAY(ary)->ptr[0] = car;
+ RARRAY(ary)->ptr[1] = cdr;
+ RARRAY(ary)->len = 2;
-VALUE
-rb_assoc_new(VALUE car, VALUE cdr)
-{
- return rb_ary_new3(2, car, cdr);
+ return ary;
}
static VALUE
-to_ary(VALUE ary)
+to_ary(ary)
+ VALUE ary;
{
return rb_convert_type(ary, T_ARRAY, "Array", "to_ary");
}
VALUE
-rb_check_array_type(VALUE ary)
+rb_check_array_type(ary)
+ VALUE ary;
{
return rb_check_convert_type(ary, T_ARRAY, "Array", "to_ary");
}
-/*
- * call-seq:
- * Array.try_convert(obj) -> array or nil
- *
- * Tries to convert +obj+ into an array, using +to_ary+ method. Returns the
- * converted array or +nil+ if +obj+ cannot be converted for any reason.
- * This method can be used to check if an argument is an array.
- *
- * Array.try_convert([1]) #=> [1]
- * Array.try_convert("1") #=> nil
- *
- * if tmp = Array.try_convert(arg)
- * # the argument is an array
- * elsif tmp = String.try_convert(arg)
- * # the argument is a string
- * end
- *
- */
-
-static VALUE
-rb_ary_s_try_convert(VALUE dummy, VALUE ary)
-{
- return rb_check_array_type(ary);
-}
+static VALUE rb_ary_replace _((VALUE, VALUE));
/*
* call-seq:
- * Array.new(size=0, default=nil)
+ * Array.new(size=0, obj=nil)
* Array.new(array)
* Array.new(size) {|index| block }
*
- * Returns a new array.
- *
- * In the first form, if no arguments are sent, the new array will be empty.
- * When a +size+ and an optional +default+ are sent, an array is created with
- * +size+ copies of +default+. Take notice that all elements will reference the
- * same object +default+.
- *
- * The second form creates a copy of the array passed as a parameter (the
- * array is generated by calling to_ary on the parameter).
- *
- * first_array = ["Matz", "Guido"]
- *
- * second_array = Array.new(first_array) #=> ["Matz", "Guido"]
- *
- * first_array.equal? second_array #=> false
- *
- * In the last form, an array of the given size is created. Each element in
- * this array is created by passing the element's index to the given block
- * and storing the return value.
- *
- * Array.new(3){ |index| index ** 2 }
- * # => [0, 1, 4]
- *
- * == Common gotchas
- *
- * When sending the second parameter, the same object will be used as the
- * value for all the array elements:
- *
+ * Returns a new array. In the first form, the new array is
+ * empty. In the second it is created with _size_ copies of _obj_
+ * (that is, _size_ references to the same
+ * _obj_). The third form creates a copy of the array
+ * passed as a parameter (the array is generated by calling
+ * to_ary on the parameter). In the last form, an array
+ * of the given size is created. Each element in this array is
+ * calculated by passing the element's index to the given block and
+ * storing the return value.
+ *
+ * Array.new
+ * Array.new(2)
+ * Array.new(5, "A")
+ *
+ * # only one copy of the object is created
* a = Array.new(2, Hash.new)
- * # => [{}, {}]
- *
* a[0]['cat'] = 'feline'
- * a # => [{"cat"=>"feline"}, {"cat"=>"feline"}]
- *
+ * a
* a[1]['cat'] = 'Felix'
- * a # => [{"cat"=>"Felix"}, {"cat"=>"Felix"}]
- *
- * Since all the Array elements store the same hash, changes to one of them
- * will affect them all.
- *
- * If multiple copies are what you want, you should use the block
- * version which uses the result of that block each time an element
- * of the array needs to be initialized:
- *
+ * a
+ *
+ * # here multiple copies are created
* a = Array.new(2) { Hash.new }
* a[0]['cat'] = 'feline'
- * a # => [{"cat"=>"feline"}, {}]
- *
+ * a
+ *
+ * squares = Array.new(5) {|i| i*i}
+ * squares
+ *
+ * copy = Array.new(squares)
*/
static VALUE
-rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
+rb_ary_initialize(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
long len;
VALUE size, val;
rb_ary_modify(ary);
- if (argc == 0) {
- if (ARY_OWNS_HEAP_P(ary) && RARRAY_CONST_PTR(ary) != 0) {
- ruby_sized_xfree((void *)RARRAY_CONST_PTR(ary), ARY_HEAP_SIZE(ary));
- }
- rb_ary_unshare_safe(ary);
- FL_SET_EMBED(ary);
- ARY_SET_EMBED_LEN(ary, 0);
+ if (rb_scan_args(argc, argv, "02", &size, &val) == 0) {
+ RARRAY(ary)->len = 0;
if (rb_block_given_p()) {
rb_warning("given block not used");
}
return ary;
}
- rb_scan_args(argc, argv, "02", &size, &val);
+
if (argc == 1 && !FIXNUM_P(size)) {
val = rb_check_array_type(size);
if (!NIL_P(val)) {
@@ -747,16 +291,16 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
}
len = NUM2LONG(size);
- /* NUM2LONG() may call size.to_int, ary can be frozen, modified, etc */
if (len < 0) {
rb_raise(rb_eArgError, "negative array size");
}
if (len > ARY_MAX_SIZE) {
rb_raise(rb_eArgError, "array size too big");
}
- /* recheck after argument conversion */
- rb_ary_modify(ary);
- ary_resize_capa(ary, len);
+ if (len > RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
+ RARRAY(ary)->aux.capa = len;
+ }
if (rb_block_given_p()) {
long i;
@@ -765,46 +309,54 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
}
for (i=0; i<len; i++) {
rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));
- ARY_SET_LEN(ary, i + 1);
+ RARRAY(ary)->len = i + 1;
}
}
else {
- ary_memfill(ary, 0, len, val);
- ARY_SET_LEN(ary, len);
+ memfill(RARRAY(ary)->ptr, len, val);
+ RARRAY(ary)->len = len;
}
+
return ary;
}
-/*
- * Returns a new array populated with the given objects.
- *
- * Array.[]( 1, 'a', /^A/ ) # => [1, "a", /^A/]
- * Array[ 1, 'a', /^A/ ] # => [1, "a", /^A/]
- * [ 1, 'a', /^A/ ] # => [1, "a", /^A/]
- */
+
+/*
+* Returns a new array populated with the given objects.
+*
+* Array.[]( 1, 'a', /^A/ )
+* Array[ 1, 'a', /^A/ ]
+* [ 1, 'a', /^A/ ]
+*/
static VALUE
-rb_ary_s_create(int argc, VALUE *argv, VALUE klass)
+rb_ary_s_create(argc, argv, klass)
+ int argc;
+ VALUE *argv;
+ VALUE klass;
{
- VALUE ary = ary_new(klass, argc);
- if (argc > 0 && argv) {
- ary_memcpy(ary, 0, argc, argv);
- ARY_SET_LEN(ary, argc);
+ VALUE ary = ary_alloc(klass);
+
+ if (argc > 0) {
+ RARRAY(ary)->ptr = ALLOC_N(VALUE, argc);
+ MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
}
+ RARRAY(ary)->len = RARRAY(ary)->aux.capa = argc;
return ary;
}
void
-rb_ary_store(VALUE ary, long idx, VALUE val)
+rb_ary_store(ary, idx, val)
+ VALUE ary;
+ long idx;
+ VALUE val;
{
- long len = RARRAY_LEN(ary);
-
if (idx < 0) {
- idx += len;
+ idx += RARRAY(ary)->len;
if (idx < 0) {
- rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- idx - len, -len);
+ rb_raise(rb_eIndexError, "index %ld out of array",
+ idx - RARRAY(ary)->len);
}
}
else if (idx >= ARY_MAX_SIZE) {
@@ -812,86 +364,34 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
}
rb_ary_modify(ary);
- if (idx >= ARY_CAPA(ary)) {
- ary_double_capa(ary, idx);
- }
- if (idx > len) {
- ary_mem_clear(ary, len, idx - len + 1);
- }
-
- if (idx >= len) {
- ARY_SET_LEN(ary, idx + 1);
- }
- ARY_SET(ary, idx, val);
-}
-
-static VALUE
-ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
-{
- assert(offset >= 0);
- assert(len >= 0);
- assert(offset+len <= RARRAY_LEN(ary));
+ if (idx >= RARRAY(ary)->aux.capa) {
+ long new_capa = RARRAY(ary)->aux.capa / 2;
- if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE result = ary_alloc(klass);
- ary_memcpy(result, 0, len, RARRAY_CONST_PTR(ary) + offset);
- ARY_SET_EMBED_LEN(result, len);
- return result;
+ if (new_capa < ARY_DEFAULT_SIZE) {
+ new_capa = ARY_DEFAULT_SIZE;
+ }
+ if (new_capa >= ARY_MAX_SIZE - idx) {
+ new_capa = (ARY_MAX_SIZE - idx) / 2;
+ }
+ new_capa += idx;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, new_capa);
+ RARRAY(ary)->aux.capa = new_capa;
}
- else {
- VALUE shared, result = ary_alloc(klass);
- FL_UNSET_EMBED(result);
-
- shared = ary_make_shared(ary);
- ARY_SET_PTR(result, RARRAY_CONST_PTR(ary));
- ARY_SET_LEN(result, RARRAY_LEN(ary));
- rb_ary_set_shared(result, shared);
-
- ARY_INCREASE_PTR(result, offset);
- ARY_SET_LEN(result, len);
- return result;
+ if (idx > RARRAY(ary)->len) {
+ rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len,
+ idx-RARRAY(ary)->len + 1);
}
-}
-static VALUE
-ary_make_shared_copy(VALUE ary)
-{
- return ary_make_partial(ary, rb_obj_class(ary), 0, RARRAY_LEN(ary));
-}
-
-enum ary_take_pos_flags
-{
- ARY_TAKE_FIRST = 0,
- ARY_TAKE_LAST = 1
-};
-
-static VALUE
-ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos_flags last)
-{
- VALUE nv;
- long n;
- long len;
- long offset = 0;
-
- rb_scan_args(argc, argv, "1", &nv);
- n = NUM2LONG(nv);
- len = RARRAY_LEN(ary);
- if (n > len) {
- n = len;
- }
- else if (n < 0) {
- rb_raise(rb_eArgError, "negative array size");
+ if (idx >= RARRAY(ary)->len) {
+ RARRAY(ary)->len = idx + 1;
}
- if (last) {
- offset = len - n;
- }
- return ary_make_partial(ary, rb_cArray, offset, n);
+ RARRAY(ary)->ptr[idx] = val;
}
/*
* call-seq:
- * ary << obj -> ary
- *
+ * array << obj -> array
+ *
* Append---Pushes the given object on to the end of this array. This
* expression returns the array itself, so several appends
* may be chained together.
@@ -902,342 +402,249 @@ ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos
*/
VALUE
-rb_ary_push(VALUE ary, VALUE item)
-{
- long idx = RARRAY_LEN(ary);
- VALUE target_ary = ary_ensure_room_for_push(ary, 1);
- RARRAY_PTR_USE(ary, ptr, {
- RB_OBJ_WRITE(target_ary, &ptr[idx], item);
- });
- ARY_SET_LEN(ary, idx + 1);
- return ary;
-}
-
-VALUE
-rb_ary_cat(VALUE ary, const VALUE *argv, long len)
+rb_ary_push(ary, item)
+ VALUE ary;
+ VALUE item;
{
- long oldlen = RARRAY_LEN(ary);
- VALUE target_ary = ary_ensure_room_for_push(ary, len);
- ary_memcpy0(ary, oldlen, len, argv, target_ary);
- ARY_SET_LEN(ary, oldlen + len);
+ rb_ary_store(ary, RARRAY(ary)->len, item);
return ary;
}
-/*
+/*
* call-seq:
- * ary.push(obj, ... ) -> ary
- *
- * Append --- Pushes the given object(s) on to the end of this array. This
+ * array.push(obj, ... ) -> array
+ *
+ * Append---Pushes the given object(s) on to the end of this array. This
* expression returns the array itself, so several appends
- * may be chained together. See also Array#pop for the opposite
- * effect.
+ * may be chained together.
*
* a = [ "a", "b", "c" ]
- * a.push("d", "e", "f")
+ * a.push("d", "e", "f")
* #=> ["a", "b", "c", "d", "e", "f"]
- * [1, 2, 3,].push(4).push(5)
- * #=> [1, 2, 3, 4, 5]
*/
static VALUE
-rb_ary_push_m(int argc, VALUE *argv, VALUE ary)
-{
- return rb_ary_cat(ary, argv, argc);
-}
-
-VALUE
-rb_ary_pop(VALUE ary)
+rb_ary_push_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
- long n;
- rb_ary_modify_check(ary);
- n = RARRAY_LEN(ary);
- if (n == 0) return Qnil;
- if (ARY_OWNS_HEAP_P(ary) &&
- n * 3 < ARY_CAPA(ary) &&
- ARY_CAPA(ary) > ARY_DEFAULT_SIZE)
- {
- ary_resize_capa(ary, n * 2);
- }
- --n;
- ARY_SET_LEN(ary, n);
- return RARRAY_AREF(ary, n);
+ while (argc--) {
+ rb_ary_push(ary, *argv++);
+ }
+ return ary;
}
/*
* call-seq:
- * ary.pop -> obj or nil
- * ary.pop(n) -> new_ary
- *
- * Removes the last element from +self+ and returns it, or
- * +nil+ if the array is empty.
- *
- * If a number +n+ is given, returns an array of the last +n+ elements
- * (or less) just like <code>array.slice!(-n, n)</code> does. See also
- * Array#push for the opposite effect.
- *
- * a = [ "a", "b", "c", "d" ]
- * a.pop #=> "d"
- * a.pop(2) #=> ["b", "c"]
- * a #=> ["a"]
+ * array.pop -> obj or nil
+ *
+ * Removes the last element from <i>self</i> and returns it, or
+ * <code>nil</code> if the array is empty.
+ *
+ * a = [ "a", "m", "z" ]
+ * a.pop #=> "z"
+ * a #=> ["a", "m"]
*/
-static VALUE
-rb_ary_pop_m(int argc, VALUE *argv, VALUE ary)
+VALUE
+rb_ary_pop(ary)
+ VALUE ary;
{
- VALUE result;
-
- if (argc == 0) {
- return rb_ary_pop(ary);
- }
-
rb_ary_modify_check(ary);
- result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
- ARY_INCREASE_LEN(ary, -RARRAY_LEN(result));
- return result;
+ if (RARRAY(ary)->len == 0) return Qnil;
+ if (!FL_TEST(ary, ELTS_SHARED) &&
+ RARRAY(ary)->len * 2 < RARRAY(ary)->aux.capa &&
+ RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
+ RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
+ }
+ return RARRAY(ary)->ptr[--RARRAY(ary)->len];
}
-VALUE
-rb_ary_shift(VALUE ary)
+static VALUE
+ary_make_shared(ary)
+ VALUE ary;
{
- VALUE top;
- long len = RARRAY_LEN(ary);
-
- rb_ary_modify_check(ary);
- if (len == 0) return Qnil;
- top = RARRAY_AREF(ary, 0);
- if (!ARY_SHARED_P(ary)) {
- if (len < ARY_DEFAULT_SIZE) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+1, VALUE, len-1);
- }); /* WB: no new reference */
- ARY_INCREASE_LEN(ary, -1);
- return top;
- }
- assert(!ARY_EMBED_P(ary)); /* ARY_EMBED_LEN_MAX < ARY_DEFAULT_SIZE */
+ if (!FL_TEST(ary, ELTS_SHARED)) {
+ NEWOBJ(shared, struct RArray);
+ OBJSETUP(shared, rb_cArray, T_ARRAY);
- ARY_SET(ary, 0, Qnil);
- ary_make_shared(ary);
+ shared->len = RARRAY(ary)->len;
+ shared->ptr = RARRAY(ary)->ptr;
+ shared->aux.capa = RARRAY(ary)->aux.capa;
+ RARRAY(ary)->aux.shared = (VALUE)shared;
+ FL_SET(ary, ELTS_SHARED);
+ OBJ_FREEZE(shared);
+ return (VALUE)shared;
}
- else if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
- RARRAY_PTR_USE(ary, ptr, ptr[0] = Qnil);
+ else {
+ return RARRAY(ary)->aux.shared;
}
- ARY_INCREASE_PTR(ary, 1); /* shift ptr */
- ARY_INCREASE_LEN(ary, -1);
-
- return top;
}
/*
* call-seq:
- * ary.shift -> obj or nil
- * ary.shift(n) -> new_ary
- *
- * Removes the first element of +self+ and returns it (shifting all
- * other elements down by one). Returns +nil+ if the array
+ * array.shift -> obj or nil
+ *
+ * Returns the first element of <i>self</i> and removes it (shifting all
+ * other elements down by one). Returns <code>nil</code> if the array
* is empty.
- *
- * If a number +n+ is given, returns an array of the first +n+ elements
- * (or less) just like <code>array.slice!(0, n)</code> does. With +ary+
- * containing only the remainder elements, not including what was shifted to
- * +new_ary+. See also Array#unshift for the opposite effect.
- *
- * args = [ "-m", "-q", "filename" ]
- * args.shift #=> "-m"
- * args #=> ["-q", "filename"]
- *
+ *
* args = [ "-m", "-q", "filename" ]
- * args.shift(2) #=> ["-m", "-q"]
- * args #=> ["filename"]
+ * args.shift #=> "-m"
+ * args #=> ["-q", "filename"]
*/
-static VALUE
-rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
+VALUE
+rb_ary_shift(ary)
+ VALUE ary;
{
- VALUE result;
- long n;
-
- if (argc == 0) {
- return rb_ary_shift(ary);
- }
+ VALUE top;
rb_ary_modify_check(ary);
- result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
- n = RARRAY_LEN(result);
- if (ARY_SHARED_P(ary)) {
- if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
- setup_occupied_shared:
- ary_mem_clear(ary, 0, n);
- }
- ARY_INCREASE_PTR(ary, n);
+ if (RARRAY(ary)->len == 0) return Qnil;
+ top = RARRAY(ary)->ptr[0];
+ if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE && !FL_TEST(ary, ELTS_SHARED)) {
+ MEMMOVE(RARRAY_PTR(ary), RARRAY_PTR(ary)+1, VALUE, RARRAY_LEN(ary)-1);
}
else {
- if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+n, VALUE, RARRAY_LEN(ary)-n);
- }); /* WB: no new reference */
- }
- else {
- ary_make_shared(ary);
- goto setup_occupied_shared;
+ if (!FL_TEST(ary, ELTS_SHARED)) {
+ RARRAY(ary)->ptr[0] = Qnil;
}
+ ary_make_shared(ary);
+ RARRAY(ary)->ptr++; /* shift ptr */
}
- ARY_INCREASE_LEN(ary, -n);
+ RARRAY(ary)->len--;
- return result;
+ return top;
}
-static VALUE
-ary_ensure_room_for_unshift(VALUE ary, int argc)
+VALUE
+rb_ary_unshift(ary, item)
+ VALUE ary, item;
{
- long len = RARRAY_LEN(ary);
- long new_len = len + argc;
- long capa;
- const VALUE *head, *sharedp;
-
- if (len > ARY_MAX_SIZE - argc) {
- rb_raise(rb_eIndexError, "index %ld too big", new_len);
- }
-
- if (ARY_SHARED_P(ary)) {
- VALUE shared = ARY_SHARED(ary);
- capa = RARRAY_LEN(shared);
- if (ARY_SHARED_OCCUPIED(shared) && capa > new_len) {
- head = RARRAY_CONST_PTR(ary);
- sharedp = RARRAY_CONST_PTR(shared);
- goto makeroom_if_need;
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len == RARRAY(ary)->aux.capa) {
+ long capa_inc = RARRAY(ary)->aux.capa / 2;
+ if (capa_inc < ARY_DEFAULT_SIZE) {
+ capa_inc = ARY_DEFAULT_SIZE;
}
+ RARRAY(ary)->aux.capa += capa_inc;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
}
- rb_ary_modify(ary);
- capa = ARY_CAPA(ary);
- if (capa - (capa >> 6) <= new_len) {
- ary_double_capa(ary, new_len);
- }
+ /* sliding items */
+ MEMMOVE(RARRAY(ary)->ptr + 1, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
- /* use shared array for big "queues" */
- if (new_len > ARY_DEFAULT_SIZE * 4) {
- /* make a room for unshifted items */
- capa = ARY_CAPA(ary);
- ary_make_shared(ary);
+ RARRAY(ary)->len++;
+ RARRAY(ary)->ptr[0] = item;
- head = sharedp = RARRAY_CONST_PTR(ary);
- goto makeroom;
- makeroom_if_need:
- if (head - sharedp < argc) {
- long room;
- makeroom:
- room = capa - new_len;
- room -= room >> 4;
- MEMMOVE((VALUE *)sharedp + argc + room, head, VALUE, len);
- head = sharedp + argc + room;
- }
- ARY_SET_PTR(ary, head - argc);
- assert(ARY_SHARED_OCCUPIED(ARY_SHARED(ary)));
- return ARY_SHARED(ary);
- }
- else {
- /* sliding items */
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr + argc, ptr, VALUE, len);
- });
-
- return ary;
- }
+ return ary;
}
/*
* call-seq:
- * ary.unshift(obj, ...) -> ary
- *
- * Prepends objects to the front of +self+, moving other elements upwards.
- * See also Array#shift for the opposite effect.
- *
+ * array.unshift(obj, ...) -> array
+ *
+ * Prepends objects to the front of <i>array</i>.
+ * other elements up one.
+ *
* a = [ "b", "c", "d" ]
* a.unshift("a") #=> ["a", "b", "c", "d"]
* a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
*/
static VALUE
-rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
+rb_ary_unshift_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
- long len = RARRAY_LEN(ary);
- VALUE target_ary;
+ long len = RARRAY(ary)->len;
- if (argc == 0) {
- rb_ary_modify_check(ary);
- return ary;
- }
+ if (argc == 0) return ary;
- target_ary = ary_ensure_room_for_unshift(ary, argc);
- ary_memcpy0(ary, 0, argc, argv, target_ary);
- ARY_SET_LEN(ary, len + argc);
- return ary;
-}
+ /* make rooms by setting the last item */
+ rb_ary_store(ary, len + argc - 1, Qnil);
-VALUE
-rb_ary_unshift(VALUE ary, VALUE item)
-{
- return rb_ary_unshift_m(1,&item,ary);
+ /* sliding items */
+ MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len);
+ MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
+
+ return ary;
}
/* faster version - use this if you don't need to treat negative offset */
static inline VALUE
-rb_ary_elt(VALUE ary, long offset)
+rb_ary_elt(ary, offset)
+ VALUE ary;
+ long offset;
{
- long len = RARRAY_LEN(ary);
- if (len == 0) return Qnil;
- if (offset < 0 || len <= offset) {
+ if (RARRAY(ary)->len == 0) return Qnil;
+ if (offset < 0 || RARRAY(ary)->len <= offset) {
return Qnil;
}
- return RARRAY_AREF(ary, offset);
+ return RARRAY(ary)->ptr[offset];
}
VALUE
-rb_ary_entry(VALUE ary, long offset)
+rb_ary_entry(ary, offset)
+ VALUE ary;
+ long offset;
{
if (offset < 0) {
- offset += RARRAY_LEN(ary);
+ offset += RARRAY(ary)->len;
}
return rb_ary_elt(ary, offset);
}
-VALUE
-rb_ary_subseq(VALUE ary, long beg, long len)
+static VALUE
+rb_ary_subseq(ary, beg, len)
+ VALUE ary;
+ long beg, len;
{
- VALUE klass;
- long alen = RARRAY_LEN(ary);
+ VALUE klass, ary2, shared;
+ VALUE *ptr;
- if (beg > alen) return Qnil;
+ if (beg > RARRAY(ary)->len) return Qnil;
if (beg < 0 || len < 0) return Qnil;
- if (alen < len || alen < beg + len) {
- len = alen - beg;
+ if (RARRAY(ary)->len < len || RARRAY(ary)->len < beg + len) {
+ len = RARRAY(ary)->len - beg;
+ if (len < 0)
+ len = 0;
}
klass = rb_obj_class(ary);
if (len == 0) return ary_new(klass, 0);
- return ary_make_partial(ary, klass, beg, len);
+ shared = ary_make_shared(ary);
+ ptr = RARRAY(ary)->ptr;
+ ary2 = ary_alloc(klass);
+ RARRAY(ary2)->ptr = ptr + beg;
+ RARRAY(ary2)->len = len;
+ RARRAY(ary2)->aux.shared = shared;
+ FL_SET(ary2, ELTS_SHARED);
+
+ return ary2;
}
-/*
+/*
* call-seq:
- * ary[index] -> obj or nil
- * ary[start, length] -> new_ary or nil
- * ary[range] -> new_ary or nil
- * ary.slice(index) -> obj or nil
- * ary.slice(start, length) -> new_ary or nil
- * ary.slice(range) -> new_ary or nil
- *
- * Element Reference --- Returns the element at +index+, or returns a
- * subarray starting at the +start+ index and continuing for +length+
- * elements, or returns a subarray specified by +range+ of indices.
- *
- * Negative indices count backward from the end of the array (-1 is the last
- * element). For +start+ and +range+ cases the starting index is just before
- * an element. Additionally, an empty array is returned when the starting
- * index for an element range is at the end of the array.
+ * array[index] -> obj or nil
+ * array[start, length] -> an_array or nil
+ * array[range] -> an_array or nil
+ * array.slice(index) -> obj or nil
+ * array.slice(start, length) -> an_array or nil
+ * array.slice(range) -> an_array or nil
*
- * Returns +nil+ if the index (or starting index) are out of range.
+ * Element Reference---Returns the element at _index_,
+ * or returns a subarray starting at _start_ and
+ * continuing for _length_ elements, or returns a subarray
+ * specified by _range_.
+ * Negative indices count backward from the end of the
+ * array (-1 is the last element). Returns nil if the index
+ * (or starting index) are out of range.
*
* a = [ "a", "b", "c", "d", "e" ]
* a[2] + a[0] + a[1] #=> "cab"
@@ -1249,36 +656,44 @@ rb_ary_subseq(VALUE ary, long beg, long len)
* a[-3, 3] #=> [ "c", "d", "e" ]
* # special cases
* a[5] #=> nil
- * a[6, 1] #=> nil
* a[5, 1] #=> []
* a[5..10] #=> []
*
*/
VALUE
-rb_ary_aref(int argc, const VALUE *argv, VALUE ary)
+rb_ary_aref(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
VALUE arg;
long beg, len;
if (argc == 2) {
+ if (SYMBOL_P(argv[0])) {
+ rb_raise(rb_eTypeError, "Symbol as array index");
+ }
beg = NUM2LONG(argv[0]);
len = NUM2LONG(argv[1]);
if (beg < 0) {
- beg += RARRAY_LEN(ary);
+ beg += RARRAY(ary)->len;
}
return rb_ary_subseq(ary, beg, len);
}
if (argc != 1) {
- rb_scan_args(argc, argv, "11", NULL, NULL);
+ rb_scan_args(argc, argv, "11", 0, 0);
}
arg = argv[0];
/* special case - speeding up */
if (FIXNUM_P(arg)) {
return rb_ary_entry(ary, FIX2LONG(arg));
}
+ if (SYMBOL_P(arg)) {
+ rb_raise(rb_eTypeError, "Symbol as array index");
+ }
/* check if idx is Range */
- switch (rb_range_beg_len(arg, &beg, &len, RARRAY_LEN(ary), 0)) {
+ switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) {
case Qfalse:
break;
case Qnil:
@@ -1289,105 +704,129 @@ rb_ary_aref(int argc, const VALUE *argv, VALUE ary)
return rb_ary_entry(ary, NUM2LONG(arg));
}
-/*
+/*
* call-seq:
- * ary.at(index) -> obj or nil
+ * array.at(index) -> obj or nil
*
- * Returns the element at +index+. A negative index counts from the end of
- * +self+. Returns +nil+ if the index is out of range. See also
- * Array#[].
+ * Returns the element at _index_. A
+ * negative index counts from the end of _self_. Returns +nil+
+ * if the index is out of range. See also <code>Array#[]</code>.
+ * (<code>Array#at</code> is slightly faster than <code>Array#[]</code>,
+ * as it does not accept ranges and so on.)
*
* a = [ "a", "b", "c", "d", "e" ]
* a.at(0) #=> "a"
* a.at(-1) #=> "e"
*/
-VALUE
-rb_ary_at(VALUE ary, VALUE pos)
+static VALUE
+rb_ary_at(ary, pos)
+ VALUE ary, pos;
{
return rb_ary_entry(ary, NUM2LONG(pos));
}
/*
* call-seq:
- * ary.first -> obj or nil
- * ary.first(n) -> new_ary
+ * array.first -> obj or nil
+ * array.first(n) -> an_array
*
* Returns the first element, or the first +n+ elements, of the array.
- * If the array is empty, the first form returns +nil+, and the
- * second form returns an empty array. See also Array#last for
- * the opposite effect.
+ * If the array is empty, the first form returns <code>nil</code>, and the
+ * second form returns an empty array.
*
* a = [ "q", "r", "s", "t" ]
- * a.first #=> "q"
- * a.first(2) #=> ["q", "r"]
+ * a.first #=> "q"
+ * a.first(1) #=> ["q"]
+ * a.first(3) #=> ["q", "r", "s"]
*/
static VALUE
-rb_ary_first(int argc, VALUE *argv, VALUE ary)
+rb_ary_first(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
if (argc == 0) {
- if (RARRAY_LEN(ary) == 0) return Qnil;
- return RARRAY_AREF(ary, 0);
+ if (RARRAY(ary)->len == 0) return Qnil;
+ return RARRAY(ary)->ptr[0];
}
else {
- return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
+ VALUE nv, result;
+ long n, i;
+
+ rb_scan_args(argc, argv, "01", &nv);
+ n = NUM2LONG(nv);
+ if (n > RARRAY(ary)->len) n = RARRAY(ary)->len;
+ result = rb_ary_new2(n);
+ for (i=0; i<n; i++) {
+ rb_ary_push(result, RARRAY(ary)->ptr[i]);
+ }
+ return result;
}
}
/*
* call-seq:
- * ary.last -> obj or nil
- * ary.last(n) -> new_ary
- *
- * Returns the last element(s) of +self+. If the array is empty,
- * the first form returns +nil+.
- *
- * See also Array#first for the opposite effect.
- *
- * a = [ "w", "x", "y", "z" ]
- * a.last #=> "z"
- * a.last(2) #=> ["y", "z"]
+ * array.last -> obj or nil
+ * array.last(n) -> an_array
+ *
+ * Returns the last element(s) of <i>self</i>. If the array is empty,
+ * the first form returns <code>nil</code>.
+ *
+ * [ "w", "x", "y", "z" ].last #=> "z"
*/
-VALUE
-rb_ary_last(int argc, const VALUE *argv, VALUE ary)
+static VALUE
+rb_ary_last(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
if (argc == 0) {
- long len = RARRAY_LEN(ary);
- if (len == 0) return Qnil;
- return RARRAY_AREF(ary, len-1);
+ if (RARRAY(ary)->len == 0) return Qnil;
+ return RARRAY(ary)->ptr[RARRAY(ary)->len-1];
}
else {
- return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
+ VALUE nv, result;
+ long n, i;
+
+ rb_scan_args(argc, argv, "01", &nv);
+ n = NUM2LONG(nv);
+ if (n > RARRAY(ary)->len) n = RARRAY(ary)->len;
+ result = rb_ary_new2(n);
+ for (i=RARRAY(ary)->len-n; n--; i++) {
+ rb_ary_push(result, RARRAY(ary)->ptr[i]);
+ }
+ return result;
}
}
/*
* call-seq:
- * ary.fetch(index) -> obj
- * ary.fetch(index, default) -> obj
- * ary.fetch(index) { |index| block } -> obj
- *
- * Tries to return the element at position +index+, but throws an IndexError
- * exception if the referenced +index+ lies outside of the array bounds. This
- * error can be prevented by supplying a second argument, which will act as a
- * +default+ value.
- *
- * Alternatively, if a block is given it will only be executed when an
- * invalid +index+ is referenced. Negative values of +index+ count from the
- * end of the array.
- *
+ * array.fetch(index) -> obj
+ * array.fetch(index, default ) -> obj
+ * array.fetch(index) {|index| block } -> obj
+ *
+ * Tries to return the element at position <i>index</i>. If the index
+ * lies outside the array, the first form throws an
+ * <code>IndexError</code> exception, the second form returns
+ * <i>default</i>, and the third form returns the value of invoking
+ * the block, passing in the index. Negative values of <i>index</i>
+ * count from the end of the array.
+ *
* a = [ 11, 22, 33, 44 ]
* a.fetch(1) #=> 22
* a.fetch(-1) #=> 44
* a.fetch(4, 'cat') #=> "cat"
- * a.fetch(100) { |i| puts "#{i} is out of bounds" }
- * #=> "100 is out of bounds"
+ * a.fetch(4) { |i| i*i } #=> 16
*/
static VALUE
-rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
+rb_ary_fetch(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
VALUE pos, ifnone;
long block_given;
@@ -1401,305 +840,201 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
idx = NUM2LONG(pos);
if (idx < 0) {
- idx += RARRAY_LEN(ary);
+ idx += RARRAY(ary)->len;
}
- if (idx < 0 || RARRAY_LEN(ary) <= idx) {
+ if (idx < 0 || RARRAY(ary)->len <= idx) {
if (block_given) return rb_yield(pos);
if (argc == 1) {
- rb_raise(rb_eIndexError, "index %ld outside of array bounds: %ld...%ld",
- idx - (idx < 0 ? RARRAY_LEN(ary) : 0), -RARRAY_LEN(ary), RARRAY_LEN(ary));
+ rb_raise(rb_eIndexError, "index %ld out of array", idx);
}
return ifnone;
}
- return RARRAY_AREF(ary, idx);
+ return RARRAY(ary)->ptr[idx];
}
/*
* call-seq:
- * ary.find_index(obj) -> int or nil
- * ary.find_index { |item| block } -> int or nil
- * ary.find_index -> Enumerator
- * ary.index(obj) -> int or nil
- * ary.index { |item| block } -> int or nil
- * ary.index -> Enumerator
- *
- * Returns the _index_ of the first object in +ary+ such that the object is
- * <code>==</code> to +obj+.
- *
- * If a block is given instead of an argument, returns the _index_ of the
- * first object for which the block returns +true+. Returns +nil+ if no
- * match is found.
- *
- * See also Array#rindex.
- *
- * An Enumerator is returned if neither a block nor argument is given.
- *
+ * array.index(obj) -> int or nil
+ *
+ * Returns the index of the first object in <i>self</i> such that is
+ * <code>==</code> to <i>obj</i>. Returns <code>nil</code> if
+ * no match is found.
+ *
* a = [ "a", "b", "c" ]
- * a.index("b") #=> 1
- * a.index("z") #=> nil
- * a.index { |x| x == "b" } #=> 1
+ * a.index("b") #=> 1
+ * a.index("z") #=> nil
*/
static VALUE
-rb_ary_index(int argc, VALUE *argv, VALUE ary)
-{
- const VALUE *ptr;
+rb_ary_index(ary, val)
+ VALUE ary;
VALUE val;
- long i, len;
+{
+ long i;
- if (argc == 0) {
- RETURN_ENUMERATOR(ary, 0, 0);
- for (i=0; i<RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
- return LONG2NUM(i);
- }
- }
- return Qnil;
- }
- rb_check_arity(argc, 0, 1);
- val = argv[0];
- if (rb_block_given_p())
- rb_warn("given block not used");
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
- for (i=0; i<len; i++) {
- VALUE e = ptr[i];
- switch (rb_equal_opt(e, val)) {
- case Qundef:
- if (!rb_equal(e, val)) break;
- case Qtrue:
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ if (rb_equal(RARRAY(ary)->ptr[i], val))
return LONG2NUM(i);
- case Qfalse:
- continue;
- }
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
}
return Qnil;
}
/*
* call-seq:
- * ary.rindex(obj) -> int or nil
- * ary.rindex { |item| block } -> int or nil
- * ary.rindex -> Enumerator
- *
- * Returns the _index_ of the last object in +self+ <code>==</code> to +obj+.
- *
- * If a block is given instead of an argument, returns the _index_ of the
- * first object for which the block returns +true+, starting from the last
- * object.
- *
- * Returns +nil+ if no match is found.
- *
- * See also Array#index.
- *
- * If neither block nor argument is given, an Enumerator is returned instead.
- *
+ * array.rindex(obj) -> int or nil
+ *
+ * Returns the index of the last object in <i>array</i>
+ * <code>==</code> to <i>obj</i>. Returns <code>nil</code> if
+ * no match is found.
+ *
* a = [ "a", "b", "b", "b", "c" ]
- * a.rindex("b") #=> 3
- * a.rindex("z") #=> nil
- * a.rindex { |x| x == "b" } #=> 3
+ * a.rindex("b") #=> 3
+ * a.rindex("z") #=> nil
*/
static VALUE
-rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
-{
- const VALUE *ptr;
+rb_ary_rindex(ary, val)
+ VALUE ary;
VALUE val;
- long i = RARRAY_LEN(ary), len;
+{
+ long i = RARRAY(ary)->len;
- if (argc == 0) {
- RETURN_ENUMERATOR(ary, 0, 0);
- while (i--) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i))))
- return LONG2NUM(i);
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
- }
- }
- return Qnil;
- }
- rb_check_arity(argc, 0, 1);
- val = argv[0];
- if (rb_block_given_p())
- rb_warn("given block not used");
- ptr = RARRAY_CONST_PTR(ary);
while (i--) {
- VALUE e = ptr[i];
- switch (rb_equal_opt(e, val)) {
- case Qundef:
- if (!rb_equal(e, val)) break;
- case Qtrue:
- return LONG2NUM(i);
- case Qfalse:
+ if (i > RARRAY(ary)->len) {
+ i = RARRAY(ary)->len;
continue;
}
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
- }
- ptr = RARRAY_CONST_PTR(ary);
+ if (rb_equal(RARRAY(ary)->ptr[i], val))
+ return LONG2NUM(i);
}
return Qnil;
}
-VALUE
-rb_ary_to_ary(VALUE obj)
+/*
+ * call-seq:
+ * array.indexes( i1, i2, ... iN ) -> an_array
+ * array.indices( i1, i2, ... iN ) -> an_array
+ *
+ * Deprecated; use <code>Array#values_at</code>.
+ */
+
+static VALUE
+rb_ary_indexes(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
- VALUE tmp = rb_check_array_type(obj);
+ VALUE new_ary;
+ long i;
+
+ rb_warn("Array#%s is deprecated; use Array#values_at", rb_id2name(rb_frame_last_func()));
+ new_ary = rb_ary_new2(argc);
+ for (i=0; i<argc; i++) {
+ rb_ary_push(new_ary, rb_ary_aref(1, argv+i, ary));
+ }
+
+ return new_ary;
+}
- if (!NIL_P(tmp)) return tmp;
+VALUE
+rb_ary_to_ary(obj)
+ VALUE obj;
+{
+ if (TYPE(obj) == T_ARRAY) {
+ return obj;
+ }
+ if (rb_respond_to(obj, rb_intern("to_ary"))) {
+ return rb_convert_type(obj, T_ARRAY, "Array", "to_ary");
+ }
return rb_ary_new3(1, obj);
}
static void
-rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
+rb_ary_splice(ary, beg, len, rpl)
+ VALUE ary;
+ long beg, len;
+ VALUE rpl;
{
long rlen;
- long olen;
if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);
- olen = RARRAY_LEN(ary);
if (beg < 0) {
- beg += olen;
+ beg += RARRAY(ary)->len;
if (beg < 0) {
- rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- beg - olen, -olen);
+ beg -= RARRAY(ary)->len;
+ rb_raise(rb_eIndexError, "index %ld out of array", beg);
}
}
- if (olen < len || olen < beg + len) {
- len = olen - beg;
+ if (RARRAY(ary)->len < len || RARRAY(ary)->len < beg + len) {
+ len = RARRAY(ary)->len - beg;
}
- if (rpl == Qundef) {
+ if (NIL_P(rpl)) {
rlen = 0;
}
else {
rpl = rb_ary_to_ary(rpl);
- rlen = RARRAY_LEN(rpl);
- olen = RARRAY_LEN(ary); /* ary may be resized in rpl.to_ary too */
+ rlen = RARRAY(rpl)->len;
}
- if (beg >= olen) {
- VALUE target_ary;
+ rb_ary_modify(ary);
+
+ if (beg >= RARRAY(ary)->len) {
if (beg > ARY_MAX_SIZE - rlen) {
rb_raise(rb_eIndexError, "index %ld too big", beg);
}
- target_ary = ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */
len = beg + rlen;
- ary_mem_clear(ary, olen, beg - olen);
+ if (len >= RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
+ RARRAY(ary)->aux.capa = len;
+ }
+ rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, beg - RARRAY(ary)->len);
if (rlen > 0) {
- ary_memcpy0(ary, beg, rlen, RARRAY_CONST_PTR(rpl), target_ary);
+ MEMCPY(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
}
- ARY_SET_LEN(ary, len);
+ RARRAY(ary)->len = len;
}
else {
long alen;
- if (olen - len > ARY_MAX_SIZE - rlen) {
- rb_raise(rb_eIndexError, "index %ld too big", olen + rlen - len);
+ if (beg + len > RARRAY(ary)->len) {
+ len = RARRAY(ary)->len - beg;
}
- rb_ary_modify(ary);
- alen = olen + rlen - len;
- if (alen >= ARY_CAPA(ary)) {
- ary_double_capa(ary, alen);
+
+ alen = RARRAY(ary)->len + rlen - len;
+ if (alen >= RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, alen);
+ RARRAY(ary)->aux.capa = alen;
}
if (len != rlen) {
- RARRAY_PTR_USE(ary, ptr,
- MEMMOVE(ptr + beg + rlen, ptr + beg + len,
- VALUE, olen - (beg + len)));
- ARY_SET_LEN(ary, alen);
+ MEMMOVE(RARRAY(ary)->ptr + beg + rlen, RARRAY(ary)->ptr + beg + len,
+ VALUE, RARRAY(ary)->len - (beg + len));
+ RARRAY(ary)->len = alen;
}
if (rlen > 0) {
- MEMMOVE(RARRAY_PTR(ary) + beg, RARRAY_CONST_PTR(rpl), VALUE, rlen);
- }
- }
- RB_GC_GUARD(rpl);
-}
-
-void
-rb_ary_set_len(VALUE ary, long len)
-{
- long capa;
-
- rb_ary_modify_check(ary);
- if (ARY_SHARED_P(ary)) {
- rb_raise(rb_eRuntimeError, "can't set length of shared ");
- }
- if (len > (capa = (long)ARY_CAPA(ary))) {
- rb_bug("probable buffer overflow: %ld for %ld", len, capa);
- }
- ARY_SET_LEN(ary, len);
-}
-
-/*!
- * expands or shrinks \a ary to \a len elements.
- * expanded region will be filled with Qnil.
- * \param ary an array
- * \param len new size
- * \return \a ary
- * \post the size of \a ary is \a len.
- */
-VALUE
-rb_ary_resize(VALUE ary, long len)
-{
- long olen;
-
- rb_ary_modify(ary);
- olen = RARRAY_LEN(ary);
- if (len == olen) return ary;
- if (len > ARY_MAX_SIZE) {
- rb_raise(rb_eIndexError, "index %ld too big", len);
- }
- if (len > olen) {
- if (len >= ARY_CAPA(ary)) {
- ary_double_capa(ary, len);
+ MEMMOVE(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
}
- ary_mem_clear(ary, olen, len - olen);
- ARY_SET_LEN(ary, len);
- }
- else if (ARY_EMBED_P(ary)) {
- ARY_SET_EMBED_LEN(ary, len);
}
- else if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE tmp[RARRAY_EMBED_LEN_MAX];
- MEMCPY(tmp, ARY_HEAP_PTR(ary), VALUE, len);
- ary_discard(ary);
- MEMCPY((VALUE *)ARY_EMBED_PTR(ary), tmp, VALUE, len); /* WB: no new reference */
- ARY_SET_EMBED_LEN(ary, len);
- }
- else {
- if (olen > len + ARY_DEFAULT_SIZE) {
- SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, len, RARRAY(ary)->as.heap.aux.capa);
- ARY_SET_CAPA(ary, len);
- }
- ARY_SET_HEAP_LEN(ary, len);
- }
- return ary;
}
-/*
+/*
* call-seq:
- * ary[index] = obj -> obj
- * ary[start, length] = obj or other_ary or nil -> obj or other_ary or nil
- * ary[range] = obj or other_ary or nil -> obj or other_ary or nil
- *
- * Element Assignment --- Sets the element at +index+, or replaces a subarray
- * from the +start+ index for +length+ elements, or replaces a subarray
- * specified by the +range+ of indices.
- *
- * If indices are greater than the current capacity of the array, the array
- * grows automatically. Elements are inserted into the array at +start+ if
- * +length+ is zero.
- *
- * Negative indices will count backward from the end of the array. For
- * +start+ and +range+ cases the starting index is just before an element.
- *
- * An IndexError is raised if a negative index points past the beginning of
- * the array.
- *
- * See also Array#push, and Array#unshift.
+ * array[index] = obj -> obj
+ * array[start, length] = obj or an_array or nil -> obj or an_array or nil
+ * array[range] = obj or an_array or nil -> obj or an_array or nil
*
+ * Element Assignment---Sets the element at _index_,
+ * or replaces a subarray starting at _start_ and
+ * continuing for _length_ elements, or replaces a subarray
+ * specified by _range_. If indices are greater than
+ * the current capacity of the array, the array grows
+ * automatically. A negative indices will count backward
+ * from the end of the array. Inserts elements if _length_ is
+ * zero. If +nil+ is used in the second and third form,
+ * deletes elements from _self_. An +IndexError+ is raised if a
+ * negative index points past the beginning of the array. See also
+ * <code>Array#push</code>, and <code>Array#unshift</code>.
+ *
* a = Array.new
* a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
* a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
@@ -1707,31 +1042,38 @@ rb_ary_resize(VALUE ary, long len)
* a[0, 2] = "?" #=> ["?", 2, nil, "4"]
* a[0..2] = "A" #=> ["A", "4"]
* a[-1] = "Z" #=> ["A", "Z"]
- * a[1..-1] = nil #=> ["A", nil]
- * a[1..-1] = [] #=> ["A"]
- * a[0, 0] = [ 1, 2 ] #=> [1, 2, "A"]
- * a[3, 0] = "B" #=> [1, 2, "A", "B"]
+ * a[1..-1] = nil #=> ["A"]
*/
static VALUE
-rb_ary_aset(int argc, VALUE *argv, VALUE ary)
+rb_ary_aset(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
long offset, beg, len;
if (argc == 3) {
- rb_ary_modify_check(ary);
- beg = NUM2LONG(argv[0]);
- len = NUM2LONG(argv[1]);
- rb_ary_splice(ary, beg, len, argv[2]);
+ if (SYMBOL_P(argv[0])) {
+ rb_raise(rb_eTypeError, "Symbol as array index");
+ }
+ if (SYMBOL_P(argv[1])) {
+ rb_raise(rb_eTypeError, "Symbol as subarray length");
+ }
+ rb_ary_splice(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);
return argv[2];
}
- rb_check_arity(argc, 2, 2);
- rb_ary_modify_check(ary);
+ if (argc != 2) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
+ }
if (FIXNUM_P(argv[0])) {
offset = FIX2LONG(argv[0]);
goto fixnum;
}
- if (rb_range_beg_len(argv[0], &beg, &len, RARRAY_LEN(ary), 1)) {
+ if (SYMBOL_P(argv[0])) {
+ rb_raise(rb_eTypeError, "Symbol as array index");
+ }
+ if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) {
/* check if idx is Range */
rb_ary_splice(ary, beg, len, argv[1]);
return argv[1];
@@ -1745,31 +1087,31 @@ fixnum:
/*
* call-seq:
- * ary.insert(index, obj...) -> ary
- *
- * Inserts the given values before the element with the given +index+.
- *
- * Negative indices count backwards from the end of the array, where +-1+ is
- * the last element. If a negative index is used, the given values will be
- * inserted after that element, so using an index of +-1+ will insert the
- * values at the end of the array.
- *
+ * array.insert(index, obj...) -> array
+ *
+ * Inserts the given values before the element with the given index
+ * (which may be negative).
+ *
* a = %w{ a b c d }
* a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
* a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
*/
static VALUE
-rb_ary_insert(int argc, VALUE *argv, VALUE ary)
+rb_ary_insert(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
long pos;
- rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
- rb_ary_modify_check(ary);
if (argc == 1) return ary;
+ if (argc < 1) {
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
+ }
pos = NUM2LONG(argv[0]);
if (pos == -1) {
- pos = RARRAY_LEN(ary);
+ pos = RARRAY(ary)->len;
}
if (pos < 0) {
pos++;
@@ -1778,70 +1120,55 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
return ary;
}
-static VALUE
-rb_ary_length(VALUE ary);
-
-static VALUE
-ary_enum_length(VALUE ary, VALUE args, VALUE eobj)
-{
- return rb_ary_length(ary);
-}
-
/*
* call-seq:
- * ary.each { |item| block } -> ary
- * ary.each -> Enumerator
- *
- * Calls the given block once for each element in +self+, passing that element
- * as a parameter. Returns the array itself.
- *
- * If no block is given, an Enumerator is returned.
- *
+ * array.each {|item| block } -> array
+ *
+ * Calls <i>block</i> once for each element in <i>self</i>, passing that
+ * element as a parameter.
+ *
* a = [ "a", "b", "c" ]
* a.each {|x| print x, " -- " }
- *
+ *
* produces:
- *
+ *
* a -- b -- c --
*/
VALUE
-rb_ary_each(VALUE ary)
+rb_ary_each(ary)
+ VALUE ary;
{
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_AREF(ary, i));
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ rb_yield(RARRAY(ary)->ptr[i]);
}
return ary;
}
/*
* call-seq:
- * ary.each_index { |index| block } -> ary
- * ary.each_index -> Enumerator
- *
- * Same as Array#each, but passes the +index+ of the element instead of the
- * element itself.
- *
- * An Enumerator is returned if no block is given.
- *
+ * array.each_index {|index| block } -> array
+ *
+ * Same as <code>Array#each</code>, but passes the index of the element
+ * instead of the element itself.
+ *
* a = [ "a", "b", "c" ]
* a.each_index {|x| print x, " -- " }
- *
+ *
* produces:
- *
+ *
* 0 -- 1 -- 2 --
*/
static VALUE
-rb_ary_each_index(VALUE ary)
+rb_ary_each_index(ary)
+ VALUE ary;
{
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- for (i=0; i<RARRAY_LEN(ary); i++) {
+ for (i=0; i<RARRAY(ary)->len; i++) {
rb_yield(LONG2NUM(i));
}
return ary;
@@ -1849,32 +1176,29 @@ rb_ary_each_index(VALUE ary)
/*
* call-seq:
- * ary.reverse_each { |item| block } -> ary
- * ary.reverse_each -> Enumerator
- *
- * Same as Array#each, but traverses +self+ in reverse order.
- *
+ * array.reverse_each {|item| block }
+ *
+ * Same as <code>Array#each</code>, but traverses <i>self</i> in reverse
+ * order.
+ *
* a = [ "a", "b", "c" ]
* a.reverse_each {|x| print x, " " }
- *
+ *
* produces:
- *
+ *
* c b a
*/
static VALUE
-rb_ary_reverse_each(VALUE ary)
+rb_ary_reverse_each(ary)
+ VALUE ary;
{
- long len;
+ long len = RARRAY(ary)->len;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- len = RARRAY_LEN(ary);
while (len--) {
- long nlen;
- rb_yield(RARRAY_AREF(ary, len));
- nlen = RARRAY_LEN(ary);
- if (nlen < len) {
- len = nlen;
+ rb_yield(RARRAY(ary)->ptr[len]);
+ if (RARRAY(ary)->len < len) {
+ len = RARRAY(ary)->len;
}
}
return ary;
@@ -1882,896 +1206,555 @@ rb_ary_reverse_each(VALUE ary)
/*
* call-seq:
- * ary.length -> int
- *
- * Returns the number of elements in +self+. May be zero.
- *
+ * array.length -> int
+ *
+ * Returns the number of elements in <i>self</i>. May be zero.
+ *
* [ 1, 2, 3, 4, 5 ].length #=> 5
- * [].length #=> 0
*/
static VALUE
-rb_ary_length(VALUE ary)
+rb_ary_length(ary)
+ VALUE ary;
{
- long len = RARRAY_LEN(ary);
- return LONG2NUM(len);
+ return LONG2NUM(RARRAY(ary)->len);
}
/*
* call-seq:
- * ary.empty? -> true or false
- *
- * Returns +true+ if +self+ contains no elements.
- *
+ * array.empty? -> true or false
+ *
+ * Returns <code>true</code> if <i>self</i> array contains no elements.
+ *
* [].empty? #=> true
*/
static VALUE
-rb_ary_empty_p(VALUE ary)
+rb_ary_empty_p(ary)
+ VALUE ary;
{
- if (RARRAY_LEN(ary) == 0)
+ if (RARRAY(ary)->len == 0)
return Qtrue;
return Qfalse;
}
VALUE
-rb_ary_dup(VALUE ary)
+rb_ary_dup(ary)
+ VALUE ary;
{
- long len = RARRAY_LEN(ary);
- VALUE dup = rb_ary_new2(len);
- ary_memcpy(dup, 0, len, RARRAY_CONST_PTR(ary));
- ARY_SET_LEN(dup, len);
- return dup;
-}
+ VALUE dup = rb_ary_new2(RARRAY(ary)->len);
-VALUE
-rb_ary_resurrect(VALUE ary)
-{
- return rb_ary_new4(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary));
+ DUPSETUP(dup, ary);
+ MEMCPY(RARRAY(dup)->ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+ RARRAY(dup)->len = RARRAY(ary)->len;
+ return dup;
}
extern VALUE rb_output_fs;
-static void ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first);
-
static VALUE
-recursive_join(VALUE obj, VALUE argp, int recur)
-{
- VALUE *arg = (VALUE *)argp;
- VALUE ary = arg[0];
- VALUE sep = arg[1];
- VALUE result = arg[2];
- int *first = (int *)arg[3];
-
- if (recur) {
- rb_raise(rb_eArgError, "recursive array join");
- }
- else {
- ary_join_1(obj, ary, sep, 0, result, first);
- }
- return Qnil;
-}
-
-static void
-ary_join_0(VALUE ary, VALUE sep, long max, VALUE result)
+inspect_join(ary, arg)
+ VALUE ary;
+ VALUE *arg;
{
- long i;
- VALUE val;
-
- if (max > 0) rb_enc_copy(result, RARRAY_AREF(ary, 0));
- for (i=0; i<max; i++) {
- val = RARRAY_AREF(ary, i);
- if (i > 0 && !NIL_P(sep))
- rb_str_buf_append(result, sep);
- rb_str_buf_append(result, val);
- if (OBJ_TAINTED(val)) OBJ_TAINT(result);
- }
+ return rb_ary_join(arg[0], arg[1]);
}
-static void
-ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
+VALUE
+rb_ary_join(ary, sep)
+ VALUE ary, sep;
{
- VALUE val, tmp;
+ long len = 1, i;
+ int taint = Qfalse;
+ VALUE result, tmp;
- for (; i<RARRAY_LEN(ary); i++) {
- if (i > 0 && !NIL_P(sep))
- rb_str_buf_append(result, sep);
+ if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
+ if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue;
- val = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(val, T_STRING)) {
- str_join:
- rb_str_buf_append(result, val);
- *first = FALSE;
- }
- else if (RB_TYPE_P(val, T_ARRAY)) {
- obj = val;
- ary_join:
- if (val == ary) {
- rb_raise(rb_eArgError, "recursive array join");
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ tmp = rb_check_string_type(RARRAY(ary)->ptr[i]);
+ len += NIL_P(tmp) ? 10 : RSTRING(tmp)->len;
+ }
+ if (!NIL_P(sep)) {
+ StringValue(sep);
+ len += RSTRING(sep)->len * (RARRAY(ary)->len - 1);
+ }
+ result = rb_str_buf_new(len);
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ tmp = RARRAY(ary)->ptr[i];
+ switch (TYPE(tmp)) {
+ case T_STRING:
+ break;
+ case T_ARRAY:
+ if (rb_inspecting_p(tmp)) {
+ tmp = rb_str_new2("[...]");
}
else {
- VALUE args[4];
+ VALUE args[2];
- args[0] = val;
+ args[0] = tmp;
args[1] = sep;
- args[2] = result;
- args[3] = (VALUE)first;
- rb_exec_recursive(recursive_join, obj, (VALUE)args);
- }
- }
- else {
- tmp = rb_check_string_type(val);
- if (!NIL_P(tmp)) {
- val = tmp;
- goto str_join;
+ tmp = rb_protect_inspect(inspect_join, ary, (VALUE)args);
}
- tmp = rb_check_convert_type(val, T_ARRAY, "Array", "to_ary");
- if (!NIL_P(tmp)) {
- obj = val;
- val = tmp;
- goto ary_join;
- }
- val = rb_obj_as_string(val);
- if (*first) {
- rb_enc_copy(result, val);
- *first = FALSE;
- }
- goto str_join;
- }
- }
-}
-
-VALUE
-rb_ary_join(VALUE ary, VALUE sep)
-{
- long len = 1, i;
- int taint = FALSE;
- VALUE val, tmp, result;
-
- if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0);
- if (OBJ_TAINTED(ary)) taint = TRUE;
-
- if (!NIL_P(sep)) {
- StringValue(sep);
- len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
- }
- for (i=0; i<RARRAY_LEN(ary); i++) {
- val = RARRAY_AREF(ary, i);
- tmp = rb_check_string_type(val);
-
- if (NIL_P(tmp) || tmp != val) {
- int first;
- result = rb_str_buf_new(len + (RARRAY_LEN(ary)-i)*10);
- rb_enc_associate(result, rb_usascii_encoding());
- if (taint) OBJ_TAINT(result);
- ary_join_0(ary, sep, i, result);
- first = i == 0;
- ary_join_1(ary, ary, sep, i, result, &first);
- return result;
+ break;
+ default:
+ tmp = rb_obj_as_string(tmp);
}
-
- len += RSTRING_LEN(tmp);
+ if (i > 0 && !NIL_P(sep))
+ rb_str_buf_append(result, sep);
+ rb_str_buf_append(result, tmp);
+ if (OBJ_TAINTED(tmp)) taint = Qtrue;
}
- result = rb_str_buf_new(len);
if (taint) OBJ_TAINT(result);
- ary_join_0(ary, sep, RARRAY_LEN(ary), result);
-
return result;
}
/*
* call-seq:
- * ary.join(separator=$,) -> str
- *
+ * array.join(sep=$,) -> str
+ *
* Returns a string created by converting each element of the array to
- * a string, separated by the given +separator+.
- * If the +separator+ is +nil+, it uses current $,.
- * If both the +separator+ and $, are nil, it uses empty string.
- *
+ * a string, separated by <i>sep</i>.
+ *
* [ "a", "b", "c" ].join #=> "abc"
* [ "a", "b", "c" ].join("-") #=> "a-b-c"
*/
static VALUE
-rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
+rb_ary_join_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
VALUE sep;
rb_scan_args(argc, argv, "01", &sep);
if (NIL_P(sep)) sep = rb_output_fs;
-
+
return rb_ary_join(ary, sep);
}
-static VALUE
-inspect_ary(VALUE ary, VALUE dummy, int recur)
-{
- int tainted = OBJ_TAINTED(ary);
- long i;
- VALUE s, str;
-
- if (recur) return rb_usascii_str_new_cstr("[...]");
- str = rb_str_buf_new2("[");
- for (i=0; i<RARRAY_LEN(ary); i++) {
- s = rb_inspect(RARRAY_AREF(ary, i));
- if (OBJ_TAINTED(s)) tainted = TRUE;
- if (i > 0) rb_str_buf_cat2(str, ", ");
- else rb_enc_copy(str, s);
- rb_str_buf_append(str, s);
- }
- rb_str_buf_cat2(str, "]");
- if (tainted) OBJ_TAINT(str);
- return str;
-}
-
/*
* call-seq:
- * ary.inspect -> string
- * ary.to_s -> string
- *
- * Creates a string representation of +self+.
+ * array.to_s -> string
+ *
+ * Returns _self_<code>.join</code>.
+ *
+ * [ "a", "e", "i", "o" ].to_s #=> "aeio"
*
- * [ "a", "b", "c" ].to_s #=> "[\"a\", \"b\", \"c\"]"
*/
-static VALUE
-rb_ary_inspect(VALUE ary)
-{
- if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new2("[]");
- return rb_exec_recursive(inspect_ary, ary, 0);
-}
-
VALUE
-rb_ary_to_s(VALUE ary)
+rb_ary_to_s(ary)
+ VALUE ary;
{
- return rb_ary_inspect(ary);
+ if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
+
+ return rb_ary_join(ary, rb_output_fs);
}
-/*
- * call-seq:
- * ary.to_a -> ary
- *
- * Returns +self+.
- *
- * If called on a subclass of Array, converts the receiver to an Array object.
- */
+static ID inspect_key;
+
+struct inspect_arg {
+ VALUE (*func)();
+ VALUE arg1, arg2;
+};
static VALUE
-rb_ary_to_a(VALUE ary)
+inspect_call(arg)
+ struct inspect_arg *arg;
{
- if (rb_obj_class(ary) != rb_cArray) {
- VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
- rb_ary_replace(dup, ary);
- return dup;
- }
- return ary;
+ return (*arg->func)(arg->arg1, arg->arg2);
}
-/*
- * call-seq:
- * ary.to_h -> hash
- *
- * Returns the result of interpreting <i>ary</i> as an array of
- * <tt>[key, value]</tt> pairs.
- *
- * [[:foo, :bar], [1, 2]].to_h
- * # => {:foo => :bar, 1 => 2}
- */
-
static VALUE
-rb_ary_to_h(VALUE ary)
+get_inspect_tbl(create)
+ int create;
{
- long i;
- VALUE hash = rb_hash_new();
- for (i=0; i<RARRAY_LEN(ary); i++) {
- const VALUE elt = rb_ary_elt(ary, i);
- const VALUE key_value_pair = rb_check_array_type(elt);
- if (NIL_P(key_value_pair)) {
- rb_raise(rb_eTypeError, "wrong element type %"PRIsVALUE" at %ld (expected array)",
- rb_obj_class(elt), i);
- }
- if (RARRAY_LEN(key_value_pair) != 2) {
- rb_raise(rb_eArgError, "wrong array length at %ld (expected 2, was %ld)",
- i, RARRAY_LEN(key_value_pair));
+ VALUE inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);
+
+ if (NIL_P(inspect_tbl)) {
+ if (create) {
+ tbl_init:
+ inspect_tbl = rb_ary_new();
+ rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl);
}
- rb_hash_aset(hash, RARRAY_AREF(key_value_pair, 0), RARRAY_AREF(key_value_pair, 1));
}
- return hash;
+ else if (TYPE(inspect_tbl) != T_ARRAY) {
+ rb_warn("invalid inspect_tbl value");
+ if (create) goto tbl_init;
+ rb_thread_local_aset(rb_thread_current(), inspect_key, Qnil);
+ return Qnil;
+ }
+ return inspect_tbl;
}
-/*
- * call-seq:
- * ary.to_ary -> ary
- *
- * Returns +self+.
- */
-
static VALUE
-rb_ary_to_ary_m(VALUE ary)
+inspect_ensure(obj)
+ VALUE obj;
{
- return ary;
+ VALUE inspect_tbl;
+
+ inspect_tbl = get_inspect_tbl(Qfalse);
+ if (!NIL_P(inspect_tbl)) {
+ rb_ary_pop(inspect_tbl);
+ }
+ return 0;
}
-static void
-ary_reverse(VALUE *p1, VALUE *p2)
+VALUE
+rb_protect_inspect(func, obj, arg)
+ VALUE (*func)(ANYARGS);
+ VALUE obj, arg;
{
- while (p1 < p2) {
- VALUE tmp = *p1;
- *p1++ = *p2;
- *p2-- = tmp;
+ struct inspect_arg iarg;
+ VALUE inspect_tbl;
+ VALUE id;
+
+ inspect_tbl = get_inspect_tbl(Qtrue);
+ id = rb_obj_id(obj);
+ if (rb_ary_includes(inspect_tbl, id)) {
+ return (*func)(obj, arg);
}
+ rb_ary_push(inspect_tbl, id);
+ iarg.func = func;
+ iarg.arg1 = obj;
+ iarg.arg2 = arg;
+
+ return rb_ensure(inspect_call, (VALUE)&iarg, inspect_ensure, obj);
}
VALUE
-rb_ary_reverse(VALUE ary)
+rb_inspecting_p(obj)
+ VALUE obj;
{
- VALUE *p2;
- long len = RARRAY_LEN(ary);
+ VALUE inspect_tbl;
- rb_ary_modify(ary);
- if (len > 1) {
- RARRAY_PTR_USE(ary, p1, {
- p2 = p1 + len - 1; /* points last item */
- ary_reverse(p1, p2);
- }); /* WB: no new reference */
+ inspect_tbl = get_inspect_tbl(Qfalse);
+ if (NIL_P(inspect_tbl)) return Qfalse;
+ return rb_ary_includes(inspect_tbl, rb_obj_id(obj));
+}
+
+static VALUE
+inspect_ary(ary)
+ VALUE ary;
+{
+ int tainted = OBJ_TAINTED(ary);
+ long i;
+ VALUE s, str;
+
+ str = rb_str_buf_new2("[");
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ s = rb_inspect(RARRAY(ary)->ptr[i]);
+ if (OBJ_TAINTED(s)) tainted = Qtrue;
+ if (i > 0) rb_str_buf_cat2(str, ", ");
+ rb_str_buf_append(str, s);
}
- return ary;
+ rb_str_buf_cat2(str, "]");
+ if (tainted) OBJ_TAINT(str);
+ return str;
}
/*
* call-seq:
- * ary.reverse! -> ary
- *
- * Reverses +self+ in place.
+ * array.inspect -> string
*
- * a = [ "a", "b", "c" ]
- * a.reverse! #=> ["c", "b", "a"]
- * a #=> ["c", "b", "a"]
+ * Create a printable version of <i>array</i>.
*/
static VALUE
-rb_ary_reverse_bang(VALUE ary)
+rb_ary_inspect(ary)
+ VALUE ary;
{
- return rb_ary_reverse(ary);
+ if (RARRAY(ary)->len == 0) return rb_str_new2("[]");
+ if (rb_inspecting_p(ary)) return rb_str_new2("[...]");
+ return rb_protect_inspect(inspect_ary, ary, 0);
}
/*
* call-seq:
- * ary.reverse -> new_ary
- *
- * Returns a new array containing +self+'s elements in reverse order.
- *
- * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
- * [ 1 ].reverse #=> [1]
+ * array.to_a -> array
+ *
+ * Returns _self_. If called on a subclass of Array, converts
+ * the receiver to an Array object.
*/
static VALUE
-rb_ary_reverse_m(VALUE ary)
+rb_ary_to_a(ary)
+ VALUE ary;
{
- long len = RARRAY_LEN(ary);
- VALUE dup = rb_ary_new2(len);
-
- if (len > 0) {
- const VALUE *p1 = RARRAY_CONST_PTR(ary);
- VALUE *p2 = (VALUE *)RARRAY_CONST_PTR(dup) + len - 1;
- do *p2-- = *p1++; while (--len > 0);
+ if (rb_obj_class(ary) != rb_cArray) {
+ VALUE dup = rb_ary_new2(RARRAY(ary)->len);
+ rb_ary_replace(dup, ary);
+ return dup;
}
- ARY_SET_LEN(dup, RARRAY_LEN(ary));
- return dup;
+ return ary;
}
-static inline long
-rotate_count(long cnt, long len)
+/*
+ * call-seq:
+ * array.to_ary -> array
+ *
+ * Returns _self_.
+ */
+
+static VALUE
+rb_ary_to_ary_m(ary)
+ VALUE ary;
{
- return (cnt < 0) ? (len - (~cnt % len) - 1) : (cnt % len);
+ return ary;
}
VALUE
-rb_ary_rotate(VALUE ary, long cnt)
+rb_ary_reverse(ary)
+ VALUE ary;
{
- rb_ary_modify(ary);
+ VALUE *p1, *p2;
+ VALUE tmp;
- if (cnt != 0) {
- VALUE *ptr = RARRAY_PTR(ary);
- long len = RARRAY_LEN(ary);
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len > 1) {
+ p1 = RARRAY(ary)->ptr;
+ p2 = p1 + RARRAY(ary)->len - 1; /* points last item */
- if (len > 0 && (cnt = rotate_count(cnt, len)) > 0) {
- --len;
- if (cnt < len) ary_reverse(ptr + cnt, ptr + len);
- if (--cnt > 0) ary_reverse(ptr, ptr + cnt);
- if (len > 0) ary_reverse(ptr, ptr + len);
- return ary;
+ while (p1 < p2) {
+ tmp = *p1;
+ *p1++ = *p2;
+ *p2-- = tmp;
}
}
-
- return Qnil;
+ return ary;
}
/*
* call-seq:
- * ary.rotate!(count=1) -> ary
- *
- * Rotates +self+ in place so that the element at +count+ comes first, and
- * returns +self+.
- *
- * If +count+ is negative then it rotates in the opposite direction, starting
- * from the end of the array where +-1+ is the last element.
- *
- * a = [ "a", "b", "c", "d" ]
- * a.rotate! #=> ["b", "c", "d", "a"]
- * a #=> ["b", "c", "d", "a"]
- * a.rotate!(2) #=> ["d", "a", "b", "c"]
- * a.rotate!(-3) #=> ["a", "b", "c", "d"]
+ * array.reverse! -> array
+ *
+ * Reverses _self_ in place.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.reverse! #=> ["c", "b", "a"]
+ * a #=> ["c", "b", "a"]
*/
static VALUE
-rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
+rb_ary_reverse_bang(ary)
+ VALUE ary;
{
- long n = 1;
-
- switch (argc) {
- case 1: n = NUM2LONG(argv[0]);
- case 0: break;
- default: rb_scan_args(argc, argv, "01", NULL);
- }
- rb_ary_rotate(ary, n);
- return ary;
+ return rb_ary_reverse(ary);
}
/*
* call-seq:
- * ary.rotate(count=1) -> new_ary
- *
- * Returns a new array by rotating +self+ so that the element at +count+ is
- * the first element of the new array.
- *
- * If +count+ is negative then it rotates in the opposite direction, starting
- * from the end of +self+ where +-1+ is the last element.
- *
- * a = [ "a", "b", "c", "d" ]
- * a.rotate #=> ["b", "c", "d", "a"]
- * a #=> ["a", "b", "c", "d"]
- * a.rotate(2) #=> ["c", "d", "a", "b"]
- * a.rotate(-3) #=> ["b", "c", "d", "a"]
+ * array.reverse -> an_array
+ *
+ * Returns a new array containing <i>self</i>'s elements in reverse order.
+ *
+ * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
+ * [ 1 ].reverse #=> [1]
*/
static VALUE
-rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
+rb_ary_reverse_m(ary)
+ VALUE ary;
{
- VALUE rotated;
- const VALUE *ptr;
- long len, cnt = 1;
-
- switch (argc) {
- case 1: cnt = NUM2LONG(argv[0]);
- case 0: break;
- default: rb_scan_args(argc, argv, "01", NULL);
- }
-
- len = RARRAY_LEN(ary);
- rotated = rb_ary_new2(len);
- if (len > 0) {
- cnt = rotate_count(cnt, len);
- ptr = RARRAY_CONST_PTR(ary);
- len -= cnt;
- ary_memcpy(rotated, 0, len, ptr + cnt);
- ary_memcpy(rotated, len, cnt, ptr);
- }
- ARY_SET_LEN(rotated, RARRAY_LEN(ary));
- return rotated;
+ return rb_ary_reverse(rb_ary_dup(ary));
}
struct ary_sort_data {
VALUE ary;
- int opt_methods;
- int opt_inited;
-};
-
-enum {
- sort_opt_Fixnum,
- sort_opt_String,
- sort_optimizable_count
+ VALUE *ptr;
+ long len;
};
-#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
-
-#define SORT_OPTIMIZABLE_BIT(type) (1U << TOKEN_PASTE(sort_opt_,type))
-#define SORT_OPTIMIZABLE(data, type) \
- (((data)->opt_inited & SORT_OPTIMIZABLE_BIT(type)) ? \
- ((data)->opt_methods & SORT_OPTIMIZABLE_BIT(type)) : \
- (((data)->opt_inited |= SORT_OPTIMIZABLE_BIT(type)), \
- rb_method_basic_definition_p(TOKEN_PASTE(rb_c,type), id_cmp) && \
- ((data)->opt_methods |= SORT_OPTIMIZABLE_BIT(type))))
-
-static VALUE
-sort_reentered(VALUE ary)
+static void
+ary_sort_check(data)
+ struct ary_sort_data *data;
{
- if (RBASIC(ary)->klass) {
- rb_raise(rb_eRuntimeError, "sort reentered");
+ if (RARRAY(data->ary)->ptr != data->ptr || RARRAY(data->ary)->len != data->len) {
+ rb_raise(rb_eArgError, "array modified during sort");
}
- return Qnil;
}
static int
-sort_1(const void *ap, const void *bp, void *dummy)
+sort_1(a, b, data)
+ VALUE *a, *b;
+ struct ary_sort_data *data;
{
- struct ary_sort_data *data = dummy;
- VALUE retval = sort_reentered(data->ary);
- VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
+ VALUE retval = rb_yield_values(2, *a, *b);
int n;
- retval = rb_yield_values(2, a, b);
- n = rb_cmpint(retval, a, b);
- sort_reentered(data->ary);
+ n = rb_cmpint(retval, *a, *b);
+ ary_sort_check(data);
return n;
}
static int
-sort_2(const void *ap, const void *bp, void *dummy)
+sort_2(ap, bp, data)
+ VALUE *ap, *bp;
+ struct ary_sort_data *data;
{
- struct ary_sort_data *data = dummy;
- VALUE retval = sort_reentered(data->ary);
- VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
+ VALUE retval;
+ VALUE a = *ap, b = *bp;
int n;
- if (FIXNUM_P(a) && FIXNUM_P(b) && SORT_OPTIMIZABLE(data, Fixnum)) {
+ if (FIXNUM_P(a) && FIXNUM_P(b)) {
if ((long)a > (long)b) return 1;
if ((long)a < (long)b) return -1;
return 0;
}
- if (STRING_P(a) && STRING_P(b) && SORT_OPTIMIZABLE(data, String)) {
- return rb_str_cmp(a, b);
+ if (TYPE(a) == T_STRING) {
+ if (TYPE(b) == T_STRING) return rb_str_cmp(a, b);
}
- retval = rb_funcallv(a, id_cmp, 1, &b);
+ retval = rb_funcall(a, id_cmp, 1, b);
n = rb_cmpint(retval, a, b);
- sort_reentered(data->ary);
+ ary_sort_check(data);
return n;
}
-/*
- * call-seq:
- * ary.sort! -> ary
- * ary.sort! { |a, b| block } -> ary
- *
- * Sorts +self+ in place.
- *
- * Comparisons for the sort will be done using the <code><=></code> operator
- * or using an optional code block.
- *
- * The block must implement a comparison between +a+ and +b+ and return
- * an integer less than 0 when +b+ follows +a+, +0+ when +a+ and +b+
- * are equivalent, or an integer greater than 0 when +a+ follows +b+.
- *
- * See also Enumerable#sort_by.
- *
- * a = [ "d", "a", "e", "c", "b" ]
- * a.sort! #=> ["a", "b", "c", "d", "e"]
- * a.sort! { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
- */
-
-VALUE
-rb_ary_sort_bang(VALUE ary)
+static VALUE
+sort_internal(ary)
+ VALUE ary;
{
- rb_ary_modify(ary);
- assert(!ARY_SHARED_P(ary));
- if (RARRAY_LEN(ary) > 1) {
- VALUE tmp = ary_make_substitution(ary); /* only ary refers tmp */
- struct ary_sort_data data;
- long len = RARRAY_LEN(ary);
-
- RBASIC_CLEAR_CLASS(tmp);
- data.ary = tmp;
- data.opt_methods = 0;
- data.opt_inited = 0;
- RARRAY_PTR_USE(tmp, ptr, {
- ruby_qsort(ptr, len, sizeof(VALUE),
- rb_block_given_p()?sort_1:sort_2, &data);
- }); /* WB: no new reference */
- rb_ary_modify(ary);
- if (ARY_EMBED_P(tmp)) {
- if (ARY_SHARED_P(ary)) { /* ary might be destructively operated in the given block */
- rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
- }
- ary_memcpy(ary, 0, ARY_EMBED_LEN(tmp), ARY_EMBED_PTR(tmp));
- ARY_SET_LEN(ary, ARY_EMBED_LEN(tmp));
- }
- else {
- if (!ARY_EMBED_P(ary) && ARY_HEAP_PTR(ary) == ARY_HEAP_PTR(tmp)) {
- FL_UNSET_SHARED(ary);
- ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
- }
- else {
- assert(!ARY_SHARED_P(tmp));
- if (ARY_EMBED_P(ary)) {
- FL_UNSET_EMBED(ary);
- }
- else if (ARY_SHARED_P(ary)) {
- /* ary might be destructively operated in the given block */
- rb_ary_unshare(ary);
- }
- else {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
- }
- ARY_SET_PTR(ary, RARRAY_CONST_PTR(tmp));
- ARY_SET_HEAP_LEN(ary, len);
- ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
- }
- /* tmp was lost ownership for the ptr */
- FL_UNSET(tmp, FL_FREEZE);
- FL_SET_EMBED(tmp);
- ARY_SET_EMBED_LEN(tmp, 0);
- FL_SET(tmp, FL_FREEZE);
- }
- /* tmp will be GC'ed. */
- RBASIC_SET_CLASS_RAW(tmp, rb_cArray); /* rb_cArray must be marked */
- }
- return ary;
-}
-
-/*
- * call-seq:
- * ary.sort -> new_ary
- * ary.sort { |a, b| block } -> new_ary
- *
- * Returns a new array created by sorting +self+.
- *
- * Comparisons for the sort will be done using the <code><=></code> operator
- * or using an optional code block.
- *
- * The block must implement a comparison between +a+ and +b+ and return
- * an integer less than 0 when +b+ follows +a+, +0+ when +a+ and +b+
- * are equivalent, or an integer greater than 0 when +a+ follows +b+.
- *
- *
- * See also Enumerable#sort_by.
- *
- * a = [ "d", "a", "e", "c", "b" ]
- * a.sort #=> ["a", "b", "c", "d", "e"]
- * a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
- */
+ struct ary_sort_data data;
-VALUE
-rb_ary_sort(VALUE ary)
-{
- ary = rb_ary_dup(ary);
- rb_ary_sort_bang(ary);
+ data.ary = ary;
+ data.ptr = RARRAY(ary)->ptr; data.len = RARRAY(ary)->len;
+ qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE),
+ rb_block_given_p()?sort_1:sort_2, &data);
return ary;
}
-static VALUE rb_ary_bsearch_index(VALUE ary);
-
-/*
- * call-seq:
- * ary.bsearch {|x| block } -> elem
- *
- * By using binary search, finds a value from this array which meets
- * the given condition in O(log n) where n is the size of the array.
- *
- * You can use this method in two use cases: a find-minimum mode and
- * a find-any mode. In either case, the elements of the array must be
- * monotone (or sorted) with respect to the block.
- *
- * In find-minimum mode (this is a good choice for typical use case),
- * the block must return true or false, and there must be an index i
- * (0 <= i <= ary.size) so that:
- *
- * - the block returns false for any element whose index is less than
- * i, and
- * - the block returns true for any element whose index is greater
- * than or equal to i.
- *
- * This method returns the i-th element. If i is equal to ary.size,
- * it returns nil.
- *
- * ary = [0, 4, 7, 10, 12]
- * ary.bsearch {|x| x >= 4 } #=> 4
- * ary.bsearch {|x| x >= 6 } #=> 7
- * ary.bsearch {|x| x >= -1 } #=> 0
- * ary.bsearch {|x| x >= 100 } #=> nil
- *
- * In find-any mode (this behaves like libc's bsearch(3)), the block
- * must return a number, and there must be two indices i and j
- * (0 <= i <= j <= ary.size) so that:
- *
- * - the block returns a positive number for ary[k] if 0 <= k < i,
- * - the block returns zero for ary[k] if i <= k < j, and
- * - the block returns a negative number for ary[k] if
- * j <= k < ary.size.
- *
- * Under this condition, this method returns any element whose index
- * is within i...j. If i is equal to j (i.e., there is no element
- * that satisfies the block), this method returns nil.
- *
- * ary = [0, 4, 7, 10, 12]
- * # try to find v such that 4 <= v < 8
- * ary.bsearch {|x| 1 - x / 4 } #=> 4 or 7
- * # try to find v such that 8 <= v < 10
- * ary.bsearch {|x| 4 - x / 2 } #=> nil
- *
- * You must not mix the two modes at a time; the block must always
- * return either true/false, or always return a number. It is
- * undefined which value is actually picked up at each iteration.
- */
-
static VALUE
-rb_ary_bsearch(VALUE ary)
+sort_unlock(ary)
+ VALUE ary;
{
- VALUE index_result = rb_ary_bsearch_index(ary);
-
- if (FIXNUM_P(index_result)) {
- return rb_ary_entry(ary, FIX2LONG(index_result));
- }
- return index_result;
+ FL_UNSET(ary, ARY_TMPLOCK);
+ return ary;
}
/*
* call-seq:
- * ary.bsearch_index {|x| block } -> int or nil
- *
- * By using binary search, finds an index of a value from this array which
- * meets the given condition in O(log n) where n is the size of the array.
- *
- * It supports two modes, depending on the nature of the block and they are
- * exactly the same as in the case of #bsearch method with the only difference
- * being that this method returns the index of the element instead of the
- * element itself. For more details consult the documentation for #bsearch.
+ * array.sort! -> array
+ * array.sort! {| a,b | block } -> array
+ *
+ * Sorts _self_. Comparisons for
+ * the sort will be done using the <code><=></code> operator or using
+ * an optional code block. The block implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
+ *
+ * a = [ "d", "a", "e", "c", "b" ]
+ * a.sort #=> ["a", "b", "c", "d", "e"]
+ * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
*/
-static VALUE
-rb_ary_bsearch_index(VALUE ary)
+VALUE
+rb_ary_sort_bang(ary)
+ VALUE ary;
{
- long low = 0, high = RARRAY_LEN(ary), mid;
- int smaller = 0, satisfied = 0;
- VALUE v, val;
-
- RETURN_ENUMERATOR(ary, 0, 0);
- while (low < high) {
- mid = low + ((high - low) / 2);
- val = rb_ary_entry(ary, mid);
- v = rb_yield(val);
- if (FIXNUM_P(v)) {
- if (v == INT2FIX(0)) return INT2FIX(mid);
- smaller = (SIGNED_VALUE)v < 0; /* Fixnum preserves its sign-bit */
- }
- else if (v == Qtrue) {
- satisfied = 1;
- smaller = 1;
- }
- else if (v == Qfalse || v == Qnil) {
- smaller = 0;
- }
- else if (rb_obj_is_kind_of(v, rb_cNumeric)) {
- const VALUE zero = INT2FIX(0);
- switch (rb_cmpint(rb_funcallv(v, id_cmp, 1, &zero), v, zero)) {
- case 0: return INT2FIX(mid);
- case 1: smaller = 1; break;
- case -1: smaller = 0;
- }
- }
- else {
- rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE
- " (must be numeric, true, false or nil)",
- rb_obj_class(v));
- }
- if (smaller) {
- high = mid;
- }
- else {
- low = mid + 1;
- }
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len > 1) {
+ FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during sort */
+ rb_ensure(sort_internal, ary, sort_unlock, ary);
}
- if (!satisfied) return Qnil;
- return INT2FIX(low);
-}
-
-
-static VALUE
-sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy))
-{
- return rb_yield(i);
+ return ary;
}
/*
* call-seq:
- * ary.sort_by! { |obj| block } -> ary
- * ary.sort_by! -> Enumerator
- *
- * Sorts +self+ in place using a set of keys generated by mapping the
- * values in +self+ through the given block.
- *
- * If no block is given, an Enumerator is returned instead.
- *
+ * array.sort -> an_array
+ * array.sort {| a,b | block } -> an_array
+ *
+ * Returns a new array created by sorting <i>self</i>. Comparisons for
+ * the sort will be done using the <code><=></code> operator or using
+ * an optional code block. The block implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
+ *
+ * a = [ "d", "a", "e", "c", "b" ]
+ * a.sort #=> ["a", "b", "c", "d", "e"]
+ * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
*/
-static VALUE
-rb_ary_sort_by_bang(VALUE ary)
+VALUE
+rb_ary_sort(ary)
+ VALUE ary;
{
- VALUE sorted;
-
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- rb_ary_modify(ary);
- sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
- rb_ary_replace(ary, sorted);
+ ary = rb_ary_dup(ary);
+ rb_ary_sort_bang(ary);
return ary;
}
-
/*
* call-seq:
- * ary.collect { |item| block } -> new_ary
- * ary.map { |item| block } -> new_ary
- * ary.collect -> Enumerator
- * ary.map -> Enumerator
- *
- * Invokes the given block once for each element of +self+.
- *
- * Creates a new array containing the values returned by the block.
- *
- * See also Enumerable#collect.
- *
- * If no block is given, an Enumerator is returned instead.
- *
+ * array.collect {|item| block } -> an_array
+ * array.map {|item| block } -> an_array
+ *
+ * Invokes <i>block</i> once for each element of <i>self</i>. Creates a
+ * new array containing the values returned by the block.
+ * See also <code>Enumerable#collect</code>.
+ *
* a = [ "a", "b", "c", "d" ]
- * a.collect { |x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
- * a.map.with_index { |x, i| x * i } #=> ["", "b", "cc", "ddd"]
- * a #=> ["a", "b", "c", "d"]
+ * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
+ * a #=> ["a", "b", "c", "d"]
*/
static VALUE
-rb_ary_collect(VALUE ary)
+rb_ary_collect(ary)
+ VALUE ary;
{
long i;
VALUE collect;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- collect = rb_ary_new2(RARRAY_LEN(ary));
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i)));
+ if (!rb_block_given_p()) {
+ return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr);
+ }
+
+ collect = rb_ary_new2(RARRAY(ary)->len);
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ rb_ary_push(collect, rb_yield(RARRAY(ary)->ptr[i]));
}
return collect;
}
-
-/*
+/*
* call-seq:
- * ary.collect! {|item| block } -> ary
- * ary.map! {|item| block } -> ary
- * ary.collect! -> Enumerator
- * ary.map! -> Enumerator
- *
- * Invokes the given block once for each element of +self+, replacing the
- * element with the value returned by the block.
- *
- * See also Enumerable#collect.
- *
- * If no block is given, an Enumerator is returned instead.
+ * array.collect! {|item| block } -> array
+ * array.map! {|item| block } -> array
*
+ * Invokes the block once for each element of _self_, replacing the
+ * element with the value returned by _block_.
+ * See also <code>Enumerable#collect</code>.
+ *
* a = [ "a", "b", "c", "d" ]
- * a.map! {|x| x + "!" }
- * a #=> [ "a!", "b!", "c!", "d!" ]
- * a.collect!.with_index {|x, i| x[0...i] }
- * a #=> ["", "b", "c!", "d!"]
+ * a.collect! {|x| x + "!" }
+ * a #=> [ "a!", "b!", "c!", "d!" ]
*/
static VALUE
-rb_ary_collect_bang(VALUE ary)
+rb_ary_collect_bang(ary)
+ VALUE ary;
{
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
rb_ary_modify(ary);
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_ary_store(ary, i, rb_yield(RARRAY_AREF(ary, i)));
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ rb_ary_store(ary, i, rb_yield(RARRAY(ary)->ptr[i]));
}
return ary;
}
VALUE
-rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func) (VALUE, long))
+rb_values_at(obj, olen, argc, argv, func)
+ VALUE obj;
+ long olen;
+ int argc;
+ VALUE *argv;
+ VALUE (*func) _((VALUE,long));
{
VALUE result = rb_ary_new2(argc);
long beg, len, i, j;
@@ -2782,13 +1765,15 @@ rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func
continue;
}
/* check if idx is Range */
- if (rb_range_beg_len(argv[i], &beg, &len, olen, 1)) {
- long end = olen < beg+len ? olen : beg+len;
- for (j = beg; j < end; j++) {
- rb_ary_push(result, (*func)(obj, j));
+ switch (rb_range_beg_len(argv[i], &beg, &len, olen, 0)) {
+ case Qfalse:
+ break;
+ case Qnil:
+ continue;
+ default:
+ for (j=0; j<len; j++) {
+ rb_ary_push(result, (*func)(obj, j+beg));
}
- if (beg + len > j)
- rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
continue;
}
rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
@@ -2796,188 +1781,69 @@ rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func
return result;
}
-/*
+/*
* call-seq:
- * ary.values_at(selector, ...) -> new_ary
- *
- * Returns an array containing the elements in +self+ corresponding to the
- * given +selector+(s).
- *
- * The selectors may be either integer indices or ranges.
- *
- * See also Array#select.
+ * array.values_at(selector,... ) -> an_array
*
+ * Returns an array containing the elements in
+ * _self_ corresponding to the given selector(s). The selectors
+ * may be either integer indices or ranges.
+ * See also <code>Array#select</code>.
+ *
* a = %w{ a b c d e f }
- * a.values_at(1, 3, 5) # => ["b", "d", "f"]
- * a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
- * a.values_at(-1, -2, -2, -7) # => ["f", "e", "e", nil]
- * a.values_at(4..6, 3...6) # => ["e", "f", nil, "d", "e", "f"]
+ * a.values_at(1, 3, 5)
+ * a.values_at(1, 3, 5, 7)
+ * a.values_at(-1, -3, -5, -7)
+ * a.values_at(1..3, 2...5)
*/
static VALUE
-rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
+rb_ary_values_at(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
- return rb_get_values_at(ary, RARRAY_LEN(ary), argc, argv, rb_ary_entry);
+ return rb_values_at(ary, RARRAY(ary)->len, argc, argv, rb_ary_entry);
}
-
/*
* call-seq:
- * ary.select { |item| block } -> new_ary
- * ary.select -> Enumerator
- *
- * Returns a new array containing all elements of +ary+
- * for which the given +block+ returns a true value.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * [1,2,3,4,5].select { |num| num.even? } #=> [2, 4]
- *
+ * array.select {|item| block } -> an_array
+ *
+ * Invokes the block passing in successive elements from <i>array</i>,
+ * returning an array containing those elements for which the block
+ * returns a true value (equivalent to <code>Enumerable#select</code>).
+ *
* a = %w{ a b c d e f }
- * a.select { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
- *
- * See also Enumerable#select.
+ * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"]
*/
static VALUE
-rb_ary_select(VALUE ary)
+rb_ary_select(ary)
+ VALUE ary;
{
VALUE result;
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- result = rb_ary_new2(RARRAY_LEN(ary));
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ result = rb_ary_new2(RARRAY(ary)->len);
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) {
rb_ary_push(result, rb_ary_elt(ary, i));
}
}
return result;
}
-struct select_bang_arg {
- VALUE ary;
- long len[2];
-};
-
-static VALUE
-select_bang_i(VALUE a)
-{
- volatile struct select_bang_arg *arg = (void *)a;
- VALUE ary = arg->ary;
- long i1, i2;
-
- for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); arg->len[0] = ++i1) {
- VALUE v = RARRAY_AREF(ary, i1);
- if (!RTEST(rb_yield(v))) continue;
- if (i1 != i2) {
- rb_ary_store(ary, i2, v);
- }
- arg->len[1] = ++i2;
- }
- return (i1 == i2) ? Qnil : ary;
-}
-
-static VALUE
-select_bang_ensure(VALUE a)
-{
- volatile struct select_bang_arg *arg = (void *)a;
- VALUE ary = arg->ary;
- long len = RARRAY_LEN(ary);
- long i1 = arg->len[0], i2 = arg->len[1];
-
- if (i2 < i1) {
- if (i1 < len) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr + i2, ptr + i1, VALUE, len - i1);
- });
- }
- ARY_SET_LEN(ary, len - i1 + i2);
- }
- return ary;
-}
-
/*
* call-seq:
- * ary.select! {|item| block } -> ary or nil
- * ary.select! -> Enumerator
- *
- * Invokes the given block passing in successive elements from +self+,
- * deleting elements for which the block returns a +false+ value.
- *
- * The array may not be changed instantly every time the block is called.
- *
- * If changes were made, it will return +self+, otherwise it returns +nil+.
- *
- * See also Array#keep_if
- *
- * If no block is given, an Enumerator is returned instead.
- *
- */
-
-static VALUE
-rb_ary_select_bang(VALUE ary)
-{
- struct select_bang_arg args;
-
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- rb_ary_modify(ary);
-
- args.ary = ary;
- args.len[0] = args.len[1] = 0;
- return rb_ensure(select_bang_i, (VALUE)&args, select_bang_ensure, (VALUE)&args);
-}
-
-/*
- * call-seq:
- * ary.keep_if { |item| block } -> ary
- * ary.keep_if -> Enumerator
- *
- * Deletes every element of +self+ for which the given block evaluates to
- * +false+.
- *
- * See also Array#select!
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * a = %w{ a b c d e f }
- * a.keep_if { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
- */
-
-static VALUE
-rb_ary_keep_if(VALUE ary)
-{
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- rb_ary_select_bang(ary);
- return ary;
-}
-
-static void
-ary_resize_smaller(VALUE ary, long len)
-{
- rb_ary_modify(ary);
- if (RARRAY_LEN(ary) > len) {
- ARY_SET_LEN(ary, len);
- if (len * 2 < ARY_CAPA(ary) &&
- ARY_CAPA(ary) > ARY_DEFAULT_SIZE) {
- ary_resize_capa(ary, len * 2);
- }
- }
-}
-
-/*
- * call-seq:
- * ary.delete(obj) -> item or nil
- * ary.delete(obj) { block } -> item or result of block
- *
- * Deletes all items from +self+ that are equal to +obj+.
- *
- * Returns the last deleted item, or +nil+ if no matching item is found.
- *
- * If the optional code block is given, the result of the block is returned if
- * the item is not found. (To remove +nil+ elements and get an informative
- * return value, use Array#compact!)
- *
+ * array.delete(obj) -> obj or nil
+ * array.delete(obj) { block } -> obj or nil
+ *
+ * Deletes items from <i>self</i> that are equal to <i>obj</i>. If
+ * the item is not found, returns <code>nil</code>. If the optional
+ * code block is given, returns the result of <i>block</i> if the item
+ * is not found.
+ *
* a = [ "a", "b", "b", "b", "c" ]
* a.delete("b") #=> "b"
* a #=> ["a", "c"]
@@ -2986,62 +1852,47 @@ ary_resize_smaller(VALUE ary, long len)
*/
VALUE
-rb_ary_delete(VALUE ary, VALUE item)
+rb_ary_delete(ary, item)
+ VALUE ary;
+ VALUE item;
{
- VALUE v = item;
long i1, i2;
- for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
+ for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) {
+ VALUE e = RARRAY(ary)->ptr[i1];
- if (rb_equal(e, item)) {
- v = e;
- continue;
- }
+ if (rb_equal(e, item)) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, e);
}
i2++;
}
- if (RARRAY_LEN(ary) == i2) {
+ if (RARRAY(ary)->len == i2) {
if (rb_block_given_p()) {
return rb_yield(item);
}
return Qnil;
}
- ary_resize_smaller(ary, i2);
-
- return v;
-}
-
-void
-rb_ary_delete_same(VALUE ary, VALUE item)
-{
- long i1, i2;
-
- for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
-
- if (e == item) {
- continue;
- }
- if (i1 != i2) {
- rb_ary_store(ary, i2, e);
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len > i2) {
+ RARRAY(ary)->len = i2;
+ if (i2 * 2 < RARRAY(ary)->aux.capa &&
+ RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, i2 * 2);
+ RARRAY(ary)->aux.capa = i2 * 2;
}
- i2++;
- }
- if (RARRAY_LEN(ary) == i2) {
- return;
}
- ary_resize_smaller(ary, i2);
+ return item;
}
VALUE
-rb_ary_delete_at(VALUE ary, long pos)
+rb_ary_delete_at(ary, pos)
+ VALUE ary;
+ long pos;
{
- long len = RARRAY_LEN(ary);
+ long i, len = RARRAY(ary)->len;
VALUE del;
if (pos >= len) return Qnil;
@@ -3051,48 +1902,52 @@ rb_ary_delete_at(VALUE ary, long pos)
}
rb_ary_modify(ary);
- del = RARRAY_AREF(ary, pos);
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr+pos, ptr+pos+1, VALUE, len-pos-1);
- });
- ARY_INCREASE_LEN(ary, -1);
+ del = RARRAY(ary)->ptr[pos];
+ for (i = pos + 1; i < len; i++, pos++) {
+ RARRAY(ary)->ptr[pos] = RARRAY(ary)->ptr[i];
+ }
+ RARRAY(ary)->len = pos;
return del;
}
/*
* call-seq:
- * ary.delete_at(index) -> obj or nil
- *
- * Deletes the element at the specified +index+, returning that element, or
- * +nil+ if the +index+ is out of range.
- *
- * See also Array#slice!
- *
- * a = ["ant", "bat", "cat", "dog"]
+ * array.delete_at(index) -> obj or nil
+ *
+ * Deletes the element at the specified index, returning that element,
+ * or <code>nil</code> if the index is out of range. See also
+ * <code>Array#slice!</code>.
+ *
+ * a = %w( ant bat cat dog )
* a.delete_at(2) #=> "cat"
* a #=> ["ant", "bat", "dog"]
* a.delete_at(99) #=> nil
*/
static VALUE
-rb_ary_delete_at_m(VALUE ary, VALUE pos)
+rb_ary_delete_at_m(ary, pos)
+ VALUE ary, pos;
{
return rb_ary_delete_at(ary, NUM2LONG(pos));
}
/*
* call-seq:
- * ary.slice!(index) -> obj or nil
- * ary.slice!(start, length) -> new_ary or nil
- * ary.slice!(range) -> new_ary or nil
- *
- * Deletes the element(s) given by an +index+ (optionally up to +length+
- * elements) or by a +range+.
- *
- * Returns the deleted object (or objects), or +nil+ if the +index+ is out of
- * range.
- *
+ * array.slice!(index) -> obj or nil
+ * array.slice!(start, length) -> sub_array or nil
+ * array.slice!(range) -> sub_array or nil
+ *
+ * Deletes the element(s) given by an index (optionally with a length)
+ * or by a range. Returns the deleted object, subarray, or
+ * <code>nil</code> if the index is out of range. Equivalent to:
+ *
+ * def slice!(*args)
+ * result = self[*args]
+ * self[*args] = nil
+ * result
+ * end
+ *
* a = [ "a", "b", "c" ]
* a.slice!(1) #=> "b"
* a #=> ["a", "c"]
@@ -3103,312 +1958,194 @@ rb_ary_delete_at_m(VALUE ary, VALUE pos)
*/
static VALUE
-rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
+rb_ary_slice_bang(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
VALUE arg1, arg2;
- long pos, len, orig_len;
+ long pos, len;
- rb_ary_modify_check(ary);
- if (argc == 2) {
- pos = NUM2LONG(argv[0]);
- len = NUM2LONG(argv[1]);
+ if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
+ pos = NUM2LONG(arg1);
+ len = NUM2LONG(arg2);
delete_pos_len:
- if (len < 0) return Qnil;
- orig_len = RARRAY_LEN(ary);
if (pos < 0) {
- pos += orig_len;
- if (pos < 0) return Qnil;
+ pos = RARRAY(ary)->len + pos;
}
- else if (orig_len < pos) return Qnil;
- if (orig_len < pos + len) {
- len = orig_len - pos;
- }
- if (len == 0) return rb_ary_new2(0);
- arg2 = rb_ary_new4(len, RARRAY_CONST_PTR(ary)+pos);
- RBASIC_SET_CLASS(arg2, rb_obj_class(ary));
- rb_ary_splice(ary, pos, len, Qundef);
+ arg2 = rb_ary_subseq(ary, pos, len);
+ rb_ary_splice(ary, pos, len, Qnil); /* Qnil/rb_ary_new2(0) */
return arg2;
}
- if (argc != 1) {
- /* error report */
- rb_scan_args(argc, argv, "11", NULL, NULL);
- }
- arg1 = argv[0];
-
- if (!FIXNUM_P(arg1)) {
- switch (rb_range_beg_len(arg1, &pos, &len, RARRAY_LEN(ary), 0)) {
- case Qtrue:
- /* valid range */
- goto delete_pos_len;
- case Qnil:
- /* invalid range */
- return Qnil;
- default:
- /* not a range */
- break;
- }
+ if (!FIXNUM_P(arg1) && rb_range_beg_len(arg1, &pos, &len, RARRAY(ary)->len, 1)) {
+ goto delete_pos_len;
}
return rb_ary_delete_at(ary, NUM2LONG(arg1));
}
-static VALUE
-ary_reject(VALUE orig, VALUE result)
-{
- long i;
-
- for (i = 0; i < RARRAY_LEN(orig); i++) {
- VALUE v = RARRAY_AREF(orig, i);
- if (!RTEST(rb_yield(v))) {
- rb_ary_push(result, v);
- }
- }
- return result;
-}
+/*
+ * call-seq:
+ * array.reject! {|item| block } -> array or nil
+ *
+ * Equivalent to <code>Array#delete_if</code>, deleting elements from
+ * _self_ for which the block evaluates to true, but returns
+ * <code>nil</code> if no changes were made. Also see
+ * <code>Enumerable#reject</code>.
+ */
static VALUE
-reject_bang_i(VALUE a)
+rb_ary_reject_bang(ary)
+ VALUE ary;
{
- volatile struct select_bang_arg *arg = (void *)a;
- VALUE ary = arg->ary;
long i1, i2;
- for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); arg->len[0] = ++i1) {
- VALUE v = RARRAY_AREF(ary, i1);
+ rb_ary_modify(ary);
+ for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) {
+ VALUE v = RARRAY(ary)->ptr[i1];
if (RTEST(rb_yield(v))) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, v);
}
- arg->len[1] = ++i2;
+ i2++;
}
- return (i1 == i2) ? Qnil : ary;
-}
-
-static VALUE
-ary_reject_bang(VALUE ary)
-{
- struct select_bang_arg args;
-
- rb_ary_modify_check(ary);
- args.ary = ary;
- args.len[0] = args.len[1] = 0;
- return rb_ensure(reject_bang_i, (VALUE)&args, select_bang_ensure, (VALUE)&args);
-}
-
-/*
- * call-seq:
- * ary.reject! { |item| block } -> ary or nil
- * ary.reject! -> Enumerator
- *
- * Deletes every element of +self+ for which the block evaluates to +true+,
- * if no changes were made returns +nil+.
- *
- * The array may not be changed instantly every time the block is called.
- *
- * See also Enumerable#reject and Array#delete_if.
- *
- * If no block is given, an Enumerator is returned instead.
- */
+ if (RARRAY(ary)->len == i2) return Qnil;
+ if (i2 < RARRAY(ary)->len)
+ RARRAY(ary)->len = i2;
-static VALUE
-rb_ary_reject_bang(VALUE ary)
-{
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- return ary_reject_bang(ary);
+ return ary;
}
/*
* call-seq:
- * ary.reject {|item| block } -> new_ary
- * ary.reject -> Enumerator
- *
- * Returns a new array containing the items in +self+ for which the given
- * block is not +true+. The ordering of non-rejected elements is maintained.
- *
- * See also Array#delete_if
- *
- * If no block is given, an Enumerator is returned instead.
+ * array.reject {|item| block } -> an_array
+ *
+ * Returns a new array containing the items in _self_
+ * for which the block is not true.
*/
static VALUE
-rb_ary_reject(VALUE ary)
+rb_ary_reject(ary)
+ VALUE ary;
{
- VALUE rejected_ary;
-
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- rejected_ary = rb_ary_new();
- ary_reject(ary, rejected_ary);
- return rejected_ary;
+ ary = rb_ary_dup(ary);
+ rb_ary_reject_bang(ary);
+ return ary;
}
/*
* call-seq:
- * ary.delete_if { |item| block } -> ary
- * ary.delete_if -> Enumerator
- *
- * Deletes every element of +self+ for which block evaluates to +true+.
- *
- * The array is changed instantly every time the block is called, not after
- * the iteration is over.
- *
- * See also Array#reject!
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * scores = [ 97, 42, 75 ]
- * scores.delete_if {|score| score < 80 } #=> [97]
+ * array.delete_if {|item| block } -> array
+ *
+ * Deletes every element of <i>self</i> for which <i>block</i> evaluates
+ * to <code>true</code>.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.delete_if {|x| x >= "b" } #=> ["a"]
*/
static VALUE
-rb_ary_delete_if(VALUE ary)
+rb_ary_delete_if(ary)
+ VALUE ary;
{
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- ary_reject_bang(ary);
+ rb_ary_reject_bang(ary);
return ary;
}
-static VALUE
-take_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, cbarg))
-{
- VALUE *args = (VALUE *)cbarg;
- if (args[1]-- == 0) rb_iter_break();
- if (argc > 1) val = rb_ary_new4(argc, argv);
- rb_ary_push(args[0], val);
- return Qnil;
-}
-
-static VALUE
-take_items(VALUE obj, long n)
-{
- VALUE result = rb_check_array_type(obj);
- VALUE args[2];
-
- if (!NIL_P(result)) return rb_ary_subseq(result, 0, n);
- result = rb_ary_new2(n);
- args[0] = result; args[1] = (VALUE)n;
- if (rb_check_block_call(obj, idEach, 0, 0, take_i, (VALUE)args) == Qundef)
- rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (must respond to :each)",
- rb_obj_class(obj));
- return result;
-}
-
-
/*
* call-seq:
- * ary.zip(arg, ...) -> new_ary
- * ary.zip(arg, ...) { |arr| block } -> nil
- *
- * Converts any arguments to arrays, then merges elements of +self+ with
- * corresponding elements from each argument.
- *
- * This generates a sequence of <code>ary.size</code> _n_-element arrays,
- * where _n_ is one more than the count of arguments.
- *
- * If the size of any argument is less than the size of the initial array,
- * +nil+ values are supplied.
- *
- * If a block is given, it is invoked for each output +array+, otherwise an
- * array of arrays is returned.
- *
+ * array.zip(arg, ...) -> an_array
+ * array.zip(arg, ...) {| arr | block } -> nil
+ *
+ * Converts any arguments to arrays, then merges elements of
+ * <i>self</i> with corresponding elements from each argument. This
+ * generates a sequence of <code>self.size</code> <em>n</em>-element
+ * arrays, where <em>n</em> is one more that the count of arguments. If
+ * the size of any argument is less than <code>enumObj.size</code>,
+ * <code>nil</code> values are supplied. If a block given, it is
+ * invoked for each output array, otherwise an array of arrays is
+ * returned.
+ *
* a = [ 4, 5, 6 ]
* b = [ 7, 8, 9 ]
- * [1, 2, 3].zip(a, b) #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- * [1, 2].zip(a, b) #=> [[1, 4, 7], [2, 5, 8]]
- * a.zip([1, 2], [8]) #=> [[4, 1, 8], [5, 2, nil], [6, nil, nil]]
+ *
+ * [1,2,3].zip(a, b) #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
+ * [1,2].zip(a,b) #=> [[1, 4, 7], [2, 5, 8]]
+ * a.zip([1,2],[8]) #=> [[4,1,8], [5,2,nil], [6,nil,nil]]
*/
static VALUE
-rb_ary_zip(int argc, VALUE *argv, VALUE ary)
+rb_ary_zip(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
int i, j;
- long len = RARRAY_LEN(ary);
- VALUE result = Qnil;
+ long len;
+ VALUE result;
for (i=0; i<argc; i++) {
- argv[i] = take_items(argv[i], len);
+ argv[i] = to_ary(argv[i]);
}
-
if (rb_block_given_p()) {
- int arity = rb_block_arity();
-
- if (arity > 1) {
- VALUE work, *tmp;
-
- tmp = ALLOCV_N(VALUE, work, argc+1);
-
- for (i=0; i<RARRAY_LEN(ary); i++) {
- tmp[0] = RARRAY_AREF(ary, i);
- for (j=0; j<argc; j++) {
- tmp[j+1] = rb_ary_elt(argv[j], i);
- }
- rb_yield_values2(argc+1, tmp);
- }
-
- if (work) ALLOCV_END(work);
- }
- else {
- for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE tmp = rb_ary_new2(argc+1);
-
- rb_ary_push(tmp, RARRAY_AREF(ary, i));
- for (j=0; j<argc; j++) {
- rb_ary_push(tmp, rb_ary_elt(argv[j], i));
- }
- rb_yield(tmp);
- }
- }
- }
- else {
- result = rb_ary_new_capa(len);
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ VALUE tmp = rb_ary_new2(argc+1);
- for (i=0; i<len; i++) {
- VALUE tmp = rb_ary_new_capa(argc+1);
-
- rb_ary_push(tmp, RARRAY_AREF(ary, i));
+ rb_ary_push(tmp, rb_ary_elt(ary, i));
for (j=0; j<argc; j++) {
rb_ary_push(tmp, rb_ary_elt(argv[j], i));
}
- rb_ary_push(result, tmp);
+ rb_yield(tmp);
}
+ return Qnil;
}
+ len = RARRAY(ary)->len;
+ result = rb_ary_new2(len);
+ for (i=0; i<len; i++) {
+ VALUE tmp = rb_ary_new2(argc+1);
+ rb_ary_push(tmp, rb_ary_elt(ary, i));
+ for (j=0; j<argc; j++) {
+ rb_ary_push(tmp, rb_ary_elt(argv[j], i));
+ }
+ rb_ary_push(result, tmp);
+ }
return result;
}
/*
* call-seq:
- * ary.transpose -> new_ary
- *
- * Assumes that +self+ is an array of arrays and transposes the rows and
- * columns.
- *
+ * array.transpose -> an_array
+ *
+ * Assumes that <i>self</i> is an array of arrays and transposes the
+ * rows and columns.
+ *
* a = [[1,2], [3,4], [5,6]]
* a.transpose #=> [[1, 3, 5], [2, 4, 6]]
- *
- * If the length of the subarrays don't match, an IndexError is raised.
*/
static VALUE
-rb_ary_transpose(VALUE ary)
+rb_ary_transpose(ary)
+ VALUE ary;
{
long elen = -1, alen, i, j;
VALUE tmp, result = 0;
- alen = RARRAY_LEN(ary);
+ alen = RARRAY(ary)->len;
if (alen == 0) return rb_ary_dup(ary);
for (i=0; i<alen; i++) {
tmp = to_ary(rb_ary_elt(ary, i));
if (elen < 0) { /* first element */
- elen = RARRAY_LEN(tmp);
+ elen = RARRAY(tmp)->len;
result = rb_ary_new2(elen);
for (j=0; j<elen; j++) {
rb_ary_store(result, j, rb_ary_new2(alen));
}
}
- else if (elen != RARRAY_LEN(tmp)) {
- rb_raise(rb_eIndexError, "element size differs (%ld should be %ld)",
- RARRAY_LEN(tmp), elen);
+ else if (elen != RARRAY(tmp)->len) {
+ rb_raise(rb_eIndexError, "element size differs (%d should be %d)",
+ RARRAY(tmp)->len, elen);
}
for (j=0; j<elen; j++) {
rb_ary_store(rb_ary_elt(result, j), i, rb_ary_elt(tmp, j));
@@ -3419,123 +2156,96 @@ rb_ary_transpose(VALUE ary)
/*
* call-seq:
- * ary.replace(other_ary) -> ary
- * ary.initialize_copy(other_ary) -> ary
- *
- * Replaces the contents of +self+ with the contents of +other_ary+,
- * truncating or expanding if necessary.
- *
+ * array.replace(other_array) -> array
+ *
+ * Replaces the contents of <i>self</i> with the contents of
+ * <i>other_array</i>, truncating or expanding if necessary.
+ *
* a = [ "a", "b", "c", "d", "e" ]
* a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"]
* a #=> ["x", "y", "z"]
*/
-VALUE
-rb_ary_replace(VALUE copy, VALUE orig)
+static VALUE
+rb_ary_replace(copy, orig)
+ VALUE copy, orig;
{
- rb_ary_modify_check(copy);
+ VALUE shared;
+
+ rb_ary_modify(copy);
orig = to_ary(orig);
if (copy == orig) return copy;
+ shared = ary_make_shared(orig);
+ if (RARRAY(copy)->ptr && !FL_TEST(copy, ELTS_SHARED))
+ free(RARRAY(copy)->ptr);
+ RARRAY(copy)->ptr = RARRAY(orig)->ptr;
+ RARRAY(copy)->len = RARRAY(orig)->len;
+ RARRAY(copy)->aux.shared = shared;
+ FL_SET(copy, ELTS_SHARED);
- if (RARRAY_LEN(orig) <= RARRAY_EMBED_LEN_MAX) {
- VALUE shared = 0;
-
- if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
- }
- else if (ARY_SHARED_P(copy)) {
- shared = ARY_SHARED(copy);
- FL_UNSET_SHARED(copy);
- }
- FL_SET_EMBED(copy);
- ary_memcpy(copy, 0, RARRAY_LEN(orig), RARRAY_CONST_PTR(orig));
- if (shared) {
- rb_ary_decrement_share(shared);
- }
- ARY_SET_LEN(copy, RARRAY_LEN(orig));
- }
- else {
- VALUE shared = ary_make_shared(orig);
- if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
- }
- else {
- rb_ary_unshare_safe(copy);
- }
- FL_UNSET_EMBED(copy);
- ARY_SET_PTR(copy, RARRAY_CONST_PTR(orig));
- ARY_SET_LEN(copy, RARRAY_LEN(orig));
- rb_ary_set_shared(copy, shared);
- }
return copy;
}
-/*
+/*
* call-seq:
- * ary.clear -> ary
+ * array.clear -> array
*
- * Removes all elements from +self+.
+ * Removes all elements from _self_.
*
* a = [ "a", "b", "c", "d", "e" ]
* a.clear #=> [ ]
*/
VALUE
-rb_ary_clear(VALUE ary)
+rb_ary_clear(ary)
+ VALUE ary;
{
- rb_ary_modify_check(ary);
- ARY_SET_LEN(ary, 0);
- if (ARY_SHARED_P(ary)) {
- if (!ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
- }
- }
- else if (ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) {
- ary_resize_capa(ary, ARY_DEFAULT_SIZE * 2);
+ rb_ary_modify(ary);
+ RARRAY(ary)->len = 0;
+ if (ARY_DEFAULT_SIZE * 2 < RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, ARY_DEFAULT_SIZE * 2);
+ RARRAY(ary)->aux.capa = ARY_DEFAULT_SIZE * 2;
}
return ary;
}
/*
* call-seq:
- * ary.fill(obj) -> ary
- * ary.fill(obj, start [, length]) -> ary
- * ary.fill(obj, range ) -> ary
- * ary.fill { |index| block } -> ary
- * ary.fill(start [, length] ) { |index| block } -> ary
- * ary.fill(range) { |index| block } -> ary
- *
- * The first three forms set the selected elements of +self+ (which
- * may be the entire array) to +obj+.
- *
- * A +start+ of +nil+ is equivalent to zero.
- *
- * A +length+ of +nil+ is equivalent to the length of the array.
- *
- * The last three forms fill the array with the value of the given block,
- * which is passed the absolute index of each element to be filled.
- *
- * Negative values of +start+ count from the end of the array, where +-1+ is
- * the last element.
- *
+ * array.fill(obj) -> array
+ * array.fill(obj, start [, length]) -> array
+ * array.fill(obj, range ) -> array
+ * array.fill {|index| block } -> array
+ * array.fill(start [, length] ) {|index| block } -> array
+ * array.fill(range) {|index| block } -> array
+ *
+ * The first three forms set the selected elements of <i>self</i> (which
+ * may be the entire array) to <i>obj</i>. A <i>start</i> of
+ * <code>nil</code> is equivalent to zero. A <i>length</i> of
+ * <code>nil</code> is equivalent to <i>self.length</i>. The last three
+ * forms fill the array with the value of the block. The block is
+ * passed the absolute index of each element to be filled.
+ *
* a = [ "a", "b", "c", "d" ]
* a.fill("x") #=> ["x", "x", "x", "x"]
* a.fill("z", 2, 2) #=> ["x", "x", "z", "z"]
* a.fill("y", 0..1) #=> ["y", "y", "z", "z"]
- * a.fill { |i| i*i } #=> [0, 1, 4, 9]
- * a.fill(-2) { |i| i*i*i } #=> [0, 1, 8, 27]
+ * a.fill {|i| i*i} #=> [0, 1, 4, 9]
+ * a.fill(-2) {|i| i*i*i} #=> [0, 1, 8, 27]
*/
static VALUE
-rb_ary_fill(int argc, VALUE *argv, VALUE ary)
+rb_ary_fill(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
{
VALUE item, arg1, arg2;
long beg = 0, end = 0, len = 0;
- int block_p = FALSE;
+ VALUE *p, *pend;
+ int block_p = Qfalse;
if (rb_block_given_p()) {
- block_p = TRUE;
+ block_p = Qtrue;
rb_scan_args(argc, argv, "02", &arg1, &arg2);
argc += 1; /* hackish */
}
@@ -3545,20 +2255,20 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
switch (argc) {
case 1:
beg = 0;
- len = RARRAY_LEN(ary);
+ len = RARRAY(ary)->len;
break;
case 2:
- if (rb_range_beg_len(arg1, &beg, &len, RARRAY_LEN(ary), 1)) {
+ if (rb_range_beg_len(arg1, &beg, &len, RARRAY(ary)->len, 1)) {
break;
}
/* fall through */
case 3:
beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
if (beg < 0) {
- beg = RARRAY_LEN(ary) + beg;
+ beg = RARRAY(ary)->len + beg;
if (beg < 0) beg = 0;
}
- len = NIL_P(arg2) ? RARRAY_LEN(ary) - beg : NUM2LONG(arg2);
+ len = NIL_P(arg2) ? RARRAY(ary)->len - beg : NUM2LONG(arg2);
break;
}
rb_ary_modify(ary);
@@ -3569,12 +2279,13 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
rb_raise(rb_eArgError, "argument too big");
}
end = beg + len;
- if (RARRAY_LEN(ary) < end) {
- if (end >= ARY_CAPA(ary)) {
- ary_resize_capa(ary, end);
+ if (end > RARRAY(ary)->len) {
+ if (end >= RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, end);
+ RARRAY(ary)->aux.capa = end;
}
- ary_mem_clear(ary, RARRAY_LEN(ary), end - RARRAY_LEN(ary));
- ARY_SET_LEN(ary, end);
+ rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len);
+ RARRAY(ary)->len = end;
}
if (block_p) {
@@ -3583,93 +2294,76 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
for (i=beg; i<end; i++) {
v = rb_yield(LONG2NUM(i));
- if (i>=RARRAY_LEN(ary)) break;
- ARY_SET(ary, i, v);
+ if (i>=RARRAY(ary)->len) break;
+ RARRAY(ary)->ptr[i] = v;
}
}
else {
- ary_memfill(ary, beg, len, item);
+ p = RARRAY(ary)->ptr + beg;
+ pend = p + len;
+ while (p < pend) {
+ *p++ = item;
+ }
}
return ary;
}
-/*
+/*
* call-seq:
- * ary + other_ary -> new_ary
+ * array + other_array -> an_array
*
- * Concatenation --- Returns a new array built by concatenating the
+ * Concatenation---Returns a new array built by concatenating the
* two arrays together to produce a third array.
- *
+ *
* [ 1, 2, 3 ] + [ 4, 5 ] #=> [ 1, 2, 3, 4, 5 ]
- * a = [ "a", "b", "c" ]
- * c = a + [ "d", "e", "f" ]
- * c #=> [ "a", "b", "c", "d", "e", "f" ]
- * a #=> [ "a", "b", "c" ]
- *
- * Note that
- * x += y
- * is the same as
- * x = x + y
- * This means that it produces a new array. As a consequence,
- * repeated use of <code>+=</code> on arrays can be quite inefficient.
- *
- * See also Array#concat.
*/
VALUE
-rb_ary_plus(VALUE x, VALUE y)
+rb_ary_plus(x, y)
+ VALUE x, y;
{
VALUE z;
- long len, xlen, ylen;
+ long len;
y = to_ary(y);
- xlen = RARRAY_LEN(x);
- ylen = RARRAY_LEN(y);
- len = xlen + ylen;
+ len = RARRAY(x)->len + RARRAY(y)->len;
z = rb_ary_new2(len);
-
- ary_memcpy(z, 0, xlen, RARRAY_CONST_PTR(x));
- ary_memcpy(z, xlen, ylen, RARRAY_CONST_PTR(y));
- ARY_SET_LEN(z, len);
+ MEMCPY(RARRAY(z)->ptr, RARRAY(x)->ptr, VALUE, RARRAY(x)->len);
+ MEMCPY(RARRAY(z)->ptr + RARRAY(x)->len, RARRAY(y)->ptr, VALUE, RARRAY(y)->len);
+ RARRAY(z)->len = len;
return z;
}
-/*
+/*
* call-seq:
- * ary.concat(other_ary) -> ary
- *
- * Appends the elements of +other_ary+ to +self+.
+ * array.concat(other_array) -> array
*
+ * Appends the elements in other_array to _self_.
+ *
* [ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
- * a = [ 1, 2, 3 ]
- * a.concat( [ 4, 5 ] )
- * a #=> [ 1, 2, 3, 4, 5 ]
- *
- * See also Array#+.
*/
+
VALUE
-rb_ary_concat(VALUE x, VALUE y)
+rb_ary_concat(x, y)
+ VALUE x, y;
{
- rb_ary_modify_check(x);
y = to_ary(y);
- if (RARRAY_LEN(y) > 0) {
- rb_ary_splice(x, RARRAY_LEN(x), 0, y);
+ if (RARRAY(y)->len > 0) {
+ rb_ary_splice(x, RARRAY(x)->len, 0, y);
}
return x;
}
-/*
+/*
* call-seq:
- * ary * int -> new_ary
- * ary * str -> new_string
- *
- * Repetition --- With a String argument, equivalent to
- * <code>ary.join(str)</code>.
+ * array * int -> an_array
+ * array * str -> a_string
*
- * Otherwise, returns a new array built by concatenating the +int+ copies of
- * +self+.
+ * Repetition---With a String argument, equivalent to
+ * self.join(str). Otherwise, returns a new array
+ * built by concatenating the _int_ copies of _self_.
*
*
* [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
@@ -3678,11 +2372,11 @@ rb_ary_concat(VALUE x, VALUE y)
*/
static VALUE
-rb_ary_times(VALUE ary, VALUE times)
+rb_ary_times(ary, times)
+ VALUE ary, times;
{
VALUE ary2, tmp;
- const VALUE *ptr;
- long t, len;
+ long i, len;
tmp = rb_check_string_type(times);
if (!NIL_P(tmp)) {
@@ -3690,50 +2384,37 @@ rb_ary_times(VALUE ary, VALUE times)
}
len = NUM2LONG(times);
- if (len == 0) {
- ary2 = ary_new(rb_obj_class(ary), 0);
- goto out;
- }
+ if (len == 0) return ary_new(rb_obj_class(ary), 0);
if (len < 0) {
rb_raise(rb_eArgError, "negative argument");
}
- if (ARY_MAX_SIZE/len < RARRAY_LEN(ary)) {
+ if (ARY_MAX_SIZE/len < RARRAY(ary)->len) {
rb_raise(rb_eArgError, "argument too big");
}
- len *= RARRAY_LEN(ary);
+ len *= RARRAY(ary)->len;
ary2 = ary_new(rb_obj_class(ary), len);
- ARY_SET_LEN(ary2, len);
-
- ptr = RARRAY_CONST_PTR(ary);
- t = RARRAY_LEN(ary);
- if (0 < t) {
- ary_memcpy(ary2, 0, t, ptr);
- while (t <= len/2) {
- ary_memcpy(ary2, t, t, RARRAY_CONST_PTR(ary2));
- t *= 2;
- }
- if (t < len) {
- ary_memcpy(ary2, t, len-t, RARRAY_CONST_PTR(ary2));
- }
- }
- out:
+ RARRAY(ary2)->len = len;
+
+ for (i=0; i<len; i+=RARRAY(ary)->len) {
+ MEMCPY(RARRAY(ary2)->ptr+i, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+ }
OBJ_INFECT(ary2, ary);
return ary2;
}
-/*
+/*
* call-seq:
- * ary.assoc(obj) -> element_ary or nil
- *
- * Searches through an array whose elements are also arrays comparing +obj+
- * with the first element of each contained array using <code>obj.==</code>.
+ * array.assoc(obj) -> an_array or nil
*
- * Returns the first contained array that matches (that is, the first
- * associated array), or +nil+ if no match is found.
- *
- * See also Array#rassoc
+ * Searches through an array whose elements are also arrays
+ * comparing _obj_ with the first element of each contained array
+ * using obj.==.
+ * Returns the first contained array that matches (that
+ * is, the first associated array),
+ * or +nil+ if no match is found.
+ * See also <code>Array#rassoc</code>.
*
* s1 = [ "colors", "red", "blue", "green" ]
* s2 = [ "letters", "a", "b", "c" ]
@@ -3744,15 +2425,17 @@ rb_ary_times(VALUE ary, VALUE times)
*/
VALUE
-rb_ary_assoc(VALUE ary, VALUE key)
+rb_ary_assoc(ary, key)
+ VALUE ary, key;
{
long i;
VALUE v;
- for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = rb_check_array_type(RARRAY_AREF(ary, i));
- if (!NIL_P(v) && RARRAY_LEN(v) > 0 &&
- rb_equal(RARRAY_AREF(v, 0), key))
+ for (i = 0; i < RARRAY(ary)->len; ++i) {
+ v = RARRAY(ary)->ptr[i];
+ if (TYPE(v) == T_ARRAY &&
+ RARRAY(v)->len > 0 &&
+ rb_equal(RARRAY(v)->ptr[0], key))
return v;
}
return Qnil;
@@ -3760,78 +2443,55 @@ rb_ary_assoc(VALUE ary, VALUE key)
/*
* call-seq:
- * ary.rassoc(obj) -> element_ary or nil
- *
- * Searches through the array whose elements are also arrays.
- *
- * Compares +obj+ with the second element of each contained array using
- * <code>obj.==</code>.
- *
- * Returns the first contained array that matches +obj+.
- *
- * See also Array#assoc.
- *
+ * array.rassoc(key) -> an_array or nil
+ *
+ * Searches through the array whose elements are also arrays. Compares
+ * <em>key</em> with the second element of each contained array using
+ * <code>==</code>. Returns the first contained array that matches. See
+ * also <code>Array#assoc</code>.
+ *
* a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
* a.rassoc("two") #=> [2, "two"]
* a.rassoc("four") #=> nil
*/
VALUE
-rb_ary_rassoc(VALUE ary, VALUE value)
+rb_ary_rassoc(ary, value)
+ VALUE ary, value;
{
long i;
VALUE v;
- for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(v, T_ARRAY) &&
- RARRAY_LEN(v) > 1 &&
- rb_equal(RARRAY_AREF(v, 1), value))
+ for (i = 0; i < RARRAY(ary)->len; ++i) {
+ v = RARRAY(ary)->ptr[i];
+ if (TYPE(v) == T_ARRAY &&
+ RARRAY(v)->len > 1 &&
+ rb_equal(RARRAY(v)->ptr[1], value))
return v;
}
return Qnil;
}
static VALUE
-recursive_equal(VALUE ary1, VALUE ary2, int recur)
+recursive_equal(ary1, ary2)
+ VALUE ary1, ary2;
{
- long i, len1;
- const VALUE *p1, *p2;
-
- if (recur) return Qtrue; /* Subtle! */
-
- p1 = RARRAY_CONST_PTR(ary1);
- p2 = RARRAY_CONST_PTR(ary2);
- len1 = RARRAY_LEN(ary1);
-
- for (i = 0; i < len1; i++) {
- if (*p1 != *p2) {
- if (rb_equal(*p1, *p2)) {
- len1 = RARRAY_LEN(ary1);
- if (len1 != RARRAY_LEN(ary2))
- return Qfalse;
- if (len1 < i)
- return Qtrue;
- p1 = RARRAY_CONST_PTR(ary1) + i;
- p2 = RARRAY_CONST_PTR(ary2) + i;
- }
- else {
- return Qfalse;
- }
- }
- p1++;
- p2++;
+ long i;
+
+ for (i=0; i<RARRAY(ary1)->len; i++) {
+ if (!rb_equal(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
+ return Qfalse;
}
return Qtrue;
}
-/*
+/*
* call-seq:
- * ary == other_ary -> bool
+ * array == other_array -> bool
*
- * Equality --- Two arrays are equal if they contain the same number of
- * elements and if each element is equal to (according to Object#==) the
- * corresponding element in +other_ary+.
+ * Equality---Two arrays are equal if they contain the same number
+ * of elements and if each element is equal to (according to
+ * Object.==) the corresponding element in the other array.
*
* [ "a", "c" ] == [ "a", "c", 7 ] #=> false
* [ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true
@@ -3840,27 +2500,28 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur)
*/
static VALUE
-rb_ary_equal(VALUE ary1, VALUE ary2)
+rb_ary_equal(ary1, ary2)
+ VALUE ary1, ary2;
{
if (ary1 == ary2) return Qtrue;
- if (!RB_TYPE_P(ary2, T_ARRAY)) {
- if (!rb_respond_to(ary2, idTo_ary)) {
+ if (TYPE(ary2) != T_ARRAY) {
+ if (!rb_respond_to(ary2, rb_intern("to_ary"))) {
return Qfalse;
}
return rb_equal(ary2, ary1);
}
- if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
- if (RARRAY_CONST_PTR(ary1) == RARRAY_CONST_PTR(ary2)) return Qtrue;
- return rb_exec_recursive_paired(recursive_equal, ary1, ary2, ary2);
+ if (RARRAY(ary1)->len != RARRAY(ary2)->len) return Qfalse;
+ if (rb_inspecting_p(ary1)) return Qfalse;
+ return rb_protect_inspect(recursive_equal, ary1, ary2);
}
static VALUE
-recursive_eql(VALUE ary1, VALUE ary2, int recur)
+recursive_eql(ary1, ary2)
+ VALUE ary1, ary2;
{
long i;
- if (recur) return Qtrue; /* Subtle! */
- for (i=0; i<RARRAY_LEN(ary1); i++) {
+ for (i=0; i<RARRAY(ary1)->len; i++) {
if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
return Qfalse;
}
@@ -3869,96 +2530,99 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur)
/*
* call-seq:
- * ary.eql?(other) -> true or false
+ * array.eql?(other) -> true or false
*
- * Returns +true+ if +self+ and +other+ are the same object,
- * or are both arrays with the same content (according to Object#eql?).
+ * Returns <code>true</code> if _array_ and _other_ are the same object,
+ * or are both arrays with the same content.
*/
static VALUE
-rb_ary_eql(VALUE ary1, VALUE ary2)
+rb_ary_eql(ary1, ary2)
+ VALUE ary1, ary2;
{
if (ary1 == ary2) return Qtrue;
- if (!RB_TYPE_P(ary2, T_ARRAY)) return Qfalse;
- if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
- if (RARRAY_CONST_PTR(ary1) == RARRAY_CONST_PTR(ary2)) return Qtrue;
- return rb_exec_recursive_paired(recursive_eql, ary1, ary2, ary2);
+ if (TYPE(ary2) != T_ARRAY) return Qfalse;
+ if (RARRAY(ary1)->len != RARRAY(ary2)->len) return Qfalse;
+ if (rb_inspecting_p(ary1)) return Qfalse;
+ return rb_protect_inspect(recursive_eql, ary1, ary2);
}
-/*
- * call-seq:
- * ary.hash -> fixnum
- *
- * Compute a hash-code for this array.
- *
- * Two arrays with the same content will have the same hash code (and will
- * compare using #eql?).
- *
- * See also Object#hash.
- */
+static VALUE recursive_hash _((VALUE ary));
static VALUE
-rb_ary_hash(VALUE ary)
+recursive_hash(ary)
+ VALUE ary;
{
- long i;
- st_index_t h;
+ long i, h;
VALUE n;
- h = rb_hash_start(RARRAY_LEN(ary));
- h = rb_hash_uint(h, (st_index_t)rb_ary_hash);
- for (i=0; i<RARRAY_LEN(ary); i++) {
- n = rb_hash(RARRAY_AREF(ary, i));
- h = rb_hash_uint(h, NUM2LONG(n));
+ h = RARRAY(ary)->len;
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ h = (h << 1) | (h<0 ? 1 : 0);
+ n = rb_hash(RARRAY(ary)->ptr[i]);
+ h ^= NUM2LONG(n);
}
- h = rb_hash_end(h);
return LONG2FIX(h);
}
/*
* call-seq:
- * ary.include?(object) -> true or false
- *
- * Returns +true+ if the given +object+ is present in +self+ (that is, if any
- * element <code>==</code> +object+), otherwise returns +false+.
+ * array.hash -> fixnum
*
+ * Compute a hash-code for this array. Two arrays with the same content
+ * will have the same hash code (and will compare using <code>eql?</code>).
+ */
+
+static VALUE
+rb_ary_hash(ary)
+ VALUE ary;
+{
+ if (rb_inspecting_p(ary)) {
+ return LONG2FIX(0);
+ }
+ return rb_protect_inspect(recursive_hash, ary, 0);
+}
+
+/*
+ * call-seq:
+ * array.include?(obj) -> true or false
+ *
+ * Returns <code>true</code> if the given object is present in
+ * <i>self</i> (that is, if any object <code>==</code> <i>anObject</i>),
+ * <code>false</code> otherwise.
+ *
* a = [ "a", "b", "c" ]
* a.include?("b") #=> true
* a.include?("z") #=> false
*/
VALUE
-rb_ary_includes(VALUE ary, VALUE item)
+rb_ary_includes(ary, item)
+ VALUE ary;
+ VALUE item;
{
long i;
- VALUE e;
-
- for (i=0; i<RARRAY_LEN(ary); i++) {
- e = RARRAY_AREF(ary, i);
- switch (rb_equal_opt(e, item)) {
- case Qundef:
- if (rb_equal(e, item)) return Qtrue;
- break;
- case Qtrue:
+
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ if (rb_equal(RARRAY(ary)->ptr[i], item)) {
return Qtrue;
}
}
return Qfalse;
}
-
-static VALUE
-recursive_cmp(VALUE ary1, VALUE ary2, int recur)
+VALUE
+recursive_cmp(ary1, ary2)
+ VALUE ary1, ary2;
{
long i, len;
- if (recur) return Qundef; /* Subtle! */
- len = RARRAY_LEN(ary1);
- if (len > RARRAY_LEN(ary2)) {
- len = RARRAY_LEN(ary2);
+ len = RARRAY(ary1)->len;
+ if (len > RARRAY(ary2)->len) {
+ len = RARRAY(ary2)->len;
}
for (i=0; i<len; i++) {
- VALUE e1 = rb_ary_elt(ary1, i), e2 = rb_ary_elt(ary2, i);
- VALUE v = rb_funcallv(e1, id_cmp, 1, &e2);
+ VALUE v = rb_funcall(rb_ary_elt(ary1, i), id_cmp, 1, rb_ary_elt(ary2, i));
if (v != INT2FIX(0)) {
return v;
}
@@ -3966,389 +2630,266 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
return Qundef;
}
-/*
+/*
* call-seq:
- * ary <=> other_ary -> -1, 0, +1 or nil
- *
- * Comparison --- Returns an integer (+-1+, +0+, or <code>+1</code>) if this
- * array is less than, equal to, or greater than +other_ary+.
- *
- * Each object in each array is compared (using the <=> operator).
- *
- * Arrays are compared in an "element-wise" manner; the first element of +ary+
- * is compared with the first one of +other_ary+ using the <=> operator, then
- * each of the second elements, etc...
- * As soon as the result of any such comparison is non zero (i.e. the two
- * corresponding elements are not equal), that result is returned for the
- * whole array comparison.
- *
- * If all the elements are equal, then the result is based on a comparison of
- * the array lengths. Thus, two arrays are "equal" according to Array#<=> if,
- * and only if, they have the same length and the value of each element is
- * equal to the value of the corresponding element in the other array.
- *
- * +nil+ is returned if the +other_ary+ is not an array or if the comparison
- * of two elements returned +nil+.
+ * array <=> other_array -> -1, 0, +1
*
+ * Comparison---Returns an integer (-1, 0,
+ * or +1) if this array is less than, equal to, or greater than
+ * other_array. Each object in each array is compared
+ * (using <=>). If any value isn't
+ * equal, then that inequality is the return value. If all the
+ * values found are equal, then the return is based on a
+ * comparison of the array lengths. Thus, two arrays are
+ * ``equal'' according to <code>Array#<=></code> if and only if they have
+ * the same length and the value of each element is equal to the
+ * value of the corresponding element in the other array.
+ *
* [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1
* [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
- * [ 1, 2 ] <=> [ 1, :two ] #=> nil
*
*/
VALUE
-rb_ary_cmp(VALUE ary1, VALUE ary2)
+rb_ary_cmp(ary1, ary2)
+ VALUE ary1, ary2;
{
long len;
VALUE v;
- ary2 = rb_check_array_type(ary2);
- if (NIL_P(ary2)) return Qnil;
+ ary2 = to_ary(ary2);
if (ary1 == ary2) return INT2FIX(0);
- v = rb_exec_recursive_paired(recursive_cmp, ary1, ary2, ary2);
+ if (rb_inspecting_p(ary1)) return INT2FIX(0);
+ v = rb_protect_inspect(recursive_cmp, ary1, ary2);
if (v != Qundef) return v;
- len = RARRAY_LEN(ary1) - RARRAY_LEN(ary2);
+ len = RARRAY(ary1)->len - RARRAY(ary2)->len;
if (len == 0) return INT2FIX(0);
if (len > 0) return INT2FIX(1);
return INT2FIX(-1);
}
static VALUE
-ary_add_hash(VALUE hash, VALUE ary)
-{
- long i;
-
- for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE elt = RARRAY_AREF(ary, i);
- if (rb_hash_lookup2(hash, elt, Qundef) == Qundef) {
- rb_hash_aset(hash, elt, elt);
- }
- }
- return hash;
-}
-
-static inline VALUE
-ary_tmp_hash_new(void)
+ary_make_hash(ary1, ary2)
+ VALUE ary1, ary2;
{
VALUE hash = rb_hash_new();
-
- RBASIC_CLEAR_CLASS(hash);
- return hash;
-}
-
-static VALUE
-ary_make_hash(VALUE ary)
-{
- VALUE hash = ary_tmp_hash_new();
- return ary_add_hash(hash, ary);
-}
-
-static VALUE
-ary_add_hash_by(VALUE hash, VALUE ary)
-{
long i;
- for (i = 0; i < RARRAY_LEN(ary); ++i) {
- VALUE v = rb_ary_elt(ary, i), k = rb_yield(v);
- if (rb_hash_lookup2(hash, k, Qundef) == Qundef) {
- rb_hash_aset(hash, k, v);
+ for (i=0; i<RARRAY(ary1)->len; i++) {
+ rb_hash_aset(hash, RARRAY(ary1)->ptr[i], Qtrue);
+ }
+ if (ary2) {
+ for (i=0; i<RARRAY(ary2)->len; i++) {
+ rb_hash_aset(hash, RARRAY(ary2)->ptr[i], Qtrue);
}
}
return hash;
}
-static VALUE
-ary_make_hash_by(VALUE ary)
-{
- VALUE hash = ary_tmp_hash_new();
- return ary_add_hash_by(hash, ary);
-}
-
-static inline void
-ary_recycle_hash(VALUE hash)
-{
- if (RHASH(hash)->ntbl) {
- st_table *tbl = RHASH(hash)->ntbl;
- RHASH(hash)->ntbl = 0;
- st_free_table(tbl);
- }
- RB_GC_GUARD(hash);
-}
-
-/*
+/*
* call-seq:
- * ary - other_ary -> new_ary
- *
- * Array Difference
- *
- * Returns a new array that is a copy of the original array, removing any
- * items that also appear in +other_ary+. The order is preserved from the
- * original array.
+ * array - other_array -> an_array
*
- * It compares elements using their #hash and #eql? methods for efficiency.
+ * Array Difference---Returns a new array that is a copy of
+ * the original array, removing any items that also appear in
+ * other_array. (If you need set-like behavior, see the
+ * library class Set.)
*
* [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
- *
- * If you need set-like behavior, see the library class Set.
*/
static VALUE
-rb_ary_diff(VALUE ary1, VALUE ary2)
+rb_ary_diff(ary1, ary2)
+ VALUE ary1, ary2;
{
VALUE ary3;
- VALUE hash;
+ volatile VALUE hash;
long i;
- hash = ary_make_hash(to_ary(ary2));
+ hash = ary_make_hash(to_ary(ary2), 0);
ary3 = rb_ary_new();
- for (i=0; i<RARRAY_LEN(ary1); i++) {
- if (st_lookup(rb_hash_tbl_raw(hash), RARRAY_AREF(ary1, i), 0)) continue;
+ for (i=0; i<RARRAY(ary1)->len; i++) {
+ if (st_lookup(RHASH(hash)->tbl, RARRAY(ary1)->ptr[i], 0)) continue;
rb_ary_push(ary3, rb_ary_elt(ary1, i));
}
- ary_recycle_hash(hash);
return ary3;
}
-/*
+/*
* call-seq:
- * ary & other_ary -> new_ary
- *
- * Set Intersection --- Returns a new array containing elements common to the
- * two arrays, excluding any duplicates. The order is preserved from the
- * original array.
- *
- * It compares elements using their #hash and #eql? methods for efficiency.
+ * array & other_array
*
- * [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
- * [ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ] #=> [ 'a', 'b' ]
+ * Set Intersection---Returns a new array
+ * containing elements common to the two arrays, with no duplicates.
*
- * See also Array#uniq.
+ * [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
*/
static VALUE
-rb_ary_and(VALUE ary1, VALUE ary2)
+rb_ary_and(ary1, ary2)
+ VALUE ary1, ary2;
{
- VALUE hash, ary3, v;
- st_table *table;
- st_data_t vv;
+ VALUE hash, ary3, v, vv;
long i;
ary2 = to_ary(ary2);
- ary3 = rb_ary_new();
- if (RARRAY_LEN(ary2) == 0) return ary3;
- hash = ary_make_hash(ary2);
- table = rb_hash_tbl_raw(hash);
-
- for (i=0; i<RARRAY_LEN(ary1); i++) {
- v = RARRAY_AREF(ary1, i);
- vv = (st_data_t)v;
- if (st_delete(table, &vv, 0)) {
+ ary3 = rb_ary_new2(RARRAY(ary1)->len < RARRAY(ary2)->len ?
+ RARRAY(ary1)->len : RARRAY(ary2)->len);
+ hash = ary_make_hash(ary2, 0);
+
+ for (i=0; i<RARRAY(ary1)->len; i++) {
+ v = vv = rb_ary_elt(ary1, i);
+ if (st_delete(RHASH(hash)->tbl, (st_data_t*)&vv, 0)) {
rb_ary_push(ary3, v);
}
}
- ary_recycle_hash(hash);
return ary3;
}
-static int
-ary_hash_orset(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
-{
- if (existing) return ST_STOP;
- *key = *value = (VALUE)arg;
- return ST_CONTINUE;
-}
-
-/*
+/*
* call-seq:
- * ary | other_ary -> new_ary
+ * array | other_array -> an_array
*
- * Set Union --- Returns a new array by joining +ary+ with +other_ary+,
- * excluding any duplicates and preserving the order from the original array.
+ * Set Union---Returns a new array by joining this array with
+ * other_array, removing duplicates.
*
- * It compares elements using their #hash and #eql? methods for efficiency.
- *
- * [ "a", "b", "c" ] | [ "c", "d", "a" ] #=> [ "a", "b", "c", "d" ]
- *
- * See also Array#uniq.
+ * [ "a", "b", "c" ] | [ "c", "d", "a" ]
+ * #=> [ "a", "b", "c", "d" ]
*/
static VALUE
-rb_ary_or(VALUE ary1, VALUE ary2)
+rb_ary_or(ary1, ary2)
+ VALUE ary1, ary2;
{
VALUE hash, ary3;
+ VALUE v, vv;
long i;
ary2 = to_ary(ary2);
- hash = ary_make_hash(ary1);
+ ary3 = rb_ary_new2(RARRAY(ary1)->len+RARRAY(ary2)->len);
+ hash = ary_make_hash(ary1, ary2);
- for (i=0; i<RARRAY_LEN(ary2); i++) {
- VALUE elt = RARRAY_AREF(ary2, i);
- if (!st_update(RHASH_TBL_RAW(hash), (st_data_t)elt, ary_hash_orset, (st_data_t)elt)) {
- RB_OBJ_WRITTEN(hash, Qundef, elt);
+ for (i=0; i<RARRAY(ary1)->len; i++) {
+ v = vv = rb_ary_elt(ary1, i);
+ if (st_delete(RHASH(hash)->tbl, (st_data_t*)&vv, 0)) {
+ rb_ary_push(ary3, v);
+ }
+ }
+ for (i=0; i<RARRAY(ary2)->len; i++) {
+ v = vv = rb_ary_elt(ary2, i);
+ if (st_delete(RHASH(hash)->tbl, (st_data_t*)&vv, 0)) {
+ rb_ary_push(ary3, v);
}
}
- ary3 = rb_hash_values(hash);
- ary_recycle_hash(hash);
return ary3;
}
-static int
-push_value(st_data_t key, st_data_t val, st_data_t ary)
-{
- rb_ary_push((VALUE)ary, (VALUE)val);
- return ST_CONTINUE;
-}
-
/*
* call-seq:
- * ary.uniq! -> ary or nil
- * ary.uniq! { |item| ... } -> ary or nil
- *
- * Removes duplicate elements from +self+.
- *
- * If a block is given, it will use the return value of the block for
- * comparison.
- *
- * It compares values using their #hash and #eql? methods for efficiency.
- *
- * +self+ is traversed in order, and the first occurrence is kept.
- *
- * Returns +nil+ if no changes are made (that is, no duplicates are found).
- *
+ * array.uniq! -> array or nil
+ *
+ * Removes duplicate elements from _self_.
+ * Returns <code>nil</code> if no changes are made (that is, no
+ * duplicates are found).
+ *
* a = [ "a", "a", "b", "b", "c" ]
- * a.uniq! # => ["a", "b", "c"]
- *
+ * a.uniq! #=> ["a", "b", "c"]
* b = [ "a", "b", "c" ]
- * b.uniq! # => nil
- *
- * c = [["student","sam"], ["student","george"], ["teacher","matz"]]
- * c.uniq! { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
- *
+ * b.uniq! #=> nil
*/
static VALUE
-rb_ary_uniq_bang(VALUE ary)
+rb_ary_uniq_bang(ary)
+ VALUE ary;
{
- VALUE hash;
- long hash_size;
+ VALUE hash, v, vv;
+ long i, j;
- rb_ary_modify_check(ary);
- if (RARRAY_LEN(ary) <= 1)
- return Qnil;
- if (rb_block_given_p())
- hash = ary_make_hash_by(ary);
- else
- hash = ary_make_hash(ary);
-
- hash_size = RHASH_SIZE(hash);
- if (RARRAY_LEN(ary) == hash_size) {
+ hash = ary_make_hash(ary, 0);
+
+ if (RARRAY(ary)->len == RHASH(hash)->tbl->num_entries) {
return Qnil;
}
- rb_ary_modify_check(ary);
- ARY_SET_LEN(ary, 0);
- if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
+ for (i=j=0; i<RARRAY(ary)->len; i++) {
+ v = vv = rb_ary_elt(ary, i);
+ if (st_delete(RHASH(hash)->tbl, (st_data_t*)&vv, 0)) {
+ rb_ary_store(ary, j++, v);
+ }
}
- ary_resize_capa(ary, hash_size);
- st_foreach(rb_hash_tbl_raw(hash), push_value, ary);
- ary_recycle_hash(hash);
+ RARRAY(ary)->len = j;
return ary;
}
/*
* call-seq:
- * ary.uniq -> new_ary
- * ary.uniq { |item| ... } -> new_ary
- *
- * Returns a new array by removing duplicate values in +self+.
- *
- * If a block is given, it will use the return value of the block for comparison.
- *
- * It compares values using their #hash and #eql? methods for efficiency.
- *
- * +self+ is traversed in order, and the first occurrence is kept.
- *
+ * array.uniq -> an_array
+ *
+ * Returns a new array by removing duplicate values in <i>self</i>.
+ *
* a = [ "a", "a", "b", "b", "c" ]
- * a.uniq # => ["a", "b", "c"]
- *
- * b = [["student","sam"], ["student","george"], ["teacher","matz"]]
- * b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
- *
+ * a.uniq #=> ["a", "b", "c"]
*/
static VALUE
-rb_ary_uniq(VALUE ary)
+rb_ary_uniq(ary)
+ VALUE ary;
{
- VALUE hash, uniq;
-
- if (RARRAY_LEN(ary) <= 1)
- return rb_ary_dup(ary);
- if (rb_block_given_p()) {
- hash = ary_make_hash_by(ary);
- uniq = rb_hash_values(hash);
- }
- else {
- hash = ary_make_hash(ary);
- uniq = rb_hash_values(hash);
- }
- RBASIC_SET_CLASS(uniq, rb_obj_class(ary));
- ary_recycle_hash(hash);
-
- return uniq;
+ ary = rb_ary_dup(ary);
+ rb_ary_uniq_bang(ary);
+ return ary;
}
-/*
+/*
* call-seq:
- * ary.compact! -> ary or nil
- *
- * Removes +nil+ elements from the array.
+ * array.compact! -> array or nil
*
- * Returns +nil+ if no changes were made, otherwise returns the array.
+ * Removes +nil+ elements from array.
+ * Returns +nil+ if no changes were made.
*
* [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
* [ "a", "b", "c" ].compact! #=> nil
*/
static VALUE
-rb_ary_compact_bang(VALUE ary)
+rb_ary_compact_bang(ary)
+ VALUE ary;
{
VALUE *p, *t, *end;
- long n;
rb_ary_modify(ary);
- p = t = (VALUE *)RARRAY_CONST_PTR(ary); /* WB: no new reference */
- end = p + RARRAY_LEN(ary);
-
+ p = t = RARRAY(ary)->ptr;
+ end = p + RARRAY(ary)->len;
+
while (t < end) {
if (NIL_P(*t)) t++;
else *p++ = *t++;
}
- n = p - RARRAY_CONST_PTR(ary);
- if (RARRAY_LEN(ary) == n) {
+ if (RARRAY(ary)->len == (p - RARRAY(ary)->ptr)) {
return Qnil;
}
- ary_resize_smaller(ary, n);
+ RARRAY(ary)->len = RARRAY(ary)->aux.capa = (p - RARRAY(ary)->ptr);
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
return ary;
}
/*
* call-seq:
- * ary.compact -> new_ary
+ * array.compact -> an_array
*
- * Returns a copy of +self+ with all +nil+ elements removed.
+ * Returns a copy of _self_ with all +nil+ elements removed.
*
* [ "a", nil, "b", nil, "c", nil ].compact
* #=> [ "a", "b", "c" ]
*/
static VALUE
-rb_ary_compact(VALUE ary)
+rb_ary_compact(ary)
+ VALUE ary;
{
ary = rb_ary_dup(ary);
rb_ary_compact_bang(ary);
@@ -4357,1462 +2898,147 @@ rb_ary_compact(VALUE ary)
/*
* call-seq:
- * ary.count -> int
- * ary.count(obj) -> int
- * ary.count { |item| block } -> int
- *
- * Returns the number of elements.
- *
- * If an argument is given, counts the number of elements which equal +obj+
- * using <code>==</code>.
- *
- * If a block is given, counts the number of elements for which the block
- * returns a true value.
- *
- * ary = [1, 2, 4, 2]
- * ary.count #=> 4
- * ary.count(2) #=> 2
- * ary.count { |x| x%2 == 0 } #=> 3
- *
+ * array.nitems -> int
+ *
+ * Returns the number of non-<code>nil</code> elements in _self_.
+ * May be zero.
+ *
+ * [ 1, nil, 3, nil, 5 ].nitems #=> 3
*/
static VALUE
-rb_ary_count(int argc, VALUE *argv, VALUE ary)
+rb_ary_nitems(ary)
+ VALUE ary;
{
- long i, n = 0;
+ long n = 0;
+ VALUE *p, *pend;
- if (argc == 0) {
- VALUE v;
+ p = RARRAY(ary)->ptr;
+ pend = p + RARRAY(ary)->len;
- if (!rb_block_given_p())
- return LONG2NUM(RARRAY_LEN(ary));
-
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- v = RARRAY_AREF(ary, i);
- if (RTEST(rb_yield(v))) n++;
- }
+ while (p < pend) {
+ if (!NIL_P(*p)) n++;
+ p++;
}
- else {
- VALUE obj;
-
- rb_scan_args(argc, argv, "1", &obj);
- if (rb_block_given_p()) {
- rb_warn("given block not used");
- }
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (rb_equal(RARRAY_AREF(ary, i), obj)) n++;
- }
- }
-
return LONG2NUM(n);
}
-static VALUE
-flatten(VALUE ary, int level, int *modified)
+static long
+flatten(ary, idx, ary2, memo)
+ VALUE ary;
+ long idx;
+ VALUE ary2, memo;
{
- long i = 0;
- VALUE stack, result, tmp, elt;
- st_table *memo;
- st_data_t id;
-
- stack = ary_new(0, ARY_DEFAULT_SIZE);
- result = ary_new(0, RARRAY_LEN(ary));
- memo = st_init_numtable();
- st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue);
- *modified = 0;
-
- while (1) {
- while (i < RARRAY_LEN(ary)) {
- elt = RARRAY_AREF(ary, i++);
- if (level >= 0 && RARRAY_LEN(stack) / 2 >= level) {
- rb_ary_push(result, elt);
- continue;
- }
- tmp = rb_check_array_type(elt);
- if (RBASIC(result)->klass) {
- rb_raise(rb_eRuntimeError, "flatten reentered");
- }
- if (NIL_P(tmp)) {
- rb_ary_push(result, elt);
- }
- else {
- *modified = 1;
- id = (st_data_t)tmp;
- if (st_lookup(memo, id, 0)) {
- st_free_table(memo);
- rb_raise(rb_eArgError, "tried to flatten recursive array");
- }
- st_insert(memo, id, (st_data_t)Qtrue);
- rb_ary_push(stack, ary);
- rb_ary_push(stack, LONG2NUM(i));
- ary = tmp;
- i = 0;
- }
- }
- if (RARRAY_LEN(stack) == 0) {
- break;
- }
- id = (st_data_t)ary;
- st_delete(memo, &id, 0);
- tmp = rb_ary_pop(stack);
- i = NUM2LONG(tmp);
- ary = rb_ary_pop(stack);
+ VALUE id;
+ long i = idx;
+ long n, lim = idx + RARRAY(ary2)->len;
+
+ id = rb_obj_id(ary2);
+ if (rb_ary_includes(memo, id)) {
+ rb_raise(rb_eArgError, "tried to flatten recursive array");
}
+ rb_ary_push(memo, id);
+ rb_ary_splice(ary, idx, 1, ary2);
+ while (i < lim) {
+ VALUE tmp;
- st_free_table(memo);
+ tmp = rb_check_array_type(rb_ary_elt(ary, i));
+ if (!NIL_P(tmp)) {
+ n = flatten(ary, i, tmp, memo);
+ i += n; lim += n;
+ }
+ i++;
+ }
+ rb_ary_pop(memo);
- RBASIC_SET_CLASS(result, rb_class_of(ary));
- return result;
+ return lim - idx - 1; /* returns number of increased items */
}
/*
* call-seq:
- * ary.flatten! -> ary or nil
- * ary.flatten!(level) -> ary or nil
- *
- * Flattens +self+ in place.
- *
- * Returns +nil+ if no modifications were made (i.e., the array contains no
- * subarrays.)
- *
- * The optional +level+ argument determines the level of recursion to flatten.
- *
+ * array.flatten! -> array or nil
+ *
+ * Flattens _self_ in place.
+ * Returns <code>nil</code> if no modifications were made (i.e.,
+ * <i>array</i> contains no subarrays.)
+ *
* a = [ 1, 2, [3, [4, 5] ] ]
* a.flatten! #=> [1, 2, 3, 4, 5]
* a.flatten! #=> nil
* a #=> [1, 2, 3, 4, 5]
- * a = [ 1, 2, [3, [4, 5] ] ]
- * a.flatten!(1) #=> [1, 2, 3, [4, 5]]
*/
static VALUE
-rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
+rb_ary_flatten_bang(ary)
+ VALUE ary;
{
- int mod = 0, level = -1;
- VALUE result, lv;
+ long i = 0;
+ int mod = 0;
+ VALUE memo = Qnil;
- rb_scan_args(argc, argv, "01", &lv);
- rb_ary_modify_check(ary);
- if (!NIL_P(lv)) level = NUM2INT(lv);
- if (level == 0) return Qnil;
+ while (i<RARRAY(ary)->len) {
+ VALUE ary2 = RARRAY(ary)->ptr[i];
+ VALUE tmp;
- result = flatten(ary, level, &mod);
- if (mod == 0) {
- ary_discard(result);
- return Qnil;
+ tmp = rb_check_array_type(ary2);
+ if (!NIL_P(tmp)) {
+ if (NIL_P(memo)) {
+ memo = rb_ary_new();
+ }
+ i += flatten(ary, i, tmp, memo);
+ mod = 1;
+ }
+ i++;
}
- if (!(mod = ARY_EMBED_P(result))) rb_obj_freeze(result);
- rb_ary_replace(ary, result);
- if (mod) ARY_SET_EMBED_LEN(result, 0);
-
+ if (mod == 0) return Qnil;
return ary;
}
/*
* call-seq:
- * ary.flatten -> new_ary
- * ary.flatten(level) -> new_ary
- *
- * Returns a new array that is a one-dimensional flattening of +self+
- * (recursively).
- *
- * That is, for every element that is an array, extract its elements into
- * the new array.
- *
- * The optional +level+ argument determines the level of recursion to
- * flatten.
- *
+ * array.flatten -> an_array
+ *
+ * Returns a new array that is a one-dimensional flattening of this
+ * array (recursively). That is, for every element that is an array,
+ * extract its elements into the new array.
+ *
* s = [ 1, 2, 3 ] #=> [1, 2, 3]
* t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
* a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
- * a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- * a = [ 1, 2, [3, [4, 5] ] ]
- * a.flatten(1) #=> [1, 2, 3, [4, 5]]
- */
-
-static VALUE
-rb_ary_flatten(int argc, VALUE *argv, VALUE ary)
-{
- int mod = 0, level = -1;
- VALUE result, lv;
-
- rb_scan_args(argc, argv, "01", &lv);
- if (!NIL_P(lv)) level = NUM2INT(lv);
- if (level == 0) return ary_make_shared_copy(ary);
-
- result = flatten(ary, level, &mod);
- OBJ_INFECT(result, ary);
-
- return result;
-}
-
-#define OPTHASH_GIVEN_P(opts) \
- (argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1))
-static ID id_random;
-
-#define RAND_UPTO(max) (long)rb_random_ulong_limited((randgen), (max)-1)
-
-/*
- * call-seq:
- * ary.shuffle! -> ary
- * ary.shuffle!(random: rng) -> ary
- *
- * Shuffles elements in +self+ in place.
- *
- * a = [ 1, 2, 3 ] #=> [1, 2, 3]
- * a.shuffle! #=> [2, 3, 1]
- * a #=> [2, 3, 1]
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a.shuffle!(random: Random.new(1)) #=> [1, 3, 2]
- */
-
-static VALUE
-rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
-{
- VALUE opts, randgen = rb_cRandom;
- long i, len;
-
- if (OPTHASH_GIVEN_P(opts)) {
- VALUE rnd;
- ID keyword_ids[1];
-
- keyword_ids[0] = id_random;
- rb_get_kwargs(opts, keyword_ids, 0, 1, &rnd);
- if (rnd != Qundef) {
- randgen = rnd;
- }
- }
- rb_check_arity(argc, 0, 0);
- rb_ary_modify(ary);
- i = len = RARRAY_LEN(ary);
- RARRAY_PTR_USE(ary, ptr, {
- while (i) {
- long j = RAND_UPTO(i);
- VALUE tmp;
- if (len != RARRAY_LEN(ary) || ptr != RARRAY_CONST_PTR(ary)) {
- rb_raise(rb_eRuntimeError, "modified during shuffle");
- }
- tmp = ptr[--i];
- ptr[i] = ptr[j];
- ptr[j] = tmp;
- }
- }); /* WB: no new reference */
- return ary;
-}
-
-
-/*
- * call-seq:
- * ary.shuffle -> new_ary
- * ary.shuffle(random: rng) -> new_ary
- *
- * Returns a new array with elements of +self+ shuffled.
- *
- * a = [ 1, 2, 3 ] #=> [1, 2, 3]
- * a.shuffle #=> [2, 3, 1]
- * a #=> [1, 2, 3]
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a.shuffle(random: Random.new(1)) #=> [1, 3, 2]
+ * a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10
*/
static VALUE
-rb_ary_shuffle(int argc, VALUE *argv, VALUE ary)
+rb_ary_flatten(ary)
+ VALUE ary;
{
ary = rb_ary_dup(ary);
- rb_ary_shuffle_bang(argc, argv, ary);
+ rb_ary_flatten_bang(ary);
return ary;
}
-/*
- * call-seq:
- * ary.sample -> obj
- * ary.sample(random: rng) -> obj
- * ary.sample(n) -> new_ary
- * ary.sample(n, random: rng) -> new_ary
- *
- * Choose a random element or +n+ random elements from the array.
- *
- * The elements are chosen by using random and unique indices into the array
- * in order to ensure that an element doesn't repeat itself unless the array
- * already contained duplicate elements.
- *
- * If the array is empty the first form returns +nil+ and the second form
- * returns an empty array.
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
- * a.sample #=> 7
- * a.sample(4) #=> [6, 4, 2, 5]
- */
-
-
-static VALUE
-rb_ary_sample(int argc, VALUE *argv, VALUE ary)
-{
- VALUE nv, result;
- VALUE opts, randgen = rb_cRandom;
- long n, len, i, j, k, idx[10];
- long rnds[numberof(idx)];
-
- if (OPTHASH_GIVEN_P(opts)) {
- VALUE rnd;
- ID keyword_ids[1];
-
- keyword_ids[0] = id_random;
- rb_get_kwargs(opts, keyword_ids, 0, 1, &rnd);
- if (rnd != Qundef) {
- randgen = rnd;
- }
- }
- len = RARRAY_LEN(ary);
- if (argc == 0) {
- if (len < 2)
- i = 0;
- else
- i = RAND_UPTO(len);
-
- return rb_ary_elt(ary, i);
- }
- rb_scan_args(argc, argv, "1", &nv);
- n = NUM2LONG(nv);
- if (n < 0) rb_raise(rb_eArgError, "negative sample number");
- if (n > len) n = len;
- if (n <= numberof(idx)) {
- for (i = 0; i < n; ++i) {
- rnds[i] = RAND_UPTO(len - i);
- }
- }
- k = len;
- len = RARRAY_LEN(ary);
- if (len < k && n <= numberof(idx)) {
- for (i = 0; i < n; ++i) {
- if (rnds[i] >= len) return rb_ary_new_capa(0);
- }
- }
- if (n > len) n = len;
- switch (n) {
- case 0:
- return rb_ary_new_capa(0);
- case 1:
- i = rnds[0];
- return rb_ary_new_from_values(1, &RARRAY_AREF(ary, i));
- case 2:
- i = rnds[0];
- j = rnds[1];
- if (j >= i) j++;
- return rb_ary_new_from_args(2, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j));
- case 3:
- i = rnds[0];
- j = rnds[1];
- k = rnds[2];
- {
- long l = j, g = i;
- if (j >= i) l = i, g = ++j;
- if (k >= l && (++k >= g)) ++k;
- }
- return rb_ary_new_from_args(3, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j), RARRAY_AREF(ary, k));
- }
- if (n <= numberof(idx)) {
- long sorted[numberof(idx)];
- sorted[0] = idx[0] = rnds[0];
- for (i=1; i<n; i++) {
- k = rnds[i];
- for (j = 0; j < i; ++j) {
- if (k < sorted[j]) break;
- ++k;
- }
- memmove(&sorted[j+1], &sorted[j], sizeof(sorted[0])*(i-j));
- sorted[j] = idx[i] = k;
- }
- result = rb_ary_new_capa(n);
- RARRAY_PTR_USE(result, ptr_result, {
- for (i=0; i<n; i++) {
- ptr_result[i] = RARRAY_AREF(ary, idx[i]);
- }
- });
- }
- else {
- result = rb_ary_dup(ary);
- RBASIC_CLEAR_CLASS(result);
- RB_GC_GUARD(ary);
- RARRAY_PTR_USE(result, ptr_result, {
- for (i=0; i<n; i++) {
- j = RAND_UPTO(len-i) + i;
- nv = ptr_result[j];
- ptr_result[j] = ptr_result[i];
- ptr_result[i] = nv;
- }
- });
- RBASIC_SET_CLASS_RAW(result, rb_cArray);
- }
- ARY_SET_LEN(result, n);
-
- return result;
-}
-
-static VALUE
-rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj)
-{
- long mul;
- VALUE n = Qnil;
- if (args && (RARRAY_LEN(args) > 0)) {
- n = RARRAY_AREF(args, 0);
- }
- if (RARRAY_LEN(self) == 0) return INT2FIX(0);
- if (n == Qnil) return DBL2NUM(INFINITY);
- mul = NUM2LONG(n);
- if (mul <= 0) return INT2FIX(0);
- n = LONG2FIX(mul);
- return rb_funcallv(rb_ary_length(self), '*', 1, &n);
-}
-
-/*
- * call-seq:
- * ary.cycle(n=nil) { |obj| block } -> nil
- * ary.cycle(n=nil) -> Enumerator
- *
- * Calls the given block for each element +n+ times or forever if +nil+ is
- * given.
- *
- * Does nothing if a non-positive number is given or the array is empty.
- *
- * Returns +nil+ if the loop has finished without getting interrupted.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * a = ["a", "b", "c"]
- * a.cycle { |x| puts x } # print, a, b, c, a, b, c,.. forever.
- * a.cycle(2) { |x| puts x } # print, a, b, c, a, b, c.
- *
- */
-
-static VALUE
-rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
-{
- long n, i;
- VALUE nv = Qnil;
-
- rb_scan_args(argc, argv, "01", &nv);
-
- RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_cycle_size);
- if (NIL_P(nv)) {
- n = -1;
- }
- else {
- n = NUM2LONG(nv);
- if (n <= 0) return Qnil;
- }
-
- while (RARRAY_LEN(ary) > 0 && (n < 0 || 0 < n--)) {
- for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_AREF(ary, i));
- }
- }
- return Qnil;
-}
-
-#define tmpbuf(n, size) rb_str_tmp_new((n)*(size))
-#define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC_SET_CLASS_RAW(s, rb_cString))
-#define tmpary(n) rb_ary_tmp_new(n)
-#define tmpary_discard(a) (ary_discard(a), RBASIC_SET_CLASS_RAW(a, rb_cArray))
-
-/*
- * Build a ruby array of the corresponding values and yield it to the
- * associated block.
- * Return the class of +values+ for reentry check.
- */
-static int
-yield_indexed_values(const VALUE values, const long r, const long *const p)
-{
- const VALUE result = rb_ary_new2(r);
- VALUE *const result_array = RARRAY_PTR(result);
- const VALUE *const values_array = RARRAY_CONST_PTR(values);
- long i;
-
- for (i = 0; i < r; i++) result_array[i] = values_array[p[i]];
- ARY_SET_LEN(result, r);
- rb_yield(result);
- return !RBASIC(values)->klass;
-}
-
-/*
- * Compute permutations of +r+ elements of the set <code>[0..n-1]</code>.
- *
- * When we have a complete permutation of array indexes, copy the values
- * at those indexes into a new array and yield that array.
- *
- * n: the size of the set
- * r: the number of elements in each permutation
- * p: the array (of size r) that we're filling in
- * used: an array of booleans: whether a given index is already used
- * values: the Ruby array that holds the actual values to permute
- */
-static void
-permute0(const long n, const long r, long *const p, char *const used, const VALUE values)
-{
- long i = 0, index = 0;
-
- for (;;) {
- const char *const unused = memchr(&used[i], 0, n-i);
- if (!unused) {
- if (!index) break;
- i = p[--index]; /* pop index */
- used[i++] = 0; /* index unused */
- }
- else {
- i = unused - used;
- p[index] = i;
- used[i] = 1; /* mark index used */
- ++index;
- if (index < r-1) { /* if not done yet */
- p[index] = i = 0;
- continue;
- }
- for (i = 0; i < n; ++i) {
- if (used[i]) continue;
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "permute reentered");
- }
- }
- i = p[--index]; /* pop index */
- used[i] = 0; /* index unused */
- p[index] = ++i;
- }
- }
-}
-
-/*
- * Returns the product of from, from-1, ..., from - how_many + 1.
- * http://en.wikipedia.org/wiki/Pochhammer_symbol
- */
-static VALUE
-descending_factorial(long from, long how_many)
-{
- VALUE cnt = LONG2FIX(how_many >= 0);
- while (how_many-- > 0) {
- VALUE v = LONG2FIX(from--);
- cnt = rb_funcallv(cnt, '*', 1, &v);
- }
- return cnt;
-}
-
-static VALUE
-binomial_coefficient(long comb, long size)
-{
- VALUE r, v;
- if (comb > size-comb) {
- comb = size-comb;
- }
- if (comb < 0) {
- return LONG2FIX(0);
- }
- r = descending_factorial(size, comb);
- v = descending_factorial(comb, comb);
- return rb_funcallv(r, id_div, 1, &v);
-}
-
-static VALUE
-rb_ary_permutation_size(VALUE ary, VALUE args, VALUE eobj)
-{
- long n = RARRAY_LEN(ary);
- long k = (args && (RARRAY_LEN(args) > 0)) ? NUM2LONG(RARRAY_AREF(args, 0)) : n;
-
- return descending_factorial(n, k);
-}
-
-/*
- * call-seq:
- * ary.permutation { |p| block } -> ary
- * ary.permutation -> Enumerator
- * ary.permutation(n) { |p| block } -> ary
- * ary.permutation(n) -> Enumerator
- *
- * When invoked with a block, yield all permutations of length +n+ of the
- * elements of the array, then return the array itself.
- *
- * If +n+ is not specified, yield all permutations of all elements.
- *
- * The implementation makes no guarantees about the order in which the
- * permutations are yielded.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * Examples:
- *
- * a = [1, 2, 3]
- * a.permutation.to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- * a.permutation(1).to_a #=> [[1],[2],[3]]
- * a.permutation(2).to_a #=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
- * a.permutation(3).to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- * a.permutation(0).to_a #=> [[]] # one permutation of length 0
- * a.permutation(4).to_a #=> [] # no permutations of length 4
- */
-
-static VALUE
-rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
-{
- VALUE num;
- long r, n, i;
-
- n = RARRAY_LEN(ary); /* Array length */
- RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_permutation_size); /* Return enumerator if no block */
- rb_scan_args(argc, argv, "01", &num);
- r = NIL_P(num) ? n : NUM2LONG(num); /* Permutation size from argument */
-
- if (r < 0 || n < r) {
- /* no permutations: yield nothing */
- }
- else if (r == 0) { /* exactly one permutation: the zero-length array */
- rb_yield(rb_ary_new2(0));
- }
- else if (r == 1) { /* this is a special, easy case */
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
- }
- else { /* this is the general case */
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, r+roomof(n, sizeof(long)));
- char *used = (char*)(p + r);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
-
- MEMZERO(used, char, n); /* initialize array */
-
- permute0(n, r, p, used, ary0); /* compute and yield permutations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
- }
- return ary;
-}
-
-static void
-combinate0(const long len, const long n, long *const stack, const VALUE values)
-{
- long lev = 0;
-
- MEMZERO(stack+1, long, n);
- stack[0] = -1;
- for (;;) {
- for (lev++; lev < n; lev++) {
- stack[lev+1] = stack[lev]+1;
- }
- if (!yield_indexed_values(values, n, stack+1)) {
- rb_raise(rb_eRuntimeError, "combination reentered");
- }
- do {
- if (lev == 0) return;
- stack[lev--]++;
- } while (stack[lev+1]+n == len+lev+1);
- }
-}
-
-static VALUE
-rb_ary_combination_size(VALUE ary, VALUE args, VALUE eobj)
-{
- long n = RARRAY_LEN(ary);
- long k = NUM2LONG(RARRAY_AREF(args, 0));
-
- return binomial_coefficient(k, n);
-}
-
-/*
- * call-seq:
- * ary.combination(n) { |c| block } -> ary
- * ary.combination(n) -> Enumerator
- *
- * When invoked with a block, yields all combinations of length +n+ of elements
- * from the array and then returns the array itself.
- *
- * The implementation makes no guarantees about the order in which the
- * combinations are yielded.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * Examples:
- *
- * a = [1, 2, 3, 4]
- * a.combination(1).to_a #=> [[1],[2],[3],[4]]
- * a.combination(2).to_a #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
- * a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
- * a.combination(4).to_a #=> [[1,2,3,4]]
- * a.combination(0).to_a #=> [[]] # one combination of length 0
- * a.combination(5).to_a #=> [] # no combinations of length 5
- *
- */
-
-static VALUE
-rb_ary_combination(VALUE ary, VALUE num)
-{
- long i, n, len;
-
- n = NUM2LONG(num);
- RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_combination_size);
- len = RARRAY_LEN(ary);
- if (n < 0 || len < n) {
- /* yield nothing */
- }
- else if (n == 0) {
- rb_yield(rb_ary_new2(0));
- }
- else if (n == 1) {
- for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
- }
- else {
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- volatile VALUE t0;
- long *stack = ALLOCV_N(long, t0, n+1);
-
- RBASIC_CLEAR_CLASS(ary0);
- combinate0(len, n, stack, ary0);
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
- }
- return ary;
-}
-
-/*
- * Compute repeated permutations of +r+ elements of the set
- * <code>[0..n-1]</code>.
- *
- * When we have a complete repeated permutation of array indexes, copy the
- * values at those indexes into a new array and yield that array.
- *
- * n: the size of the set
- * r: the number of elements in each permutation
- * p: the array (of size r) that we're filling in
- * values: the Ruby array that holds the actual values to permute
- */
-static void
-rpermute0(const long n, const long r, long *const p, const VALUE values)
-{
- long i = 0, index = 0;
-
- p[index] = i;
- for (;;) {
- if (++index < r-1) {
- p[index] = i = 0;
- continue;
- }
- for (i = 0; i < n; ++i) {
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "repeated permute reentered");
- }
- }
- do {
- if (index <= 0) return;
- } while ((i = ++p[--index]) >= n);
- }
-}
-
-static VALUE
-rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj)
-{
- long n = RARRAY_LEN(ary);
- long k = NUM2LONG(RARRAY_AREF(args, 0));
- VALUE v;
-
- if (k < 0) {
- return LONG2FIX(0);
- }
-
- v = LONG2NUM(k);
- return rb_funcallv(LONG2NUM(n), id_power, 1, &v);
-}
-
-/*
- * call-seq:
- * ary.repeated_permutation(n) { |p| block } -> ary
- * ary.repeated_permutation(n) -> Enumerator
- *
- * When invoked with a block, yield all repeated permutations of length +n+ of
- * the elements of the array, then return the array itself.
- *
- * The implementation makes no guarantees about the order in which the repeated
- * permutations are yielded.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * Examples:
- *
- * a = [1, 2]
- * a.repeated_permutation(1).to_a #=> [[1], [2]]
- * a.repeated_permutation(2).to_a #=> [[1,1],[1,2],[2,1],[2,2]]
- * a.repeated_permutation(3).to_a #=> [[1,1,1],[1,1,2],[1,2,1],[1,2,2],
- * # [2,1,1],[2,1,2],[2,2,1],[2,2,2]]
- * a.repeated_permutation(0).to_a #=> [[]] # one permutation of length 0
- */
-
-static VALUE
-rb_ary_repeated_permutation(VALUE ary, VALUE num)
-{
- long r, n, i;
-
- n = RARRAY_LEN(ary); /* Array length */
- RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_repeated_permutation_size); /* Return Enumerator if no block */
- r = NUM2LONG(num); /* Permutation size from argument */
-
- if (r < 0) {
- /* no permutations: yield nothing */
- }
- else if (r == 0) { /* exactly one permutation: the zero-length array */
- rb_yield(rb_ary_new2(0));
- }
- else if (r == 1) { /* this is a special, easy case */
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
- }
- else { /* this is the general case */
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, r);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
-
- rpermute0(n, r, p, ary0); /* compute and yield repeated permutations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
- }
- return ary;
-}
-
-static void
-rcombinate0(const long n, const long r, long *const p, const long rest, const VALUE values)
-{
- long i = 0, index = 0;
-
- p[index] = i;
- for (;;) {
- if (++index < r-1) {
- p[index] = i;
- continue;
- }
- for (; i < n; ++i) {
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "repeated combination reentered");
- }
- }
- do {
- if (index <= 0) return;
- } while ((i = ++p[--index]) >= n);
- }
-}
-
-static VALUE
-rb_ary_repeated_combination_size(VALUE ary, VALUE args, VALUE eobj)
-{
- long n = RARRAY_LEN(ary);
- long k = NUM2LONG(RARRAY_AREF(args, 0));
- if (k == 0) {
- return LONG2FIX(1);
- }
- return binomial_coefficient(k, n + k - 1);
-}
-
-/*
- * call-seq:
- * ary.repeated_combination(n) { |c| block } -> ary
- * ary.repeated_combination(n) -> Enumerator
- *
- * When invoked with a block, yields all repeated combinations of length +n+ of
- * elements from the array and then returns the array itself.
- *
- * The implementation makes no guarantees about the order in which the repeated
- * combinations are yielded.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * Examples:
- *
- * a = [1, 2, 3]
- * a.repeated_combination(1).to_a #=> [[1], [2], [3]]
- * a.repeated_combination(2).to_a #=> [[1,1],[1,2],[1,3],[2,2],[2,3],[3,3]]
- * a.repeated_combination(3).to_a #=> [[1,1,1],[1,1,2],[1,1,3],[1,2,2],[1,2,3],
- * # [1,3,3],[2,2,2],[2,2,3],[2,3,3],[3,3,3]]
- * a.repeated_combination(4).to_a #=> [[1,1,1,1],[1,1,1,2],[1,1,1,3],[1,1,2,2],[1,1,2,3],
- * # [1,1,3,3],[1,2,2,2],[1,2,2,3],[1,2,3,3],[1,3,3,3],
- * # [2,2,2,2],[2,2,2,3],[2,2,3,3],[2,3,3,3],[3,3,3,3]]
- * a.repeated_combination(0).to_a #=> [[]] # one combination of length 0
- *
- */
-
-static VALUE
-rb_ary_repeated_combination(VALUE ary, VALUE num)
-{
- long n, i, len;
-
- n = NUM2LONG(num); /* Combination size from argument */
- RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_repeated_combination_size); /* Return enumerator if no block */
- len = RARRAY_LEN(ary);
- if (n < 0) {
- /* yield nothing */
- }
- else if (n == 0) {
- rb_yield(rb_ary_new2(0));
- }
- else if (n == 1) {
- for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
- }
- else if (len == 0) {
- /* yield nothing */
- }
- else {
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, n);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
-
- rcombinate0(len, n, p, n, ary0); /* compute and yield repeated combinations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
- }
- return ary;
-}
-
-/*
- * call-seq:
- * ary.product(other_ary, ...) -> new_ary
- * ary.product(other_ary, ...) { |p| block } -> ary
- *
- * Returns an array of all combinations of elements from all arrays.
- *
- * The length of the returned array is the product of the length of +self+ and
- * the argument arrays.
- *
- * If given a block, #product will yield all combinations and return +self+
- * instead.
- *
- * [1,2,3].product([4,5]) #=> [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
- * [1,2].product([1,2]) #=> [[1,1],[1,2],[2,1],[2,2]]
- * [1,2].product([3,4],[5,6]) #=> [[1,3,5],[1,3,6],[1,4,5],[1,4,6],
- * # [2,3,5],[2,3,6],[2,4,5],[2,4,6]]
- * [1,2].product() #=> [[1],[2]]
- * [1,2].product([]) #=> []
- */
-
-static VALUE
-rb_ary_product(int argc, VALUE *argv, VALUE ary)
-{
- int n = argc+1; /* How many arrays we're operating on */
- volatile VALUE t0 = tmpary(n);
- volatile VALUE t1 = tmpbuf(n, sizeof(int));
- VALUE *arrays = RARRAY_PTR(t0); /* The arrays we're computing the product of */
- int *counters = (int*)RSTRING_PTR(t1); /* The current position in each one */
- VALUE result = Qnil; /* The array we'll be returning, when no block given */
- long i,j;
- long resultlen = 1;
-
- RBASIC_CLEAR_CLASS(t0);
- RBASIC_CLEAR_CLASS(t1);
-
- /* initialize the arrays of arrays */
- ARY_SET_LEN(t0, n);
- arrays[0] = ary;
- for (i = 1; i < n; i++) arrays[i] = Qnil;
- for (i = 1; i < n; i++) arrays[i] = to_ary(argv[i-1]);
-
- /* initialize the counters for the arrays */
- for (i = 0; i < n; i++) counters[i] = 0;
-
- /* Otherwise, allocate and fill in an array of results */
- if (rb_block_given_p()) {
- /* Make defensive copies of arrays; exit if any is empty */
- for (i = 0; i < n; i++) {
- if (RARRAY_LEN(arrays[i]) == 0) goto done;
- arrays[i] = ary_make_shared_copy(arrays[i]);
- }
- }
- else {
- /* Compute the length of the result array; return [] if any is empty */
- for (i = 0; i < n; i++) {
- long k = RARRAY_LEN(arrays[i]);
- if (k == 0) {
- result = rb_ary_new2(0);
- goto done;
- }
- if (MUL_OVERFLOW_LONG_P(resultlen, k))
- rb_raise(rb_eRangeError, "too big to product");
- resultlen *= k;
- }
- result = rb_ary_new2(resultlen);
- }
- for (;;) {
- int m;
- /* fill in one subarray */
- VALUE subarray = rb_ary_new2(n);
- for (j = 0; j < n; j++) {
- rb_ary_push(subarray, rb_ary_entry(arrays[j], counters[j]));
- }
-
- /* put it on the result array */
- if (NIL_P(result)) {
- FL_SET(t0, FL_USER5);
- rb_yield(subarray);
- if (! FL_TEST(t0, FL_USER5)) {
- rb_raise(rb_eRuntimeError, "product reentered");
- }
- else {
- FL_UNSET(t0, FL_USER5);
- }
- }
- else {
- rb_ary_push(result, subarray);
- }
-
- /*
- * Increment the last counter. If it overflows, reset to 0
- * and increment the one before it.
- */
- m = n-1;
- counters[m]++;
- while (counters[m] == RARRAY_LEN(arrays[m])) {
- counters[m] = 0;
- /* If the first counter overflows, we are done */
- if (--m < 0) goto done;
- counters[m]++;
- }
- }
-done:
- tmpary_discard(t0);
- tmpbuf_discard(t1);
-
- return NIL_P(result) ? ary : result;
-}
-
-/*
- * call-seq:
- * ary.take(n) -> new_ary
- *
- * Returns first +n+ elements from the array.
- *
- * If a negative number is given, raises an ArgumentError.
- *
- * See also Array#drop
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.take(3) #=> [1, 2, 3]
- *
- */
-
-static VALUE
-rb_ary_take(VALUE obj, VALUE n)
-{
- long len = NUM2LONG(n);
- if (len < 0) {
- rb_raise(rb_eArgError, "attempt to take negative size");
- }
- return rb_ary_subseq(obj, 0, len);
-}
-
-/*
- * call-seq:
- * ary.take_while { |obj| block } -> new_ary
- * ary.take_while -> Enumerator
- *
- * Passes elements to the block until the block returns +nil+ or +false+, then
- * stops iterating and returns an array of all prior elements.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * See also Array#drop_while
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.take_while { |i| i < 3 } #=> [1, 2]
- *
- */
-
-static VALUE
-rb_ary_take_while(VALUE ary)
-{
- long i;
-
- RETURN_ENUMERATOR(ary, 0, 0);
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
- }
- return rb_ary_take(ary, LONG2FIX(i));
-}
-
-/*
- * call-seq:
- * ary.drop(n) -> new_ary
- *
- * Drops first +n+ elements from +ary+ and returns the rest of the elements in
- * an array.
- *
- * If a negative number is given, raises an ArgumentError.
- *
- * See also Array#take
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.drop(3) #=> [4, 5, 0]
- *
- */
-
-static VALUE
-rb_ary_drop(VALUE ary, VALUE n)
-{
- VALUE result;
- long pos = NUM2LONG(n);
- if (pos < 0) {
- rb_raise(rb_eArgError, "attempt to drop negative size");
- }
-
- result = rb_ary_subseq(ary, pos, RARRAY_LEN(ary));
- if (result == Qnil) result = rb_ary_new();
- return result;
-}
-
-/*
- * call-seq:
- * ary.drop_while { |obj| block } -> new_ary
- * ary.drop_while -> Enumerator
- *
- * Drops elements up to, but not including, the first element for which the
- * block returns +nil+ or +false+ and returns an array containing the
- * remaining elements.
- *
- * If no block is given, an Enumerator is returned instead.
- *
- * See also Array#take_while
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0]
- *
- */
-
-static VALUE
-rb_ary_drop_while(VALUE ary)
-{
- long i;
-
- RETURN_ENUMERATOR(ary, 0, 0);
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
- }
- return rb_ary_drop(ary, LONG2FIX(i));
-}
-
-/*
- * call-seq:
- * ary.any? [{ |obj| block }] -> true or false
- *
- * See also Enumerable#any?
- */
-
-static VALUE
-rb_ary_any_p(VALUE ary)
-{
- long i, len = RARRAY_LEN(ary);
- const VALUE *ptr = RARRAY_CONST_PTR(ary);
-
- if (!len) return Qfalse;
- if (!rb_block_given_p()) {
- for (i = 0; i < len; ++i) if (RTEST(ptr[i])) return Qtrue;
- }
- else {
- for (i = 0; i < RARRAY_LEN(ary); ++i) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
- }
- }
- return Qfalse;
-}
-
-/*
- * call-seq:
- * ary.dig(idx, ...) -> object
- *
- * Extracts the nested value specified by the sequence of <i>idx</i>
- * objects by calling +dig+ at each step, returning +nil+ if any
- * intermediate step is +nil+.
- *
- * a = [[1, [2, 3]]]
- *
- * a.dig(0, 1, 1) #=> 3
- * a.dig(1, 2, 3) #=> nil
- * a.dig(0, 0, 0) #=> NoMethodError, undefined method `dig' for 1:Fixnum
- * [42, {foo: :bar}].dig(1, :foo) #=> :bar
- */
-
-VALUE
-rb_ary_dig(int argc, VALUE *argv, VALUE self)
-{
- rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
- self = rb_ary_at(self, *argv);
- if (!--argc) return self;
- ++argv;
- return rb_obj_dig(argc, argv, self, Qnil);
-}
-
-/*
- * Arrays are ordered, integer-indexed collections of any object.
- *
- * Array indexing starts at 0, as in C or Java. A negative index is assumed
- * to be relative to the end of the array---that is, an index of -1 indicates
- * the last element of the array, -2 is the next to last element in the
- * array, and so on.
- *
- * == Creating Arrays
- *
- * A new array can be created by using the literal constructor
- * <code>[]</code>. Arrays can contain different types of objects. For
- * example, the array below contains an Integer, a String and a Float:
- *
- * ary = [1, "two", 3.0] #=> [1, "two", 3.0]
- *
- * An array can also be created by explicitly calling Array.new with zero, one
- * (the initial size of the Array) or two arguments (the initial size and a
- * default object).
- *
- * ary = Array.new #=> []
- * Array.new(3) #=> [nil, nil, nil]
- * Array.new(3, true) #=> [true, true, true]
- *
- * Note that the second argument populates the array with references to the
- * same object. Therefore, it is only recommended in cases when you need to
- * instantiate arrays with natively immutable objects such as Symbols,
- * numbers, true or false.
- *
- * To create an array with separate objects a block can be passed instead.
- * This method is safe to use with mutable objects such as hashes, strings or
- * other arrays:
- *
- * Array.new(4) { Hash.new } #=> [{}, {}, {}, {}]
- *
- * This is also a quick way to build up multi-dimensional arrays:
- *
- * empty_table = Array.new(3) { Array.new(3) }
- * #=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
- *
- * An array can also be created by using the Array() method, provided by
- * Kernel, which tries to call #to_ary, then #to_a on its argument.
- *
- * Array({:a => "a", :b => "b"}) #=> [[:a, "a"], [:b, "b"]]
- *
- * == Example Usage
- *
- * In addition to the methods it mixes in through the Enumerable module, the
- * Array class has proprietary methods for accessing, searching and otherwise
- * manipulating arrays.
- *
- * Some of the more common ones are illustrated below.
- *
- * == Accessing Elements
- *
- * Elements in an array can be retrieved using the Array#[] method. It can
- * take a single integer argument (a numeric index), a pair of arguments
- * (start and length) or a range. Negative indices start counting from the end,
- * with -1 being the last element.
- *
- * arr = [1, 2, 3, 4, 5, 6]
- * arr[2] #=> 3
- * arr[100] #=> nil
- * arr[-3] #=> 4
- * arr[2, 3] #=> [3, 4, 5]
- * arr[1..4] #=> [2, 3, 4, 5]
- * arr[1..-3] #=> [2, 3, 4]
- *
- * Another way to access a particular array element is by using the #at method
- *
- * arr.at(0) #=> 1
- *
- * The #slice method works in an identical manner to Array#[].
- *
- * To raise an error for indices outside of the array bounds or else to
- * provide a default value when that happens, you can use #fetch.
- *
- * arr = ['a', 'b', 'c', 'd', 'e', 'f']
- * arr.fetch(100) #=> IndexError: index 100 outside of array bounds: -6...6
- * arr.fetch(100, "oops") #=> "oops"
- *
- * The special methods #first and #last will return the first and last
- * elements of an array, respectively.
- *
- * arr.first #=> 1
- * arr.last #=> 6
- *
- * To return the first +n+ elements of an array, use #take
- *
- * arr.take(3) #=> [1, 2, 3]
- *
- * #drop does the opposite of #take, by returning the elements after +n+
- * elements have been dropped:
- *
- * arr.drop(3) #=> [4, 5, 6]
- *
- * == Obtaining Information about an Array
- *
- * Arrays keep track of their own length at all times. To query an array
- * about the number of elements it contains, use #length, #count or #size.
- *
- * browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']
- * browsers.length #=> 5
- * browsers.count #=> 5
- *
- * To check whether an array contains any elements at all
- *
- * browsers.empty? #=> false
- *
- * To check whether a particular item is included in the array
- *
- * browsers.include?('Konqueror') #=> false
- *
- * == Adding Items to Arrays
- *
- * Items can be added to the end of an array by using either #push or #<<
- *
- * arr = [1, 2, 3, 4]
- * arr.push(5) #=> [1, 2, 3, 4, 5]
- * arr << 6 #=> [1, 2, 3, 4, 5, 6]
- *
- * #unshift will add a new item to the beginning of an array.
- *
- * arr.unshift(0) #=> [0, 1, 2, 3, 4, 5, 6]
- *
- * With #insert you can add a new element to an array at any position.
- *
- * arr.insert(3, 'apple') #=> [0, 1, 2, 'apple', 3, 4, 5, 6]
- *
- * Using the #insert method, you can also insert multiple values at once:
- *
- * arr.insert(3, 'orange', 'pear', 'grapefruit')
- * #=> [0, 1, 2, "orange", "pear", "grapefruit", "apple", 3, 4, 5, 6]
- *
- * == Removing Items from an Array
- *
- * The method #pop removes the last element in an array and returns it:
- *
- * arr = [1, 2, 3, 4, 5, 6]
- * arr.pop #=> 6
- * arr #=> [1, 2, 3, 4, 5]
- *
- * To retrieve and at the same time remove the first item, use #shift:
- *
- * arr.shift #=> 1
- * arr #=> [2, 3, 4, 5]
- *
- * To delete an element at a particular index:
- *
- * arr.delete_at(2) #=> 4
- * arr #=> [2, 3, 5]
- *
- * To delete a particular element anywhere in an array, use #delete:
- *
- * arr = [1, 2, 2, 3]
- * arr.delete(2) #=> 2
- * arr #=> [1,3]
- *
- * A useful method if you need to remove +nil+ values from an array is
- * #compact:
- *
- * arr = ['foo', 0, nil, 'bar', 7, 'baz', nil]
- * arr.compact #=> ['foo', 0, 'bar', 7, 'baz']
- * arr #=> ['foo', 0, nil, 'bar', 7, 'baz', nil]
- * arr.compact! #=> ['foo', 0, 'bar', 7, 'baz']
- * arr #=> ['foo', 0, 'bar', 7, 'baz']
- *
- * Another common need is to remove duplicate elements from an array.
- *
- * It has the non-destructive #uniq, and destructive method #uniq!
- *
- * arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
- * arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]
- *
- * == Iterating over Arrays
- *
- * Like all classes that include the Enumerable module, Array has an each
- * method, which defines what elements should be iterated over and how. In
- * case of Array's #each, all elements in the Array instance are yielded to
- * the supplied block in sequence.
- *
- * Note that this operation leaves the array unchanged.
- *
- * arr = [1, 2, 3, 4, 5]
- * arr.each { |a| print a -= 10, " " }
- * # prints: -9 -8 -7 -6 -5
- * #=> [1, 2, 3, 4, 5]
- *
- * Another sometimes useful iterator is #reverse_each which will iterate over
- * the elements in the array in reverse order.
- *
- * words = %w[first second third fourth fifth sixth]
- * str = ""
- * words.reverse_each { |word| str += "#{word} " }
- * p str #=> "sixth fifth fourth third second first "
- *
- * The #map method can be used to create a new array based on the original
- * array, but with the values modified by the supplied block:
- *
- * arr.map { |a| 2*a } #=> [2, 4, 6, 8, 10]
- * arr #=> [1, 2, 3, 4, 5]
- * arr.map! { |a| a**2 } #=> [1, 4, 9, 16, 25]
- * arr #=> [1, 4, 9, 16, 25]
- *
- * == Selecting Items from an Array
- *
- * Elements can be selected from an array according to criteria defined in a
- * block. The selection can happen in a destructive or a non-destructive
- * manner. While the destructive operations will modify the array they were
- * called on, the non-destructive methods usually return a new array with the
- * selected elements, but leave the original array unchanged.
- *
- * === Non-destructive Selection
- *
- * arr = [1, 2, 3, 4, 5, 6]
- * arr.select { |a| a > 3 } #=> [4, 5, 6]
- * arr.reject { |a| a < 3 } #=> [3, 4, 5, 6]
- * arr.drop_while { |a| a < 4 } #=> [4, 5, 6]
- * arr #=> [1, 2, 3, 4, 5, 6]
- *
- * === Destructive Selection
- *
- * #select! and #reject! are the corresponding destructive methods to #select
- * and #reject
- *
- * Similar to #select vs. #reject, #delete_if and #keep_if have the exact
- * opposite result when supplied with the same block:
- *
- * arr.delete_if { |a| a < 4 } #=> [4, 5, 6]
- * arr #=> [4, 5, 6]
- *
- * arr = [1, 2, 3, 4, 5, 6]
- * arr.keep_if { |a| a < 4 } #=> [1, 2, 3]
- * arr #=> [1, 2, 3]
- *
+/* Arrays are ordered, integer-indexed collections of any object.
+ * Array indexing starts at 0, as in C or Java. A negative index is
+ * assumed to be relative to the end of the array---that is, an index of -1
+ * indicates the last element of the array, -2 is the next to last
+ * element in the array, and so on.
*/
void
-Init_Array(void)
+Init_Array()
{
-#undef rb_intern
-#define rb_intern(str) rb_intern_const(str)
-
rb_cArray = rb_define_class("Array", rb_cObject);
rb_include_module(rb_cArray, rb_mEnumerable);
- rb_define_alloc_func(rb_cArray, empty_ary_alloc);
+ rb_define_alloc_func(rb_cArray, ary_alloc);
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
- rb_define_singleton_method(rb_cArray, "try_convert", rb_ary_s_try_convert, 1);
rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1);
rb_define_method(rb_cArray, "initialize_copy", rb_ary_replace, 1);
+ rb_define_method(rb_cArray, "to_s", rb_ary_to_s, 0);
rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0);
- rb_define_alias(rb_cArray, "to_s", "inspect");
rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0);
- rb_define_method(rb_cArray, "to_h", rb_ary_to_h, 0);
rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0);
rb_define_method(rb_cArray, "frozen?", rb_ary_frozen_p, 0);
@@ -5829,8 +3055,8 @@ Init_Array(void)
rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);
rb_define_method(rb_cArray, "<<", rb_ary_push, 1);
rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);
- rb_define_method(rb_cArray, "pop", rb_ary_pop_m, -1);
- rb_define_method(rb_cArray, "shift", rb_ary_shift_m, -1);
+ rb_define_method(rb_cArray, "pop", rb_ary_pop, 0);
+ rb_define_method(rb_cArray, "shift", rb_ary_shift, 0);
rb_define_method(rb_cArray, "unshift", rb_ary_unshift_m, -1);
rb_define_method(rb_cArray, "insert", rb_ary_insert, -1);
rb_define_method(rb_cArray, "each", rb_ary_each, 0);
@@ -5839,24 +3065,20 @@ Init_Array(void)
rb_define_method(rb_cArray, "length", rb_ary_length, 0);
rb_define_alias(rb_cArray, "size", "length");
rb_define_method(rb_cArray, "empty?", rb_ary_empty_p, 0);
- rb_define_method(rb_cArray, "find_index", rb_ary_index, -1);
- rb_define_method(rb_cArray, "index", rb_ary_index, -1);
- rb_define_method(rb_cArray, "rindex", rb_ary_rindex, -1);
+ rb_define_method(rb_cArray, "index", rb_ary_index, 1);
+ rb_define_method(rb_cArray, "rindex", rb_ary_rindex, 1);
+ rb_define_method(rb_cArray, "indexes", rb_ary_indexes, -1);
+ rb_define_method(rb_cArray, "indices", rb_ary_indexes, -1);
rb_define_method(rb_cArray, "join", rb_ary_join_m, -1);
rb_define_method(rb_cArray, "reverse", rb_ary_reverse_m, 0);
rb_define_method(rb_cArray, "reverse!", rb_ary_reverse_bang, 0);
- rb_define_method(rb_cArray, "rotate", rb_ary_rotate_m, -1);
- rb_define_method(rb_cArray, "rotate!", rb_ary_rotate_bang, -1);
rb_define_method(rb_cArray, "sort", rb_ary_sort, 0);
rb_define_method(rb_cArray, "sort!", rb_ary_sort_bang, 0);
- rb_define_method(rb_cArray, "sort_by!", rb_ary_sort_by_bang, 0);
rb_define_method(rb_cArray, "collect", rb_ary_collect, 0);
rb_define_method(rb_cArray, "collect!", rb_ary_collect_bang, 0);
rb_define_method(rb_cArray, "map", rb_ary_collect, 0);
rb_define_method(rb_cArray, "map!", rb_ary_collect_bang, 0);
rb_define_method(rb_cArray, "select", rb_ary_select, 0);
- rb_define_method(rb_cArray, "select!", rb_ary_select_bang, 0);
- rb_define_method(rb_cArray, "keep_if", rb_ary_keep_if, 0);
rb_define_method(rb_cArray, "values_at", rb_ary_values_at, -1);
rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);
rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1);
@@ -5888,30 +3110,10 @@ Init_Array(void)
rb_define_method(rb_cArray, "uniq!", rb_ary_uniq_bang, 0);
rb_define_method(rb_cArray, "compact", rb_ary_compact, 0);
rb_define_method(rb_cArray, "compact!", rb_ary_compact_bang, 0);
- rb_define_method(rb_cArray, "flatten", rb_ary_flatten, -1);
- rb_define_method(rb_cArray, "flatten!", rb_ary_flatten_bang, -1);
- rb_define_method(rb_cArray, "count", rb_ary_count, -1);
- rb_define_method(rb_cArray, "shuffle!", rb_ary_shuffle_bang, -1);
- rb_define_method(rb_cArray, "shuffle", rb_ary_shuffle, -1);
- rb_define_method(rb_cArray, "sample", rb_ary_sample, -1);
- rb_define_method(rb_cArray, "cycle", rb_ary_cycle, -1);
- rb_define_method(rb_cArray, "permutation", rb_ary_permutation, -1);
- rb_define_method(rb_cArray, "combination", rb_ary_combination, 1);
- rb_define_method(rb_cArray, "repeated_permutation", rb_ary_repeated_permutation, 1);
- rb_define_method(rb_cArray, "repeated_combination", rb_ary_repeated_combination, 1);
- rb_define_method(rb_cArray, "product", rb_ary_product, -1);
-
- rb_define_method(rb_cArray, "take", rb_ary_take, 1);
- rb_define_method(rb_cArray, "take_while", rb_ary_take_while, 0);
- rb_define_method(rb_cArray, "drop", rb_ary_drop, 1);
- rb_define_method(rb_cArray, "drop_while", rb_ary_drop_while, 0);
- rb_define_method(rb_cArray, "bsearch", rb_ary_bsearch, 0);
- rb_define_method(rb_cArray, "bsearch_index", rb_ary_bsearch_index, 0);
- rb_define_method(rb_cArray, "any?", rb_ary_any_p, 0);
- rb_define_method(rb_cArray, "dig", rb_ary_dig, -1);
+ rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
+ rb_define_method(rb_cArray, "flatten!", rb_ary_flatten_bang, 0);
+ rb_define_method(rb_cArray, "nitems", rb_ary_nitems, 0);
id_cmp = rb_intern("<=>");
- id_random = rb_intern("random");
- id_div = rb_intern("div");
- id_power = rb_intern("**");
+ inspect_key = rb_intern("__inspect_key__");
}
diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub
new file mode 100644
index 0000000000..b5546104d0
--- /dev/null
+++ b/bcc32/Makefile.sub
@@ -0,0 +1,499 @@
+# -*- makefile -*-
+
+SHELL = $(COMSPEC)
+MKFILES = Makefile
+
+#### Start of system configuration section. ####
+OS = bccwin32
+RT = $(OS)
+
+## variables may be overridden by $(compile_dir)/Makefile
+!ifndef srcdir
+srcdir = ..
+!endif
+!ifndef RUBY_INSTALL_NAME
+RUBY_INSTALL_NAME = ruby
+!endif
+!ifndef RUBYW_INSTALL_NAME
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)
+!elif "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)
+!endif
+!if "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w
+!endif
+!ifndef RUBY_SO_NAME
+RUBY_SO_NAME = $(RT)-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)
+!endif
+!ifndef icondirs
+!ifdef ICONDIRS
+icondirs=$(ICONDIRS)
+!endif
+!endif
+!ifdef icondirs
+icondirs=$(icondirs:\=/)
+iconinc=-I$(icondirs: = -I)
+!endif
+###############
+
+VPATH = $(srcdir):$(srcdir)/missing
+.SUFFIXES: .y
+
+!ifndef CC
+CC = bcc32
+!endif
+!ifndef CPP
+CPP = cpp32
+!endif
+!ifndef RC
+RC = brcc32
+!endif
+!ifndef YACC
+YACC = byacc
+!endif
+!ifndef AR
+AR = tlib
+!endif
+
+PURIFY =
+AUTOCONF = autoconf
+RM = $(srcdir:/=\)\win32\rm.bat
+
+!if !defined(PROCESSOR_ARCHITECTURE)
+PROCESSOR_ARCHITECTURE = x86
+!endif
+MACHINE = $(PROCESSOR_ARCHITECTURE)
+!if "$(PROCESSOR_ARCHITECTURE)" == "x86"
+!ifndef PROCESSOR_LEVEL
+PROCESSOR_LEVEL = 5
+!endif
+!if 6 < $(PROCESSOR_LEVEL)
+PROCESSOR_LEVEL = 6
+!endif
+PROCESSOR_FLAG = -$(PROCESSOR_LEVEL)
+CPU = i$(PROCESSOR_LEVEL)86
+ARCH = i386
+!else
+CPU = $(PROCESSOR_ARCHITECTURE)
+ARCH = $(PROCESSOR_ARCHITECTURE)
+!endif
+!ifndef DEBUGFLAGS
+DEBUGFLAGS =
+!endif
+!ifndef OPTFLAGS
+OPTFLAGS = -O
+!endif
+
+!ifndef prefix
+prefix = /usr
+!endif
+!ifndef exec_prefix
+exec_prefix = $(prefix)
+!endif
+!ifndef libdir
+libdir = $(exec_prefix)/lib
+!endif
+!if !defined(datadir)
+datadir = /share
+!endif
+!ifndef EXTOUT
+EXTOUT = .ext
+!endif
+!ifndef RIDATADIR
+RIDATADIR = $(DESTDIR)$(datadir)/ri/$(MAJOR).$(MINOR)/system
+!endif
+!ifndef TESTUI
+TESTUI = console
+!endif
+!ifndef TESTS
+TESTS =
+!endif
+!ifndef RDOCTARGET
+RDOCTARGET = install-nodoc
+!endif
+
+OUTFLAG = -o
+!ifndef CFLAGS
+CFLAGS = -q -tWR -tWC $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi
+!endif
+!ifndef LDFLAGS
+LDFLAGS = -S:$(STACK)
+!endif
+!ifndef RFLAGS
+RFLAGS = $(iconinc)
+!endif
+!ifndef EXTLIBS
+EXTLIBS =
+!endif
+!ifndef MEMLIB
+MEMLIB =
+!endif
+LIBS = $(MEMLIB) cw32i.lib import32.lib ws2_32.lib $(EXTLIBS)
+MISSING = acosh.obj crypt.obj erf.obj win32.obj
+
+!ifndef STACK
+STACK = 0x2000000
+!endif
+
+XCFLAGS = -DRUBY_EXPORT -I. -I$(srcdir) -I$(srcdir)/missing
+
+ARFLAGS = /a
+LD = ilink32 -q -Gn
+LDSHARED = $(LD)
+XLDFLAGS = -Tpe c0x32.obj
+WLDFLAGS = -aa -Tpe c0w32.obj
+DLDFLAGS = -Tpd c0d32.obj
+LIBRUBY_LDSHARED = $(LDSHARED)
+LIBRUBY_DLDFLAGS = -Gi $(DLDFLAGS) $(EXTLDFLAGS)
+LDOBJECTS = $(MAINOBJ)
+
+SOLIBS =
+
+EXEEXT = .exe
+PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
+WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT)
+RUBYDEF = $(RUBY_SO_NAME).def
+MINIRUBY = .\miniruby$(EXEEXT) $(MINIRUBYOPT)
+RUNRUBY = .\ruby$(EXEEXT) "$(srcdir)/runruby.rb" --extout="$(EXTOUT)" --
+
+ORGLIBPATH = $(LIB)
+
+#### End of system configuration section. ####
+
+LIBRUBY_A = $(RUBY_SO_NAME)-static.lib
+LIBRUBY_SO = $(RUBY_SO_NAME).dll
+LIBRUBY = $(RUBY_SO_NAME).lib
+LIBRUBYARG = $(LIBRUBY)
+
+PREP = miniruby$(EXEEXT)
+
+OBJEXT = obj
+
+INSTALLED_LIST= .installed.list
+
+WINMAINOBJ = winmain.$(OBJEXT)
+MINIOBJS = dmydln.$(OBJEXT)
+
+.path.c = .;$(srcdir);$(srcdir)/win32;$(srcdir)/missing
+.path.h = .;$(srcdir);$(srcdir)/win32;$(srcdir)/missing
+.path.y = $(srcdir)
+.path. = $(srcdir)
+
+.c.obj:
+ $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) -c $(<:/=\)
+
+.rc.res:
+ $(RC) $(RFLAGS) -I. -I$(<D). $(iconinc) -I$(srcdir)/win32 $(RFLAGS) -fo$@ $(<:/=\)
+
+.y.c:
+ $(YACC) $(YFLAGS) $(<:\=/)
+ sed -e "s!^ *extern char \*getenv();!/* & */!;s/^\(#.*\)y\.tab/\1parse/" y.tab.c > $(@F)
+ @del y.tab.c
+
+all: $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk
+
+ruby: $(PROGRAM)
+rubyw: $(WPROGRAM)
+
+!include $(srcdir)/common.mk
+
+PHONY: Makefile
+
+CONFIG_H = ./.config.h.time
+
+config: config.status
+
+config.status: $(CONFIG_H)
+
+$(CONFIG_H): $(MKFILES) $(srcdir)/bcc32/Makefile.sub
+ @$(srcdir:/=\)\win32\ifchange.bat config.h &&|
+\#define HAVE_SYS_TYPES_H 1
+\#define HAVE_SYS_STAT_H 1
+\#define HAVE_STDLIB_H 1
+\#define HAVE_STRING_H 1
+\#define HAVE_MEMORY_H 1
+\#define HAVE_OFF_T 1
+\#define SIZEOF_INT 4
+\#define SIZEOF_SHORT 2
+\#define SIZEOF_LONG 4
+\#define SIZEOF_LONG_LONG 0
+\#define SIZEOF___INT64 8
+\#define SIZEOF_OFF_T 4
+\#define SIZEOF_VOIDP 4
+\#define SIZEOF_FLOAT 4
+\#define SIZEOF_DOUBLE 8
+\#define SIZEOF_TIME_T 4
+\#define HAVE_PROTOTYPES 1
+\#define TOKEN_PASTE(x,y) x\#\#y
+\#define HAVE_STDARG_PROTOTYPES 1
+\#define NORETURN(x) x
+\#define RUBY_EXTERN extern __declspec(dllimport)
+\#define HAVE_DECL_SYS_NERR 1
+\#define HAVE_LIMITS_H 1
+\#define HAVE_FCNTL_H 1
+\#define HAVE_UTIME_H 1
+\#define HAVE_FLOAT_H 1
+\#define rb_uid_t uid_t
+\#define rb_gid_t gid_t
+\#define rb_pid_t int
+\#define HAVE_STRUCT_STAT_ST_RDEV 1
+\#define HAVE_ST_RDEV 1
+\#define GETGROUPS_T int
+\#define RETSIGTYPE void
+\#define HAVE_ALLOCA 1
+\#define HAVE_DUP2 1
+\#define HAVE_MEMMOVE 1
+\#define HAVE_MKDIR 1
+\#define HAVE_STRCASECMP 1
+\#define HAVE_STRNCASECMP 1
+\#define HAVE_STRERROR 1
+\#define HAVE_STRFTIME 1
+\#define HAVE_STRCHR 1
+\#define HAVE_STRSTR 1
+\#define HAVE_STRTOD 1
+\#define HAVE_STRTOL 1
+\#define HAVE_STRTOUL 1
+\#define HAVE_ISNAN 1
+\#define HAVE_FINITE 1
+\#define HAVE_HYPOT 1
+\#define HAVE_FMOD 1
+\#define HAVE_WAITPID 1
+\#define HAVE_FSYNC 1
+\#define HAVE_GETCWD 1
+\#define HAVE_CHSIZE 1
+\#define HAVE_TIMES 1
+\#define HAVE_FCNTL 1
+\#define HAVE_LINK 1
+\#define HAVE_TELLDIR 1
+\#define HAVE_SEEKDIR 1
+\#define HAVE_COSH 1
+\#define HAVE_SINH 1
+\#define HAVE_TANH 1
+\#define RSHIFT(x,y) ((x)>>(int)y)
+\#define FILE_COUNT level
+\#define FILE_READPTR curp
+\#define inline __inline
+\#define NEED_IO_SEEK_BETWEEN_RW 1
+\#define STACK_GROW_DIRECTION -1
+\#define DEFAULT_KCODE KCODE_NONE
+\#define DLEXT ".so"
+\#define RUBY_LIB "/lib/ruby/$(MAJOR).$(MINOR)"
+\#define RUBY_SITE_LIB "/lib/ruby/site_ruby"
+\#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)"
+\#define RUBY_PLATFORM "$(ARCH)-$(OS)"
+\#define RUBY_ARCHLIB "/lib/ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"
+\#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"
+|
+ @exit > $@
+
+config.status: $(MKFILES) $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk
+ @echo Creating $@
+ @type > $@ &&|
+# Generated automatically by Makefile.sub.
+s,@SHELL@,$$(COMSPEC),;t t
+s,@BUILD_FILE_SEPARATOR@,\,;t t
+s,@PATH_SEPARATOR@,;,;t t
+s,@CFLAGS@,$(CFLAGS),;t t
+s,@CPPFLAGS@,$(CPPFLAGS),;t t
+s,@CXXFLAGS@,$(CXXFLAGS),;t t
+s,@FFLAGS@,$(FFLAGS),;t t
+s,@LDFLAGS@,,;t t
+s,@LIBS@,$(LIBS),;t t
+s,@exec_prefix@,$${prefix},;t t
+s,@prefix@,,;t t
+s,@program_transform_name@,s,,,,;t t
+s,@bindir@,$${exec_prefix}/bin,;t t
+s,@sbindir@,$${exec_prefix}/sbin,;t t
+s,@libexecdir@,$${exec_prefix}/libexec,;t t
+s,@datadir@,$${prefix}/share,;t t
+s,@sysconfdir@,$${prefix}/etc,;t t
+s,@sharedstatedir@,/etc,;t t
+s,@localstatedir@,/var,;t t
+s,@libdir@,$${exec_prefix}/lib,;t t
+s,@includedir@,$${prefix}/include,;t t
+s,@oldincludedir@,/usr/include,;t t
+s,@infodir@,$${prefix}/info,;t t
+s,@mandir@,$${prefix}/man,;t t
+s,@build@,$(CPU)-pc-$(OS),;t t
+s,@build_alias@,$(CPU)-$(OS),;t t
+s,@build_cpu@,$(CPU),;t t
+s,@build_vendor@,pc,;t t
+s,@build_os@,$(OS),;t t
+s,@host@,$(CPU)-pc-$(OS),;t t
+s,@host_alias@,$(CPU)-$(OS),;t t
+s,@host_cpu@,$(CPU),;t t
+s,@host_vendor@,pc,;t t
+s,@host_os@,$(OS),;t t
+s,@target@,$(ARCH)-pc-$(OS),;t t
+s,@target_alias@,$(ARCH)-$(OS),;t t
+s,@target_cpu@,$(ARCH),;t t
+s,@target_vendor@,pc,;t t
+s,@target_os@,$(OS),;t t
+s,@CC@,$(CC),;t t
+s,@CPP@,cpp32,;t t
+s,@YACC@,$(YACC),;t t
+s,@RANLIB@,,;t t
+s,@AR@,$(AR),;t t
+s,@ARFLAGS@,$(ARFLAGS) ,;t t
+s,@LN_S@,$(LN_S),;t t
+s,@SET_MAKE@,$(SET_MAKE),;t t
+s,@CP@,copy > nul,;t t
+s,@LIBOBJS@, acosh.obj crypt.obj erf.obj win32.obj,;t t
+s,@ALLOCA@,$(ALLOCA),;t t
+s,@DEFAULT_KCODE@,$(DEFAULT_KCODE),;t t
+s,@EXEEXT@,.exe,;t t
+s,@OBJEXT@,obj,;t t
+s,@XCFLAGS@,$(XCFLAGS),;t t
+s,@XLDFLAGS@,$(XLDFLAGS),;t t
+s,@DLDFLAGS@,$(DLDFLAGS),;t t
+s,@ARCH_FLAG@,$(ARCH_FLAG),;t t
+s,@STATIC@,$(STATIC),;t t
+s,@CCDLFLAGS@,,;t t
+s,@LDSHARED@,$(LDSHARED),;t t
+s,@DLEXT@,so,;t t
+s,@LIBEXT@,lib,;t t
+s,@STRIP@,$(STRIP),;t t
+s,@EXTSTATIC@,$(EXTSTATIC),;t t
+s,@setup@,Setup,;t t
+s,@MINIRUBY@,$(MINIRUBY),;t t
+s,@PREP@,miniruby$(EXEEXT),;t t
+s,@RUNRUBY@,$(RUNRUBY),;t t
+s,@EXTOUT@,$(EXTOUT),;t t
+s,@ARCHFILE@,,;t t
+s,@RDOCTARGET@,,;t t
+s,@LIBRUBY_LDSHARED@,$$(LDSHARED),;t t
+s,@LIBRUBY_DLDFLAGS@,-Gi $$(DLDFLAGS),;t t
+s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t
+s,@rubyw_install_name@,$(RUBYW_INSTALL_NAME),;t t
+s,@RUBYW_INSTALL_NAME@,$(RUBYW_INSTALL_NAME),;t t
+s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),;t t
+s,@LIBRUBY_A@,$$(RUBY_SO_NAME)-static.lib,;t t
+s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t
+s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t
+s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t
+s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t
+s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A),;t t
+s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t
+s,@SOLIBS@,$(SOLIBS),;t t
+s,@DLDLIBS@,$(DLDLIBS),;t t
+s,@ENABLE_SHARED@,yes,;t t
+s,@OUTFLAG@,$(OUTFLAG),;t t
+s,@CPPOUTFILE@,,;t t
+s,@LIBPATHFLAG@, -L"%s",;t t
+s,@RPATHFLAG@,,;t t
+s,@LIBARG@,%s.lib,;t t
+s,@LINK_SO@,$$(LDSHARED) $$(DLDFLAGS) $$(LIBPATH) $$(OBJS), $$(@:/=\), nul, $$(LIBS) $$(LOCAL_LIBS), $$(DEFFILE), $$(RESFILE),;t t
+s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) -c $$(<:/=\),;t t
+s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) -P -c $$(<:/=\),;t t
+s,@COMPILE_RULES@,{$$(srcdir)}.%s{}.%s: {$$(topdir)}.%s{}.%s: {$$(hdrdir)}.%s{}.%s: .%s.%s:,;t t
+s,@RULE_SUBST@,{.;$$(VPATH)}%s,;t t
+s,@COMMON_LIBS@,m advapi32 avicap32 avifil32 cap comctl32 comdlg32 dlcapi gdi32 glu32 imagehlp imm32 inetmib1 kernel32 loadperf lsapi32 lz32 mapi32 mgmtapi mpr msacm32 msvfw32 nddeapi netapi32 ole32 oleaut32 oledlg olepro32 opengl32 pdh pkpd32 rasapi32 rasdlg rassapi rpcrt4 setupapi shell32 shfolder snmpapi sporder tapi32 url user32 vdmdbg version win32spl winmm wintrust wsock32,;t t
+s,@COMMON_MACROS@,WIN32_LEAN_AND_MEAN WIN32,;t t
+s,@COMMON_HEADERS@,winsock2.h windows.h,;t t
+s,@TRY_LINK@,$$(CC) -oconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(LIBPATH) $$(LDFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS),;t t
+s,@EXPORT_PREFIX@,_,;t t
+s,@arch@,$(ARCH)-$(OS),;t t
+s,@sitearch@,$(ARCH)-$(OS),;t t
+s,@sitedir@,$${prefix}/lib/ruby/site_ruby,;t t
+s,@configure_args@,--enable-shared $(configure_args),;t t
+s,@configure_input@,$$configure_input,;t t
+s,@srcdir@,$(srcdir),;t t
+s,@top_srcdir@,$(srcdir),;t t
+|
+
+miniruby$(EXEEXT):
+ @echo $(LIBS)
+ $(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(MINIOBJS),$@,nul,$(LIBRUBY_A) $(LIBS)
+
+$(PROGRAM): $(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
+ $(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBY_INSTALL_NAME).res
+
+$(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res
+ $(LD) $(LDFLAGS) $(WLDFLAGS) $(MAINOBJ) $(WINMAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBYW_INSTALL_NAME).res
+
+$(LIBRUBY_A): $(OBJS) $(DMYEXT)
+ @-if exist $@ del $@
+ $(AR) $(ARFLAGS) "$@" $(OBJS) $(DMYEXT)
+
+# $(LIBRUBY): $(LIBRUBY_SO)
+# implib $@ $(LIBRUBY_SO)
+
+$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res
+ @echo $(DLDOBJS)
+ @$(PRE_LIBRUBY_UPDATE)
+ $(LIBRUBY_LDSHARED) $(LIBRUBY_DLDFLAGS) $(DLDOBJS:/=\),$(LIBRUBY_SO),nul,$(LIBRUBY_A) $(LIBS),$(RUBYDEF),$(RUBY_SO_NAME).res
+
+$(LIBRUBY): $(LIBRUBY_SO)
+
+$(RUBYDEF): $(LIBRUBY_A) $(PREP)
+ $(MINIRUBY) $(srcdir)/bcc32/mkexports.rb -output=$@ -base=$(RUBY_SO_NAME) $(LIBRUBY_A)
+
+$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb
+ @$(MINIRUBY) $(srcdir)/win32/resource.rb \
+ -ruby_name=$(RUBY_INSTALL_NAME) \
+ -rubyw_name=$(RUBYW_INSTALL_NAME) \
+ -so_name=$(RUBY_SO_NAME) \
+ . $(icondirs) $(srcdir)/win32
+
+post-install-bin::
+ @$(NULLCMD)
+post-install-lib::
+ @$(NULLCMD)
+post-install-ext-comm::
+ @$(NULLCMD)
+post-install-ext-arch::
+ @$(NULLCMD)
+post-install-man::
+ @$(NULLCMD)
+post-install-doc::
+ @$(NULLCMD)
+
+clean-local::
+ @$(RM) ext\extinit.c ext\extinit.$(OBJEXT) *.tds *.il? $(RUBY_SO_NAME).lib
+ @$(RM) $(RUBY_INSTALL_NAME).res $(RUBYW_INSTALL_NAME).res $(RUBY_SO_NAME).res
+
+distclean-local::
+ @$(RM) ext\config.cache $(RBCONFIG:/=\)
+ @$(RM) *.map *.pdb *.ilk *.exp $(RUBYDEF)
+ @$(RM) $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc
+
+ext/extinit.obj: ext/extinit.c $(SETUP)
+ $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -o$@ -c ext/extinit.c
+
+main.$(OBJEXT): win32.h
+array.$(OBJEXT): win32.h
+bignum.$(OBJEXT): win32.h
+class.$(OBJEXT): win32.h
+compar.$(OBJEXT): win32.h
+dir.$(OBJEXT): dir.h win32.h
+dln.$(OBJEXT): win32.h
+enum.$(OBJEXT): win32.h
+error.$(OBJEXT): win32.h
+eval.$(OBJEXT): win32.h
+file.$(OBJEXT): win32.h
+gc.$(OBJEXT): win32.h
+hash.$(OBJEXT): win32.h
+inits.$(OBJEXT): win32.h
+io.$(OBJEXT): win32.h
+marshal.$(OBJEXT): win32.h
+math.$(OBJEXT): win32.h
+numeric.$(OBJEXT): win32.h
+object.$(OBJEXT): win32.h
+pack.$(OBJEXT): win32.h
+parse.$(OBJEXT): win32.h
+process.$(OBJEXT): win32.h
+prec.$(OBJEXT): win32.h
+random.$(OBJEXT): win32.h
+range.$(OBJEXT): win32.h
+re.$(OBJEXT): win32.h
+regex.$(OBJEXT): win32.h
+ruby.$(OBJEXT): win32.h
+signal.$(OBJEXT): win32.h
+sprintf.$(OBJEXT): win32.h
+st.$(OBJEXT): win32.h
+string.$(OBJEXT): win32.h
+struct.$(OBJEXT): win32.h
+time.$(OBJEXT): win32.h
+util.$(OBJEXT): win32.h
+variable.$(OBJEXT): win32.h
+version.$(OBJEXT): win32.h
diff --git a/bcc32/README.bcc32 b/bcc32/README.bcc32
new file mode 100644
index 0000000000..c27a1261f1
--- /dev/null
+++ b/bcc32/README.bcc32
@@ -0,0 +1,137 @@
+=begin
+
+= How to build ruby using Borland C++
+
+== Requirement
+
+(1) Borland C++ 5.0 or later.
+
+(2) Please set environment variable (({PATH}))
+ to run required commands properly from the command line.
+
+ Note: building ruby requires following commands.
+ * make
+ * bcc32
+ * tlib
+ * ilink32
+
+(3) If you want to build from CVS source, following commands are required.
+ * byacc ((<URL:http://gnuwin32.sourceforge.net/packages/byacc.htm>))
+ * sed ((<URL:http://gnuwin32.sourceforge.net/packages/sed.htm>))
+
+(4) We strongly recommend to build ruby on C++Builder, to link following files.
+ * usebormm.lib
+ * memmgr.lib
+
+ RTL's internal memory manager cannot handle large memory block properly,
+ so we should use borlndmm.dll instead.
+ 10000.times { "" << "." * 529671; GC.start } # crash
+
+== How to compile and install
+
+(1) Execute bcc32\configure.bat on your build directory.
+ ex. c:\ruby-1.6.7>bcc32\configure.bat
+
+(2) Change ((|RUBY_INSTALL_NAME|)) and ((|RUBY_SO_NAME|)) in (({Makefile}))
+ if you want to change the name of the executable files.
+ And add ((|RUBYW_INSTALL_NAME|)) to change the name of the
+ executable without console window if also you want.
+
+(3) Run `((%make%))'
+
+(4) Run `((%make test%))'
+
+(5) Run `((%make DESTDIR=<install_directory> install%))'
+
+ This command will create following directories and install files onto them.
+ * <install_directory>\bin
+ * <install_directory>\lib
+ * <install_directory>\lib\ruby
+ * <install_directory>\lib\ruby\<MAJOR>.<MINOR>
+ * <install_directory>\lib\ruby\<MAJOR>.<MINOR>\<PLATFORM>
+ * <install_directory>\lib\ruby\site_ruby
+ * <install_directory>\lib\ruby\site_ruby\<MAJOR>.<MINOR>
+ * <install_directory>\lib\ruby\site_ruby\<MAJOR>.<MINOR>\<PLATFORM>
+ * <install_directory>\man\man1
+ If Ruby's version is `x.y.z', the ((|<MAJOR>|)) is `x' and the ((|<MINOR>|)) is `y'.
+ The ((|<PLATFORM>|)) is usually `(({i586-bccwin32}))'.
+
+(6) Requires dynamic RTL (cc3250.dll on C++Builder5) and borlndmm.dll (If built with
+ usebormm.lib) to use installed binary. These files are ordinary in bcc32's bin
+ directory.
+
+== Icons
+
+Any icon files(*.ico) in the build directory, directories specified with
+((|icondirs|)) make variable and (({win32})) directory under the ruby
+source directory will be included in DLL or executable files, according
+to their base names.
+ $(RUBY_INSTALL_NAME).ico or ruby.ico --> $(RUBY_INSTALL_NAME).exe
+ $(RUBYW_INSTALL_NAME).ico or rubyw.ico --> $(RUBYW_INSTALL_NAME).exe
+ the others --> $(RUBY_SO_NAME).dll
+
+Although no icons are distributed with the ruby source or in the official
+site, you can use anything you like. For example, followings are written
+in Japanese, but you can download at least.
+
+* ((<URL:http://member.nifty.ne.jp/ueivu/rubyico.html>)) or
+ ((<zipped icons|URL:http://member.nifty.ne.jp/ueivu/Ruby_ico.zip>))
+* ((<URL:http://homepage1.nifty.com/a_nakata/ruby/>)) or
+ ((<icon itself|URL:http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico>))
+
+== Build examples
+
+* Build on the ruby source directory.
+
+ ex.)
+ ruby source directory: C:\ruby
+ build directory: C:\ruby
+ install directory: C:\usr\local
+
+ C:
+ cd \ruby
+ bcc32\configure
+ make
+ make test
+ make DESTDIR=/usr/local install
+
+* Build on the relative directory from the ruby source directory and CPU type
+ i386.
+
+ ex.)
+ ruby source directory: C:\ruby
+ build directory: C:\ruby\bccwin32
+ install directory: C:\usr\local
+ CPU i386
+
+ C:
+ cd \ruby
+ mkdir bccwin32
+ cd bccwin32
+ ..\bcc32\configure target i386-bccwin32
+ make
+ make test
+ make DESTDIR=/usr/local install
+
+* Build on the different drive.
+
+ ex.)
+ ruby source directory: C:\src\ruby
+ build directory: D:\build\ruby
+ install directory: C:\usr\local
+
+ D:
+ cd D:\build\ruby
+ C:\src\ruby\bcc32\configure
+ make
+ make test
+ make DESTDIR=C:/usr/local install
+
+== Bugs
+
+You can ((*NOT*)) use a path name contains any white space characters as
+the ruby source directory, this restriction comes from the behavior of
+(({!INCLUDE})) directives of (({MAKE})).
+((- you may call it a bug. -))
+
+=end
diff --git a/bcc32/configure.bat b/bcc32/configure.bat
new file mode 100755
index 0000000000..143ad947f0
--- /dev/null
+++ b/bcc32/configure.bat
@@ -0,0 +1,92 @@
+@echo off
+::: Don't set environment variable in batch file other than autoexec.bat
+::: to avoid "Out of environment space" problem on Windows 95/98.
+::: set TMPMAKE=~tmp~.mak
+
+echo> ~tmp~.mak ####
+echo>> ~tmp~.mak conf = %0
+echo>> ~tmp~.mak $(conf:\=/): nul
+echo>> ~tmp~.mak @del ~tmp~.mak
+echo>> ~tmp~.mak @-$(MAKE) -l$(MAKEFLAGS) -f $(@D)setup.mak \
+:loop
+if "%1" == "" goto :end
+if "%1" == "--prefix" goto :prefix
+if "%1" == "--srcdir" goto :srcdir
+if "%1" == "srcdir" goto :srcdir
+if "%1" == "--target" goto :target
+if "%1" == "target" goto :target
+if "%1" == "--with-static-linked-ext" goto :extstatic
+if "%1" == "--program-suffix" goto :suffix
+if "%1" == "--program-name" goto :progname
+if "%1" == "--enable-install-doc" goto :enable-rdoc
+if "%1" == "--disable-install-doc" goto :disable-rdoc
+if "%1" == "--extout" goto :extout
+if "%1" == "-h" goto :help
+if "%1" == "--help" goto :help
+ echo>> ~tmp~.mak "%1" \
+ shift
+goto :loop
+:srcdir
+ echo>> ~tmp~.mak -D"srcdir=%2" \
+ shift
+ shift
+goto :loop
+:prefix
+ echo>> ~tmp~.mak -D"prefix=%2" \
+ shift
+ shift
+goto :loop
+:suffix
+ echo>> ~tmp~.mak -D"RUBY_SUFFIX=%2" \
+ shift
+ shift
+goto :loop
+:installname
+ echo>> ~tmp~.mak -D"RUBY_INSTALL_NAME=%2" \
+ shift
+ shift
+goto :loop
+:soname
+ echo>> ~tmp~.mak -D"RUBY_SO_NAME=%2" \
+ shift
+ shift
+goto :loop
+:target
+ echo>> ~tmp~.mak "%2" \
+ shift
+ shift
+goto :loop
+:extstatic
+ echo>> ~tmp~.mak -D"EXTSTATIC=static" \
+ shift
+goto :loop
+:enable-rdoc
+ echo>> ~tmp~.mak -D"RDOCTARGET=install-doc" \
+ shift
+goto :loop
+:disable-rdoc
+ echo>> ~tmp~.mak -D"RDOCTARGET=install-nodoc" \
+ shift
+goto :loop
+:extout
+ echo>> ~tmp~.mak -D"EXTOUT=%2" \
+ shift
+ shift
+goto :loop
+:help
+ echo Configuration:
+ echo --help display this help
+ echo --srcdir=DIR find the sources in DIR [configure dir or `..']
+ echo Installation directories:
+ echo --prefix=PREFIX install files in PREFIX (ignored currently)
+ echo System types:
+ echo --target=TARGET configure for TARGET [i386-bccwin32]
+ echo Optional Package:
+ echo --with-static-linked-ext link external modules statically
+ echo --enable-install-doc install rdoc indexes during install
+ del ~tmp~.mak
+goto :exit
+:end
+echo>> ~tmp~.mak -Dbcc32dir="$(@D)"
+make -s -f ~tmp~.mak
+:exit
diff --git a/bcc32/mkexports.rb b/bcc32/mkexports.rb
new file mode 100755
index 0000000000..dc523e2541
--- /dev/null
+++ b/bcc32/mkexports.rb
@@ -0,0 +1,27 @@
+#!./miniruby -s
+
+$name = $library = $description = nil
+
+SYM = {}
+STDIN.reopen(open("nul"))
+ARGV.each do |obj|
+ IO.foreach("|tdump -q -oiPUBDEF -oiPUBD32 #{obj.tr('/', '\\')}") do |l|
+ next unless /(?:PUBDEF|PUBD32)/ =~ l
+ SYM[$1] = true if /'(.*?)'/ =~ l
+ end
+end
+
+exports = []
+if $name
+ exports << "Name " + $name
+elsif $library
+ exports << "Library " + $library
+end
+exports << "Description " + $description.dump if $description
+exports << "EXPORTS" << SYM.keys.sort
+
+if $output
+ open($output, 'w') {|f| f.puts exports.join("\n")}
+else
+ puts exports.join("\n")
+end
diff --git a/bcc32/setup.mak b/bcc32/setup.mak
new file mode 100644
index 0000000000..b7a2539d0a
--- /dev/null
+++ b/bcc32/setup.mak
@@ -0,0 +1,133 @@
+# -*- makefile -*-
+
+!if "$(srcdir)" != ""
+bcc32dir = $(srcdir)/bcc32
+!elseif "$(bcc32dir)" == "bcc32/"
+srcdir = .
+!elseif "$(bcc32dir:/bcc32/=)/bcc32/" == "$(bcc32dir)"
+srcdir = $(bcc32dir:/bcc32/=)
+!else
+srcdir = $(bcc32dir)/..
+!endif
+!ifndef prefix
+prefix = /usr
+!endif
+OS = bccwin32
+RT = $(OS)
+BANG = !
+APPEND = echo>>$(MAKEFILE)
+!ifdef MAKEFILE
+MAKE = $(MAKE) -f $(MAKEFILE)
+!else
+MAKEFILE = Makefile
+!endif
+
+all: Makefile
+Makefile: -prologue- -generic- -epilogue-
+i386-$(OS): -prologue- -i386- -epilogue-
+i486-$(OS): -prologue- -i486- -epilogue-
+i586-$(OS): -prologue- -i586- -epilogue-
+i686-$(OS): -prologue- -i686- -epilogue-
+alpha-$(OS): -prologue- -alpha- -epilogue-
+
+-prologue-: nul
+ @echo Creating $(MAKEFILE)
+ @type > $(MAKEFILE) &&|
+\#\#\# Makefile for ruby $(OS) \#\#\#
+$(BANG)ifndef srcdir
+srcdir = $(srcdir:\=/)
+$(BANG)endif
+$(BANG)ifndef prefix
+prefix = $(prefix:\=/)
+$(BANG)endif
+$(BANG)ifndef EXTSTATIC
+EXTSTATIC = $(EXTSTATIC)
+$(BANG)endif
+!if defined(RDOCTARGET)
+$(BANG)ifndef RDOCTARGET
+RDOCTARGET = $(RDOCTARGET)
+$(BANG)endif
+!endif
+!if defined(EXTOUT)
+$(BANG)ifndef EXTOUT
+EXTOUT = $(EXTOUT)
+$(BANG)endif
+!endif
+|
+ @type > usebormm.bat &&|
+@echo off
+ilink32 -Gn -x usebormm.lib > nul
+if exist usebormm.tds echo MEMLIB = usebormm.lib
+|
+ @usebormm.bat >> $(MAKEFILE)
+ @del usebormm.*
+
+ @cpp32 -I$(srcdir) -P- -o$(MAKEFILE) > nul &&|
+\#include "version.h"
+MAJOR = RUBY_VERSION_MAJOR
+MINOR = RUBY_VERSION_MINOR
+TEENY = RUBY_VERSION_TEENY
+|
+ @type $(MAKEFILE).i >> $(MAKEFILE)
+ @del $(MAKEFILE).i
+
+-generic-: nul
+!if defined(PROCESSOR_ARCHITECTURE) || defined(PROCESSOR_LEVEL)
+ @type >> $(MAKEFILE) &&|
+!if defined(PROCESSOR_ARCHITECTURE)
+$(BANG)ifndef PROCESSOR_ARCHITECTURE
+PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
+$(BANG)endif
+!endif
+!if defined(PROCESSOR_LEVEL)
+$(BANG)ifndef PROCESSOR_LEVEL
+PROCESSOR_LEVEL = $(PROCESSOR_LEVEL)
+$(BANG)endif
+!endif
+
+|
+!endif
+
+-alpha-: nul
+ @$(APPEND) !ifndef PROCESSOR_ARCHITECTURE
+ @$(APPEND) PROCESSOR_ARCHITECTURE = alpha
+ @$(APPEND) !endif
+-ix86-: nul
+ @$(APPEND) !ifndef PROCESSOR_ARCHITECTURE
+ @$(APPEND) PROCESSOR_ARCHITECTURE = x86
+ @$(APPEND) !endif
+
+-i386-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 3
+ @$(APPEND) !endif
+-i486-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 4
+ @$(APPEND) !endif
+-i586-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 5
+ @$(APPEND) !endif
+-i686-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 6
+ @$(APPEND) !endif
+
+-epilogue-: nul
+ @type >> $(MAKEFILE) &&|
+
+\# OS = $(OS)
+\# RT = $(RT)
+\# RUBY_INSTALL_NAME = ruby
+\# RUBY_SO_NAME = $$(RT)-$$(RUBY_INSTALL_NAME)$$(MAJOR)$$(MINOR)
+\# CFLAGS = -q $$(DEBUGFLAGS) $$(OPTFLAGS) $$(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi
+\# CPPFLAGS = -I. -I$$(srcdir) -I$$(srcdir)/missing -DLIBRUBY_SO=\"$$(LIBRUBY_SO)\"
+\# STACK = 0x2000000
+\# LDFLAGS = -S:$$(STACK)
+\# RFLAGS = $$(iconinc)
+\# EXTLIBS = cw32.lib import32.lib user32.lib kernel32.lib
+$(BANG)include $$(srcdir)/bcc32/Makefile.sub
+|
+ @$(srcdir:/=\)\win32\rm.bat config.h config.status
+ @echo type "`$(MAKE)'" to make ruby for $(OS).
diff --git a/benchmark/bm_app_answer.rb b/benchmark/bm_app_answer.rb
deleted file mode 100644
index 3cd8a8fd37..0000000000
--- a/benchmark/bm_app_answer.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-def ack(m, n)
- if m == 0 then
- n + 1
- elsif n == 0 then
- ack(m - 1, 1)
- else
- ack(m - 1, ack(m, n - 1))
- end
-end
-
-def the_answer_to_life_the_universe_and_everything
- (ack(3,7).to_s.split(//).inject(0){|s,x| s+x.to_i}.to_s + "2" ).to_i
-end
-
-answer = the_answer_to_life_the_universe_and_everything
diff --git a/benchmark/bm_app_aobench.rb b/benchmark/bm_app_aobench.rb
deleted file mode 100644
index 2bd6acfaf8..0000000000
--- a/benchmark/bm_app_aobench.rb
+++ /dev/null
@@ -1,291 +0,0 @@
-# AO render benchmark
-# Original program (C) Syoyo Fujita in Javascript (and other languages)
-# https://code.google.com/p/aobench/
-# Ruby(yarv2llvm) version by Hideki Miura
-#
-
-IMAGE_WIDTH = 256
-IMAGE_HEIGHT = 256
-NSUBSAMPLES = 2
-NAO_SAMPLES = 8
-
-class Vec
- def initialize(x, y, z)
- @x = x
- @y = y
- @z = z
- end
-
- attr_accessor :x, :y, :z
-
- def vadd(b)
- Vec.new(@x + b.x, @y + b.y, @z + b.z)
- end
-
- def vsub(b)
- Vec.new(@x - b.x, @y - b.y, @z - b.z)
- end
-
- def vcross(b)
- Vec.new(@y * b.z - @z * b.y,
- @z * b.x - @x * b.z,
- @x * b.y - @y * b.x)
- end
-
- def vdot(b)
- @x * b.x + @y * b.y + @z * b.z
- end
-
- def vlength
- Math.sqrt(@x * @x + @y * @y + @z * @z)
- end
-
- def vnormalize
- len = vlength
- v = Vec.new(@x, @y, @z)
- if len > 1.0e-17 then
- v.x = v.x / len
- v.y = v.y / len
- v.z = v.z / len
- end
- v
- end
-end
-
-
-class Sphere
- def initialize(center, radius)
- @center = center
- @radius = radius
- end
-
- attr_reader :center, :radius
-
- def intersect(ray, isect)
- rs = ray.org.vsub(@center)
- b = rs.vdot(ray.dir)
- c = rs.vdot(rs) - (@radius * @radius)
- d = b * b - c
- if d > 0.0 then
- t = - b - Math.sqrt(d)
-
- if t > 0.0 and t < isect.t then
- isect.t = t
- isect.hit = true
- isect.pl = Vec.new(ray.org.x + ray.dir.x * t,
- ray.org.y + ray.dir.y * t,
- ray.org.z + ray.dir.z * t)
- n = isect.pl.vsub(@center)
- isect.n = n.vnormalize
- else
- 0.0
- end
- end
- nil
- end
-end
-
-class Plane
- def initialize(p, n)
- @p = p
- @n = n
- end
-
- def intersect(ray, isect)
- d = -@p.vdot(@n)
- v = ray.dir.vdot(@n)
- v0 = v
- if v < 0.0 then
- v0 = -v
- end
- if v0 < 1.0e-17 then
- return
- end
-
- t = -(ray.org.vdot(@n) + d) / v
-
- if t > 0.0 and t < isect.t then
- isect.hit = true
- isect.t = t
- isect.n = @n
- isect.pl = Vec.new(ray.org.x + t * ray.dir.x,
- ray.org.y + t * ray.dir.y,
- ray.org.z + t * ray.dir.z)
- end
- nil
- end
-end
-
-class Ray
- def initialize(org, dir)
- @org = org
- @dir = dir
- end
-
- attr_accessor :org, :dir
-end
-
-class Isect
- def initialize
- @t = 10000000.0
- @hit = false
- @pl = Vec.new(0.0, 0.0, 0.0)
- @n = Vec.new(0.0, 0.0, 0.0)
- end
-
- attr_accessor :t, :hit, :pl, :n
-end
-
-def clamp(f)
- i = f * 255.5
- if i > 255.0 then
- i = 255.0
- end
- if i < 0.0 then
- i = 0.0
- end
- i.to_i
-end
-
-def otherBasis(basis, n)
- basis[2] = Vec.new(n.x, n.y, n.z)
- basis[1] = Vec.new(0.0, 0.0, 0.0)
-
- if n.x < 0.6 and n.x > -0.6 then
- basis[1].x = 1.0
- elsif n.y < 0.6 and n.y > -0.6 then
- basis[1].y = 1.0
- elsif n.z < 0.6 and n.z > -0.6 then
- basis[1].z = 1.0
- else
- basis[1].x = 1.0
- end
-
- basis[0] = basis[1].vcross(basis[2])
- basis[0] = basis[0].vnormalize
-
- basis[1] = basis[2].vcross(basis[0])
- basis[1] = basis[1].vnormalize
-end
-
-class Scene
- def initialize
- @spheres = Array.new
- @spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5)
- @spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5)
- @spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5)
- @plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0))
- end
-
- def ambient_occlusion(isect)
- basis = Array.new
- otherBasis(basis, isect.n)
-
- ntheta = NAO_SAMPLES
- nphi = NAO_SAMPLES
- eps = 0.0001
- occlusion = 0.0
-
- p0 = Vec.new(isect.pl.x + eps * isect.n.x,
- isect.pl.y + eps * isect.n.y,
- isect.pl.z + eps * isect.n.z)
- nphi.times do |j|
- ntheta.times do |i|
- r = rand
- phi = 2.0 * 3.14159265 * rand
- x = Math.cos(phi) * Math.sqrt(1.0 - r)
- y = Math.sin(phi) * Math.sqrt(1.0 - r)
- z = Math.sqrt(r)
-
- rx = x * basis[0].x + y * basis[1].x + z * basis[2].x
- ry = x * basis[0].y + y * basis[1].y + z * basis[2].y
- rz = x * basis[0].z + y * basis[1].z + z * basis[2].z
-
- raydir = Vec.new(rx, ry, rz)
- ray = Ray.new(p0, raydir)
-
- occisect = Isect.new
- @spheres[0].intersect(ray, occisect)
- @spheres[1].intersect(ray, occisect)
- @spheres[2].intersect(ray, occisect)
- @plane.intersect(ray, occisect)
- if occisect.hit then
- occlusion = occlusion + 1.0
- else
- 0.0
- end
- end
- end
-
- occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f)
-
- Vec.new(occlusion, occlusion, occlusion)
- end
-
- def render(w, h, nsubsamples)
- cnt = 0
- nsf = nsubsamples.to_f
- h.times do |y|
- w.times do |x|
- rad = Vec.new(0.0, 0.0, 0.0)
-
- # Subsampling
- nsubsamples.times do |v|
- nsubsamples.times do |u|
-
- cnt = cnt + 1
- wf = w.to_f
- hf = h.to_f
- xf = x.to_f
- yf = y.to_f
- uf = u.to_f
- vf = v.to_f
-
- px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0)
- py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0)
-
- eye = Vec.new(px, py, -1.0).vnormalize
-
- ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye)
-
- isect = Isect.new
- @spheres[0].intersect(ray, isect)
- @spheres[1].intersect(ray, isect)
- @spheres[2].intersect(ray, isect)
- @plane.intersect(ray, isect)
- if isect.hit then
- col = ambient_occlusion(isect)
- rad.x = rad.x + col.x
- rad.y = rad.y + col.y
- rad.z = rad.z + col.z
- end
- end
- end
-
- r = rad.x / (nsf * nsf)
- g = rad.y / (nsf * nsf)
- b = rad.z / (nsf * nsf)
- printf("%c", clamp(r))
- printf("%c", clamp(g))
- printf("%c", clamp(b))
- end
- nil
- end
-
- nil
- end
-end
-
-alias printf_orig printf
-def printf *args
-end
-
-# File.open("ao.ppm", "w") do |fp|
- printf("P6\n")
- printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
- printf("255\n", IMAGE_WIDTH, IMAGE_HEIGHT)
- Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
-# end
-
-undef printf
-alias printf printf_orig
diff --git a/benchmark/bm_app_erb.rb b/benchmark/bm_app_erb.rb
deleted file mode 100644
index 77c66a7949..0000000000
--- a/benchmark/bm_app_erb.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Create many HTML strings with ERB.
-#
-
-require 'erb'
-
-data = DATA.read
-max = 15_000
-title = "hello world!"
-content = "hello world!\n" * 10
-
-max.times{
- ERB.new(data).result(binding)
-}
-
-__END__
-
-<html>
- <head> <%= title %> </head>
- <body>
- <h1> <%= title %> </h1>
- <p>
- <%= content %>
- </p>
- </body>
-</html>
diff --git a/benchmark/bm_app_factorial.rb b/benchmark/bm_app_factorial.rb
deleted file mode 100644
index 45f471dfdb..0000000000
--- a/benchmark/bm_app_factorial.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-def fact(n)
- if(n > 1)
- n * fact(n-1)
- else
- 1
- end
-end
-
-100.times {
- fact(5000)
-}
diff --git a/benchmark/bm_app_fib.rb b/benchmark/bm_app_fib.rb
deleted file mode 100644
index 34a7b2e725..0000000000
--- a/benchmark/bm_app_fib.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def fib n
- if n < 3
- 1
- else
- fib(n-1) + fib(n-2)
- end
-end
-
-fib(34)
-
diff --git a/benchmark/bm_app_lc_fizzbuzz.rb b/benchmark/bm_app_lc_fizzbuzz.rb
deleted file mode 100644
index f09574bbeb..0000000000
--- a/benchmark/bm_app_lc_fizzbuzz.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# FizzBuzz program using only lambda calculus
-#
-# This program is quoted from
-# "Understanding Computation" by Tom Stuart
-# http://computationbook.com/
-#
-# You can understand why this program works fine by reading this book.
-#
-
-solution = -> k { -> f { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][k][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> l { -> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[l][f[x]] } }] } }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[m][n]][-> x { -> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[f[-> n { -> p { -> x { p[n[p][x]] } } }[m]][n]][m][x] }][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]] } } }][-> p { -> x { p[x] } }][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] } }]][-> n { -> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[x]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> n { -> l { -> x { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p { p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][l][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][x]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }] } }[-> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> x { f[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { -> n { -> p { -> x { p[n[p][x]] } } }[f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n]][x] }][-> p { -> x { x } }] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][x] }]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]] } }][n]]]] }]
-
-FIRST = -> l { LEFT[RIGHT[l]] }
-IF = -> b { b }
-LEFT = -> p { p[-> x { -> y { x } } ] }
-RIGHT = -> p { p[-> x { -> y { y } } ] }
-IS_EMPTY = LEFT
-REST = -> l { RIGHT[RIGHT[l]] }
-
-def to_integer(proc)
- proc[-> n { n + 1 }][0]
-end
-
-def to_boolean(proc)
- IF[proc][true][false]
-end
-
-def to_array(proc)
- array = []
-
- until to_boolean(IS_EMPTY[proc])
- array.push(FIRST[proc])
- proc = REST[proc]
- end
-
- array
-end
-
-def to_char(c)
- '0123456789BFiuz'.slice(to_integer(c))
-end
-
-def to_string(s)
- to_array(s).map { |c| to_char(c) }.join
-end
-
-answer = to_array(solution).map do |p|
- to_string(p)
-end
-
-answer_ary = answer.to_a
-# puts answer_ary
diff --git a/benchmark/bm_app_mandelbrot.rb b/benchmark/bm_app_mandelbrot.rb
deleted file mode 100644
index 801b75e8e2..0000000000
--- a/benchmark/bm_app_mandelbrot.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'complex'
-
-def mandelbrot? z
- i = 0
- while i<100
- i += 1
- z = z * z
- return false if z.abs > 2
- end
- true
-end
-
-ary = []
-
-(0..1000).each{|dx|
- (0..1000).each{|dy|
- x = dx / 50.0
- y = dy / 50.0
- c = Complex(x, y)
- ary << c if mandelbrot?(c)
- }
-}
-
diff --git a/benchmark/bm_app_pentomino.rb b/benchmark/bm_app_pentomino.rb
deleted file mode 100644
index 59c63f358e..0000000000
--- a/benchmark/bm_app_pentomino.rb
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/usr/local/bin/ruby
-# This program is contributed by Shin Nishiyama
-
-
-# modified by K.Sasada
-
-NP = 5
-ROW = 8 + NP
-COL = 8
-
-$p = []
-$b = []
-$no = 0
-
-def piece(n, a, nb)
- nb.each{|x|
- a[n] = x
- if n == NP-1
- $p << [a.sort]
- else
- nbc=nb.dup
- [-ROW, -1, 1, ROW].each{|d|
- if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
- nbc << x+d
- end
- }
- nbc.delete x
- piece(n+1,a[0..n],nbc)
- end
- }
-end
-
-def kikaku(a)
- a.collect {|x| x - a[0]}
-end
-def ud(a)
- kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
-end
-def rl(a)
- kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
-end
-def xy(a)
- kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
-end
-
-def mkpieces
- piece(0,[],[0])
- $p.each do |a|
- a0 = a[0]
- a[1] = ud(a0)
- a[2] = rl(a0)
- a[3] = ud(rl(a0))
- a[4] = xy(a0)
- a[5] = ud(xy(a0))
- a[6] = rl(xy(a0))
- a[7] = ud(rl(xy(a0)))
- a.sort!
- a.uniq!
- end
- $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
-end
-
-def mkboard
- (0...ROW*COL).each{|i|
- if i % ROW >= ROW-NP
- $b[i] = -2
- else
- $b[i] = -1
- end
- $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
- }
-end
-
-def pboard
- return # skip print
- print "No. #$no\n"
- (0...COL).each{|i|
- print "|"
- (0...ROW-NP).each{|j|
- x = $b[i*ROW+j]
- if x < 0
- print "..|"
- else
- printf "%2d|",x+1
- end
- }
- print "\n"
- }
- print "\n"
-end
-
-$pnum=[]
-def setpiece(a,pos)
- if a.length == $p.length then
- $no += 1
- pboard
- return
- end
- while $b[pos] != -1
- pos += 1
- end
- ($pnum - a).each do |i|
- $p[i].each do |x|
- f = 0
- x.each{|s|
- if $b[pos+s] != -1
- f=1
- break
- end
- }
- if f == 0 then
- x.each{|s|
- $b[pos+s] = i
- }
- a << i
- setpiece(a.dup, pos)
- a.pop
- x.each{|s|
- $b[pos+s] = -1
- }
- end
- end
- end
-end
-
-mkpieces
-mkboard
-$p[4] = [$p[4][0]]
-$pnum = (0...$p.length).to_a
-setpiece([],0)
-
-
-__END__
-
-# original
-
-NP = 5
-ROW = 8 + NP
-COL = 8
-
-$p = []
-$b = []
-$no = 0
-
-def piece(n,a,nb)
- for x in nb
- a[n] = x
- if n == NP-1
- $p << [a.sort]
- else
- nbc=nb.dup
- for d in [-ROW, -1, 1, ROW]
- if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
- nbc << x+d
- end
- end
- nbc.delete x
- piece(n+1,a[0..n],nbc)
- end
- end
-end
-
-def kikaku(a)
- a.collect {|x| x - a[0]}
-end
-def ud(a)
- kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
-end
-def rl(a)
- kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
-end
-def xy(a)
- kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
-end
-
-def mkpieces
- piece(0,[],[0])
- $p.each do |a|
- a0 = a[0]
- a[1] = ud(a0)
- a[2] = rl(a0)
- a[3] = ud(rl(a0))
- a[4] = xy(a0)
- a[5] = ud(xy(a0))
- a[6] = rl(xy(a0))
- a[7] = ud(rl(xy(a0)))
- a.sort!
- a.uniq!
- end
- $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
-end
-
-def mkboard
- for i in 0...ROW*COL
- if i % ROW >= ROW-NP
- $b[i] = -2
- else
- $b[i] = -1
- end
- $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
- end
-end
-
-def pboard
- print "No. #$no\n"
- for i in 0...COL
- print "|"
- for j in 0...ROW-NP
- x = $b[i*ROW+j]
- if x < 0
- print "..|"
- else
- printf "%2d|",x+1
- end
- end
- print "\n"
- end
- print "\n"
-end
-
-$pnum=[]
-def setpiece(a,pos)
- if a.length == $p.length then
- $no += 1
- pboard
- return
- end
- while $b[pos] != -1
- pos += 1
- end
- ($pnum - a).each do |i|
- $p[i].each do |x|
- f = 0
- for s in x do
- if $b[pos+s] != -1
- f=1
- break
- end
- end
- if f == 0 then
- for s in x do
- $b[pos+s] = i
- end
- a << i
- setpiece(a.dup, pos)
- a.pop
- for s in x do
- $b[pos+s] = -1
- end
- end
- end
- end
-end
-
-mkpieces
-mkboard
-$p[4] = [$p[4][0]]
-$pnum = (0...$p.length).to_a
-setpiece([],0)
diff --git a/benchmark/bm_app_raise.rb b/benchmark/bm_app_raise.rb
deleted file mode 100644
index 5db8f95d50..0000000000
--- a/benchmark/bm_app_raise.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-while i<300000
- i += 1
- begin
- raise
- rescue
- end
-end
diff --git a/benchmark/bm_app_strconcat.rb b/benchmark/bm_app_strconcat.rb
deleted file mode 100644
index 7eed7c1aed..0000000000
--- a/benchmark/bm_app_strconcat.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<2_000_000
- "#{1+1} #{1+1} #{1+1}"
- i += 1
-end
diff --git a/benchmark/bm_app_tak.rb b/benchmark/bm_app_tak.rb
deleted file mode 100644
index efe5380f4e..0000000000
--- a/benchmark/bm_app_tak.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-
-def tak x, y, z
- unless y < x
- z
- else
- tak( tak(x-1, y, z),
- tak(y-1, z, x),
- tak(z-1, x, y))
- end
-end
-
-tak(18, 9, 0)
-
diff --git a/benchmark/bm_app_tarai.rb b/benchmark/bm_app_tarai.rb
deleted file mode 100644
index 4c146f5ccf..0000000000
--- a/benchmark/bm_app_tarai.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def tarai( x, y, z )
- if x <= y
- then y
- else tarai(tarai(x-1, y, z),
- tarai(y-1, z, x),
- tarai(z-1, x, y))
- end
-end
-
-tarai(12, 6, 0)
diff --git a/benchmark/bm_app_uri.rb b/benchmark/bm_app_uri.rb
deleted file mode 100644
index 586edfd5dc..0000000000
--- a/benchmark/bm_app_uri.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'uri'
-
-100_000.times{
- uri = URI.parse('http://www.ruby-lang.org')
- uri.scheme
- uri.host
- uri.port
-}
diff --git a/benchmark/bm_array_shift.rb b/benchmark/bm_array_shift.rb
deleted file mode 100644
index 798bb9e3f4..0000000000
--- a/benchmark/bm_array_shift.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require 'benchmark'
-
-Benchmark.bm do |x|
- [10_000,1_000_000,100_000_000].each do |n|
- ary = Array.new(n,0)
- GC.start
- x.report("#{n}:shift"){ ary.shift }
- (0..4).each do |i|
- ary = Array.new(n,0)
- GC.start
- x.report("#{n}:shift(#{i})"){ ary.shift(i) }
- end
- end
-end
diff --git a/benchmark/bm_hash_aref_dsym.rb b/benchmark/bm_hash_aref_dsym.rb
deleted file mode 100644
index af4f8c36d4..0000000000
--- a/benchmark/bm_hash_aref_dsym.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}
-syms = ('a'..'z').map { |s| s.to_sym }
-syms.each { |s| h[s] = 1 }
-200_000.times { syms.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_dsym_long.rb b/benchmark/bm_hash_aref_dsym_long.rb
deleted file mode 100644
index 9d7759379e..0000000000
--- a/benchmark/bm_hash_aref_dsym_long.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# [ruby-core:70129] [Bug #11396]
-collection_size = 200000
-sample_size = 10000
-
-values = (1..collection_size).to_a.map do |x|
- "THIS IS A LONGER STRING THAT IS ALSO UNIQUE #{x}"
-end
-
-symbol_hash = {}
-
-values.each do |x|
- symbol_hash[x.to_sym] = 1
-end
-
-# use the same samples each time to minimize deviations
-rng = Random.new(0)
-symbol_sample_array = values.sample(sample_size, random: rng).map(&:to_sym)
-
-3000.times do
- symbol_sample_array.each { |x| symbol_hash[x] }
-end
diff --git a/benchmark/bm_hash_aref_fix.rb b/benchmark/bm_hash_aref_fix.rb
deleted file mode 100644
index 1346890582..0000000000
--- a/benchmark/bm_hash_aref_fix.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}
-nums = (1..26).to_a
-nums.each { |i| h[i] = i }
-200_000.times { nums.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_flo.rb b/benchmark/bm_hash_aref_flo.rb
deleted file mode 100644
index 2217274c82..0000000000
--- a/benchmark/bm_hash_aref_flo.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}
-strs = [*1..10000].map! {|i| i.fdiv(10)}
-strs.each { |s| h[s] = s }
-50.times { strs.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_miss.rb b/benchmark/bm_hash_aref_miss.rb
deleted file mode 100644
index b0913dd4bb..0000000000
--- a/benchmark/bm_hash_aref_miss.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-h = {}
-strs = ('a'..'z').to_a.map!(&:freeze)
-strs.each { |s| h[s] = s }
-strs = ('A'..'Z').to_a
-200_000.times { strs.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_str.rb b/benchmark/bm_hash_aref_str.rb
deleted file mode 100644
index 19439b061b..0000000000
--- a/benchmark/bm_hash_aref_str.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}
-strs = ('a'..'z').to_a.map!(&:freeze)
-strs.each { |s| h[s] = s }
-200_000.times { strs.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_sym.rb b/benchmark/bm_hash_aref_sym.rb
deleted file mode 100644
index f75d163fe6..0000000000
--- a/benchmark/bm_hash_aref_sym.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-syms = ('a'..'z').to_a
-begin
- syms = eval("%i[#{syms.join(' ')}]")
-rescue SyntaxError # <= 1.9.3
- syms.map!(&:to_sym)
-end
-syms.each { |s| h[s] = s }
-200_000.times { syms.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_sym_long.rb b/benchmark/bm_hash_aref_sym_long.rb
deleted file mode 100644
index 9dab8df7be..0000000000
--- a/benchmark/bm_hash_aref_sym_long.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-h = {}
-syms = %w[puts warn syswrite write stat bacon lettuce tomato
-some symbols in this array may already be interned others should not be
-hash browns make good breakfast but not cooked using prime numbers
-shift for division entries delete_if keys exist?
-]
-begin
- syms = eval("%i[#{syms.join(' ')}]")
-rescue SyntaxError # <= 1.9.3
- syms.map!(&:to_sym)
-end
-syms.each { |s| h[s] = s }
-200_000.times { syms.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_flatten.rb b/benchmark/bm_hash_flatten.rb
deleted file mode 100644
index e944aae9f2..0000000000
--- a/benchmark/bm_hash_flatten.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-1000.times do
- h.flatten
-end
diff --git a/benchmark/bm_hash_ident_flo.rb b/benchmark/bm_hash_ident_flo.rb
deleted file mode 100644
index 0c7edfed3e..0000000000
--- a/benchmark/bm_hash_ident_flo.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}.compare_by_identity
-strs = (1..10000).to_a.map!(&:to_f)
-strs.each { |s| h[s] = s }
-50.times { strs.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_ident_num.rb b/benchmark/bm_hash_ident_num.rb
deleted file mode 100644
index b226736c6f..0000000000
--- a/benchmark/bm_hash_ident_num.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}.compare_by_identity
-nums = (1..26).to_a
-nums.each { |n| h[n] = n }
-200_000.times { nums.each { |n| h[n] } }
diff --git a/benchmark/bm_hash_ident_obj.rb b/benchmark/bm_hash_ident_obj.rb
deleted file mode 100644
index 4b3b58edec..0000000000
--- a/benchmark/bm_hash_ident_obj.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}.compare_by_identity
-objs = 26.times.map { Object.new }
-objs.each { |o| h[o] = o }
-200_000.times { objs.each { |o| h[o] } }
diff --git a/benchmark/bm_hash_ident_str.rb b/benchmark/bm_hash_ident_str.rb
deleted file mode 100644
index 8582b38e31..0000000000
--- a/benchmark/bm_hash_ident_str.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}.compare_by_identity
-strs = ('a'..'z').to_a
-strs.each { |s| h[s] = s }
-200_000.times { strs.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_ident_sym.rb b/benchmark/bm_hash_ident_sym.rb
deleted file mode 100644
index 4c81e3d28e..0000000000
--- a/benchmark/bm_hash_ident_sym.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-h = {}.compare_by_identity
-syms = ('a'..'z').to_a.map(&:to_sym)
-syms.each { |s| h[s] = s }
-200_000.times { syms.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_keys.rb b/benchmark/bm_hash_keys.rb
deleted file mode 100644
index 6863cd01f9..0000000000
--- a/benchmark/bm_hash_keys.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-5000.times do
- h.keys
-end
diff --git a/benchmark/bm_hash_shift.rb b/benchmark/bm_hash_shift.rb
deleted file mode 100644
index a645671a5b..0000000000
--- a/benchmark/bm_hash_shift.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-50000.times do
- k, v = h.shift
- h[k] = v
-end
diff --git a/benchmark/bm_hash_shift_u16.rb b/benchmark/bm_hash_shift_u16.rb
deleted file mode 100644
index ec800d0342..0000000000
--- a/benchmark/bm_hash_shift_u16.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-h = {}
-
-(16384..65536).each do |i|
- h[i] = nil
-end
-
-300000.times do
- k, v = h.shift
- h[k] = v
-end
diff --git a/benchmark/bm_hash_shift_u24.rb b/benchmark/bm_hash_shift_u24.rb
deleted file mode 100644
index de4e0fa696..0000000000
--- a/benchmark/bm_hash_shift_u24.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-h = {}
-
-(0xff4000..0xffffff).each do |i|
- h[i] = nil
-end
-
-300000.times do
- k, v = h.shift
- h[k] = v
-end
diff --git a/benchmark/bm_hash_shift_u32.rb b/benchmark/bm_hash_shift_u32.rb
deleted file mode 100644
index 656aa55583..0000000000
--- a/benchmark/bm_hash_shift_u32.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-h = {}
-
-(0xffff4000..0xffffffff).each do |i|
- h[i] = nil
-end
-
-300000.times do
- k, v = h.shift
- h[k] = v
-end
diff --git a/benchmark/bm_hash_to_proc.rb b/benchmark/bm_hash_to_proc.rb
deleted file mode 100644
index 2b675bf509..0000000000
--- a/benchmark/bm_hash_to_proc.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-5000.times do |i|
- [i].map(&h)
-end
diff --git a/benchmark/bm_hash_values.rb b/benchmark/bm_hash_values.rb
deleted file mode 100644
index 069441302f..0000000000
--- a/benchmark/bm_hash_values.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-5000.times do
- h.values
-end
diff --git a/benchmark/bm_io_file_create.rb b/benchmark/bm_io_file_create.rb
deleted file mode 100644
index 2f205c1333..0000000000
--- a/benchmark/bm_io_file_create.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# Create files
-#
-
-max = 200_000
-file = './tmpfile_of_bm_io_file_create'
-
-max.times{
- f = open(file, 'w')
- f.close#(true)
-}
-File.unlink(file)
-
diff --git a/benchmark/bm_io_file_read.rb b/benchmark/bm_io_file_read.rb
deleted file mode 100644
index b9e796ed30..0000000000
--- a/benchmark/bm_io_file_read.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Seek and Read file.
-#
-
-require 'tempfile'
-
-max = 200_000
-str = "Hello world! " * 1000
-f = Tempfile.new('yarv-benchmark')
-f.write str
-
-max.times{
- f.seek 0
- f.read
-}
diff --git a/benchmark/bm_io_file_write.rb b/benchmark/bm_io_file_write.rb
deleted file mode 100644
index aa1be0e5fe..0000000000
--- a/benchmark/bm_io_file_write.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Seek and Write file.
-#
-
-require 'tempfile'
-
-max = 200_000
-str = "Hello world! " * 1000
-f = Tempfile.new('yarv-benchmark')
-
-max.times{
- f.seek 0
- f.write str
-}
diff --git a/benchmark/bm_io_nonblock_noex.rb b/benchmark/bm_io_nonblock_noex.rb
deleted file mode 100644
index da9357fdc6..0000000000
--- a/benchmark/bm_io_nonblock_noex.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-nr = 1_000_000
-i = 0
-msg = '.'
-buf = '.'
-noex = { exception: false }
-begin
- r, w = IO.pipe
- while i < nr
- i += 1
- w.write_nonblock(msg, noex)
- r.read_nonblock(1, buf, noex)
- end
-rescue ArgumentError # old Rubies
- while i < nr
- i += 1
- w.write_nonblock(msg)
- r.read_nonblock(1, buf)
- end
-ensure
- r.close
- w.close
-end
diff --git a/benchmark/bm_io_nonblock_noex2.rb b/benchmark/bm_io_nonblock_noex2.rb
deleted file mode 100644
index 56819d049b..0000000000
--- a/benchmark/bm_io_nonblock_noex2.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-nr = 1_000_000
-i = 0
-msg = '.'
-buf = '.'
-begin
- r, w = IO.pipe
- while i < nr
- i += 1
- w.write_nonblock(msg, exception: false)
- r.read_nonblock(1, buf, exception: false)
- end
-rescue ArgumentError # old Rubies
- while i < nr
- i += 1
- w.write_nonblock(msg)
- r.read_nonblock(1, buf)
- end
-ensure
- r.close
- w.close
-end
diff --git a/benchmark/bm_io_select.rb b/benchmark/bm_io_select.rb
deleted file mode 100644
index 19248daeb1..0000000000
--- a/benchmark/bm_io_select.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# IO.select performance
-
-w = [ IO.pipe[1] ];
-
-nr = 1000000
-nr.times {
- IO.select nil, w
-}
-
diff --git a/benchmark/bm_io_select2.rb b/benchmark/bm_io_select2.rb
deleted file mode 100644
index 10e37d71b2..0000000000
--- a/benchmark/bm_io_select2.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# IO.select performance. worst case of single fd.
-
-ios = []
-nr = 1000000
-if defined?(Process::RLIMIT_NOFILE)
- max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
-else
- max = 64
-end
-puts "max fd: #{max} (results not apparent with <= 1024 max fd)"
-
-((max / 2) - 10).times do
- ios.concat IO.pipe
-end
-
-last = [ ios[-1] ]
-puts "last IO: #{last[0].inspect}"
-
-nr.times do
- IO.select nil, last
-end
-
diff --git a/benchmark/bm_io_select3.rb b/benchmark/bm_io_select3.rb
deleted file mode 100644
index 7d0ba1f092..0000000000
--- a/benchmark/bm_io_select3.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# IO.select performance. a lot of fd
-
-ios = []
-nr = 100
-if defined?(Process::RLIMIT_NOFILE)
- max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
-else
- max = 64
-end
-puts "max fd: #{max} (results not apparent with <= 1024 max fd)"
-
-(max - 10).times do
- r, w = IO.pipe
- r.close
- ios.push w
-end
-
-nr.times do
- IO.select nil, ios
-end
-
diff --git a/benchmark/bm_loop_for.rb b/benchmark/bm_loop_for.rb
deleted file mode 100644
index 0fc4cc1511..0000000000
--- a/benchmark/bm_loop_for.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-for i in 1..30_000_000
- #
-end
diff --git a/benchmark/bm_loop_generator.rb b/benchmark/bm_loop_generator.rb
deleted file mode 100644
index d3375c744c..0000000000
--- a/benchmark/bm_loop_generator.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-max = 600000
-
-if defined? Fiber
- gen = (1..max).each
- loop do
- gen.next
- end
-else
- require 'generator'
- gen = Generator.new((0..max))
- while gen.next?
- gen.next
- end
-end
diff --git a/benchmark/bm_loop_times.rb b/benchmark/bm_loop_times.rb
deleted file mode 100644
index 521f72ad1a..0000000000
--- a/benchmark/bm_loop_times.rb
+++ /dev/null
@@ -1 +0,0 @@
-30_000_000.times{|e|}
diff --git a/benchmark/bm_loop_whileloop.rb b/benchmark/bm_loop_whileloop.rb
deleted file mode 100644
index 0072822c06..0000000000
--- a/benchmark/bm_loop_whileloop.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-i = 0
-while i<30_000_000 # benchmark loop 1
- i += 1
-end
diff --git a/benchmark/bm_loop_whileloop2.rb b/benchmark/bm_loop_whileloop2.rb
deleted file mode 100644
index 47d02dffc4..0000000000
--- a/benchmark/bm_loop_whileloop2.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-i = 0
-while i< 6_000_000 # benchmark loop 2
- i += 1
-end
diff --git a/benchmark/bm_marshal_dump_flo.rb b/benchmark/bm_marshal_dump_flo.rb
deleted file mode 100644
index 9b8d0c6afb..0000000000
--- a/benchmark/bm_marshal_dump_flo.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-bug10761 = 10000.times.map { |x| x.to_f }
-100.times { Marshal.dump(bug10761) }
diff --git a/benchmark/bm_marshal_dump_load_geniv.rb b/benchmark/bm_marshal_dump_load_geniv.rb
deleted file mode 100644
index 8252ad90fa..0000000000
--- a/benchmark/bm_marshal_dump_load_geniv.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-a = ''
-a.instance_eval do
- @a = :a
- @b = :b
- @c = :c
-end
-100000.times do
- a = Marshal.load(Marshal.dump(a))
-end
-#p(a.instance_eval { @a == :a && @b == :b && @c == :c })
diff --git a/benchmark/bm_marshal_dump_load_time.rb b/benchmark/bm_marshal_dump_load_time.rb
deleted file mode 100644
index e29743b791..0000000000
--- a/benchmark/bm_marshal_dump_load_time.rb
+++ /dev/null
@@ -1 +0,0 @@
-100000.times { Marshal.load(Marshal.dump(Time.now)) }
diff --git a/benchmark/bm_require.rb b/benchmark/bm_require.rb
deleted file mode 100644
index b8abc88f41..0000000000
--- a/benchmark/bm_require.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), "bm_require.data")
-
-1.upto(10000) do |i|
- require "c#{i}"
-end
-
-$:.pop
diff --git a/benchmark/bm_require_thread.rb b/benchmark/bm_require_thread.rb
deleted file mode 100644
index e54db6c6e5..0000000000
--- a/benchmark/bm_require_thread.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), "bm_require.data")
-
-i=0
-t = Thread.new do
- while true
- i = i+1 # dummy loop
- end
-end
-
-1.upto(100) do |i|
- require "c#{i}"
-end
-
-$:.pop
-t.kill
diff --git a/benchmark/bm_securerandom.rb b/benchmark/bm_securerandom.rb
deleted file mode 100644
index a082ea6d5b..0000000000
--- a/benchmark/bm_securerandom.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require "securerandom"
-
-20_0000.times do
- SecureRandom.random_number(100)
-end
diff --git a/benchmark/bm_so_ackermann.rb b/benchmark/bm_so_ackermann.rb
deleted file mode 100644
index 7db5be9050..0000000000
--- a/benchmark/bm_so_ackermann.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: ackermann-ruby.code,v 1.4 2004/11/13 07:40:41 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-def ack(m, n)
- if m == 0 then
- n + 1
- elsif n == 0 then
- ack(m - 1, 1)
- else
- ack(m - 1, ack(m, n - 1))
- end
-end
-
-NUM = 9
-ack(3, NUM)
-
-
diff --git a/benchmark/bm_so_array.rb b/benchmark/bm_so_array.rb
deleted file mode 100644
index 2b8fce8f99..0000000000
--- a/benchmark/bm_so_array.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: ary-ruby.code,v 1.4 2004/11/13 07:41:27 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Paul Brannan and Mark Hubbart
-
-n = 9000 # Integer(ARGV.shift || 1)
-
-x = Array.new(n)
-y = Array.new(n, 0)
-
-n.times{|bi|
- x[bi] = bi + 1
-}
-
-(0 .. 999).each do |e|
- (n-1).step(0,-1) do |bi|
- y[bi] += x.at(bi)
- end
-end
-# puts "#{y.first} #{y.last}"
-
-
diff --git a/benchmark/bm_so_binary_trees.rb b/benchmark/bm_so_binary_trees.rb
deleted file mode 100644
index b1693e4109..0000000000
--- a/benchmark/bm_so_binary_trees.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-# The Computer Language Shootout Benchmarks
-# http://shootout.alioth.debian.org
-#
-# contributed by Jesse Millikan
-
-# disable output
-alias puts_orig puts
-def puts str
- # disable puts
-end
-
-def item_check(tree)
- if tree[0] == nil
- tree[1]
- else
- tree[1] + item_check(tree[0]) - item_check(tree[2])
- end
-end
-
-def bottom_up_tree(item, depth)
- if depth > 0
- item_item = 2 * item
- depth -= 1
- [bottom_up_tree(item_item - 1, depth), item, bottom_up_tree(item_item, depth)]
- else
- [nil, item, nil]
- end
-end
-
-max_depth = 16 # ARGV[0].to_i
-min_depth = 4
-
-max_depth = min_depth + 2 if min_depth + 2 > max_depth
-
-stretch_depth = max_depth + 1
-stretch_tree = bottom_up_tree(0, stretch_depth)
-
-puts "stretch tree of depth #{stretch_depth}\t check: #{item_check(stretch_tree)}"
-stretch_tree = nil
-
-long_lived_tree = bottom_up_tree(0, max_depth)
-
-min_depth.step(max_depth + 1, 2) do |depth|
- iterations = 2**(max_depth - depth + min_depth)
-
- check = 0
-
- for i in 1..iterations
- temp_tree = bottom_up_tree(i, depth)
- check += item_check(temp_tree)
-
- temp_tree = bottom_up_tree(-i, depth)
- check += item_check(temp_tree)
- end
-
- puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}"
-end
-
-puts "long lived tree of depth #{max_depth}\t check: #{item_check(long_lived_tree)}"
-
-undef puts
-alias puts puts_orig
diff --git a/benchmark/bm_so_concatenate.rb b/benchmark/bm_so_concatenate.rb
deleted file mode 100644
index 873214de7c..0000000000
--- a/benchmark/bm_so_concatenate.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: strcat-ruby.code,v 1.4 2004/11/13 07:43:28 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# based on code from Aristarkh A Zagorodnikov and Dat Nguyen
-
-STUFF = "hello\n"
-i = 0
-while i<10
- i += 1
- hello = ''
- 4_000_000.times do |e|
- hello << STUFF
- end
-end
-# puts hello.length
-
-
diff --git a/benchmark/bm_so_count_words.rb b/benchmark/bm_so_count_words.rb
deleted file mode 100644
index 65f6337a4a..0000000000
--- a/benchmark/bm_so_count_words.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: wc-ruby.code,v 1.4 2004/11/13 07:43:32 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Paul Brannan
-
-input = open(File.join(File.dirname($0), 'wc.input'), 'rb')
-
-nl = nw = nc = 0
-while true
- tmp = input.read(4096) or break
- data = tmp << (input.gets || "")
- nc += data.length
- nl += data.count("\n")
- ((data.strip! || data).tr!("\n", " ") || data).squeeze!
- nw += data.count(" ") + 1
-end
-# STDERR.puts "#{nl} #{nw} #{nc}"
-
diff --git a/benchmark/bm_so_exception.rb b/benchmark/bm_so_exception.rb
deleted file mode 100644
index deb003a594..0000000000
--- a/benchmark/bm_so_exception.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-$HI = 0
-$LO = 0
-NUM = 250000 # Integer(ARGV[0] || 1)
-
-
-class Lo_Exception < Exception
- def initialize(num)
- @value = num
- end
-end
-
-class Hi_Exception < Exception
- def initialize(num)
- @value = num
- end
-end
-
-def some_function(num)
- begin
- hi_function(num)
- rescue
- print "We shouldn't get here, exception is: #{$!.type}\n"
- end
-end
-
-def hi_function(num)
- begin
- lo_function(num)
- rescue Hi_Exception
- $HI = $HI + 1
- end
-end
-
-def lo_function(num)
- begin
- blowup(num)
- rescue Lo_Exception
- $LO = $LO + 1
- end
-end
-
-def blowup(num)
- if num % 2 == 0
- raise Lo_Exception.new(num)
- else
- raise Hi_Exception.new(num)
- end
-end
-
-
-i = 1
-max = NUM+1
-while i < max
- i += 1
- some_function(i+1)
-end
diff --git a/benchmark/bm_so_fannkuch.rb b/benchmark/bm_so_fannkuch.rb
deleted file mode 100644
index bac5ecd44c..0000000000
--- a/benchmark/bm_so_fannkuch.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org/
-# Contributed by Sokolov Yura
-# Modified by Ryan Williams
-
-def fannkuch(n)
- maxFlips, m, r, check = 0, n-1, n, 0
- count = (1..n).to_a
- perm = (1..n).to_a
-
- while true
- if check < 30
- puts "#{perm}"
- check += 1
- end
-
- while r != 1
- count[r-1] = r
- r -= 1
- end
-
- if perm[0] != 1 and perm[m] != n
- perml = perm.clone #.dup
- flips = 0
- while (k = perml.first ) != 1
- perml = perml.slice!(0, k).reverse + perml
- flips += 1
- end
- maxFlips = flips if flips > maxFlips
- end
- while true
- if r==n then return maxFlips end
- perm.insert r,perm.shift
- break if (count[r] -= 1) > 0
- r += 1
- end
- end
-end
-
-def puts *args
-end
-
-N = 9 # (ARGV[0] || 1).to_i
-puts "Pfannkuchen(#{N}) = #{fannkuch(N)}"
-
diff --git a/benchmark/bm_so_fasta.rb b/benchmark/bm_so_fasta.rb
deleted file mode 100644
index 3f759ba7ae..0000000000
--- a/benchmark/bm_so_fasta.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org/
-# Contributed by Sokolov Yura
-
-$last = 42.0
-def gen_random (max,im=139968,ia=3877,ic=29573)
- (max * ($last = ($last * ia + ic) % im)) / im
-end
-
-alu =
- "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
- "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
- "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
- "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
- "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
- "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
- "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
-
-iub = [
- ["a", 0.27],
- ["c", 0.12],
- ["g", 0.12],
- ["t", 0.27],
-
- ["B", 0.02],
- ["D", 0.02],
- ["H", 0.02],
- ["K", 0.02],
- ["M", 0.02],
- ["N", 0.02],
- ["R", 0.02],
- ["S", 0.02],
- ["V", 0.02],
- ["W", 0.02],
- ["Y", 0.02],
-]
-homosapiens = [
- ["a", 0.3029549426680],
- ["c", 0.1979883004921],
- ["g", 0.1975473066391],
- ["t", 0.3015094502008],
-]
-
-def make_repeat_fasta(id, desc, src, n)
- puts ">#{id} #{desc}"
- v = nil
- width = 60
- l = src.length
- s = src * ((n / l) + 1)
- s.slice!(n, l)
- puts(s.scan(/.{1,#{width}}/).join("\n"))
-end
-
-def make_random_fasta(id, desc, table, n)
- puts ">#{id} #{desc}"
- rand, v = nil,nil
- width = 60
- chunk = 1 * width
- prob = 0.0
- table.each{|v| v[1]= (prob += v[1])}
- for i in 1..(n/width)
- puts((1..width).collect{
- rand = gen_random(1.0)
- table.find{|v| v[1]>rand}[0]
- }.join)
- end
- if n%width != 0
- puts((1..(n%width)).collect{
- rand = gen_random(1.0)
- table.find{|v| v[1]>rand}[0]
- }.join)
- end
-end
-
-
-n = (ARGV[0] or 250_000).to_i
-
-make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
-make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
-make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
-
diff --git a/benchmark/bm_so_k_nucleotide.rb b/benchmark/bm_so_k_nucleotide.rb
deleted file mode 100644
index dadab3e79c..0000000000
--- a/benchmark/bm_so_k_nucleotide.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-#
-# contributed by jose fco. gonzalez
-# modified by Sokolov Yura
-
-seq = String.new
-
-def frecuency( seq,length )
- n, table = seq.length - length + 1, Hash.new(0)
- f, i = nil, nil
- (0 ... length).each do |f|
- (f ... n).step(length) do |i|
- table[seq[i,length]] += 1
- end
- end
- [n,table]
-
-end
-
-def sort_by_freq( seq,length )
- n,table = frecuency( seq,length )
- a, b, v = nil, nil, nil
- table.sort{|a,b| b[1] <=> a[1]}.each do |v|
- puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)]
- end
- puts
-end
-
-def find_seq( seq,s )
- n,table = frecuency( seq,s.length )
- puts "#{table[s].to_s}\t#{s.upcase}"
-end
-
-input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb')
-
-line = input.gets while line !~ /^>THREE/
-line = input.gets
-
-while (line !~ /^>/) & line do
- seq << line.chomp
- line = input.gets
-end
-
-[1,2].each {|i| sort_by_freq( seq,i ) }
-
-%w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) }
-
diff --git a/benchmark/bm_so_lists.rb b/benchmark/bm_so_lists.rb
deleted file mode 100644
index e8f4a2a5f7..0000000000
--- a/benchmark/bm_so_lists.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-#from http://www.bagley.org/~doug/shootout/bench/lists/lists.ruby
-
-NUM = 300
-SIZE = 10000
-
-def test_lists()
- # create a list of integers (Li1) from 1 to SIZE
- li1 = (1..SIZE).to_a
- # copy the list to li2 (not by individual items)
- li2 = li1.dup
- # remove each individual item from left side of li2 and
- # append to right side of li3 (preserving order)
- li3 = Array.new
- while (not li2.empty?)
- li3.push(li2.shift)
- end
- # li2 must now be empty
- # remove each individual item from right side of li3 and
- # append to right side of li2 (reversing list)
- while (not li3.empty?)
- li2.push(li3.pop)
- end
- # li3 must now be empty
- # reverse li1 in place
- li1.reverse!
- # check that first item is now SIZE
- if li1[0] != SIZE then
- p "not SIZE"
- 0
- else
- # compare li1 and li2 for equality
- if li1 != li2 then
- return(0)
- else
- # return the length of the list
- li1.length
- end
- end
-end
-
-i = 0
-while i<NUM
- i += 1
- result = test_lists()
-end
-
-result
diff --git a/benchmark/bm_so_mandelbrot.rb b/benchmark/bm_so_mandelbrot.rb
deleted file mode 100644
index 76331c64b8..0000000000
--- a/benchmark/bm_so_mandelbrot.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# The Computer Language Benchmarks Game
-# http://shootout.alioth.debian.org/
-#
-# contributed by Karl von Laudermann
-# modified by Jeremy Echols
-
-size = 600 # ARGV[0].to_i
-
-puts "P4\n#{size} #{size}"
-
-ITER = 49 # Iterations - 1 for easy for..in looping
-LIMIT_SQUARED = 4.0 # Presquared limit
-
-byte_acc = 0
-bit_num = 0
-
-count_size = size - 1 # Precomputed size for easy for..in looping
-
-# For..in loops are faster than .upto, .downto, .times, etc.
-for y in 0..count_size
- for x in 0..count_size
- zr = 0.0
- zi = 0.0
- cr = (2.0*x/size)-1.5
- ci = (2.0*y/size)-1.0
- escape = false
-
- # To make use of the for..in code, we use a dummy variable,
- # like one would in C
- for dummy in 0..ITER
- tr = zr*zr - zi*zi + cr
- ti = 2*zr*zi + ci
- zr, zi = tr, ti
-
- if (zr*zr+zi*zi) > LIMIT_SQUARED
- escape = true
- break
- end
- end
-
- byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1)
- bit_num += 1
-
- # Code is very similar for these cases, but using separate blocks
- # ensures we skip the shifting when it's unnecessary, which is most cases.
- if (bit_num == 8)
- print byte_acc.chr
- byte_acc = 0
- bit_num = 0
- elsif (x == count_size)
- byte_acc <<= (8 - bit_num)
- print byte_acc.chr
- byte_acc = 0
- bit_num = 0
- end
- end
-end
diff --git a/benchmark/bm_so_matrix.rb b/benchmark/bm_so_matrix.rb
deleted file mode 100644
index e2c5c8e559..0000000000
--- a/benchmark/bm_so_matrix.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: matrix-ruby.code,v 1.4 2004/11/13 07:42:14 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-n = 60 #Integer(ARGV.shift || 1)
-
-size = 40
-
-def mkmatrix(rows, cols)
- count = 1
- mx = Array.new(rows)
- (0 .. (rows - 1)).each do |bi|
- row = Array.new(cols, 0)
- (0 .. (cols - 1)).each do |j|
- row[j] = count
- count += 1
- end
- mx[bi] = row
- end
- mx
-end
-
-def mmult(rows, cols, m1, m2)
- m3 = Array.new(rows)
- (0 .. (rows - 1)).each do |bi|
- row = Array.new(cols, 0)
- (0 .. (cols - 1)).each do |j|
- val = 0
- (0 .. (cols - 1)).each do |k|
- val += m1.at(bi).at(k) * m2.at(k).at(j)
- end
- row[j] = val
- end
- m3[bi] = row
- end
- m3
-end
-
-m1 = mkmatrix(size, size)
-m2 = mkmatrix(size, size)
-mm = Array.new
-n.times do
- mm = mmult(size, size, m1, m2)
-end
-# puts "#{mm[0][0]} #{mm[2][3]} #{mm[3][2]} #{mm[4][4]}"
-
-
diff --git a/benchmark/bm_so_meteor_contest.rb b/benchmark/bm_so_meteor_contest.rb
deleted file mode 100644
index 17e9c046a8..0000000000
--- a/benchmark/bm_so_meteor_contest.rb
+++ /dev/null
@@ -1,564 +0,0 @@
-#!/usr/bin/env ruby
-#
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-# contributed by Kevin Barnes (Ruby novice)
-
-# PROGRAM: the main body is at the bottom.
-# 1) read about the problem here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
-# 2) see how I represent a board as a bitmask by reading the blank_board comments
-# 3) read as your mental paths take you
-
-def print *args
-end
-
-# class to represent all information about a particular rotation of a particular piece
-class Rotation
- # an array (by location) containing a bit mask for how the piece maps at the given location.
- # if the rotation is invalid at that location the mask will contain false
- attr_reader :start_masks
-
- # maps a direction to a relative location. these differ depending on whether it is an even or
- # odd row being mapped from
- @@rotation_even_adder = { :west => -1, :east => 1, :nw => -7, :ne => -6, :sw => 5, :se => 6 }
- @@rotation_odd_adder = { :west => -1, :east => 1, :nw => -6, :ne => -5, :sw => 6, :se => 7 }
-
- def initialize( directions )
- @even_offsets, @odd_offsets = normalize_offsets( get_values( directions ))
-
- @even_mask = mask_for_offsets( @even_offsets)
- @odd_mask = mask_for_offsets( @odd_offsets)
-
- @start_masks = Array.new(60)
-
- # create the rotational masks by placing the base mask at the location and seeing if
- # 1) it overlaps the boundaries and 2) it produces a prunable board. if either of these
- # is true the piece cannot be placed
- 0.upto(59) do | offset |
- mask = is_even(offset) ? (@even_mask << offset) : (@odd_mask << offset)
- if (blank_board & mask == 0 && !prunable(blank_board | mask, 0, true)) then
- imask = compute_required( mask, offset)
- @start_masks[offset] = [ mask, imask, imask | mask ]
- else
- @start_masks[offset] = false
- end
- end
- end
-
- def compute_required( mask, offset )
- board = blank_board
- 0.upto(offset) { | i | board |= 1 << i }
- board |= mask
- return 0 if (!prunable(board | mask, offset))
- board = flood_fill(board,58)
- count = 0
- imask = 0
- 0.upto(59) do | i |
- if (board[i] == 0) then
- imask |= (1 << i)
- count += 1
- end
- end
- (count > 0 && count < 5) ? imask : 0
- end
-
- def flood_fill( board, location)
- return board if (board[location] == 1)
- board |= 1 << location
- row, col = location.divmod(6)
- board = flood_fill( board, location - 1) if (col > 0)
- board = flood_fill( board, location + 1) if (col < 4)
- if (row % 2 == 0) then
- board = flood_fill( board, location - 7) if (col > 0 && row > 0)
- board = flood_fill( board, location - 6) if (row > 0)
- board = flood_fill( board, location + 6) if (row < 9)
- board = flood_fill( board, location + 5) if (col > 0 && row < 9)
- else
- board = flood_fill( board, location - 5) if (col < 4 && row > 0)
- board = flood_fill( board, location - 6) if (row > 0)
- board = flood_fill( board, location + 6) if (row < 9)
- board = flood_fill( board, location + 7) if (col < 4 && row < 9)
- end
- board
- end
-
- # given a location, produces a list of relative locations covered by the piece at this rotation
- def offsets( location)
- if is_even( location) then
- @even_offsets.collect { | value | value + location }
- else
- @odd_offsets.collect { | value | value + location }
- end
- end
-
- # returns a set of offsets relative to the top-left most piece of the rotation (by even or odd rows)
- # this is hard to explain. imagine we have this partial board:
- # 0 0 0 0 0 x [positions 0-5]
- # 0 0 1 1 0 x [positions 6-11]
- # 0 0 1 0 0 x [positions 12-17]
- # 0 1 0 0 0 x [positions 18-23]
- # 0 1 0 0 0 x [positions 24-29]
- # 0 0 0 0 0 x [positions 30-35]
- # ...
- # The top-left of the piece is at position 8, the
- # board would be passed as a set of positions (values array) containing [8,9,14,19,25] not necessarily in that
- # sorted order. Since that array starts on an odd row, the offsets for an odd row are: [0,1,6,11,17] obtained
- # by subtracting 8 from everything. Now imagine the piece shifted up and to the right so it's on an even row:
- # 0 0 0 1 1 x [positions 0-5]
- # 0 0 1 0 0 x [positions 6-11]
- # 0 0 1 0 0 x [positions 12-17]
- # 0 1 0 0 0 x [positions 18-23]
- # 0 0 0 0 0 x [positions 24-29]
- # 0 0 0 0 0 x [positions 30-35]
- # ...
- # Now the positions are [3,4,8,14,19] which after subtracting the lowest value (3) gives [0,1,5,11,16] thus, the
- # offsets for this particular piece are (in even, odd order) [0,1,5,11,16],[0,1,6,11,17] which is what
- # this function would return
- def normalize_offsets( values)
- min = values.min
- even_min = is_even(min)
- other_min = even_min ? min + 6 : min + 7
- other_values = values.collect do | value |
- if is_even(value) then
- value + 6 - other_min
- else
- value + 7 - other_min
- end
- end
- values.collect! { | value | value - min }
-
- if even_min then
- [values, other_values]
- else
- [other_values, values]
- end
- end
-
- # produce a bitmask representation of an array of offset locations
- def mask_for_offsets( offsets )
- mask = 0
- offsets.each { | value | mask = mask + ( 1 << value ) }
- mask
- end
-
- # finds a "safe" position that a position as described by a list of directions can be placed
- # without falling off any edge of the board. the values returned a location to place the first piece
- # at so it will fit after making the described moves
- def start_adjust( directions )
- south = east = 0;
- directions.each do | direction |
- east += 1 if ( direction == :sw || direction == :nw || direction == :west )
- south += 1 if ( direction == :nw || direction == :ne )
- end
- south * 6 + east
- end
-
- # given a set of directions places the piece (as defined by a set of directions) on the board at
- # a location that will not take it off the edge
- def get_values ( directions )
- start = start_adjust(directions)
- values = [ start ]
- directions.each do | direction |
- if (start % 12 >= 6) then
- start += @@rotation_odd_adder[direction]
- else
- start += @@rotation_even_adder[direction]
- end
- values += [ start ]
- end
-
- # some moves take you back to an existing location, we'll strip duplicates
- values.uniq
- end
-end
-
-# describes a piece and caches information about its rotations to as to be efficient for iteration
-# ATTRIBUTES:
-# rotations -- all the rotations of the piece
-# type -- a numeic "name" of the piece
-# masks -- an array by location of all legal rotational masks (a n inner array) for that location
-# placed -- the mask that this piece was last placed at (not a location, but the actual mask used)
-class Piece
- attr_reader :rotations, :type, :masks
- attr_accessor :placed
-
- # transform hashes that change one direction into another when you either flip or rotate a set of directions
- @@flip_converter = { :west => :west, :east => :east, :nw => :sw, :ne => :se, :sw => :nw, :se => :ne }
- @@rotate_converter = { :west => :nw, :east => :se, :nw => :ne, :ne => :east, :sw => :west, :se => :sw }
-
- def initialize( directions, type )
- @type = type
- @rotations = Array.new();
- @map = {}
-
- generate_rotations( directions )
- directions.collect! { | value | @@flip_converter[value] }
- generate_rotations( directions )
-
- # creates the masks AND a map that returns [location, rotation] for any given mask
- # this is used when a board is found and we want to draw it, otherwise the map is unused
- @masks = Array.new();
- 0.upto(59) do | i |
- even = true
- @masks[i] = @rotations.collect do | rotation |
- mask = rotation.start_masks[i]
- @map[mask[0]] = [ i, rotation ] if (mask)
- mask || nil
- end
- @masks[i].compact!
- end
- end
-
- # rotates a set of directions through all six angles and adds a Rotation to the list for each one
- def generate_rotations( directions )
- 6.times do
- rotations.push( Rotation.new(directions))
- directions.collect! { | value | @@rotate_converter[value] }
- end
- end
-
- # given a board string, adds this piece to the board at whatever location/rotation
- # important: the outbound board string is 5 wide, the normal location notation is six wide (padded)
- def fill_string( board_string)
- location, rotation = @map[@placed]
- rotation.offsets(location).each do | offset |
- row, col = offset.divmod(6)
- board_string[ row*5 + col, 1 ] = @type.to_s
- end
- end
-end
-
-# a blank bit board having this form:
-#
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 1 1 1 1 1 1
-#
-# where left lest significant bit is the top left and the most significant is the lower right
-# the actual board only consists of the 0 places, the 1 places are blockers to keep things from running
-# off the edges or bottom
-def blank_board
- 0b111111100000100000100000100000100000100000100000100000100000100000
-end
-
-def full_board
- 0b111111111111111111111111111111111111111111111111111111111111111111
-end
-
-# determines if a location (bit position) is in an even row
-def is_even( location)
- (location % 12) < 6
-end
-
-# support function that create three utility maps:
-# $converter -- for each row an array that maps a five bit row (via array mapping)
-# to the a a five bit representation of the bits below it
-# $bit_count -- maps a five bit row (via array mapping) to the number of 1s in the row
-# @@new_regions -- maps a five bit row (via array mapping) to an array of "region" arrays
-# a region array has three values the first is a mask of bits in the region,
-# the second is the count of those bits and the third is identical to the first
-# examples:
-# 0b10010 => [ 0b01100, 2, 0b01100 ], [ 0b00001, 1, 0b00001]
-# 0b01010 => [ 0b10000, 1, 0b10000 ], [ 0b00100, 1, 0b00100 ], [ 0b00001, 1, 0b00001]
-# 0b10001 => [ 0b01110, 3, 0b01110 ]
-def create_collector_support
- odd_map = [0b11, 0b110, 0b1100, 0b11000, 0b10000]
- even_map = [0b1, 0b11, 0b110, 0b1100, 0b11000]
-
- all_odds = Array.new(0b100000)
- all_evens = Array.new(0b100000)
- bit_counts = Array.new(0b100000)
- new_regions = Array.new(0b100000)
- 0.upto(0b11111) do | i |
- bit_count = odd = even = 0
- 0.upto(4) do | bit |
- if (i[bit] == 1) then
- bit_count += 1
- odd |= odd_map[bit]
- even |= even_map[bit]
- end
- end
- all_odds[i] = odd
- all_evens[i] = even
- bit_counts[i] = bit_count
- new_regions[i] = create_regions( i)
- end
-
- $converter = []
- 10.times { | row | $converter.push((row % 2 == 0) ? all_evens : all_odds) }
- $bit_counts = bit_counts
- $regions = new_regions.collect { | set | set.collect { | value | [ value, bit_counts[value], value] } }
-end
-
-# determines if a board is punable, meaning that there is no possibility that it
-# can be filled up with pieces. A board is prunable if there is a grouping of unfilled spaces
-# that are not a multiple of five. The following board is an example of a prunable board:
-# 0 0 1 0 0
-# 0 1 0 0 0
-# 1 1 0 0 0
-# 0 1 0 0 0
-# 0 0 0 0 0
-# ...
-#
-# This board is prunable because the top left corner is only 3 bits in area, no piece will ever fit it
-# parameters:
-# board -- an initial bit board (6 bit padded rows, see blank_board for format)
-# location -- starting location, everything above and to the left is already full
-# slotting -- set to true only when testing initial pieces, when filling normally
-# additional assumptions are possible
-#
-# Algorithm:
-# The algorithm starts at the top row (as determined by location) and iterates a row at a time
-# maintainng counts of active open areas (kept in the collector array) each collector contains
-# three values at the start of an iteration:
-# 0: mask of bits that would be adjacent to the collector in this row
-# 1: the number of bits collected so far
-# 2: a scratch space starting as zero, but used during the computation to represent
-# the empty bits in the new row that are adjacent (position 0)
-# The exact procedure is described in-code
-def prunable( board, location, slotting = false)
- collectors = []
- # loop across the rows
- (location / 6).to_i.upto(9) do | row_on |
- # obtain a set of regions representing the bits of the current row.
- regions = $regions[(board >> (row_on * 6)) & 0b11111]
- converter = $converter[row_on]
-
- # track the number of collectors at the start of the cycle so that
- # we don't compute against newly created collectors, only existing collectors
- initial_collector_count = collectors.length
-
- # loop against the regions. For each region of the row
- # we will see if it connects to one or more existing collectors.
- # if it connects to 1 collector, the bits from the region are added to the
- # bits of the collector and the mask is placed in collector[2]
- # If the region overlaps more than one collector then all the collectors
- # it overlaps with are merged into the first one (the others are set to nil in the array)
- # if NO collectors are found then the region is copied as a new collector
- regions.each do | region |
- collector_found = nil
- region_mask = region[2]
- initial_collector_count.times do | collector_num |
- collector = collectors[collector_num]
- if (collector) then
- collector_mask = collector[0]
- if (collector_mask & region_mask != 0) then
- if (collector_found) then
- collector_found[0] |= collector_mask
- collector_found[1] += collector[1]
- collector_found[2] |= collector[2]
- collectors[collector_num] = nil
- else
- collector_found = collector
- collector[1] += region[1]
- collector[2] |= region_mask
- end
- end
- end
- end
- if (collector_found == nil) then
- collectors.push(Array.new(region))
- end
- end
-
- # check the existing collectors, if any collector overlapped no bits in the region its [2] value will
- # be zero. The size of any such reaason is tested if it is not a multiple of five true is returned since
- # the board is prunable. if it is a multiple of five it is removed.
- # Collector that are still active have a new adjacent value [0] set based n the matched bits
- # and have [2] cleared out for the next cycle.
- collectors.length.times do | collector_num |
- collector = collectors[collector_num]
- if (collector) then
- if (collector[2] == 0) then
- return true if (collector[1] % 5 != 0)
- collectors[collector_num] = nil
- else
- # if a collector matches all bits in the row then we can return unprunable early for the
- # following reasons:
- # 1) there can be no more unavailable bits bince we fill from the top left downward
- # 2) all previous regions have been closed or joined so only this region can fail
- # 3) this region must be good since there can never be only 1 region that is nuot
- # a multiple of five
- # this rule only applies when filling normally, so we ignore the rule if we are "slotting"
- # in pieces to see what configurations work for them (the only other time this algorithm is used).
- return false if (collector[2] == 0b11111 && !slotting)
- collector[0] = converter[collector[2]]
- collector[2] = 0
- end
- end
- end
-
- # get rid of all the empty converters for the next round
- collectors.compact!
- end
- return false if (collectors.length <= 1) # 1 collector or less and the region is fine
- collectors.any? { | collector | (collector[1] % 5) != 0 } # more than 1 and we test them all for bad size
-end
-
-# creates a region given a row mask. see prunable for what a "region" is
-def create_regions( value )
- regions = []
- cur_region = 0
- 5.times do | bit |
- if (value[bit] == 0) then
- cur_region |= 1 << bit
- else
- if (cur_region != 0 ) then
- regions.push( cur_region)
- cur_region = 0;
- end
- end
- end
- regions.push(cur_region) if (cur_region != 0)
- regions
-end
-
-# find up to the counted number of solutions (or all solutions) and prints the final result
-def find_all
- find_top( 1)
- find_top( 0)
- print_results
-end
-
-# show the board
-def print_results
- print "#{@boards_found} solutions found\n\n"
- print_full_board( @min_board)
- print "\n"
- print_full_board( @max_board)
- print "\n"
-end
-
-# finds solutions. This special version of the main function is only used for the top level
-# the reason for it is basically to force a particular ordering on how the rotations are tested for
-# the first piece. It is called twice, first looking for placements of the odd rotations and then
-# looking for placements of the even locations.
-#
-# WHY?
-# Since any found solution has an inverse we want to maximize finding solutions that are not already found
-# as an inverse. The inverse will ALWAYS be 3 one of the piece configurations that is exactly 3 rotations away
-# (an odd number). Checking even vs odd then produces a higher probability of finding more pieces earlier
-# in the cycle. We still need to keep checking all the permutations, but our probability of finding one will
-# diminsh over time. Since we are TOLD how many to search for this lets us exit before checking all pieces
-# this bennifit is very great when seeking small numbers of solutions and is 0 when looking for more than the
-# maximum number
-def find_top( rotation_skip)
- board = blank_board
- (@pieces.length-1).times do
- piece = @pieces.shift
- piece.masks[0].each do | mask, imask, cmask |
- if ((rotation_skip += 1) % 2 == 0) then
- piece.placed = mask
- find( 1, 1, board | mask)
- end
- end
- @pieces.push(piece)
- end
- piece = @pieces.shift
- @pieces.push(piece)
-end
-
-# the normail find routine, iterates through the available pieces, checks all rotations at the current location
-# and adds any boards found. depth is achieved via recursion. the overall approach is described
-# here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
-# parameters:
-# start_location -- where to start looking for place for the next piece at
-# placed -- number of pieces placed
-# board -- current state of the board
-#
-# see in-code comments
-def find( start_location, placed, board)
- # find the next location to place a piece by looking for an empty bit
- while board[start_location] == 1
- start_location += 1
- end
-
- @pieces.length.times do
- piece = @pieces.shift
- piece.masks[start_location].each do | mask, imask, cmask |
- if ( board & cmask == imask) then
- piece.placed = mask
- if (placed == 9) then
- add_board
- else
- find( start_location + 1, placed + 1, board | mask)
- end
- end
- end
- @pieces.push(piece)
- end
-end
-
-# print the board
-def print_full_board( board_string)
- 10.times do | row |
- print " " if (row % 2 == 1)
- 5.times do | col |
- print "#{board_string[row*5 + col,1]} "
- end
- print "\n"
- end
-end
-
-# when a board is found we "draw it" into a string and then flip that string, adding both to
-# the list (hash) of solutions if they are unique.
-def add_board
- board_string = "99999999999999999999999999999999999999999999999999"
- @all_pieces.each { | piece | piece.fill_string( board_string ) }
- save( board_string)
- save( board_string.reverse)
-end
-
-# adds a board string to the list (if new) and updates the current best/worst board
-def save( board_string)
- if (@all_boards[board_string] == nil) then
- @min_board = board_string if (board_string < @min_board)
- @max_board = board_string if (board_string > @max_board)
- @all_boards.store(board_string,true)
- @boards_found += 1
-
- # the exit motif is a time saver. Ideally the function should return, but those tests
- # take noticeable time (performance).
- if (@boards_found == @stop_count) then
- print_results
- exit(0)
- end
- end
-end
-
-
-##
-## MAIN BODY :)
-##
-create_collector_support
-@pieces = [
- Piece.new( [ :nw, :ne, :east, :east ], 2),
- Piece.new( [ :ne, :se, :east, :ne ], 7),
- Piece.new( [ :ne, :east, :ne, :nw ], 1),
- Piece.new( [ :east, :sw, :sw, :se ], 6),
- Piece.new( [ :east, :ne, :se, :ne ], 5),
- Piece.new( [ :east, :east, :east, :se ], 0),
- Piece.new( [ :ne, :nw, :se, :east, :se ], 4),
- Piece.new( [ :se, :se, :se, :west ], 9),
- Piece.new( [ :se, :se, :east, :se ], 8),
- Piece.new( [ :east, :east, :sw, :se ], 3)
- ];
-
-@all_pieces = Array.new( @pieces)
-
-@min_board = "99999999999999999999999999999999999999999999999999"
-@max_board = "00000000000000000000000000000000000000000000000000"
-@stop_count = ARGV[0].to_i || 2089
-@all_boards = {}
-@boards_found = 0
-
-find_all ######## DO IT!!!
-
diff --git a/benchmark/bm_so_nbody.rb b/benchmark/bm_so_nbody.rb
deleted file mode 100644
index d6c5bb9e61..0000000000
--- a/benchmark/bm_so_nbody.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-#
-# Optimized for Ruby by Jesse Millikan
-# From version ported by Michael Neumann from the C gcc version,
-# which was written by Christoph Bauer.
-
-SOLAR_MASS = 4 * Math::PI**2
-DAYS_PER_YEAR = 365.24
-
-def _puts *args
-end
-
-class Planet
- attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass
-
- def initialize(x, y, z, vx, vy, vz, mass)
- @x, @y, @z = x, y, z
- @vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR
- @mass = mass * SOLAR_MASS
- end
-
- def move_from_i(bodies, nbodies, dt, i)
- while i < nbodies
- b2 = bodies[i]
- dx = @x - b2.x
- dy = @y - b2.y
- dz = @z - b2.z
-
- distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
- mag = dt / (distance * distance * distance)
- b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag
-
- @vx -= dx * b2_mass_mag
- @vy -= dy * b2_mass_mag
- @vz -= dz * b2_mass_mag
- b2.vx += dx * b_mass_mag
- b2.vy += dy * b_mass_mag
- b2.vz += dz * b_mass_mag
- i += 1
- end
-
- @x += dt * @vx
- @y += dt * @vy
- @z += dt * @vz
- end
-end
-
-def energy(bodies)
- e = 0.0
- nbodies = bodies.size
-
- for i in 0 ... nbodies
- b = bodies[i]
- e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz)
- for j in (i + 1) ... nbodies
- b2 = bodies[j]
- dx = b.x - b2.x
- dy = b.y - b2.y
- dz = b.z - b2.z
- distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
- e -= (b.mass * b2.mass) / distance
- end
- end
- e
-end
-
-def offset_momentum(bodies)
- px, py, pz = 0.0, 0.0, 0.0
-
- for b in bodies
- m = b.mass
- px += b.vx * m
- py += b.vy * m
- pz += b.vz * m
- end
-
- b = bodies[0]
- b.vx = - px / SOLAR_MASS
- b.vy = - py / SOLAR_MASS
- b.vz = - pz / SOLAR_MASS
-end
-
-BODIES = [
- # sun
- Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0),
-
- # jupiter
- Planet.new(
- 4.84143144246472090e+00,
- -1.16032004402742839e+00,
- -1.03622044471123109e-01,
- 1.66007664274403694e-03,
- 7.69901118419740425e-03,
- -6.90460016972063023e-05,
- 9.54791938424326609e-04),
-
- # saturn
- Planet.new(
- 8.34336671824457987e+00,
- 4.12479856412430479e+00,
- -4.03523417114321381e-01,
- -2.76742510726862411e-03,
- 4.99852801234917238e-03,
- 2.30417297573763929e-05,
- 2.85885980666130812e-04),
-
- # uranus
- Planet.new(
- 1.28943695621391310e+01,
- -1.51111514016986312e+01,
- -2.23307578892655734e-01,
- 2.96460137564761618e-03,
- 2.37847173959480950e-03,
- -2.96589568540237556e-05,
- 4.36624404335156298e-05),
-
- # neptune
- Planet.new(
- 1.53796971148509165e+01,
- -2.59193146099879641e+01,
- 1.79258772950371181e-01,
- 2.68067772490389322e-03,
- 1.62824170038242295e-03,
- -9.51592254519715870e-05,
- 5.15138902046611451e-05)
-]
-
-init = 200_000 # ARGV[0]
-n = Integer(init)
-
-offset_momentum(BODIES)
-
-puts "%.9f" % energy(BODIES)
-
-nbodies = BODIES.size
-dt = 0.01
-
-n.times do
- i = 0
- while i < nbodies
- b = BODIES[i]
- b.move_from_i(BODIES, nbodies, dt, i + 1)
- i += 1
- end
-end
-
-puts "%.9f" % energy(BODIES)
diff --git a/benchmark/bm_so_nested_loop.rb b/benchmark/bm_so_nested_loop.rb
deleted file mode 100644
index a0513f8c47..0000000000
--- a/benchmark/bm_so_nested_loop.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: nestedloop-ruby.code,v 1.4 2004/11/13 07:42:22 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# from Avi Bryant
-
-n = 16 # Integer(ARGV.shift || 1)
-x = 0
-n.times do
- n.times do
- n.times do
- n.times do
- n.times do
- n.times do
- x += 1
- end
- end
- end
- end
- end
-end
-# puts x
-
-
diff --git a/benchmark/bm_so_nsieve.rb b/benchmark/bm_so_nsieve.rb
deleted file mode 100644
index a65cc78233..0000000000
--- a/benchmark/bm_so_nsieve.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# contributed by Glenn Parker, March 2005
-# modified by Evan Phoenix, Sept 2006
-
-def sieve(m)
- flags = Flags.dup[0,m]
- count = 0
- pmax = m - 1
- p = 2
- while p <= pmax
- unless flags[p].zero?
- count += 1
- mult = p
- while mult <= pmax
- flags[mult] = 0
- mult += p
- end
- end
- p += 1
- end
- count
-end
-
-n = 9 # (ARGV[0] || 2).to_i
-Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*")
-
-n.downto(n-2) do |exponent|
- break if exponent < 0
- m = (1 << exponent) * 10_000
- # m = (2 ** exponent) * 10_000
- count = sieve(m)
- printf "Primes up to %8d %8d\n", m, count
-end
diff --git a/benchmark/bm_so_nsieve_bits.rb b/benchmark/bm_so_nsieve_bits.rb
deleted file mode 100644
index 6f958ee44e..0000000000
--- a/benchmark/bm_so_nsieve_bits.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/ruby
-#coding: us-ascii
-#
-# The Great Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# nsieve-bits in Ruby
-# Contributed by Glenn Parker, March 2005
-
-CharExponent = 3
-BitsPerChar = 1 << CharExponent
-LowMask = BitsPerChar - 1
-
-def sieve(m)
- items = "\xFF" * ((m / BitsPerChar) + 1)
- masks = ""
- BitsPerChar.times do |b|
- masks << (1 << b).chr
- end
-
- count = 0
- pmax = m - 1
- 2.step(pmax, 1) do |p|
- if items[p >> CharExponent][p & LowMask] == 1
- count += 1
- p.step(pmax, p) do |mult|
- a = mult >> CharExponent
- b = mult & LowMask
- items[a] -= masks[b] if items[a][b] != 0
- end
- end
- end
- count
-end
-
-n = 9 # (ARGV[0] || 2).to_i
-n.step(n - 2, -1) do |exponent|
- break if exponent < 0
- m = 2 ** exponent * 10_000
- count = sieve(m)
- printf "Primes up to %8d %8d\n", m, count
-end
-
diff --git a/benchmark/bm_so_object.rb b/benchmark/bm_so_object.rb
deleted file mode 100644
index e8607c7199..0000000000
--- a/benchmark/bm_so_object.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: objinst-ruby.code,v 1.4 2004/11/13 07:42:25 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Aristarkh Zagorodnikov
-
-class Toggle
- def initialize(start_state)
- @bool = start_state
- end
-
- def value
- @bool
- end
-
- def activate
- @bool = !@bool
- self
- end
-end
-
-class NthToggle < Toggle
- def initialize(start_state, max_counter)
- super start_state
- @count_max = max_counter
- @counter = 0
- end
-
- def activate
- @counter += 1
- if @counter >= @count_max
- @bool = !@bool
- @counter = 0
- end
- self
- end
-end
-
-n = 1500000 # (ARGV.shift || 1).to_i
-
-toggle = Toggle.new 1
-5.times do
- toggle.activate.value ? 'true' : 'false'
-end
-n.times do
- toggle = Toggle.new 1
-end
-
-ntoggle = NthToggle.new 1, 3
-8.times do
- ntoggle.activate.value ? 'true' : 'false'
-end
-n.times do
- ntoggle = NthToggle.new 1, 3
-end
-
diff --git a/benchmark/bm_so_partial_sums.rb b/benchmark/bm_so_partial_sums.rb
deleted file mode 100644
index 630b45cb8d..0000000000
--- a/benchmark/bm_so_partial_sums.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-n = 2_500_000 # (ARGV.shift || 1).to_i
-
-alt = 1.0 ; s0 = s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.0
-
-1.upto(n) do |d|
- d = d.to_f ; d2 = d * d ; d3 = d2 * d ; ds = Math.sin(d) ; dc = Math.cos(d)
-
- s0 += (2.0 / 3.0) ** (d - 1.0)
- s1 += 1.0 / Math.sqrt(d)
- s2 += 1.0 / (d * (d + 1.0))
- s3 += 1.0 / (d3 * ds * ds)
- s4 += 1.0 / (d3 * dc * dc)
- s5 += 1.0 / d
- s6 += 1.0 / d2
- s7 += alt / d
- s8 += alt / (2.0 * d - 1.0)
-
- alt = -alt
-end
-
-if false
- printf("%.9f\t(2/3)^k\n", s0)
- printf("%.9f\tk^-0.5\n", s1)
- printf("%.9f\t1/k(k+1)\n", s2)
- printf("%.9f\tFlint Hills\n", s3)
- printf("%.9f\tCookson Hills\n", s4)
- printf("%.9f\tHarmonic\n", s5)
- printf("%.9f\tRiemann Zeta\n", s6)
- printf("%.9f\tAlternating Harmonic\n", s7)
- printf("%.9f\tGregory\n", s8)
-end
diff --git a/benchmark/bm_so_pidigits.rb b/benchmark/bm_so_pidigits.rb
deleted file mode 100644
index c7d6fbfb4d..0000000000
--- a/benchmark/bm_so_pidigits.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-# The Great Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# contributed by Gabriele Renzi
-
-class PiDigitSpigot
-
- def initialize()
- @z = Transformation.new 1,0,0,1
- @x = Transformation.new 0,0,0,0
- @inverse = Transformation.new 0,0,0,0
- end
-
- def next!
- @y = @z.extract(3)
- if safe? @y
- @z = produce(@y)
- @y
- else
- @z = consume @x.next!()
- next!()
- end
- end
-
- def safe?(digit)
- digit == @z.extract(4)
- end
-
- def produce(i)
- @inverse.qrst(10,-10*i,0,1).compose(@z)
- end
-
- def consume(a)
- @z.compose(a)
- end
-end
-
-
-class Transformation
- attr_reader :q, :r, :s, :t
- def initialize (q, r, s, t)
- @q,@r,@s,@t,@k = q,r,s,t,0
- end
-
- def next!()
- @q = @k = @k + 1
- @r = 4 * @k + 2
- @s = 0
- @t = 2 * @k + 1
- self
- end
-
- def extract(j)
- (@q * j + @r) / (@s * j + @t)
- end
-
- def compose(a)
- self.class.new( @q * a.q,
- @q * a.r + r * a.t,
- @s * a.q + t * a.s,
- @s * a.r + t * a.t
- )
- end
-
- def qrst *args
- initialize *args
- self
- end
-
-
-end
-
-
-WIDTH = 10
-n = 2_500 # Integer(ARGV[0])
-j = 0
-
-digits = PiDigitSpigot.new
-
-while n > 0
- if n >= WIDTH
- WIDTH.times {print digits.next!}
- j += WIDTH
- else
- n.times {print digits.next!}
- (WIDTH-n).times {print " "}
- j += n
- end
- puts "\t:"+j.to_s
- n -= WIDTH
-end
-
diff --git a/benchmark/bm_so_random.rb b/benchmark/bm_so_random.rb
deleted file mode 100644
index a66b9e8e63..0000000000
--- a/benchmark/bm_so_random.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# from http://www.bagley.org/~doug/shootout/bench/random/random.ruby
-
-IM = 139968.0
-IA = 3877.0
-IC = 29573.0
-
-$last = 42.0
-
-def gen_random(max)
- (max * ($last = ($last * IA + IC) % IM)) / IM
-end
-
-N = 3_000_000
-
-i = 0
-while i<N
- i +=1
- gen_random(100.0)
-end
-# "%.9f" % gen_random(100.0)
diff --git a/benchmark/bm_so_reverse_complement.rb b/benchmark/bm_so_reverse_complement.rb
deleted file mode 100644
index 82ea666994..0000000000
--- a/benchmark/bm_so_reverse_complement.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/ruby
-# The Great Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# Contributed by Peter Bjarke Olsen
-# Modified by Doug King
-
-seq=Array.new
-
-def revcomp(seq)
- seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
- stringlen=seq.length
- 0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
-end
-
-input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
-
-while input.gets
- if $_ =~ />/
- if seq.length != 0
- revcomp(seq.join)
- seq=Array.new
- end
- puts $_
- else
- $_.sub(/\n/,'')
- seq.push $_
- end
-end
-revcomp(seq.join)
diff --git a/benchmark/bm_so_sieve.rb b/benchmark/bm_so_sieve.rb
deleted file mode 100644
index 43dc302648..0000000000
--- a/benchmark/bm_so_sieve.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# from http://www.bagley.org/~doug/shootout/bench/sieve/sieve.ruby
-num = 500
-count = i = j = 0
-flags0 = Array.new(8192,1)
-k = 0
-while k < num
- k += 1
- count = 0
- flags = flags0.dup
- i = 2
- while i<8192
- i += 1
- if flags[i]
- # remove all multiples of prime: i
- j = i*i
- while j < 8192
- j += i
- flags[j] = nil
- end
- count += 1
- end
- end
-end
-count
diff --git a/benchmark/bm_so_spectralnorm.rb b/benchmark/bm_so_spectralnorm.rb
deleted file mode 100644
index 6b97206689..0000000000
--- a/benchmark/bm_so_spectralnorm.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org/
-# Contributed by Sokolov Yura
-
-def eval_A(i,j)
- return 1.0/((i+j)*(i+j+1)/2+i+1)
-end
-
-def eval_A_times_u(u)
- v, i = nil, nil
- (0..u.length-1).collect { |i|
- v = 0
- for j in 0..u.length-1
- v += eval_A(i,j)*u[j]
- end
- v
- }
-end
-
-def eval_At_times_u(u)
- v, i = nil, nil
- (0..u.length-1).collect{|i|
- v = 0
- for j in 0..u.length-1
- v += eval_A(j,i)*u[j]
- end
- v
- }
-end
-
-def eval_AtA_times_u(u)
- return eval_At_times_u(eval_A_times_u(u))
-end
-
-n = 500 # ARGV[0].to_i
-
-u=[1]*n
-for i in 1..10
- v=eval_AtA_times_u(u)
- u=eval_AtA_times_u(v)
-end
-vBv=0
-vv=0
-for i in 0..n-1
- vBv += u[i]*v[i]
- vv += v[i]*v[i]
-end
-
-str = "%0.9f" % (Math.sqrt(vBv/vv)), "\n"
-# print str
diff --git a/benchmark/bm_vm1_attr_ivar.rb b/benchmark/bm_vm1_attr_ivar.rb
deleted file mode 100644
index 16906f3605..0000000000
--- a/benchmark/bm_vm1_attr_ivar.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_reader :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = obj.a
- k = obj.b
-end
diff --git a/benchmark/bm_vm1_attr_ivar_set.rb b/benchmark/bm_vm1_attr_ivar_set.rb
deleted file mode 100644
index 7e7a6b48c0..0000000000
--- a/benchmark/bm_vm1_attr_ivar_set.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_accessor :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- obj.a = 1
- obj.b = 2
-end
diff --git a/benchmark/bm_vm1_block.rb b/benchmark/bm_vm1_block.rb
deleted file mode 100644
index a9f56b15ea..0000000000
--- a/benchmark/bm_vm1_block.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def m
- yield
-end
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- m{
- }
-end
diff --git a/benchmark/bm_vm1_const.rb b/benchmark/bm_vm1_const.rb
deleted file mode 100644
index ac59ebccf1..0000000000
--- a/benchmark/bm_vm1_const.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-Const = 1
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = Const
- k = Const
-end
diff --git a/benchmark/bm_vm1_ensure.rb b/benchmark/bm_vm1_ensure.rb
deleted file mode 100644
index a1596145f2..0000000000
--- a/benchmark/bm_vm1_ensure.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-i = 0
-while i<30_000_000 # benchmark loop 1
- i += 1
- begin
- begin
- ensure
- end
- ensure
- end
-end
-
diff --git a/benchmark/bm_vm1_float_simple.rb b/benchmark/bm_vm1_float_simple.rb
deleted file mode 100644
index d4581439ff..0000000000
--- a/benchmark/bm_vm1_float_simple.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0.0; f = 0.0
-while i<30_000_000
- i += 1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
-end
diff --git a/benchmark/bm_vm1_gc_short_lived.rb b/benchmark/bm_vm1_gc_short_lived.rb
deleted file mode 100644
index e78bca5668..0000000000
--- a/benchmark/bm_vm1_gc_short_lived.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_complex_long.rb b/benchmark/bm_vm1_gc_short_with_complex_long.rb
deleted file mode 100644
index b66052dee0..0000000000
--- a/benchmark/bm_vm1_gc_short_with_complex_long.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-def nested_hash h, n
- if n == 0
- ''
- else
- 10.times{
- h[Object.new] = nested_hash(h, n-1)
- }
- end
-end
-
-long_lived = Hash.new
-nested_hash long_lived, 6
-
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
-
diff --git a/benchmark/bm_vm1_gc_short_with_long.rb b/benchmark/bm_vm1_gc_short_with_long.rb
deleted file mode 100644
index 298dbc845b..0000000000
--- a/benchmark/bm_vm1_gc_short_with_long.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-long_lived = Array.new(1_000_000){|i| "#{i}"}
-GC.start
-GC.start
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_symbol.rb b/benchmark/bm_vm1_gc_short_with_symbol.rb
deleted file mode 100644
index 6b15c1b7bf..0000000000
--- a/benchmark/bm_vm1_gc_short_with_symbol.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# make many symbols
-50_000.times{|i| sym = "sym#{i}".to_sym}
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_ary.rb b/benchmark/bm_vm1_gc_wb_ary.rb
deleted file mode 100644
index 881528845b..0000000000
--- a/benchmark/bm_vm1_gc_wb_ary.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-short_lived_ary = []
-
-if RUBY_VERSION >= "2.2.0"
- GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false)
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- short_lived_ary[0] = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_ary_promoted.rb b/benchmark/bm_vm1_gc_wb_ary_promoted.rb
deleted file mode 100644
index 3c8279c956..0000000000
--- a/benchmark/bm_vm1_gc_wb_ary_promoted.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-long_lived = []
-
-if RUBY_VERSION > "2.2.0"
- 3.times{ GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false) }
-elsif
- GC.start
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- long_lived[0] = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_obj.rb b/benchmark/bm_vm1_gc_wb_obj.rb
deleted file mode 100644
index a4067af36b..0000000000
--- a/benchmark/bm_vm1_gc_wb_obj.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class C
- attr_accessor :foo
-end
-short_lived_obj = C.new
-
-if RUBY_VERSION >= "2.2.0"
- GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false)
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- short_lived_obj.foo = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_obj_promoted.rb b/benchmark/bm_vm1_gc_wb_obj_promoted.rb
deleted file mode 100644
index eee07a0248..0000000000
--- a/benchmark/bm_vm1_gc_wb_obj_promoted.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class C
- attr_accessor :foo
-end
-long_lived = C.new
-
-if RUBY_VERSION >= "2.2.0"
- 3.times{ GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false) }
-elsif
- GC.start
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- long_lived.foo = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_ivar.rb b/benchmark/bm_vm1_ivar.rb
deleted file mode 100644
index 68a73cf92f..0000000000
--- a/benchmark/bm_vm1_ivar.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-@a = 1
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = @a
- k = @a
-end
diff --git a/benchmark/bm_vm1_ivar_set.rb b/benchmark/bm_vm1_ivar_set.rb
deleted file mode 100644
index bd81b06c34..0000000000
--- a/benchmark/bm_vm1_ivar_set.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- @a = 1
- @b = 2
-end
diff --git a/benchmark/bm_vm1_length.rb b/benchmark/bm_vm1_length.rb
deleted file mode 100644
index 353de3ab0e..0000000000
--- a/benchmark/bm_vm1_length.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-a = 'abc'
-b = [1, 2, 3]
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a.length
- b.length
-end
-
diff --git a/benchmark/bm_vm1_lvar_init.rb b/benchmark/bm_vm1_lvar_init.rb
deleted file mode 100644
index 36f2068811..0000000000
--- a/benchmark/bm_vm1_lvar_init.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def m v
- unless v
- # unreachable code
- v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 =
- v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 =
- v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 =
- v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 =
- v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1
- end
-end
-
-i = 0
-
-while i<30_000_000 # while loop 1
- i += 1
- m i
-end
-
diff --git a/benchmark/bm_vm1_lvar_set.rb b/benchmark/bm_vm1_lvar_set.rb
deleted file mode 100644
index 222e864134..0000000000
--- a/benchmark/bm_vm1_lvar_set.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1
-end
diff --git a/benchmark/bm_vm1_neq.rb b/benchmark/bm_vm1_neq.rb
deleted file mode 100644
index bbb4ae07a4..0000000000
--- a/benchmark/bm_vm1_neq.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-obj1 = Object.new
-obj2 = Object.new
-
-while i<30_000_000 # while loop 1
- i += 1
- obj1 != obj2
-end
diff --git a/benchmark/bm_vm1_not.rb b/benchmark/bm_vm1_not.rb
deleted file mode 100644
index b09ecdcc21..0000000000
--- a/benchmark/bm_vm1_not.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0
-obj = Object.new
-
-while i<30_000_000 # while loop 1
- i += 1
- !obj
-end
diff --git a/benchmark/bm_vm1_rescue.rb b/benchmark/bm_vm1_rescue.rb
deleted file mode 100644
index b0d3e2bdfa..0000000000
--- a/benchmark/bm_vm1_rescue.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- begin
- rescue
- end
-end
diff --git a/benchmark/bm_vm1_simplereturn.rb b/benchmark/bm_vm1_simplereturn.rb
deleted file mode 100644
index 63f9f21675..0000000000
--- a/benchmark/bm_vm1_simplereturn.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- return 1
-end
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- m
-end
-
diff --git a/benchmark/bm_vm1_swap.rb b/benchmark/bm_vm1_swap.rb
deleted file mode 100644
index 918f8b2112..0000000000
--- a/benchmark/bm_vm1_swap.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-a = 1
-b = 2
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a, b = b, a
-end
-
diff --git a/benchmark/bm_vm1_yield.rb b/benchmark/bm_vm1_yield.rb
deleted file mode 100644
index 775597cea6..0000000000
--- a/benchmark/bm_vm1_yield.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def m
- i = 0
- while i<30_000_000 # while loop 1
- i += 1
- yield
- end
-end
-
-m{}
-
diff --git a/benchmark/bm_vm2_array.rb b/benchmark/bm_vm2_array.rb
deleted file mode 100644
index df9037c83c..0000000000
--- a/benchmark/bm_vm2_array.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- a = [1,2,3,4,5,6,7,8,9,10]
-end
diff --git a/benchmark/bm_vm2_bigarray.rb b/benchmark/bm_vm2_bigarray.rb
deleted file mode 100644
index b02509d6a2..0000000000
--- a/benchmark/bm_vm2_bigarray.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- a = [
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- ]
-end
diff --git a/benchmark/bm_vm2_bighash.rb b/benchmark/bm_vm2_bighash.rb
deleted file mode 100644
index 5e3f437bb8..0000000000
--- a/benchmark/bm_vm2_bighash.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<60_000 # benchmark loop 2
- i += 1
- a = {0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19, 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29, 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39, 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49, 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59, 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69, 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79, 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89, 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99, 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109, 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119, 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126, 127=>127, 128=>128, 129=>129, 130=>130, 131=>131, 132=>132, 133=>133, 134=>134, 135=>135, 136=>136, 137=>137, 138=>138, 139=>139, 140=>140, 141=>141, 142=>142, 143=>143, 144=>144, 145=>145, 146=>146, 147=>147, 148=>148, 149=>149, 150=>150, 151=>151, 152=>152, 153=>153, 154=>154, 155=>155, 156=>156, 157=>157, 158=>158, 159=>159, 160=>160, 161=>161, 162=>162, 163=>163, 164=>164, 165=>165, 166=>166, 167=>167, 168=>168, 169=>169, 170=>170, 171=>171, 172=>172, 173=>173, 174=>174, 175=>175, 176=>176, 177=>177, 178=>178, 179=>179, 180=>180, 181=>181, 182=>182, 183=>183, 184=>184, 185=>185, 186=>186, 187=>187, 188=>188, 189=>189, 190=>190, 191=>191, 192=>192, 193=>193, 194=>194, 195=>195, 196=>196, 197=>197, 198=>198, 199=>199, 200=>200, 201=>201, 202=>202, 203=>203, 204=>204, 205=>205, 206=>206, 207=>207, 208=>208, 209=>209, 210=>210, 211=>211, 212=>212, 213=>213, 214=>214, 215=>215, 216=>216, 217=>217, 218=>218, 219=>219, 220=>220, 221=>221, 222=>222, 223=>223, 224=>224, 225=>225, 226=>226, 227=>227, 228=>228, 229=>229, 230=>230, 231=>231, 232=>232, 233=>233, 234=>234, 235=>235, 236=>236, 237=>237, 238=>238, 239=>239, 240=>240, 241=>241, 242=>242, 243=>243, 244=>244, 245=>245, 246=>246, 247=>247, 248=>248, 249=>249, 250=>250, 251=>251, 252=>252, 253=>253, 254=>254, 255=>255, 256=>256, 257=>257, 258=>258, 259=>259, 260=>260, 261=>261, 262=>262, 263=>263, 264=>264, 265=>265, 266=>266, 267=>267, 268=>268, 269=>269, 270=>270, 271=>271, 272=>272, 273=>273, 274=>274, 275=>275, 276=>276, 277=>277, 278=>278, 279=>279, 280=>280, 281=>281, 282=>282, 283=>283, 284=>284, 285=>285, 286=>286, 287=>287, 288=>288, 289=>289, 290=>290, 291=>291, 292=>292, 293=>293, 294=>294, 295=>295, 296=>296, 297=>297, 298=>298, 299=>299, 300=>300, 301=>301, 302=>302, 303=>303, 304=>304, 305=>305, 306=>306, 307=>307, 308=>308, 309=>309, 310=>310, 311=>311, 312=>312, 313=>313, 314=>314, 315=>315, 316=>316, 317=>317, 318=>318, 319=>319, 320=>320, 321=>321, 322=>322, 323=>323, 324=>324, 325=>325, 326=>326, 327=>327, 328=>328, 329=>329, 330=>330, 331=>331, 332=>332, 333=>333, 334=>334, 335=>335, 336=>336, 337=>337, 338=>338, 339=>339, 340=>340, 341=>341, 342=>342, 343=>343, 344=>344, 345=>345, 346=>346, 347=>347, 348=>348, 349=>349, 350=>350, 351=>351, 352=>352, 353=>353, 354=>354, 355=>355, 356=>356, 357=>357, 358=>358, 359=>359, 360=>360, 361=>361, 362=>362, 363=>363, 364=>364, 365=>365, 366=>366, 367=>367, 368=>368, 369=>369, 370=>370, 371=>371, 372=>372, 373=>373, 374=>374, 375=>375, 376=>376, 377=>377, 378=>378, 379=>379, 380=>380, 381=>381, 382=>382, 383=>383, 384=>384, 385=>385, 386=>386, 387=>387, 388=>388, 389=>389, 390=>390, 391=>391, 392=>392, 393=>393, 394=>394, 395=>395, 396=>396, 397=>397, 398=>398, 399=>399, 400=>400, 401=>401, 402=>402, 403=>403, 404=>404, 405=>405, 406=>406, 407=>407, 408=>408, 409=>409, 410=>410, 411=>411, 412=>412, 413=>413, 414=>414, 415=>415, 416=>416, 417=>417, 418=>418, 419=>419, 420=>420, 421=>421, 422=>422, 423=>423, 424=>424, 425=>425, 426=>426, 427=>427, 428=>428, 429=>429, 430=>430, 431=>431, 432=>432, 433=>433, 434=>434, 435=>435, 436=>436, 437=>437, 438=>438, 439=>439, 440=>440, 441=>441, 442=>442, 443=>443, 444=>444, 445=>445, 446=>446, 447=>447, 448=>448, 449=>449, 450=>450, 451=>451, 452=>452, 453=>453, 454=>454, 455=>455, 456=>456, 457=>457, 458=>458, 459=>459, 460=>460, 461=>461, 462=>462, 463=>463, 464=>464, 465=>465, 466=>466, 467=>467, 468=>468, 469=>469, 470=>470, 471=>471, 472=>472, 473=>473, 474=>474, 475=>475, 476=>476, 477=>477, 478=>478, 479=>479, 480=>480, 481=>481, 482=>482, 483=>483, 484=>484, 485=>485, 486=>486, 487=>487, 488=>488, 489=>489, 490=>490, 491=>491, 492=>492, 493=>493, 494=>494, 495=>495, 496=>496, 497=>497, 498=>498, 499=>499, 500=>500,}
-end
diff --git a/benchmark/bm_vm2_case.rb b/benchmark/bm_vm2_case.rb
deleted file mode 100644
index adc6e4df0a..0000000000
--- a/benchmark/bm_vm2_case.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-i = 0
-while i<6_000_000 # while loop 2
- case :foo
- when :bar
- raise
- when :baz
- raise
- when :boo
- raise
- when :foo
- i += 1
- end
-end
-
diff --git a/benchmark/bm_vm2_case_lit.rb b/benchmark/bm_vm2_case_lit.rb
deleted file mode 100644
index c62b294e0e..0000000000
--- a/benchmark/bm_vm2_case_lit.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-i = 0
-@ret = [ "foo", true, false, :sym, 6, nil, 0.1, 0xffffffffffffffff ]
-def foo(i)
- @ret[i % @ret.size]
-end
-
-while i<6_000_000 # while loop 2
- case foo(i)
- when "foo" then :foo
- when true then true
- when false then false
- when :sym then :sym
- when 6 then :fix
- when nil then nil
- when 0.1 then :float
- when 0xffffffffffffffff then :big
- end
- i += 1
-end
diff --git a/benchmark/bm_vm2_defined_method.rb b/benchmark/bm_vm2_defined_method.rb
deleted file mode 100644
index 053ed6c912..0000000000
--- a/benchmark/bm_vm2_defined_method.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Object
- define_method(:m){}
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m; m; m; m; m; m; m; m;
-end
diff --git a/benchmark/bm_vm2_dstr.rb b/benchmark/bm_vm2_dstr.rb
deleted file mode 100644
index 58c0f7bbc3..0000000000
--- a/benchmark/bm_vm2_dstr.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-x = y = 'z'
-while i<6_000_000 # benchmark loop 2
- i += 1
- str = "foo#{x}bar#{y}baz"
-end
diff --git a/benchmark/bm_vm2_eval.rb b/benchmark/bm_vm2_eval.rb
deleted file mode 100644
index 307cfc28ef..0000000000
--- a/benchmark/bm_vm2_eval.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- eval("1")
-end
-
diff --git a/benchmark/bm_vm2_method.rb b/benchmark/bm_vm2_method.rb
deleted file mode 100644
index a8ccff7138..0000000000
--- a/benchmark/bm_vm2_method.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- nil
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m; m; m; m; m; m; m; m;
-end
diff --git a/benchmark/bm_vm2_method_missing.rb b/benchmark/bm_vm2_method_missing.rb
deleted file mode 100644
index 2badc73101..0000000000
--- a/benchmark/bm_vm2_method_missing.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class C
- def method_missing mid
- end
-end
-
-obj = C.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m;
-end
diff --git a/benchmark/bm_vm2_method_with_block.rb b/benchmark/bm_vm2_method_with_block.rb
deleted file mode 100644
index b4efb4f520..0000000000
--- a/benchmark/bm_vm2_method_with_block.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- nil
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{};
-end
diff --git a/benchmark/bm_vm2_mutex.rb b/benchmark/bm_vm2_mutex.rb
deleted file mode 100644
index 7362f738c5..0000000000
--- a/benchmark/bm_vm2_mutex.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'thread'
-
-m = Mutex.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m.synchronize{}
-end
diff --git a/benchmark/bm_vm2_newlambda.rb b/benchmark/bm_vm2_newlambda.rb
deleted file mode 100644
index 6422c9b0d0..0000000000
--- a/benchmark/bm_vm2_newlambda.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- lambda {}
-end
diff --git a/benchmark/bm_vm2_poly_method.rb b/benchmark/bm_vm2_poly_method.rb
deleted file mode 100644
index c82c0e4bce..0000000000
--- a/benchmark/bm_vm2_poly_method.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class C1
- def m
- 1
- end
-end
-class C2
- def m
- 2
- end
-end
-
-o1 = C1.new
-o2 = C2.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- o = (i % 2 == 0) ? o1 : o2
- o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_poly_method_ov.rb b/benchmark/bm_vm2_poly_method_ov.rb
deleted file mode 100644
index aa5fd1dd38..0000000000
--- a/benchmark/bm_vm2_poly_method_ov.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class C1
- def m
- 1
- end
-end
-class C2
- def m
- 2
- end
-end
-
-o1 = C1.new
-o2 = C2.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- o = (i % 2 == 0) ? o1 : o2
-# o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_proc.rb b/benchmark/bm_vm2_proc.rb
deleted file mode 100644
index 65e5217371..0000000000
--- a/benchmark/bm_vm2_proc.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-def m &b
- b
-end
-
-pr = m{
- a = 1
-}
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- pr.call
-end
-
diff --git a/benchmark/bm_vm2_raise1.rb b/benchmark/bm_vm2_raise1.rb
deleted file mode 100644
index aa5387987f..0000000000
--- a/benchmark/bm_vm2_raise1.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 1
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_raise2.rb b/benchmark/bm_vm2_raise2.rb
deleted file mode 100644
index 1f61c63157..0000000000
--- a/benchmark/bm_vm2_raise2.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 10
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_regexp.rb b/benchmark/bm_vm2_regexp.rb
deleted file mode 100644
index 55f9e957a3..0000000000
--- a/benchmark/bm_vm2_regexp.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-str = 'xxxhogexxx'
-while i<6_000_000 # benchmark loop 2
- /hoge/ =~ str
- i += 1
-end
diff --git a/benchmark/bm_vm2_send.rb b/benchmark/bm_vm2_send.rb
deleted file mode 100644
index 6a3ab6fdab..0000000000
--- a/benchmark/bm_vm2_send.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class C
- def m
- end
-end
-
-o = C.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- o.__send__ :m
-end
diff --git a/benchmark/bm_vm2_string_literal.rb b/benchmark/bm_vm2_string_literal.rb
deleted file mode 100644
index 1d73036849..0000000000
--- a/benchmark/bm_vm2_string_literal.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-end
diff --git a/benchmark/bm_vm2_struct_big_aref_hi.rb b/benchmark/bm_vm2_struct_big_aref_hi.rb
deleted file mode 100644
index 22cb26b0a5..0000000000
--- a/benchmark/bm_vm2_struct_big_aref_hi.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.z # x[25]
-end
diff --git a/benchmark/bm_vm2_struct_big_aref_lo.rb b/benchmark/bm_vm2_struct_big_aref_lo.rb
deleted file mode 100644
index 5e61a7087e..0000000000
--- a/benchmark/bm_vm2_struct_big_aref_lo.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.k # x[10]
-end
diff --git a/benchmark/bm_vm2_struct_big_aset.rb b/benchmark/bm_vm2_struct_big_aset.rb
deleted file mode 100644
index 5a1c3d16f3..0000000000
--- a/benchmark/bm_vm2_struct_big_aset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.k = i # x[10] = i
-end
diff --git a/benchmark/bm_vm2_struct_big_href_hi.rb b/benchmark/bm_vm2_struct_big_href_hi.rb
deleted file mode 100644
index fff940a80a..0000000000
--- a/benchmark/bm_vm2_struct_big_href_hi.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:z]
-end
diff --git a/benchmark/bm_vm2_struct_big_href_lo.rb b/benchmark/bm_vm2_struct_big_href_lo.rb
deleted file mode 100644
index 5e4085d59d..0000000000
--- a/benchmark/bm_vm2_struct_big_href_lo.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:k]
-end
diff --git a/benchmark/bm_vm2_struct_big_hset.rb b/benchmark/bm_vm2_struct_big_hset.rb
deleted file mode 100644
index 9c0cee4141..0000000000
--- a/benchmark/bm_vm2_struct_big_hset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:k] = i
-end
diff --git a/benchmark/bm_vm2_struct_small_aref.rb b/benchmark/bm_vm2_struct_small_aref.rb
deleted file mode 100644
index 8eaa555b41..0000000000
--- a/benchmark/bm_vm2_struct_small_aref.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.a
-end
diff --git a/benchmark/bm_vm2_struct_small_aset.rb b/benchmark/bm_vm2_struct_small_aset.rb
deleted file mode 100644
index ecd0f95669..0000000000
--- a/benchmark/bm_vm2_struct_small_aset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.a = i
-end
diff --git a/benchmark/bm_vm2_struct_small_href.rb b/benchmark/bm_vm2_struct_small_href.rb
deleted file mode 100644
index 2c88fee6bf..0000000000
--- a/benchmark/bm_vm2_struct_small_href.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:a]
-end
diff --git a/benchmark/bm_vm2_struct_small_hset.rb b/benchmark/bm_vm2_struct_small_hset.rb
deleted file mode 100644
index 33c36d20f1..0000000000
--- a/benchmark/bm_vm2_struct_small_hset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:a] = 1
-end
diff --git a/benchmark/bm_vm2_super.rb b/benchmark/bm_vm2_super.rb
deleted file mode 100644
index afd8579e7b..0000000000
--- a/benchmark/bm_vm2_super.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-
-class C
- def m
- 1
- end
-end
-
-class CC < C
- def m
- super()
- end
-end
-
-obj = CC.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- obj.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_unif1.rb b/benchmark/bm_vm2_unif1.rb
deleted file mode 100644
index 1774625942..0000000000
--- a/benchmark/bm_vm2_unif1.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-def m a, b
-end
-
-while i<6_000_000 # benchmark loop 2
- i += 1
- m 100, 200
-end
diff --git a/benchmark/bm_vm2_zsuper.rb b/benchmark/bm_vm2_zsuper.rb
deleted file mode 100644
index 2a43e62217..0000000000
--- a/benchmark/bm_vm2_zsuper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-i = 0
-
-class C
- def m a
- 1
- end
-end
-
-class CC < C
- def m a
- super
- end
-end
-
-obj = CC.new
-
-while i<6_000_000 # benchmark loop 2
- obj.m 10
- i += 1
-end
diff --git a/benchmark/bm_vm3_backtrace.rb b/benchmark/bm_vm3_backtrace.rb
deleted file mode 100644
index 0fbf73e1ca..0000000000
--- a/benchmark/bm_vm3_backtrace.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# get last backtrace
-
-begin
- caller(0, 0)
-rescue ArgumentError
- alias caller_orig caller
- def caller lev, n
- caller_orig(lev)[0..n]
- end
-end
-
-def rec n
- if n < 0
- 100_000.times{
- caller(0, 1)
- }
- else
- rec(n-1)
- end
-end
-
-rec 50
diff --git a/benchmark/bm_vm3_clearmethodcache.rb b/benchmark/bm_vm3_clearmethodcache.rb
deleted file mode 100644
index 9661323cd2..0000000000
--- a/benchmark/bm_vm3_clearmethodcache.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-while i<200_000
- i += 1
-
- Class.new{
- def m; end
- }
-end
diff --git a/benchmark/bm_vm3_gc.rb b/benchmark/bm_vm3_gc.rb
deleted file mode 100644
index e668026915..0000000000
--- a/benchmark/bm_vm3_gc.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-5000.times do
- 100.times do
- {"xxxx"=>"yyyy"}
- end
- GC.start
-end
diff --git a/benchmark/bm_vm_symbol_block_pass.rb b/benchmark/bm_vm_symbol_block_pass.rb
deleted file mode 100644
index 1d433353e1..0000000000
--- a/benchmark/bm_vm_symbol_block_pass.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class C
- 1000.times {|i|
- eval("def i#{i};end")
- }
-end
-
-c = C.new
-m = C.instance_methods(false)
-5_000.times do
- m.each do |n|
- c.tap(&n)
- end
-end
diff --git a/benchmark/bm_vm_thread_alive_check1.rb b/benchmark/bm_vm_thread_alive_check1.rb
deleted file mode 100644
index c993accdda..0000000000
--- a/benchmark/bm_vm_thread_alive_check1.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-5_000.times{
- t = Thread.new{}
- while t.alive?
- Thread.pass
- end
-}
diff --git a/benchmark/bm_vm_thread_close.rb b/benchmark/bm_vm_thread_close.rb
deleted file mode 100644
index 3e9a265ce8..0000000000
--- a/benchmark/bm_vm_thread_close.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-1000.times { Thread.new { sleep } }
-i = 0
-while i<100_000 # benchmark loop 3
- i += 1
- IO.pipe.each(&:close)
-end
diff --git a/benchmark/bm_vm_thread_create_join.rb b/benchmark/bm_vm_thread_create_join.rb
deleted file mode 100644
index 393cd45df9..0000000000
--- a/benchmark/bm_vm_thread_create_join.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-while i<100_000 # benchmark loop 3
- i += 1
- Thread.new{
- }.join
-end
diff --git a/benchmark/bm_vm_thread_mutex1.rb b/benchmark/bm_vm_thread_mutex1.rb
deleted file mode 100644
index 5c9f85dfb7..0000000000
--- a/benchmark/bm_vm_thread_mutex1.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# one thread, one mutex (no contention)
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-lmax = max * max
-(1..1).map{
- Thread.new{
- i = 0
- while i<lmax
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_mutex2.rb b/benchmark/bm_vm_thread_mutex2.rb
deleted file mode 100644
index 10de59054f..0000000000
--- a/benchmark/bm_vm_thread_mutex2.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# two threads, one mutex
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-lmax = (max * max)/2
-(1..2).map{
- Thread.new{
- i = 0
- while i<lmax
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_mutex3.rb b/benchmark/bm_vm_thread_mutex3.rb
deleted file mode 100644
index 7f9a44b39d..0000000000
--- a/benchmark/bm_vm_thread_mutex3.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# 1000 threads, one mutex
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-(1..max).map{
- Thread.new{
- i = 0
- while i<max
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_pass.rb b/benchmark/bm_vm_thread_pass.rb
deleted file mode 100644
index b5b3c0bc85..0000000000
--- a/benchmark/bm_vm_thread_pass.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Plenty Thtread.pass
-# A performance may depend on GVL implementation.
-
-tmax = (ARGV.shift || 2).to_i
-lmax = 200_000 / tmax
-
-(1..tmax).map{
- Thread.new{
- lmax.times{
- Thread.pass
- }
- }
-}.each{|t| t.join}
-
-
diff --git a/benchmark/bm_vm_thread_pass_flood.rb b/benchmark/bm_vm_thread_pass_flood.rb
deleted file mode 100644
index 27157d1a6f..0000000000
--- a/benchmark/bm_vm_thread_pass_flood.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-1000.times{
- Thread.new{loop{Thread.pass}}
-}
-
-i = 0
-while i<10000
- i += 1
-end
diff --git a/benchmark/bm_vm_thread_pipe.rb b/benchmark/bm_vm_thread_pipe.rb
deleted file mode 100644
index 112a621905..0000000000
--- a/benchmark/bm_vm_thread_pipe.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# Measure small and plenty pipe read/write.
-# A performance may depend on GVL implementation.
-
-lmax = 100_000
-r, w = IO.pipe
-[Thread.new{
- lmax.times{
- w.write('a')
- }
- p "w:exit"
-}, Thread.new{
- lmax.times{
- r.read(1)
- }
- p "r:exit"
-}].each{|t| t.join}
-
diff --git a/benchmark/bm_vm_thread_queue.rb b/benchmark/bm_vm_thread_queue.rb
deleted file mode 100644
index 37381ae62b..0000000000
--- a/benchmark/bm_vm_thread_queue.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'thread'
-
-n = 1_000_000
-q = Queue.new
-consumer = Thread.new{
- while q.pop
- # consuming
- end
-}
-
-producer = Thread.new{
- n.times{
- q.push true
- }
- q.push nil
-}
-
-consumer.join
diff --git a/benchmark/driver.rb b/benchmark/driver.rb
deleted file mode 100644
index defe3c30be..0000000000
--- a/benchmark/driver.rb
+++ /dev/null
@@ -1,400 +0,0 @@
-#
-# Ruby Benchmark driver
-#
-
-first = true
-
-begin
- require 'optparse'
-rescue LoadError
- if first
- first = false
- $:.unshift File.join(File.dirname(__FILE__), '../lib')
- retry
- else
- raise
- end
-end
-
-require 'benchmark'
-require 'pp'
-
-class BenchmarkDriver
- def self.benchmark(opt)
- driver = self.new(opt[:execs], opt[:dir], opt)
- begin
- driver.run
- ensure
- driver.show_results
- end
- end
-
- def self.load(input, type, opt)
- attrs = [:executables, :results]
- case type
- when 'yaml'
- require 'yaml'
- h = YAML.load(input)
- when 'json'
- require 'json'
- h = JSON.load(input)
- else
- h = eval(input.read)
- end
- obj = allocate
- obj.instance_variable_set("@execs", h[:executables] || h["executables"])
- obj.instance_variable_set("@results", h[:results] || h["results"])
- obj.instance_variable_set("@opt", opt)
- obj
- end
-
- def output *args
- puts(*args)
- @output and @output.puts(*args)
- end
-
- def message *args
- output(*args) if @verbose
- end
-
- def message_print *args
- if @verbose
- print(*args)
- STDOUT.flush
- @output and @output.print(*args)
- end
- end
-
- def progress_message *args
- unless STDOUT.tty?
- STDERR.print(*args)
- STDERR.flush
- end
- end
-
- def initialize execs, dir, opt = {}
- @execs = execs.map{|e|
- e.strip!
- next if e.empty?
-
- if /(.+)::(.+)/ =~ e
- # ex) ruby-a::/path/to/ruby-a
- label = $1.strip
- path = $2
- version = `#{path} -v`.chomp
- else
- path = e
- version = label = `#{path} -v`.chomp
- end
- [path, label, version]
- }.compact
-
- @dir = dir
- @repeat = opt[:repeat] || 1
- @repeat = 1 if @repeat < 1
- @pattern = opt[:pattern] || nil
- @exclude = opt[:exclude] || nil
- @verbose = opt[:quiet] ? false : (opt[:verbose] || false)
- @output = opt[:output] ? open(opt[:output], 'w') : nil
- @loop_wl1 = @loop_wl2 = nil
- @ruby_arg = opt[:ruby_arg] || nil
- @opt = opt
-
- # [[name, [[r-1-1, r-1-2, ...], [r-2-1, r-2-2, ...]]], ...]
- @results = []
-
- if @verbose
- @start_time = Time.now
- message @start_time
- @execs.each_with_index{|(path, label, version), i|
- message "target #{i}: " + (label == version ? "#{label}" : "#{label} (#{version})") + " at \"#{path}\""
- }
- end
- end
-
- def adjusted_results name, results
- s = nil
- results.each_with_index{|e, i|
- r = e.min
- case name
- when /^vm1_/
- if @loop_wl1
- r -= @loop_wl1[i]
- r = 0 if r < 0
- s = '*'
- end
- when /^vm2_/
- if @loop_wl2
- r -= @loop_wl2[i]
- r = 0 if r < 0
- s = '*'
- end
- end
- yield r
- }
- s
- end
-
- def show_results
- case @opt[:format]
- when :tsv
- strformat = "\t%1$s"
- numformat = "\t%1$*2$.3f"
- minwidth = 0
- name_width = 0
- when :markdown
- markdown = true
- strformat = "|%1$-*2$s"
- numformat = "|%1$*2$.3f"
- when :plain
- strformat = " %1$-*2$s"
- numformat = " %1$*2$.3f"
- end
-
- name_width ||= @results.map {|v,*| v.size}.max
- minwidth ||= 7
- width = @execs.map{|(_, v)| [v.size, minwidth].max}
-
- output
-
- if @verbose
- message '-----------------------------------------------------------'
- message 'raw data:'
- message
- message PP.pp(@results, "", 79)
- message
- message "Elapsed time: #{Time.now - @start_time} (sec)"
- end
-
- if rawdata_output = @opt[:rawdata_output]
- h = {}
- h[:cpuinfo] = File.read('/proc/cpuinfo') if File.exist?('/proc/cpuinfo')
- h[:executables] = @execs
- h[:results] = @results
- if (type = File.extname(rawdata_output)).empty?
- type = rawdata_output
- rawdata_output = @output.path.sub(/\.[^.\/]+\z/, '') << '.' << rawdata_output
- end
- case type
- when 'yaml'
- require 'yaml'
- h = YAML.dump(h)
- when 'json'
- require 'json'
- h = JSON.pretty_generate(h)
- else
- require 'pp'
- h = h.pretty_inspect
- end
- open(rawdata_output, 'w') {|f| f.puts h}
- end
-
- output '-----------------------------------------------------------'
- output 'benchmark results:'
-
- if @verbose and @repeat > 1
- output "minimum results in each #{@repeat} measurements."
- end
-
- output "Execution time (sec)"
- output if markdown
- output ["name".ljust(name_width), @execs.map.with_index{|(_, v), i| sprintf(strformat, v, width[i])}].join("").rstrip
- output ["-"*name_width, width.map{|n|":".rjust(n, "-")}].join("|") if markdown
- @results.each{|v, result|
- rets = []
- s = adjusted_results(v, result){|r|
- rets << sprintf(numformat, r, width[rets.size])
- }
- v += s if s
- output [v.ljust(name_width), rets].join("")
- }
-
- if @execs.size > 1
- output
- output "Speedup ratio: compare with the result of `#{@execs[0][1]}' (greater is better)"
- output if markdown
- output ["name".ljust(name_width), @execs[1..-1].map.with_index{|(_, v), i| sprintf(strformat, v, width[i])}].join("").rstrip
- output ["-"*name_width, width[1..-1].map{|n|":".rjust(n, "-")}].join("|") if markdown
- @results.each{|v, result|
- rets = []
- first_value = nil
- s = adjusted_results(v, result){|r|
- if first_value
- if r == 0
- rets << "Error"
- else
- rets << sprintf(numformat, first_value/r, width[rets.size+1])
- end
- else
- first_value = r
- end
- }
- v += s if s
- output [v.ljust(name_width), rets].join("")
- }
- end
-
- if @opt[:output]
- output
- output "Log file: #{@opt[:output]}"
- end
- end
-
- def files
- flag = {}
- @files = Dir.glob(File.join(@dir, 'bm*.rb')).map{|file|
- next if @pattern && /#{@pattern}/ !~ File.basename(file)
- next if @exclude && /#{@exclude}/ =~ File.basename(file)
- case file
- when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/
- flag[$1] = true
- end
- file
- }.compact
-
- if flag['vm1'] && !flag['whileloop']
- @files << File.join(@dir, 'bm_loop_whileloop.rb')
- elsif flag['vm2'] && !flag['whileloop2']
- @files << File.join(@dir, 'bm_loop_whileloop2.rb')
- end
-
- @files.sort!
- progress_message "total: #{@files.size * @repeat} trial(s) (#{@repeat} trial(s) for #{@files.size} benchmark(s))\n"
- @files
- end
-
- def run
- files.each_with_index{|file, i|
- @i = i
- r = measure_file(file)
-
- if /bm_loop_whileloop.rb/ =~ file
- @loop_wl1 = r[1].map{|e| e.min}
- elsif /bm_loop_whileloop2.rb/ =~ file
- @loop_wl2 = r[1].map{|e| e.min}
- end
- }
- end
-
- def measure_file file
- name = File.basename(file, '.rb').sub(/^bm_/, '')
- prepare_file = File.join(File.dirname(file), "prepare_#{name}.rb")
- load prepare_file if FileTest.exist?(prepare_file)
-
- if @verbose
- output
- output '-----------------------------------------------------------'
- output name
- output
- output File.read(file)
- output
- end
-
- result = [name]
- result << @execs.map{|(e, v)|
- (0...@repeat).map{
- message_print "#{v}\t"
- progress_message '.'
-
- m = measure(e, file)
- message "#{m}"
- m
- }
- }
- @results << result
- result
- end
-
- unless defined?(File::NULL)
- if File.exist?('/dev/null')
- File::NULL = '/dev/null'
- end
- end
-
- def measure executable, file
- cmd = "#{executable} #{@ruby_arg} #{file}"
-
- m = Benchmark.measure{
- system(cmd, out: File::NULL)
- }
-
- if $? != 0
- output "\`#{cmd}\' exited with abnormal status (#{$?})"
- 0
- else
- m.real
- end
- end
-end
-
-if __FILE__ == $0
- opt = {
- :execs => [],
- :dir => File.dirname(__FILE__),
- :repeat => 1,
- :output => nil,
- :raw_output => nil,
- :format => :tsv,
- }
- formats = {
- :tsv => ".tsv",
- :markdown => ".md",
- :plain => ".txt",
- }
-
- parser = OptionParser.new{|o|
- o.on('-e', '--executables [EXECS]',
- "Specify benchmark one or more targets (e1::path1; e2::path2; e3::path3;...)"){|e|
- e.split(/;/).each{|path|
- opt[:execs] << path
- }
- }
- o.on('-d', '--directory [DIRECTORY]', "Benchmark suites directory"){|d|
- opt[:dir] = d
- }
- o.on('-p', '--pattern [PATTERN]', "Benchmark name pattern"){|p|
- opt[:pattern] = p
- }
- o.on('-x', '--exclude [PATTERN]', "Benchmark exclude pattern"){|e|
- opt[:exclude] = e
- }
- o.on('-r', '--repeat-count [NUM]', "Repeat count"){|n|
- opt[:repeat] = n.to_i
- }
- o.on('-o', '--output-file [FILE]', "Output file"){|f|
- opt[:output] = f
- }
- o.on('--ruby-arg [ARG]', "Optional argument for ruby"){|a|
- opt[:ruby_arg] = a
- }
- o.on('--rawdata-output [FILE]', 'output rawdata'){|r|
- opt[:rawdata_output] = r
- }
- o.on('--load-rawdata=FILE', 'input rawdata'){|r|
- opt[:rawdata_input] = r
- }
- o.on('-f', "--format=FORMAT", "output format (#{formats.keys.join(",")})", formats.keys){|r|
- opt[:format] = r
- }
- o.on('-v', '--verbose'){|v|
- opt[:verbose] = v
- }
- o.on('-q', '--quiet', "Run without notify information except result table."){|q|
- opt[:quiet] = q
- opt[:verbose] = false
- }
- }
-
- parser.parse!(ARGV)
- opt[:output] ||= "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}#{formats[opt[:format]]}"
-
- if input = opt[:rawdata_input]
- b = open(input) {|f|
- BenchmarkDriver.load(f, File.extname(input)[1..-1], opt)
- }
- b.show_results
- else
- BenchmarkDriver.benchmark(opt)
- end
-end
-
diff --git a/benchmark/gc/aobench.rb b/benchmark/gc/aobench.rb
deleted file mode 100644
index 2eed7abc83..0000000000
--- a/benchmark/gc/aobench.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_app_aobench.rb'
diff --git a/benchmark/gc/binary_trees.rb b/benchmark/gc/binary_trees.rb
deleted file mode 100644
index af8ea722aa..0000000000
--- a/benchmark/gc/binary_trees.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_so_binary_trees.rb'
diff --git a/benchmark/gc/gcbench.rb b/benchmark/gc/gcbench.rb
deleted file mode 100644
index 09a404466a..0000000000
--- a/benchmark/gc/gcbench.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'benchmark'
-require 'pp'
-require 'optparse'
-
-$list = true
-$gcprof = true
-
-opt = OptionParser.new
-opt.on('-q'){$list = false}
-opt.on('-d'){$gcprof = false}
-opt.parse!(ARGV)
-
-script = File.join(File.dirname(__FILE__), ARGV.shift)
-script += '.rb' unless FileTest.exist?(script)
-raise "#{script} not found" unless FileTest.exist?(script)
-
-puts "Script: #{script}"
-
-if $gcprof
- GC::Profiler.enable
-end
-
-tms = Benchmark.measure{|x|
- load script
-}
-
-gc_time = 0
-
-if $gcprof
- gc_time = GC::Profiler.total_time
- GC::Profiler.report if $list and RUBY_VERSION >= '2.0.0' # before 1.9.3, report() may run infinite loop
- GC::Profiler.disable
-end
-
-pp GC.stat
-
-puts "#{RUBY_DESCRIPTION} #{GC::OPTS.inspect}" if defined?(GC::OPTS)
-
-desc = "#{RUBY_VERSION}#{RUBY_PATCHLEVEL >= 0 ? "p#{RUBY_PATCHLEVEL}" : "dev"}"
-name = File.basename(script, '.rb')
-
-puts
-puts script
-puts Benchmark::CAPTION
-puts tms
-puts "GC total time (sec): #{gc_time}"
-
-# show High-Water Mark on Linux
-if File.exist?('/proc/self/status') && /VmHWM:\s*(\d+.+)/ =~ File.read('/proc/self/status')
- puts
- puts "VmHWM: #{$1.chomp}"
-end
-
-puts
-puts "Summary of #{name} on #{desc}\t#{tms.real}\t#{gc_time}\t#{GC.count}"
-puts " (real time in sec, GC time in sec, GC count)"
diff --git a/benchmark/gc/hash1.rb b/benchmark/gc/hash1.rb
deleted file mode 100644
index cb030d458d..0000000000
--- a/benchmark/gc/hash1.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-value = 0.01
-h = {}
-n = 50_000
-
-1.upto(n){|i|
- h["%020d" % i] = "v-#{i}"
-}
-
-(n * 1_000).times{
- ''
-}
diff --git a/benchmark/gc/hash2.rb b/benchmark/gc/hash2.rb
deleted file mode 100644
index e8c943fb21..0000000000
--- a/benchmark/gc/hash2.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-value = 0.01
-h = {}
-n = 4*(10**6)
-
-1.upto(n){|i|
- h["%020d" % i] = value * i
-}
diff --git a/benchmark/gc/null.rb b/benchmark/gc/null.rb
deleted file mode 100644
index c05a79f561..0000000000
--- a/benchmark/gc/null.rb
+++ /dev/null
@@ -1 +0,0 @@
-# null
diff --git a/benchmark/gc/pentomino.rb b/benchmark/gc/pentomino.rb
deleted file mode 100644
index 94ba74be89..0000000000
--- a/benchmark/gc/pentomino.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_app_pentomino.rb'
diff --git a/benchmark/gc/rdoc.rb b/benchmark/gc/rdoc.rb
deleted file mode 100644
index 14c89f5611..0000000000
--- a/benchmark/gc/rdoc.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'rdoc/rdoc'
-require 'tmpdir'
-
-srcdir = File.expand_path('../..', __dir__)
-
-Dir.mktmpdir('rdocbench-'){|d|
- dir = File.join(d, 'rdocbench')
- args = %W(--root #{srcdir} --page-dir #{srcdir}/doc --encoding=UTF-8 --no-force-update --all --ri --debug --quiet #{srcdir})
- args << '--op' << dir
-
- r = RDoc::RDoc.new
- r.document args
-}
diff --git a/benchmark/gc/redblack.rb b/benchmark/gc/redblack.rb
deleted file mode 100644
index c66290140a..0000000000
--- a/benchmark/gc/redblack.rb
+++ /dev/null
@@ -1,366 +0,0 @@
-# This benchmark is imported from https://github.com/jruby/rubybench/blob/master/time/bench_red_black.rb
-# License is License is Apache-2
-
-require 'benchmark'
-
-# Algorithm based on "Introduction to Algorithms" by Cormen and others
-class RedBlackTree
- class Node
- attr_accessor :color
- attr_accessor :key
- attr_accessor :left
- attr_accessor :right
- attr_accessor :parent
-
- RED = :red
- BLACK = :black
- COLORS = [RED, BLACK].freeze
-
- def initialize(key, color = RED)
- raise ArgumentError, "Bad value for color parameter" unless COLORS.include?(color)
- @color = color
- @key = key
- @left = @right = @parent = NilNode.instance
- end
-
- def black?
- return color == BLACK
- end
-
- def red?
- return color == RED
- end
- end
-
- class NilNode < Node
- class << self
- private :new
-
- # it's not thread safe
- def instance
- @instance ||= begin
- def instance
- return @instance
- end
-
- new
- end
- end
- end
-
- def initialize
- self.color = BLACK
- self.key = 0
- self.left = nil
- self.right = nil
- self.parent = nil
- end
-
- def nil?
- return true
- end
- end
-
- include Enumerable
-
- attr_accessor :root
- attr_accessor :size
-
- def initialize
- self.root = NilNode.instance
- self.size = 0
- end
-
- def add(key)
- insert(Node.new(key))
- end
-
- def insert(x)
- insert_helper(x)
-
- x.color = Node::RED
- while x != root && x.parent.color == Node::RED
- if x.parent == x.parent.parent.left
- y = x.parent.parent.right
- if !y.nil? && y.color == Node::RED
- x.parent.color = Node::BLACK
- y.color = Node::BLACK
- x.parent.parent.color = Node::RED
- x = x.parent.parent
- else
- if x == x.parent.right
- x = x.parent
- left_rotate(x)
- end
- x.parent.color = Node::BLACK
- x.parent.parent.color = Node::RED
- right_rotate(x.parent.parent)
- end
- else
- y = x.parent.parent.left
- if !y.nil? && y.color == Node::RED
- x.parent.color = Node::BLACK
- y.color = Node::BLACK
- x.parent.parent.color = Node::RED
- x = x.parent.parent
- else
- if x == x.parent.left
- x = x.parent
- right_rotate(x)
- end
- x.parent.color = Node::BLACK
- x.parent.parent.color = Node::RED
- left_rotate(x.parent.parent)
- end
- end
- end
- root.color = Node::BLACK
- end
-
- alias << insert
-
- def delete(z)
- y = (z.left.nil? || z.right.nil?) ? z : successor(z)
- x = y.left.nil? ? y.right : y.left
- x.parent = y.parent
-
- if y.parent.nil?
- self.root = x
- else
- if y == y.parent.left
- y.parent.left = x
- else
- y.parent.right = x
- end
- end
-
- z.key = y.key if y != z
-
- if y.color == Node::BLACK
- delete_fixup(x)
- end
-
- self.size -= 1
- return y
- end
-
- def minimum(x = root)
- while !x.left.nil?
- x = x.left
- end
- return x
- end
-
- def maximum(x = root)
- while !x.right.nil?
- x = x.right
- end
- return x
- end
-
- def successor(x)
- if !x.right.nil?
- return minimum(x.right)
- end
- y = x.parent
- while !y.nil? && x == y.right
- x = y
- y = y.parent
- end
- return y
- end
-
- def predecessor(x)
- if !x.left.nil?
- return maximum(x.left)
- end
- y = x.parent
- while !y.nil? && x == y.left
- x = y
- y = y.parent
- end
- return y
- end
-
- def inorder_walk(x = root)
- x = self.minimum
- while !x.nil?
- yield x.key
- x = successor(x)
- end
- end
-
- alias each inorder_walk
-
- def reverse_inorder_walk(x = root)
- x = self.maximum
- while !x.nil?
- yield x.key
- x = predecessor(x)
- end
- end
-
- alias reverse_each reverse_inorder_walk
-
- def search(key, x = root)
- while !x.nil? && x.key != key
- key < x.key ? x = x.left : x = x.right
- end
- return x
- end
-
- def empty?
- return self.root.nil?
- end
-
- def black_height(x = root)
- height = 0
- while !x.nil?
- x = x.left
- height +=1 if x.nil? || x.black?
- end
- return height
- end
-
-private
-
- def left_rotate(x)
- raise "x.right is nil!" if x.right.nil?
- y = x.right
- x.right = y.left
- y.left.parent = x if !y.left.nil?
- y.parent = x.parent
- if x.parent.nil?
- self.root = y
- else
- if x == x.parent.left
- x.parent.left = y
- else
- x.parent.right = y
- end
- end
- y.left = x
- x.parent = y
- end
-
- def right_rotate(x)
- raise "x.left is nil!" if x.left.nil?
- y = x.left
- x.left = y.right
- y.right.parent = x if !y.right.nil?
- y.parent = x.parent
- if x.parent.nil?
- self.root = y
- else
- if x == x.parent.left
- x.parent.left = y
- else
- x.parent.right = y
- end
- end
- y.right = x
- x.parent = y
- end
-
- def insert_helper(z)
- y = NilNode.instance
- x = root
- while !x.nil?
- y = x
- z.key < x.key ? x = x.left : x = x.right
- end
- z.parent = y
- if y.nil?
- self.root = z
- else
- z.key < y.key ? y.left = z : y.right = z
- end
- self.size += 1
- end
-
- def delete_fixup(x)
- while x != root && x.color == Node::BLACK
- if x == x.parent.left
- w = x.parent.right
- if w.color == Node::RED
- w.color = Node::BLACK
- x.parent.color = Node::RED
- left_rotate(x.parent)
- w = x.parent.right
- end
- if w.left.color == Node::BLACK && w.right.color == Node::BLACK
- w.color = Node::RED
- x = x.parent
- else
- if w.right.color == Node::BLACK
- w.left.color = Node::BLACK
- w.color = Node::RED
- right_rotate(w)
- w = x.parent.right
- end
- w.color = x.parent.color
- x.parent.color = Node::BLACK
- w.right.color = Node::BLACK
- left_rotate(x.parent)
- x = root
- end
- else
- w = x.parent.left
- if w.color == Node::RED
- w.color = Node::BLACK
- x.parent.color = Node::RED
- right_rotate(x.parent)
- w = x.parent.left
- end
- if w.right.color == Node::BLACK && w.left.color == Node::BLACK
- w.color = Node::RED
- x = x.parent
- else
- if w.left.color == Node::BLACK
- w.right.color = Node::BLACK
- w.color = Node::RED
- left_rotate(w)
- w = x.parent.left
- end
- w.color = x.parent.color
- x.parent.color = Node::BLACK
- w.left.color = Node::BLACK
- right_rotate(x.parent)
- x = root
- end
- end
- end
- x.color = Node::BLACK
- end
-end
-
-def rbt_bm
- n = 100_000
- a1 = []; n.times { a1 << rand(999_999) }
- a2 = []; n.times { a2 << rand(999_999) }
-
- start = Time.now
-
- tree = RedBlackTree.new
-
- n.times {|i| tree.add(i) }
- n.times { tree.delete(tree.root) }
-
- tree = RedBlackTree.new
- a1.each {|e| tree.add(e) }
- a2.each {|e| tree.search(e) }
- tree.inorder_walk {|key| key + 1 }
- tree.reverse_inorder_walk {|key| key + 1 }
- n.times { tree.minimum }
- n.times { tree.maximum }
-
- return Time.now - start
-end
-
-N = (ARGV[0] || 10).to_i
-
-N.times do
- # puts rbt_bm.to_f
- rbt_bm.to_f
- # puts "GC.count = #{GC.count}" if GC.respond_to?(:count)
-end
diff --git a/benchmark/gc/ring.rb b/benchmark/gc/ring.rb
deleted file mode 100644
index be2c7b7250..0000000000
--- a/benchmark/gc/ring.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# create many old objects
-
-max = 30_000_000
-
-class Ring
- attr_reader :next_ring
- def initialize n = nil
- @next_ring = n
- end
-
-
- def size
- s = 1
- ring = self
- while ring.next_ring
- s += 1
- ring = ring.next_ring
- end
- s
- end
-end
-
-ring = Ring.new
-
-max.times{
- ring = Ring.new(ring)
-}
-
-# p ring.size
diff --git a/benchmark/make_fasta_output.rb b/benchmark/make_fasta_output.rb
deleted file mode 100644
index b6d787ae27..0000000000
--- a/benchmark/make_fasta_output.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# prepare 'fasta.output'
-
-def prepare_fasta_output n
- filebase = File.join(File.dirname($0), 'fasta.output')
- script = File.join(File.dirname($0), 'bm_so_fasta.rb')
- file = "#{filebase}.#{n}"
-
- unless FileTest.exist?(file)
- STDERR.puts "preparing #{file}"
-
- open(file, 'w'){|f|
- ARGV[0] = n
- $stdout = f
- load script
- $stdout = STDOUT
- }
- end
-end
-
diff --git a/benchmark/other-lang/ack.pl b/benchmark/other-lang/ack.pl
deleted file mode 100644
index 201e22ddfa..0000000000
--- a/benchmark/other-lang/ack.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-use integer;
-
-sub Ack {
- return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
- : Ack($_[0]-1, 1))
- : $_[1]+1;
-}
-
-my $NUM = 9;
-$NUM = 1 if ($NUM < 1);
-my $ack = Ack(3, $NUM);
diff --git a/benchmark/other-lang/ack.py b/benchmark/other-lang/ack.py
deleted file mode 100644
index 9968e7cfcf..0000000000
--- a/benchmark/other-lang/ack.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import sys
-sys.setrecursionlimit(5000000)
-
-def Ack(M, N):
- if (not M):
- return( N + 1 )
- if (not N):
- return( Ack(M-1, 1) )
- return( Ack(M-1, Ack(M, N-1)) )
-
-def main():
- NUM = 9
- sys.setrecursionlimit(10000)
- Ack(3, NUM)
-
-main()
diff --git a/benchmark/other-lang/ack.rb b/benchmark/other-lang/ack.rb
deleted file mode 100644
index 7451bed6c4..0000000000
--- a/benchmark/other-lang/ack.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-def ack(m, n)
- if m == 0 then
- n + 1
- elsif n == 0 then
- ack(m - 1, 1)
- else
- ack(m - 1, ack(m, n - 1))
- end
-end
-
-NUM = 9
-ack(3, NUM)
diff --git a/benchmark/other-lang/ack.scm b/benchmark/other-lang/ack.scm
deleted file mode 100644
index a80b73ba55..0000000000
--- a/benchmark/other-lang/ack.scm
+++ /dev/null
@@ -1,7 +0,0 @@
-(define (ack m n)
- (cond ((zero? m) (+ n 1))
- ((zero? n) (ack (- m 1) 1))
- (else (ack (- m 1) (ack m (- n 1))))))
-
-(ack 3 9)
-
diff --git a/benchmark/other-lang/eval.rb b/benchmark/other-lang/eval.rb
deleted file mode 100644
index 48a2cea019..0000000000
--- a/benchmark/other-lang/eval.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-
-Bench = %w(
- loop
- ack
- fib
- tak
- fact
-)
-
-Lang = <<EOP.map{|l| l.strip}
- ruby-cyg
- ../../../test6/miniruby
- perl
- python
- gosh
-EOP
-
-Bench.replace ['loop2']
-Lang.replace ['ruby-cyg']
-
-Ext = %w(
- .rb
- .rb
- .pl
- .py
- .scm
-)
-
-p Bench
-p Lang
-
-require 'benchmark'
-
-def bench cmd
- m = Benchmark.measure{
- #p cmd
- system(cmd)
- }
- [m.utime, m.real]
-end
-
-Result = []
-Bench.each{|b|
- r = []
- Lang.each_with_index{|l, idx|
- cmd = "#{l} #{b}#{Ext[idx]}"
- r << bench(cmd)
- }
- Result << r
-}
-
-require 'pp'
-# utime
-puts Lang.join("\t")
-Bench.each_with_index{|b, bi|
- print b, "\t"
- puts Result[bi].map{|e| e[0]}.join("\t")
-}
-
-# rtime
-puts Lang.join("\t")
-Bench.each_with_index{|b, bi|
- print b, "\t"
- puts Result[bi].map{|e| e[1]}.join("\t")
-}
-
diff --git a/benchmark/other-lang/fact.pl b/benchmark/other-lang/fact.pl
deleted file mode 100644
index a9b0b69cdf..0000000000
--- a/benchmark/other-lang/fact.pl
+++ /dev/null
@@ -1,13 +0,0 @@
-sub fact{
- my $n = @_[0];
- if($n < 2){
- return 1;
- }
- else{
- return $n * fact($n-1);
- }
-}
-
-for($i=0; $i<10000; $i++){
- &fact(100);
-}
diff --git a/benchmark/other-lang/fact.py b/benchmark/other-lang/fact.py
deleted file mode 100644
index 01593965d9..0000000000
--- a/benchmark/other-lang/fact.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#import sys
-#sys.setrecursionlimit(1000)
-
-def factL(n):
- r = 1
- for x in range(2, n):
- r *= x
- return r
-
-def factR(n):
- if n < 2:
- return 1
- else:
- return n * factR(n-1)
-
-for i in range(10000):
- factR(100)
-
diff --git a/benchmark/other-lang/fact.rb b/benchmark/other-lang/fact.rb
deleted file mode 100644
index 6cedc752cd..0000000000
--- a/benchmark/other-lang/fact.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-def fact(n)
- if n < 2
- 1
- else
- n * fact(n-1)
- end
-end
-
-i = 0
-while i<10000
- i += 1
- fact(100)
-end
diff --git a/benchmark/other-lang/fact.scm b/benchmark/other-lang/fact.scm
deleted file mode 100644
index c98a7fedd3..0000000000
--- a/benchmark/other-lang/fact.scm
+++ /dev/null
@@ -1,8 +0,0 @@
-(define (fact n)
- (if (< n 2)
- 1
- (* n (fact (- n 1)))))
-
-(dotimes (i 10000)
- (fact 100))
-
diff --git a/benchmark/other-lang/fib.pl b/benchmark/other-lang/fib.pl
deleted file mode 100644
index a46f666d1e..0000000000
--- a/benchmark/other-lang/fib.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-sub fib{
- my $n = $_[0];
- if($n < 3){
- return 1;
- }
- else{
- return fib($n-1) + fib($n-2);
- }
-};
-
-&fib(34);
diff --git a/benchmark/other-lang/fib.py b/benchmark/other-lang/fib.py
deleted file mode 100644
index 45f2bceb8d..0000000000
--- a/benchmark/other-lang/fib.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def fib(n):
- if n < 3:
- return 1
- else:
- return fib(n-1) + fib(n-2)
-
-fib(34)
diff --git a/benchmark/other-lang/fib.rb b/benchmark/other-lang/fib.rb
deleted file mode 100644
index ec587eabe0..0000000000
--- a/benchmark/other-lang/fib.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def fib n
- if n < 3
- 1
- else
- fib(n-1) + fib(n-2)
- end
-end
-
-fib(34)
diff --git a/benchmark/other-lang/fib.scm b/benchmark/other-lang/fib.scm
deleted file mode 100644
index 2fc4e225bd..0000000000
--- a/benchmark/other-lang/fib.scm
+++ /dev/null
@@ -1,7 +0,0 @@
-(define (fib n)
- (if (< n 3)
- 1
- (+ (fib (- n 1)) (fib (- n 2)))))
-
-(fib 34)
-
diff --git a/benchmark/other-lang/loop.pl b/benchmark/other-lang/loop.pl
deleted file mode 100644
index 2777490aaa..0000000000
--- a/benchmark/other-lang/loop.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-for($i=0; $i<30000000; $i++){
-}
-
diff --git a/benchmark/other-lang/loop.py b/benchmark/other-lang/loop.py
deleted file mode 100644
index 003749bf3a..0000000000
--- a/benchmark/other-lang/loop.py
+++ /dev/null
@@ -1,2 +0,0 @@
-for i in xrange(30000000):
- pass
diff --git a/benchmark/other-lang/loop.rb b/benchmark/other-lang/loop.rb
deleted file mode 100644
index b367b9dbf3..0000000000
--- a/benchmark/other-lang/loop.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-i = 0
-while i<30000000
- i += 1
-end
diff --git a/benchmark/other-lang/loop.scm b/benchmark/other-lang/loop.scm
deleted file mode 100644
index 3364f7e679..0000000000
--- a/benchmark/other-lang/loop.scm
+++ /dev/null
@@ -1 +0,0 @@
-(dotimes (x 30000000))
diff --git a/benchmark/other-lang/loop2.rb b/benchmark/other-lang/loop2.rb
deleted file mode 100644
index df8fffc1ff..0000000000
--- a/benchmark/other-lang/loop2.rb
+++ /dev/null
@@ -1 +0,0 @@
-30000000.times{}
diff --git a/benchmark/other-lang/tak.pl b/benchmark/other-lang/tak.pl
deleted file mode 100644
index 7e748a67c6..0000000000
--- a/benchmark/other-lang/tak.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-sub tak {
- local($x, $y, $z) = @_;
- if (!($y < $x)) {
- return $z;
- } else {
- return &tak(&tak($x - 1, $y, $z),
- &tak($y - 1, $z, $x),
- &tak($z - 1, $x, $y));
- }
-}
-&tak(18, 9, 0);
diff --git a/benchmark/other-lang/tak.py b/benchmark/other-lang/tak.py
deleted file mode 100644
index 04f3f6829c..0000000000
--- a/benchmark/other-lang/tak.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def tak(x, y, z):
- if not(y<x):
- return z
- else:
- return tak(tak(x-1, y, z),
- tak(y-1, z, x),
- tak(z-1, x, y))
-tak(18, 9, 0)
diff --git a/benchmark/other-lang/tak.rb b/benchmark/other-lang/tak.rb
deleted file mode 100644
index efe5380f4e..0000000000
--- a/benchmark/other-lang/tak.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-
-def tak x, y, z
- unless y < x
- z
- else
- tak( tak(x-1, y, z),
- tak(y-1, z, x),
- tak(z-1, x, y))
- end
-end
-
-tak(18, 9, 0)
-
diff --git a/benchmark/other-lang/tak.scm b/benchmark/other-lang/tak.scm
deleted file mode 100644
index 52a7629ee5..0000000000
--- a/benchmark/other-lang/tak.scm
+++ /dev/null
@@ -1,10 +0,0 @@
-(define (tak x y z)
- (if (not (< y x))
- z
- (tak (tak (- x 1) y z)
- (tak (- y 1) z x)
- (tak (- z 1) x y))))
-
-(tak 18 9 0)
-
-
diff --git a/benchmark/prepare_require.rb b/benchmark/prepare_require.rb
deleted file mode 100644
index c4786f04ad..0000000000
--- a/benchmark/prepare_require.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require "fileutils"
-
-def prepare
- num_files = 10000
-
- basename = File.dirname($0)
- data_dir = File.join(basename, "bm_require.data")
-
- # skip if all of files exists
- if File.exist?(File.join(data_dir, "c#{num_files}.rb"))
- return
- end
-
- FileUtils.mkdir_p(data_dir)
-
- 1.upto(num_files) do |i|
- f = File.open("#{data_dir}/c#{i}.rb", "w")
- f.puts <<-END
- class C#{i}
- end
- END
- end
-end
-
-prepare
diff --git a/benchmark/prepare_require_thread.rb b/benchmark/prepare_require_thread.rb
deleted file mode 100644
index 339ecb8b39..0000000000
--- a/benchmark/prepare_require_thread.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-load File.join(File.dirname(__FILE__), "prepare_require.rb")
-
diff --git a/benchmark/prepare_so_count_words.rb b/benchmark/prepare_so_count_words.rb
deleted file mode 100644
index ee2138cdb2..0000000000
--- a/benchmark/prepare_so_count_words.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# prepare 'wc.input'
-
-def prepare_wc_input
- wcinput = File.join(File.dirname($0), 'wc.input')
- wcbase = File.join(File.dirname($0), 'wc.input.base')
- unless FileTest.exist?(wcinput)
- data = File.read(wcbase)
- 13.times{
- data << data
- }
- open(wcinput, 'w'){|f| f.write data}
- end
-end
-
-prepare_wc_input
diff --git a/benchmark/prepare_so_k_nucleotide.rb b/benchmark/prepare_so_k_nucleotide.rb
deleted file mode 100644
index d83aeb7a7e..0000000000
--- a/benchmark/prepare_so_k_nucleotide.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require_relative 'make_fasta_output'
-prepare_fasta_output(100_000)
diff --git a/benchmark/prepare_so_reverse_complement.rb b/benchmark/prepare_so_reverse_complement.rb
deleted file mode 100644
index da3ec2df14..0000000000
--- a/benchmark/prepare_so_reverse_complement.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require_relative 'make_fasta_output'
-prepare_fasta_output(2_500_000)
diff --git a/benchmark/report.rb b/benchmark/report.rb
deleted file mode 100644
index d2dc56b1e1..0000000000
--- a/benchmark/report.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# YARV benchmark driver
-#
-
-require 'yarvutil'
-require 'benchmark'
-require 'rbconfig'
-
-def exec_command type, file, w
- <<-EOP
- $DRIVER_PATH = '#{File.dirname($0)}'
- $LOAD_PATH.replace $LOAD_PATH | #{$LOAD_PATH.inspect}
- require 'benchmark'
- require 'yarvutil'
-# print '#{type}'
- begin
- puts Benchmark.measure{
- #{w}('#{file}')
- }.utime
- rescue Exception => exec_command_error_variable
- puts "\t" + exec_command_error_variable.message
- end
- EOP
-end
-
-def benchmark cmd
- rubybin = ENV['RUBY'] || RbConfig.ruby
-
- IO.popen(rubybin, 'r+'){|io|
- io.write cmd
- io.close_write
- return io.gets
- }
-end
-
-def ruby_exec file
- prog = exec_command 'ruby', file, 'load'
- benchmark prog
-end
-
-def yarv_exec file
- prog = exec_command 'yarv', file, 'YARVUtil.load_bm'
- benchmark prog
-end
-
-$wr = $wy = nil
-
-def measure bench
- file = File.dirname($0) + "/bm_#{bench}.rb"
- r = ruby_exec(file).to_f
- y = yarv_exec(file).to_f
- puts "#{bench}\t#{r}\t#{y}"
-end
-
-def measure2
- r = ruby_exec.to_f
- y = yarv_exec.to_f
- puts r/y
-end
-
-if $0 == __FILE__
- %w{
- whileloop
- whileloop2
- times
- const
- method
- poly_method
- block
- rescue
- rescue2
- }.each{|bench|
- measure bench
- }
-end
-
-
-
-
diff --git a/benchmark/run.rb b/benchmark/run.rb
deleted file mode 100644
index 0cd2363849..0000000000
--- a/benchmark/run.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# Ruby benchmark driver
-#
-
-require 'benchmark'
-require 'rbconfig'
-
-$matzrubyonly = false
-$rubyonly = false
-
-$results = []
-
-# prepare 'wc.input'
-def prepare_wc_input
- wcinput = File.join(File.dirname($0), 'wc.input')
- wcbase = File.join(File.dirname($0), 'wc.input.base')
- unless FileTest.exist?(wcinput)
- data = File.read(wcbase)
- 13.times{
- data << data
- }
- open(wcinput, 'w'){|f| f.write data}
- end
-end
-
-prepare_wc_input
-
-def bm file
- prog = File.readlines(file).map{|e| e.rstrip}.join("\n")
- return if prog.empty?
-
- /[a-z]+_(.+)\.rb/ =~ file
- bm_name = $1
- puts '-----------------------------------------------------------' unless $rubyonly || $matzrubyonly
- puts "#{bm_name}: "
-
-
-puts <<EOS unless $matzrubyonly || $rubyonly
-#{prog}
---
-EOS
- begin
- result = [bm_name]
- result << matzruby_exec(file) unless $rubyonly
- result << ruby_exec(file) unless $matzrubyonly
- $results << result
-
- rescue Exception => e
- puts
- puts "** benchmark failure: #{e}"
- puts e.backtrace
- end
-end
-
-def benchmark file, bin
- m = Benchmark.measure{
- `#{bin} #{$opts} #{file}`
- }
- sec = '%.3f' % m.real
- puts " #{sec}"
- sec
-end
-
-def ruby_exec file
- print 'ruby'
- benchmark file, $ruby_program
-end
-
-def matzruby_exec file
- print 'matz'
- rubylib = ENV['RUBYLIB']
- ENV['RUBYLIB'] = ''
- r = benchmark file, $matzruby_program
- ENV['RUBYLIB'] = rubylib
- r
-end
-
-if $0 == __FILE__
- ARGV.each{|arg|
- case arg
- when /\A--ruby=(.+)/
- $ruby_program = $1
- when /\A--matzruby=(.+)/
- $matzruby_program = $1
- when /\A--opts=(.+)/
- $opts = $1
- when /\A(-r|--only-ruby)\z/
- $rubyonly = true
- when /\A(-m|--only-matzruby)\z/
- $matzrubyonly = true
- end
- }
- ARGV.delete_if{|arg|
- /\A-/ =~ arg
- }
-
- puts "MatzRuby:"
- system("#{$matzruby_program} -v")
- puts "Ruby:"
- system("#{$ruby_program} -v")
- puts
-
- if ARGV.empty?
- Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
- bm file
- }
- else
- ARGV.each{|file|
- Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
- # file = "#{File.dirname(__FILE__)}/#{file}.rb"
- bm ef
- }
- }
- end
-
- puts
- puts "-- benchmark summary ---------------------------"
- $results.each{|res|
- print res.shift, "\t"
- (res||[]).each{|result|
- /([\d\.]+)/ =~ result
- print $1 + "\t" if $1
- }
- puts
- }
-end
-
diff --git a/benchmark/runc.rb b/benchmark/runc.rb
deleted file mode 100644
index 97c5cef045..0000000000
--- a/benchmark/runc.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-#
-
-require 'benchmark'
-require 'rbconfig'
-
-$rubybin = ENV['RUBY'] || RbConfig.ruby
-
-def runfile file
- puts file
- file = File.join(File.dirname($0), 'contrib', file)
- Benchmark.bm{|x|
- x.report('ruby'){
- system("#{$rubybin} #{file}")
- }
- x.report('yarv'){
- system("#{$rubybin} -rite -I.. #{file}")
- }
- }
-end
-
-ARGV.each{|file|
- runfile file
-}
-
-
diff --git a/benchmark/wc.input.base b/benchmark/wc.input.base
deleted file mode 100644
index 41143fbac0..0000000000
--- a/benchmark/wc.input.base
+++ /dev/null
@@ -1,25 +0,0 @@
-Subject: Re: Who was Izchak Miller?
-From: "Jane D. Anonymous" <nobody@yale.edu>
-Date: 1996/04/28
-Message-Id: <4lv7bc$oh@news.ycc.yale.edu>
-References: <317C405E.5DFA@panix.com> <4lk6vl$gde@ns.oar.net>
-To: 75176.2330@compuserve.com
-Content-Type: text/plain; charset=us-ascii
-Organization: Yale University
-X-Url: news:4lk6vl$gde@ns.oar.net
-Mime-Version: 1.0
-Newsgroups: rec.games.roguelike.nethack
-X-Mailer: Mozilla 1.1N (Macintosh; I; 68K)
-
-Hello there, Izchak Miller was my father. When I was younger I spent
-many a night, hunched over the keyboard with a cup of tea, playing
-nethack with him and my brother. my dad was a philosopher with a strong
-weakness for fantasy/sci fi. I remember when he started to get involved
-with the Nethack team- my brother's Dungeons and Dragons monster book
-found a regular place beside my dad's desk. it's nice to see him living
-on in the game he loved so much :-).
- Tamar Miller
-
-The following is a really long word of 5000 characters:
-
-wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
diff --git a/bignum.c b/bignum.c
index cdb84c600d..c23b76b1fe 100644
--- a/bignum.c
+++ b/bignum.c
@@ -3,3981 +3,382 @@
bignum.c -
$Author$
+ $Date$
created at: Fri Jun 10 00:48:55 JST 1994
- Copyright (C) 1993-2007 Yukihiro Matsumoto
+ Copyright (C) 1993-2003 Yukihiro Matsumoto
**********************************************************************/
-#include "internal.h"
-#include "ruby/thread.h"
-#include "ruby/util.h"
+#include "ruby.h"
+#include "rubysig.h"
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
#include <math.h>
-#include <float.h>
#include <ctype.h>
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
-#include <assert.h>
-
-#if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
-#define USE_GMP
-#include <gmp.h>
-#endif
-
-#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
VALUE rb_cBignum;
-const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
-#ifndef SIZEOF_BDIGIT_DBL
-# if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
-# define SIZEOF_BDIGIT_DBL SIZEOF_LONG_LONG
-# else
-# define SIZEOF_BDIGIT_DBL SIZEOF_LONG
-# endif
-#endif
-STATIC_ASSERT(sizeof_bdigit_dbl, sizeof(BDIGIT_DBL) == SIZEOF_BDIGIT_DBL);
-STATIC_ASSERT(sizeof_bdigit_dbl_signed, sizeof(BDIGIT_DBL_SIGNED) == SIZEOF_BDIGIT_DBL);
-STATIC_ASSERT(sizeof_bdigit, SIZEOF_BDIGIT <= sizeof(BDIGIT));
-STATIC_ASSERT(sizeof_bdigit_and_dbl, SIZEOF_BDIGIT*2 <= SIZEOF_BDIGIT_DBL);
-STATIC_ASSERT(bdigit_signedness, 0 < (BDIGIT)-1);
-STATIC_ASSERT(bdigit_dbl_signedness, 0 < (BDIGIT_DBL)-1);
-STATIC_ASSERT(bdigit_dbl_signed_signedness, 0 > (BDIGIT_DBL_SIGNED)-1);
-STATIC_ASSERT(rbignum_embed_len_max, BIGNUM_EMBED_LEN_MAX <= (BIGNUM_EMBED_LEN_MASK >> BIGNUM_EMBED_LEN_SHIFT));
-
-#if SIZEOF_BDIGIT < SIZEOF_LONG
-STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_LONG % SIZEOF_BDIGIT == 0);
-#else
-STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0);
+#if defined __MINGW32__
+#define USHORT _USHORT
#endif
-#ifdef WORDS_BIGENDIAN
-# define HOST_BIGENDIAN_P 1
-#else
-# define HOST_BIGENDIAN_P 0
-#endif
-#define ALIGNOF(type) ((int)offsetof(struct { char f1; type f2; }, f2))
-/* (!LSHIFTABLE(d, n) ? 0 : (n)) is same as n but suppress a warning, C4293, by Visual Studio. */
-#define LSHIFTABLE(d, n) ((n) < sizeof(d) * CHAR_BIT)
-#define LSHIFTX(d, n) (!LSHIFTABLE(d, n) ? 0 : ((d) << (!LSHIFTABLE(d, n) ? 0 : (n))))
-#define CLEAR_LOWBITS(d, numbits) ((d) & LSHIFTX(~((d)*0), (numbits)))
-#define FILL_LOWBITS(d, numbits) ((d) | (LSHIFTX(((d)*0+1), (numbits))-1))
-#define POW2_P(x) (((x)&((x)-1))==0)
-
-#define BDIGITS(x) (BIGNUM_DIGITS(x))
-#define BITSPERDIG (SIZEOF_BDIGIT*CHAR_BIT)
+#define BDIGITS(x) ((BDIGIT*)RBIGNUM(x)->digits)
+#define BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)
#define BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)
-#define BIGRAD_HALF ((BDIGIT)(BIGRAD >> 1))
-#define BDIGIT_MSB(d) (((d) & BIGRAD_HALF) != 0)
-#define BIGUP(x) LSHIFTX(((x) + (BDIGIT_DBL)0), BITSPERDIG)
-#define BIGDN(x) RSHIFT((x),BITSPERDIG)
-#define BIGLO(x) ((BDIGIT)((x) & BDIGMAX))
-#define BDIGMAX ((BDIGIT)(BIGRAD-1))
-#define BDIGIT_DBL_MAX (~(BDIGIT_DBL)0)
-
-#if SIZEOF_BDIGIT == 2
-# define swap_bdigit(x) swap16(x)
-#elif SIZEOF_BDIGIT == 4
-# define swap_bdigit(x) swap32(x)
-#elif SIZEOF_BDIGIT == 8
-# define swap_bdigit(x) swap64(x)
+#define DIGSPERLONG ((unsigned int)(SIZEOF_LONG/SIZEOF_BDIGITS))
+#if HAVE_LONG_LONG
+# define DIGSPERLL ((unsigned int)(SIZEOF_LONG_LONG/SIZEOF_BDIGITS))
#endif
+#define BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG)
+#define BIGDN(x) RSHIFT(x,BITSPERDIG)
+#define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1)))
+#define BDIGMAX ((BDIGIT)-1)
-#define BIGZEROP(x) (BIGNUM_LEN(x) == 0 || \
+#define BIGZEROP(x) (RBIGNUM(x)->len == 0 || \
(BDIGITS(x)[0] == 0 && \
- (BIGNUM_LEN(x) == 1 || bigzero_p(x))))
-#define BIGSIZE(x) (BIGNUM_LEN(x) == 0 ? (size_t)0 : \
- BDIGITS(x)[BIGNUM_LEN(x)-1] ? \
- (size_t)(BIGNUM_LEN(x)*SIZEOF_BDIGIT - nlz(BDIGITS(x)[BIGNUM_LEN(x)-1])/CHAR_BIT) : \
- rb_absint_size(x, NULL))
-
-#define BIGDIVREM_EXTRA_WORDS 1
-#define bdigit_roomof(n) roomof(n, SIZEOF_BDIGIT)
-#define BARY_ARGS(ary) ary, numberof(ary)
-
-#define BARY_ADD(z, x, y) bary_add(BARY_ARGS(z), BARY_ARGS(x), BARY_ARGS(y))
-#define BARY_SUB(z, x, y) bary_sub(BARY_ARGS(z), BARY_ARGS(x), BARY_ARGS(y))
-#define BARY_SHORT_MUL(z, x, y) bary_short_mul(BARY_ARGS(z), BARY_ARGS(x), BARY_ARGS(y))
-#define BARY_DIVMOD(q, r, x, y) bary_divmod(BARY_ARGS(q), BARY_ARGS(r), BARY_ARGS(x), BARY_ARGS(y))
-#define BARY_ZERO_P(x) bary_zero_p(BARY_ARGS(x))
-
-#define BIGNUM_SET_NEGATIVE_SIGN(b) BIGNUM_SET_SIGN(b, 0)
-#define BIGNUM_SET_POSITIVE_SIGN(b) BIGNUM_SET_SIGN(b, 1)
-
-#define bignew(len,sign) bignew_1(rb_cBignum,(len),(sign))
-
-#define BDIGITS_ZERO(ptr, n) do { \
- BDIGIT *bdigitz_zero_ptr = (ptr); \
- size_t bdigitz_zero_n = (n); \
- while (bdigitz_zero_n) { \
- *bdigitz_zero_ptr++ = 0; \
- bdigitz_zero_n--; \
- } \
-} while (0)
-
-#define BARY_TRUNC(ds, n) do { \
- while (0 < (n) && (ds)[(n)-1] == 0) \
- (n)--; \
- } while (0)
-
-#define KARATSUBA_BALANCED(xn, yn) ((yn)/2 < (xn))
-#define TOOM3_BALANCED(xn, yn) (((yn)+2)/3 * 2 < (xn))
-
-#define GMP_MUL_DIGITS 20
-#define KARATSUBA_MUL_DIGITS 70
-#define TOOM3_MUL_DIGITS 150
-
-#define GMP_DIV_DIGITS 20
-#define GMP_BIG2STR_DIGITS 20
-#define GMP_STR2BIG_DIGITS 20
-
-typedef void (mulfunc_t)(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn);
-
-static mulfunc_t bary_mul_toom3_start;
-static mulfunc_t bary_mul_karatsuba_start;
-static BDIGIT bigdivrem_single(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT y);
-static void bary_divmod(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn);
-
-static VALUE bigmul0(VALUE x, VALUE y);
-static void bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn);
-static VALUE bignew_1(VALUE klass, size_t len, int sign);
-static inline VALUE bigtrunc(VALUE x);
-
-static VALUE bigsq(VALUE x);
-static void bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp);
-static inline VALUE power_cache_get_power(int base, int power_level, size_t *numdigits_ret);
-
-#if SIZEOF_BDIGIT <= SIZEOF_INT
-static int nlz(BDIGIT x) { return nlz_int((unsigned int)x) - (SIZEOF_INT-SIZEOF_BDIGIT) * CHAR_BIT; }
-#elif SIZEOF_BDIGIT <= SIZEOF_LONG
-static int nlz(BDIGIT x) { return nlz_long((unsigned long)x) - (SIZEOF_LONG-SIZEOF_BDIGIT) * CHAR_BIT; }
-#elif SIZEOF_BDIGIT <= SIZEOF_LONG_LONG
-static int nlz(BDIGIT x) { return nlz_long_long((unsigned LONG_LONG)x) - (SIZEOF_LONG_LONG-SIZEOF_BDIGIT) * CHAR_BIT; }
-#elif SIZEOF_BDIGIT <= SIZEOF_INT128_T
-static int nlz(BDIGIT x) { return nlz_int128((uint128_t)x) - (SIZEOF_INT128_T-SIZEOF_BDIGIT) * CHAR_BIT; }
-#endif
-
-#define U16(a) ((uint16_t)(a))
-#define U32(a) ((uint32_t)(a))
-#ifdef HAVE_UINT64_T
-#define U64(a,b) (((uint64_t)(a) << 32) | (b))
-#endif
-#ifdef HAVE_UINT128_T
-#define U128(a,b,c,d) (((uint128_t)U64(a,b) << 64) | U64(c,d))
-#endif
-
-/* The following script, maxpow.rb, generates the tables follows.
-
-def big(n, bits)
- ns = []
- ((bits+31)/32).times {
- ns << sprintf("0x%08x", n & 0xffff_ffff)
- n >>= 32
- }
- "U#{bits}(" + ns.reverse.join(",") + ")"
-end
-def values(ary, width, indent)
- lines = [""]
- ary.each {|e|
- lines << "" if !ary.last.empty? && width < (lines.last + e + ", ").length
- lines.last << e + ", "
- }
- lines.map {|line| " " * indent + line.chomp(" ") + "\n" }.join
-end
-[16,32,64,128].each {|bits|
- max = 2**bits-1
- exps = []
- nums = []
- 2.upto(36) {|base|
- exp = 0
- n = 1
- while n * base <= max
- exp += 1
- n *= base
- end
- exps << exp.to_s
- nums << big(n, bits)
- }
- puts "#ifdef HAVE_UINT#{bits}_T"
- puts "static const int maxpow#{bits}_exp[35] = {"
- print values(exps, 70, 4)
- puts "};"
- puts "static const uint#{bits}_t maxpow#{bits}_num[35] = {"
- print values(nums, 70, 4)
- puts "};"
- puts "#endif"
-}
-
- */
-
-#if SIZEOF_BDIGIT_DBL == 2
-static const int maxpow16_exp[35] = {
- 15, 10, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-};
-static const uint16_t maxpow16_num[35] = {
- U16(0x00008000), U16(0x0000e6a9), U16(0x00004000), U16(0x00003d09),
- U16(0x0000b640), U16(0x000041a7), U16(0x00008000), U16(0x0000e6a9),
- U16(0x00002710), U16(0x00003931), U16(0x00005100), U16(0x00006f91),
- U16(0x00009610), U16(0x0000c5c1), U16(0x00001000), U16(0x00001331),
- U16(0x000016c8), U16(0x00001acb), U16(0x00001f40), U16(0x0000242d),
- U16(0x00002998), U16(0x00002f87), U16(0x00003600), U16(0x00003d09),
- U16(0x000044a8), U16(0x00004ce3), U16(0x000055c0), U16(0x00005f45),
- U16(0x00006978), U16(0x0000745f), U16(0x00008000), U16(0x00008c61),
- U16(0x00009988), U16(0x0000a77b), U16(0x0000b640),
-};
-#elif SIZEOF_BDIGIT_DBL == 4
-static const int maxpow32_exp[35] = {
- 31, 20, 15, 13, 12, 11, 10, 10, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-static const uint32_t maxpow32_num[35] = {
- U32(0x80000000), U32(0xcfd41b91), U32(0x40000000), U32(0x48c27395),
- U32(0x81bf1000), U32(0x75db9c97), U32(0x40000000), U32(0xcfd41b91),
- U32(0x3b9aca00), U32(0x8c8b6d2b), U32(0x19a10000), U32(0x309f1021),
- U32(0x57f6c100), U32(0x98c29b81), U32(0x10000000), U32(0x18754571),
- U32(0x247dbc80), U32(0x3547667b), U32(0x4c4b4000), U32(0x6b5a6e1d),
- U32(0x94ace180), U32(0xcaf18367), U32(0x0b640000), U32(0x0e8d4a51),
- U32(0x1269ae40), U32(0x17179149), U32(0x1cb91000), U32(0x23744899),
- U32(0x2b73a840), U32(0x34e63b41), U32(0x40000000), U32(0x4cfa3cc1),
- U32(0x5c13d840), U32(0x6d91b519), U32(0x81bf1000),
-};
-#elif SIZEOF_BDIGIT_DBL == 8 && defined HAVE_UINT64_T
-static const int maxpow64_exp[35] = {
- 63, 40, 31, 27, 24, 22, 21, 20, 19, 18, 17, 17, 16, 16, 15, 15, 15,
- 15, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12,
- 12,
-};
-static const uint64_t maxpow64_num[35] = {
- U64(0x80000000,0x00000000), U64(0xa8b8b452,0x291fe821),
- U64(0x40000000,0x00000000), U64(0x6765c793,0xfa10079d),
- U64(0x41c21cb8,0xe1000000), U64(0x36427987,0x50226111),
- U64(0x80000000,0x00000000), U64(0xa8b8b452,0x291fe821),
- U64(0x8ac72304,0x89e80000), U64(0x4d28cb56,0xc33fa539),
- U64(0x1eca170c,0x00000000), U64(0x780c7372,0x621bd74d),
- U64(0x1e39a505,0x7d810000), U64(0x5b27ac99,0x3df97701),
- U64(0x10000000,0x00000000), U64(0x27b95e99,0x7e21d9f1),
- U64(0x5da0e1e5,0x3c5c8000), U64(0xd2ae3299,0xc1c4aedb),
- U64(0x16bcc41e,0x90000000), U64(0x2d04b7fd,0xd9c0ef49),
- U64(0x5658597b,0xcaa24000), U64(0xa0e20737,0x37609371),
- U64(0x0c29e980,0x00000000), U64(0x14adf4b7,0x320334b9),
- U64(0x226ed364,0x78bfa000), U64(0x383d9170,0xb85ff80b),
- U64(0x5a3c23e3,0x9c000000), U64(0x8e651373,0x88122bcd),
- U64(0xdd41bb36,0xd259e000), U64(0x0aee5720,0xee830681),
- U64(0x10000000,0x00000000), U64(0x172588ad,0x4f5f0981),
- U64(0x211e44f7,0xd02c1000), U64(0x2ee56725,0xf06e5c71),
- U64(0x41c21cb8,0xe1000000),
-};
-#elif SIZEOF_BDIGIT_DBL == 16 && defined HAVE_UINT128_T
-static const int maxpow128_exp[35] = {
- 127, 80, 63, 55, 49, 45, 42, 40, 38, 37, 35, 34, 33, 32, 31, 31, 30,
- 30, 29, 29, 28, 28, 27, 27, 27, 26, 26, 26, 26, 25, 25, 25, 25, 24,
- 24,
-};
-static const uint128_t maxpow128_num[35] = {
- U128(0x80000000,0x00000000,0x00000000,0x00000000),
- U128(0x6f32f1ef,0x8b18a2bc,0x3cea5978,0x9c79d441),
- U128(0x40000000,0x00000000,0x00000000,0x00000000),
- U128(0xd0cf4b50,0xcfe20765,0xfff4b4e3,0xf741cf6d),
- U128(0x6558e2a0,0x921fe069,0x42860000,0x00000000),
- U128(0x5080c7b7,0xd0e31ba7,0x5911a67d,0xdd3d35e7),
- U128(0x40000000,0x00000000,0x00000000,0x00000000),
- U128(0x6f32f1ef,0x8b18a2bc,0x3cea5978,0x9c79d441),
- U128(0x4b3b4ca8,0x5a86c47a,0x098a2240,0x00000000),
- U128(0xffd1390a,0x0adc2fb8,0xdabbb817,0x4d95c99b),
- U128(0x2c6fdb36,0x4c25e6c0,0x00000000,0x00000000),
- U128(0x384bacd6,0x42c343b4,0xe90c4272,0x13506d29),
- U128(0x31f5db32,0xa34aced6,0x0bf13a0e,0x00000000),
- U128(0x20753ada,0xfd1e839f,0x53686d01,0x3143ee01),
- U128(0x10000000,0x00000000,0x00000000,0x00000000),
- U128(0x68ca11d6,0xb4f6d1d1,0xfaa82667,0x8073c2f1),
- U128(0x223e493b,0xb3bb69ff,0xa4b87d6c,0x40000000),
- U128(0xad62418d,0x14ea8247,0x01c4b488,0x6cc66f59),
- U128(0x2863c1f5,0xcdae42f9,0x54000000,0x00000000),
- U128(0xa63fd833,0xb9386b07,0x36039e82,0xbe651b25),
- U128(0x1d1f7a9c,0xd087a14d,0x28cdf3d5,0x10000000),
- U128(0x651b5095,0xc2ea8fc1,0xb30e2c57,0x77aaf7e1),
- U128(0x0ddef20e,0xff760000,0x00000000,0x00000000),
- U128(0x29c30f10,0x29939b14,0x6664242d,0x97d9f649),
- U128(0x786a435a,0xe9558b0e,0x6aaf6d63,0xa8000000),
- U128(0x0c5afe6f,0xf302bcbf,0x94fd9829,0xd87f5079),
- U128(0x1fce575c,0xe1692706,0x07100000,0x00000000),
- U128(0x4f34497c,0x8597e144,0x36e91802,0x00528229),
- U128(0xbf3a8e1d,0x41ef2170,0x7802130d,0x84000000),
- U128(0x0e7819e1,0x7f1eb0fb,0x6ee4fb89,0x01d9531f),
- U128(0x20000000,0x00000000,0x00000000,0x00000000),
- U128(0x4510460d,0xd9e879c0,0x14a82375,0x2f22b321),
- U128(0x91abce3c,0x4b4117ad,0xe76d35db,0x22000000),
- U128(0x08973ea3,0x55d75bc2,0x2e42c391,0x727d69e1),
- U128(0x10e425c5,0x6daffabc,0x35c10000,0x00000000),
-};
-#endif
-
-static BDIGIT_DBL
-maxpow_in_bdigit_dbl(int base, int *exp_ret)
-{
- BDIGIT_DBL maxpow;
- int exponent;
-
- assert(2 <= base && base <= 36);
-
- {
-#if SIZEOF_BDIGIT_DBL == 2
- maxpow = maxpow16_num[base-2];
- exponent = maxpow16_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 4
- maxpow = maxpow32_num[base-2];
- exponent = maxpow32_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 8 && defined HAVE_UINT64_T
- maxpow = maxpow64_num[base-2];
- exponent = maxpow64_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 16 && defined HAVE_UINT128_T
- maxpow = maxpow128_num[base-2];
- exponent = maxpow128_exp[base-2];
-#else
- maxpow = base;
- exponent = 1;
- while (maxpow <= BDIGIT_DBL_MAX / base) {
- maxpow *= base;
- exponent++;
- }
-#endif
- }
-
- *exp_ret = exponent;
- return maxpow;
-}
-
-static inline BDIGIT_DBL
-bary2bdigitdbl(const BDIGIT *ds, size_t n)
-{
- assert(n <= 2);
-
- if (n == 2)
- return ds[0] | BIGUP(ds[1]);
- if (n == 1)
- return ds[0];
- return 0;
-}
-
-static inline void
-bdigitdbl2bary(BDIGIT *ds, size_t n, BDIGIT_DBL num)
-{
- assert(n == 2);
-
- ds[0] = BIGLO(num);
- ds[1] = (BDIGIT)BIGDN(num);
-}
-
-static int
-bary_cmp(const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- BARY_TRUNC(xds, xn);
- BARY_TRUNC(yds, yn);
-
- if (xn < yn)
- return -1;
- if (xn > yn)
- return 1;
-
- while (xn-- && xds[xn] == yds[xn])
- ;
- if (xn == (size_t)-1)
- return 0;
- return xds[xn] < yds[xn] ? -1 : 1;
-}
-
-static BDIGIT
-bary_small_lshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift)
-{
- size_t i;
- BDIGIT_DBL num = 0;
- assert(0 <= shift && shift < BITSPERDIG);
-
- for (i=0; i<n; i++) {
- num = num | (BDIGIT_DBL)*xds++ << shift;
- *zds++ = BIGLO(num);
- num = BIGDN(num);
- }
- return BIGLO(num);
-}
-
-static void
-bary_small_rshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift, BDIGIT higher_bdigit)
-{
- BDIGIT_DBL num = 0;
- BDIGIT x;
-
- assert(0 <= shift && shift < BITSPERDIG);
-
- num = BIGUP(higher_bdigit);
- while (n--) {
- num = (num | xds[n]) >> shift;
- x = xds[n];
- zds[n] = BIGLO(num);
- num = BIGUP(x);
- }
-}
-
-static int
-bary_zero_p(BDIGIT *xds, size_t xn)
-{
- if (xn == 0)
- return 1;
- do {
- if (xds[--xn]) return 0;
- } while (xn);
- return 1;
-}
-
-static void
-bary_neg(BDIGIT *ds, size_t n)
-{
- while (n--)
- ds[n] = BIGLO(~ds[n]);
-}
-
-static int
-bary_2comp(BDIGIT *ds, size_t n)
-{
- size_t i;
- i = 0;
- for (i = 0; i < n; i++) {
- if (ds[i] != 0) {
- goto non_zero;
- }
- }
- return 1;
-
- non_zero:
- ds[i] = BIGLO(~ds[i] + 1);
- i++;
- for (; i < n; i++) {
- ds[i] = BIGLO(~ds[i]);
- }
- return 0;
-}
-
-static void
-bary_swap(BDIGIT *ds, size_t num_bdigits)
-{
- BDIGIT *p1 = ds;
- BDIGIT *p2 = ds + num_bdigits - 1;
- for (; p1 < p2; p1++, p2--) {
- BDIGIT tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
- }
-}
-
-#define INTEGER_PACK_WORDORDER_MASK \
- (INTEGER_PACK_MSWORD_FIRST | \
- INTEGER_PACK_LSWORD_FIRST)
-#define INTEGER_PACK_BYTEORDER_MASK \
- (INTEGER_PACK_MSBYTE_FIRST | \
- INTEGER_PACK_LSBYTE_FIRST | \
- INTEGER_PACK_NATIVE_BYTE_ORDER)
-
-static void
-validate_integer_pack_format(size_t numwords, size_t wordsize, size_t nails, int flags, int supported_flags)
-{
- int wordorder_bits = flags & INTEGER_PACK_WORDORDER_MASK;
- int byteorder_bits = flags & INTEGER_PACK_BYTEORDER_MASK;
-
- if (flags & ~supported_flags) {
- rb_raise(rb_eArgError, "unsupported flags specified");
- }
- if (wordorder_bits == 0) {
- if (1 < numwords)
- rb_raise(rb_eArgError, "word order not specified");
- }
- else if (wordorder_bits != INTEGER_PACK_MSWORD_FIRST &&
- wordorder_bits != INTEGER_PACK_LSWORD_FIRST)
- rb_raise(rb_eArgError, "unexpected word order");
- if (byteorder_bits == 0) {
- rb_raise(rb_eArgError, "byte order not specified");
- }
- else if (byteorder_bits != INTEGER_PACK_MSBYTE_FIRST &&
- byteorder_bits != INTEGER_PACK_LSBYTE_FIRST &&
- byteorder_bits != INTEGER_PACK_NATIVE_BYTE_ORDER)
- rb_raise(rb_eArgError, "unexpected byte order");
- if (wordsize == 0)
- rb_raise(rb_eArgError, "invalid wordsize: %"PRI_SIZE_PREFIX"u", wordsize);
- if (SSIZE_MAX < wordsize)
- rb_raise(rb_eArgError, "too big wordsize: %"PRI_SIZE_PREFIX"u", wordsize);
- if (wordsize <= nails / CHAR_BIT)
- rb_raise(rb_eArgError, "too big nails: %"PRI_SIZE_PREFIX"u", nails);
- if (SIZE_MAX / wordsize < numwords)
- rb_raise(rb_eArgError, "too big numwords * wordsize: %"PRI_SIZE_PREFIX"u * %"PRI_SIZE_PREFIX"u", numwords, wordsize);
-}
-
-static void
-integer_pack_loop_setup(
- size_t numwords, size_t wordsize, size_t nails, int flags,
- size_t *word_num_fullbytes_ret,
- int *word_num_partialbits_ret,
- size_t *word_start_ret,
- ssize_t *word_step_ret,
- size_t *word_last_ret,
- size_t *byte_start_ret,
- int *byte_step_ret)
-{
- int wordorder_bits = flags & INTEGER_PACK_WORDORDER_MASK;
- int byteorder_bits = flags & INTEGER_PACK_BYTEORDER_MASK;
- size_t word_num_fullbytes;
- int word_num_partialbits;
- size_t word_start;
- ssize_t word_step;
- size_t word_last;
- size_t byte_start;
- int byte_step;
-
- word_num_partialbits = CHAR_BIT - (int)(nails % CHAR_BIT);
- if (word_num_partialbits == CHAR_BIT)
- word_num_partialbits = 0;
- word_num_fullbytes = wordsize - (nails / CHAR_BIT);
- if (word_num_partialbits != 0) {
- word_num_fullbytes--;
- }
-
- if (wordorder_bits == INTEGER_PACK_MSWORD_FIRST) {
- word_start = wordsize*(numwords-1);
- word_step = -(ssize_t)wordsize;
- word_last = 0;
- }
- else {
- word_start = 0;
- word_step = wordsize;
- word_last = wordsize*(numwords-1);
- }
-
- if (byteorder_bits == INTEGER_PACK_NATIVE_BYTE_ORDER) {
-#ifdef WORDS_BIGENDIAN
- byteorder_bits = INTEGER_PACK_MSBYTE_FIRST;
-#else
- byteorder_bits = INTEGER_PACK_LSBYTE_FIRST;
-#endif
- }
- if (byteorder_bits == INTEGER_PACK_MSBYTE_FIRST) {
- byte_start = wordsize-1;
- byte_step = -1;
- }
- else {
- byte_start = 0;
- byte_step = 1;
- }
-
- *word_num_partialbits_ret = word_num_partialbits;
- *word_num_fullbytes_ret = word_num_fullbytes;
- *word_start_ret = word_start;
- *word_step_ret = word_step;
- *word_last_ret = word_last;
- *byte_start_ret = byte_start;
- *byte_step_ret = byte_step;
-}
-
-static inline void
-integer_pack_fill_dd(BDIGIT **dpp, BDIGIT **dep, BDIGIT_DBL *ddp, int *numbits_in_dd_p)
-{
- if (*dpp < *dep && BITSPERDIG <= (int)sizeof(*ddp) * CHAR_BIT - *numbits_in_dd_p) {
- *ddp |= (BDIGIT_DBL)(*(*dpp)++) << *numbits_in_dd_p;
- *numbits_in_dd_p += BITSPERDIG;
- }
- else if (*dpp == *dep) {
- /* higher bits are infinity zeros */
- *numbits_in_dd_p = (int)sizeof(*ddp) * CHAR_BIT;
- }
-}
-
-static inline BDIGIT_DBL
-integer_pack_take_lowbits(int n, BDIGIT_DBL *ddp, int *numbits_in_dd_p)
-{
- BDIGIT_DBL ret;
- ret = (*ddp) & (((BDIGIT_DBL)1 << n) - 1);
- *ddp >>= n;
- *numbits_in_dd_p -= n;
- return ret;
-}
-
-#if !defined(WORDS_BIGENDIAN)
-static int
-bytes_2comp(unsigned char *buf, size_t len)
-{
- size_t i;
- for (i = 0; i < len; i++)
- buf[i] = ~buf[i];
- for (i = 0; i < len; i++) {
- buf[i]++;
- if (buf[i] != 0)
- return 0;
- }
- return 1;
-}
-#endif
-
-static int
-bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
-{
- BDIGIT *dp, *de;
- unsigned char *buf, *bufend;
-
- dp = ds;
- de = ds + num_bdigits;
-
- validate_integer_pack_format(numwords, wordsize, nails, flags,
- INTEGER_PACK_MSWORD_FIRST|
- INTEGER_PACK_LSWORD_FIRST|
- INTEGER_PACK_MSBYTE_FIRST|
- INTEGER_PACK_LSBYTE_FIRST|
- INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP|
- INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION);
-
- while (dp < de && de[-1] == 0)
- de--;
- if (dp == de) {
- sign = 0;
- }
-
- if (!(flags & INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION)) {
- if (sign == 0) {
- MEMZERO(words, unsigned char, numwords * wordsize);
- return 0;
- }
- if (nails == 0 && numwords == 1) {
- int need_swap = wordsize != 1 &&
- (flags & INTEGER_PACK_BYTEORDER_MASK) != INTEGER_PACK_NATIVE_BYTE_ORDER &&
- ((flags & INTEGER_PACK_MSBYTE_FIRST) ? !HOST_BIGENDIAN_P : HOST_BIGENDIAN_P);
- if (0 < sign || !(flags & INTEGER_PACK_2COMP)) {
- BDIGIT d;
- if (wordsize == 1) {
- *((unsigned char *)words) = (unsigned char)(d = dp[0]);
- return ((1 < de - dp || CLEAR_LOWBITS(d, 8) != 0) ? 2 : 1) * sign;
- }
-#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
- uint16_t u = (uint16_t)(d = dp[0]);
- if (need_swap) u = swap16(u);
- *((uint16_t *)words) = u;
- return ((1 < de - dp || CLEAR_LOWBITS(d, 16) != 0) ? 2 : 1) * sign;
- }
-#endif
-#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
- uint32_t u = (uint32_t)(d = dp[0]);
- if (need_swap) u = swap32(u);
- *((uint32_t *)words) = u;
- return ((1 < de - dp || CLEAR_LOWBITS(d, 32) != 0) ? 2 : 1) * sign;
- }
-#endif
-#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
- uint64_t u = (uint64_t)(d = dp[0]);
- if (need_swap) u = swap64(u);
- *((uint64_t *)words) = u;
- return ((1 < de - dp || CLEAR_LOWBITS(d, 64) != 0) ? 2 : 1) * sign;
- }
-#endif
- }
- else { /* sign < 0 && (flags & INTEGER_PACK_2COMP) */
- BDIGIT_DBL_SIGNED d;
- if (wordsize == 1) {
- *((unsigned char *)words) = (unsigned char)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
- return (1 < de - dp || FILL_LOWBITS(d, 8) != -1) ? -2 : -1;
- }
-#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
- uint16_t u = (uint16_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
- if (need_swap) u = swap16(u);
- *((uint16_t *)words) = u;
- return (wordsize == SIZEOF_BDIGIT && de - dp == 2 && dp[1] == 1 && dp[0] == 0) ? -1 :
- (1 < de - dp || FILL_LOWBITS(d, 16) != -1) ? -2 : -1;
- }
-#endif
-#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
- uint32_t u = (uint32_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
- if (need_swap) u = swap32(u);
- *((uint32_t *)words) = u;
- return (wordsize == SIZEOF_BDIGIT && de - dp == 2 && dp[1] == 1 && dp[0] == 0) ? -1 :
- (1 < de - dp || FILL_LOWBITS(d, 32) != -1) ? -2 : -1;
- }
-#endif
-#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
- uint64_t u = (uint64_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
- if (need_swap) u = swap64(u);
- *((uint64_t *)words) = u;
- return (wordsize == SIZEOF_BDIGIT && de - dp == 2 && dp[1] == 1 && dp[0] == 0) ? -1 :
- (1 < de - dp || FILL_LOWBITS(d, 64) != -1) ? -2 : -1;
- }
-#endif
- }
- }
-#if !defined(WORDS_BIGENDIAN)
- if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
- (flags & INTEGER_PACK_WORDORDER_MASK) == INTEGER_PACK_LSWORD_FIRST &&
- (flags & INTEGER_PACK_BYTEORDER_MASK) != INTEGER_PACK_MSBYTE_FIRST) {
- size_t src_size = (de - dp) * SIZEOF_BDIGIT;
- size_t dst_size = numwords * wordsize;
- int overflow = 0;
- while (0 < src_size && ((unsigned char *)ds)[src_size-1] == 0)
- src_size--;
- if (src_size <= dst_size) {
- MEMCPY(words, dp, char, src_size);
- MEMZERO((char*)words + src_size, char, dst_size - src_size);
- }
- else {
- MEMCPY(words, dp, char, dst_size);
- overflow = 1;
- }
- if (sign < 0 && (flags & INTEGER_PACK_2COMP)) {
- int zero_p = bytes_2comp(words, dst_size);
- if (zero_p && overflow) {
- unsigned char *p = (unsigned char *)dp;
- if (dst_size == src_size-1 &&
- p[dst_size] == 1) {
- overflow = 0;
- }
- }
- }
- if (overflow)
- sign *= 2;
- return sign;
- }
-#endif
- if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
- wordsize % SIZEOF_BDIGIT == 0 && (uintptr_t)words % ALIGNOF(BDIGIT) == 0) {
- size_t bdigits_per_word = wordsize / SIZEOF_BDIGIT;
- size_t src_num_bdigits = de - dp;
- size_t dst_num_bdigits = numwords * bdigits_per_word;
- int overflow = 0;
- int mswordfirst_p = (flags & INTEGER_PACK_MSWORD_FIRST) != 0;
- int msbytefirst_p = (flags & INTEGER_PACK_NATIVE_BYTE_ORDER) ? HOST_BIGENDIAN_P :
- (flags & INTEGER_PACK_MSBYTE_FIRST) != 0;
- if (src_num_bdigits <= dst_num_bdigits) {
- MEMCPY(words, dp, BDIGIT, src_num_bdigits);
- BDIGITS_ZERO((BDIGIT*)words + src_num_bdigits, dst_num_bdigits - src_num_bdigits);
- }
- else {
- MEMCPY(words, dp, BDIGIT, dst_num_bdigits);
- overflow = 1;
- }
- if (sign < 0 && (flags & INTEGER_PACK_2COMP)) {
- int zero_p = bary_2comp(words, dst_num_bdigits);
- if (zero_p && overflow &&
- dst_num_bdigits == src_num_bdigits-1 &&
- dp[dst_num_bdigits] == 1)
- overflow = 0;
- }
- if (msbytefirst_p != HOST_BIGENDIAN_P) {
- size_t i;
- for (i = 0; i < dst_num_bdigits; i++) {
- BDIGIT d = ((BDIGIT*)words)[i];
- ((BDIGIT*)words)[i] = swap_bdigit(d);
- }
- }
- if (mswordfirst_p ? !msbytefirst_p : msbytefirst_p) {
- size_t i;
- BDIGIT *p = words;
- for (i = 0; i < numwords; i++) {
- bary_swap(p, bdigits_per_word);
- p += bdigits_per_word;
- }
- }
- if (mswordfirst_p) {
- bary_swap(words, dst_num_bdigits);
- }
- if (overflow)
- sign *= 2;
- return sign;
- }
- }
-
- buf = words;
- bufend = buf + numwords * wordsize;
-
- if (buf == bufend) {
- /* overflow if non-zero*/
- if (!(flags & INTEGER_PACK_2COMP) || 0 <= sign)
- sign *= 2;
- else {
- if (de - dp == 1 && dp[0] == 1)
- sign = -1; /* val == -1 == -2**(numwords*(wordsize*CHAR_BIT-nails)) */
- else
- sign = -2; /* val < -1 == -2**(numwords*(wordsize*CHAR_BIT-nails)) */
- }
- }
- else if (dp == de) {
- memset(buf, '\0', bufend - buf);
- }
- else if (dp < de && buf < bufend) {
- int word_num_partialbits;
- size_t word_num_fullbytes;
-
- ssize_t word_step;
- size_t byte_start;
- int byte_step;
-
- size_t word_start, word_last;
- unsigned char *wordp, *last_wordp;
- BDIGIT_DBL dd;
- int numbits_in_dd;
-
- integer_pack_loop_setup(numwords, wordsize, nails, flags,
- &word_num_fullbytes, &word_num_partialbits,
- &word_start, &word_step, &word_last, &byte_start, &byte_step);
-
- wordp = buf + word_start;
- last_wordp = buf + word_last;
-
- dd = 0;
- numbits_in_dd = 0;
-
-#define FILL_DD \
- integer_pack_fill_dd(&dp, &de, &dd, &numbits_in_dd)
-#define TAKE_LOWBITS(n) \
- integer_pack_take_lowbits(n, &dd, &numbits_in_dd)
-
- while (1) {
- size_t index_in_word = 0;
- unsigned char *bytep = wordp + byte_start;
- while (index_in_word < word_num_fullbytes) {
- FILL_DD;
- *bytep = TAKE_LOWBITS(CHAR_BIT);
- bytep += byte_step;
- index_in_word++;
- }
- if (word_num_partialbits) {
- FILL_DD;
- *bytep = TAKE_LOWBITS(word_num_partialbits);
- bytep += byte_step;
- index_in_word++;
- }
- while (index_in_word < wordsize) {
- *bytep = 0;
- bytep += byte_step;
- index_in_word++;
- }
-
- if (wordp == last_wordp)
- break;
-
- wordp += word_step;
- }
- FILL_DD;
- /* overflow tests */
- if (dp != de || 1 < dd) {
- /* 2**(numwords*(wordsize*CHAR_BIT-nails)+1) <= abs(val) */
- sign *= 2;
- }
- else if (dd == 1) {
- /* 2**(numwords*(wordsize*CHAR_BIT-nails)) <= abs(val) < 2**(numwords*(wordsize*CHAR_BIT-nails)+1) */
- if (!(flags & INTEGER_PACK_2COMP) || 0 <= sign)
- sign *= 2;
- else { /* overflow_2comp && sign == -1 */
- /* test lower bits are all zero. */
- dp = ds;
- while (dp < de && *dp == 0)
- dp++;
- if (de - dp == 1 && /* only one non-zero word. */
- POW2_P(*dp)) /* *dp contains only one bit set. */
- sign = -1; /* val == -2**(numwords*(wordsize*CHAR_BIT-nails)) */
- else
- sign = -2; /* val < -2**(numwords*(wordsize*CHAR_BIT-nails)) */
- }
- }
- }
-
- if ((flags & INTEGER_PACK_2COMP) && (sign < 0 && numwords != 0)) {
- unsigned char *buf;
-
- int word_num_partialbits;
- size_t word_num_fullbytes;
-
- ssize_t word_step;
- size_t byte_start;
- int byte_step;
-
- size_t word_start, word_last;
- unsigned char *wordp, *last_wordp;
-
- unsigned int partialbits_mask;
- int carry;
-
- integer_pack_loop_setup(numwords, wordsize, nails, flags,
- &word_num_fullbytes, &word_num_partialbits,
- &word_start, &word_step, &word_last, &byte_start, &byte_step);
-
- partialbits_mask = (1 << word_num_partialbits) - 1;
-
- buf = words;
- wordp = buf + word_start;
- last_wordp = buf + word_last;
-
- carry = 1;
- while (1) {
- size_t index_in_word = 0;
- unsigned char *bytep = wordp + byte_start;
- while (index_in_word < word_num_fullbytes) {
- carry += (unsigned char)~*bytep;
- *bytep = (unsigned char)carry;
- carry >>= CHAR_BIT;
- bytep += byte_step;
- index_in_word++;
- }
- if (word_num_partialbits) {
- carry += (*bytep & partialbits_mask) ^ partialbits_mask;
- *bytep = carry & partialbits_mask;
- carry >>= word_num_partialbits;
- bytep += byte_step;
- index_in_word++;
- }
-
- if (wordp == last_wordp)
- break;
-
- wordp += word_step;
- }
- }
-
- return sign;
-#undef FILL_DD
-#undef TAKE_LOWBITS
-}
-
-static size_t
-integer_unpack_num_bdigits_small(size_t numwords, size_t wordsize, size_t nails, int *nlp_bits_ret)
-{
- /* nlp_bits stands for number of leading padding bits */
- size_t num_bits = (wordsize * CHAR_BIT - nails) * numwords;
- size_t num_bdigits = (num_bits + BITSPERDIG - 1) / BITSPERDIG;
- *nlp_bits_ret = (int)(num_bdigits * BITSPERDIG - num_bits);
- return num_bdigits;
-}
-
-static size_t
-integer_unpack_num_bdigits_generic(size_t numwords, size_t wordsize, size_t nails, int *nlp_bits_ret)
-{
- /* BITSPERDIG = SIZEOF_BDIGIT * CHAR_BIT */
- /* num_bits = (wordsize * CHAR_BIT - nails) * numwords */
- /* num_bdigits = (num_bits + BITSPERDIG - 1) / BITSPERDIG */
-
- /* num_bits = CHAR_BIT * (wordsize * numwords) - nails * numwords = CHAR_BIT * num_bytes1 - nails * numwords */
- size_t num_bytes1 = wordsize * numwords;
-
- /* q1 * CHAR_BIT + r1 = numwords */
- size_t q1 = numwords / CHAR_BIT;
- size_t r1 = numwords % CHAR_BIT;
-
- /* num_bits = CHAR_BIT * num_bytes1 - nails * (q1 * CHAR_BIT + r1) = CHAR_BIT * num_bytes2 - nails * r1 */
- size_t num_bytes2 = num_bytes1 - nails * q1;
-
- /* q2 * CHAR_BIT + r2 = nails */
- size_t q2 = nails / CHAR_BIT;
- size_t r2 = nails % CHAR_BIT;
-
- /* num_bits = CHAR_BIT * num_bytes2 - (q2 * CHAR_BIT + r2) * r1 = CHAR_BIT * num_bytes3 - r1 * r2 */
- size_t num_bytes3 = num_bytes2 - q2 * r1;
-
- /* q3 * BITSPERDIG + r3 = num_bytes3 */
- size_t q3 = num_bytes3 / BITSPERDIG;
- size_t r3 = num_bytes3 % BITSPERDIG;
-
- /* num_bits = CHAR_BIT * (q3 * BITSPERDIG + r3) - r1 * r2 = BITSPERDIG * num_digits1 + CHAR_BIT * r3 - r1 * r2 */
- size_t num_digits1 = CHAR_BIT * q3;
-
- /*
- * if CHAR_BIT * r3 >= r1 * r2
- * CHAR_BIT * r3 - r1 * r2 = CHAR_BIT * BITSPERDIG - (CHAR_BIT * BITSPERDIG - (CHAR_BIT * r3 - r1 * r2))
- * q4 * BITSPERDIG + r4 = CHAR_BIT * BITSPERDIG - (CHAR_BIT * r3 - r1 * r2)
- * num_bits = BITSPERDIG * num_digits1 + CHAR_BIT * BITSPERDIG - (q4 * BITSPERDIG + r4) = BITSPERDIG * num_digits2 - r4
- * else
- * q4 * BITSPERDIG + r4 = -(CHAR_BIT * r3 - r1 * r2)
- * num_bits = BITSPERDIG * num_digits1 - (q4 * BITSPERDIG + r4) = BITSPERDIG * num_digits2 - r4
- * end
- */
-
- if (CHAR_BIT * r3 >= r1 * r2) {
- size_t tmp1 = CHAR_BIT * BITSPERDIG - (CHAR_BIT * r3 - r1 * r2);
- size_t q4 = tmp1 / BITSPERDIG;
- int r4 = (int)(tmp1 % BITSPERDIG);
- size_t num_digits2 = num_digits1 + CHAR_BIT - q4;
- *nlp_bits_ret = r4;
- return num_digits2;
- }
- else {
- size_t tmp1 = r1 * r2 - CHAR_BIT * r3;
- size_t q4 = tmp1 / BITSPERDIG;
- int r4 = (int)(tmp1 % BITSPERDIG);
- size_t num_digits2 = num_digits1 - q4;
- *nlp_bits_ret = r4;
- return num_digits2;
- }
-}
-
-static size_t
-integer_unpack_num_bdigits(size_t numwords, size_t wordsize, size_t nails, int *nlp_bits_ret)
-{
- size_t num_bdigits;
-
- if (numwords <= (SIZE_MAX - (BITSPERDIG-1)) / CHAR_BIT / wordsize) {
- num_bdigits = integer_unpack_num_bdigits_small(numwords, wordsize, nails, nlp_bits_ret);
-#ifdef DEBUG_INTEGER_PACK
- {
- int nlp_bits1;
- size_t num_bdigits1 = integer_unpack_num_bdigits_generic(numwords, wordsize, nails, &nlp_bits1);
- assert(num_bdigits == num_bdigits1);
- assert(*nlp_bits_ret == nlp_bits1);
- }
-#endif
- }
- else {
- num_bdigits = integer_unpack_num_bdigits_generic(numwords, wordsize, nails, nlp_bits_ret);
- }
- return num_bdigits;
-}
-
-static inline void
-integer_unpack_push_bits(int data, int numbits, BDIGIT_DBL *ddp, int *numbits_in_dd_p, BDIGIT **dpp)
-{
- (*ddp) |= ((BDIGIT_DBL)data) << (*numbits_in_dd_p);
- *numbits_in_dd_p += numbits;
- while (BITSPERDIG <= *numbits_in_dd_p) {
- *(*dpp)++ = BIGLO(*ddp);
- *ddp = BIGDN(*ddp);
- *numbits_in_dd_p -= BITSPERDIG;
- }
-}
-
-static int
-integer_unpack_single_bdigit(BDIGIT u, size_t size, int flags, BDIGIT *dp)
-{
- int sign;
- if (flags & INTEGER_PACK_2COMP) {
- sign = (flags & INTEGER_PACK_NEGATIVE) ?
- ((size == SIZEOF_BDIGIT && u == 0) ? -2 : -1) :
- ((u >> (size * CHAR_BIT - 1)) ? -1 : 1);
- if (sign < 0) {
- u |= LSHIFTX(BDIGMAX, size * CHAR_BIT);
- u = BIGLO(1 + ~u);
- }
- }
- else
- sign = (flags & INTEGER_PACK_NEGATIVE) ? -1 : 1;
- *dp = u;
- return sign;
-}
-
-static int
-bary_unpack_internal(BDIGIT *bdigits, size_t num_bdigits, const void *words, size_t numwords, size_t wordsize, size_t nails, int flags, int nlp_bits)
-{
- int sign;
- const unsigned char *buf = words;
- BDIGIT *dp;
- BDIGIT *de;
-
- dp = bdigits;
- de = dp + num_bdigits;
-
- if (!(flags & INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION)) {
- if (nails == 0 && numwords == 1) {
- int need_swap = wordsize != 1 &&
- (flags & INTEGER_PACK_BYTEORDER_MASK) != INTEGER_PACK_NATIVE_BYTE_ORDER &&
- ((flags & INTEGER_PACK_MSBYTE_FIRST) ? !HOST_BIGENDIAN_P : HOST_BIGENDIAN_P);
- if (wordsize == 1) {
- return integer_unpack_single_bdigit(*(uint8_t *)buf, sizeof(uint8_t), flags, dp);
- }
-#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
- uint16_t u = *(uint16_t *)buf;
- return integer_unpack_single_bdigit(need_swap ? swap16(u) : u, sizeof(uint16_t), flags, dp);
- }
-#endif
-#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
- uint32_t u = *(uint32_t *)buf;
- return integer_unpack_single_bdigit(need_swap ? swap32(u) : u, sizeof(uint32_t), flags, dp);
- }
-#endif
-#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
- uint64_t u = *(uint64_t *)buf;
- return integer_unpack_single_bdigit(need_swap ? swap64(u) : u, sizeof(uint64_t), flags, dp);
- }
-#endif
- }
-#if !defined(WORDS_BIGENDIAN)
- if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
- (flags & INTEGER_PACK_WORDORDER_MASK) == INTEGER_PACK_LSWORD_FIRST &&
- (flags & INTEGER_PACK_BYTEORDER_MASK) != INTEGER_PACK_MSBYTE_FIRST) {
- size_t src_size = numwords * wordsize;
- size_t dst_size = num_bdigits * SIZEOF_BDIGIT;
- MEMCPY(dp, words, char, src_size);
- if (flags & INTEGER_PACK_2COMP) {
- if (flags & INTEGER_PACK_NEGATIVE) {
- int zero_p;
- memset((char*)dp + src_size, 0xff, dst_size - src_size);
- zero_p = bary_2comp(dp, num_bdigits);
- sign = zero_p ? -2 : -1;
- }
- else if (buf[src_size-1] >> (CHAR_BIT-1)) {
- memset((char*)dp + src_size, 0xff, dst_size - src_size);
- bary_2comp(dp, num_bdigits);
- sign = -1;
- }
- else {
- MEMZERO((char*)dp + src_size, char, dst_size - src_size);
- sign = 1;
- }
- }
- else {
- MEMZERO((char*)dp + src_size, char, dst_size - src_size);
- sign = (flags & INTEGER_PACK_NEGATIVE) ? -1 : 1;
- }
- return sign;
- }
-#endif
- if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
- wordsize % SIZEOF_BDIGIT == 0) {
- size_t bdigits_per_word = wordsize / SIZEOF_BDIGIT;
- int mswordfirst_p = (flags & INTEGER_PACK_MSWORD_FIRST) != 0;
- int msbytefirst_p = (flags & INTEGER_PACK_NATIVE_BYTE_ORDER) ? HOST_BIGENDIAN_P :
- (flags & INTEGER_PACK_MSBYTE_FIRST) != 0;
- MEMCPY(dp, words, BDIGIT, numwords*bdigits_per_word);
- if (mswordfirst_p) {
- bary_swap(dp, num_bdigits);
- }
- if (mswordfirst_p ? !msbytefirst_p : msbytefirst_p) {
- size_t i;
- BDIGIT *p = dp;
- for (i = 0; i < numwords; i++) {
- bary_swap(p, bdigits_per_word);
- p += bdigits_per_word;
- }
- }
- if (msbytefirst_p != HOST_BIGENDIAN_P) {
- BDIGIT *p;
- for (p = dp; p < de; p++) {
- BDIGIT d = *p;
- *p = swap_bdigit(d);
- }
- }
- if (flags & INTEGER_PACK_2COMP) {
- if (flags & INTEGER_PACK_NEGATIVE) {
- int zero_p = bary_2comp(dp, num_bdigits);
- sign = zero_p ? -2 : -1;
- }
- else if (BDIGIT_MSB(de[-1])) {
- bary_2comp(dp, num_bdigits);
- sign = -1;
- }
- else {
- sign = 1;
- }
- }
- else {
- sign = (flags & INTEGER_PACK_NEGATIVE) ? -1 : 1;
- }
- return sign;
- }
- }
-
- if (num_bdigits != 0) {
- int word_num_partialbits;
- size_t word_num_fullbytes;
-
- ssize_t word_step;
- size_t byte_start;
- int byte_step;
-
- size_t word_start, word_last;
- const unsigned char *wordp, *last_wordp;
- BDIGIT_DBL dd;
- int numbits_in_dd;
-
- integer_pack_loop_setup(numwords, wordsize, nails, flags,
- &word_num_fullbytes, &word_num_partialbits,
- &word_start, &word_step, &word_last, &byte_start, &byte_step);
-
- wordp = buf + word_start;
- last_wordp = buf + word_last;
-
- dd = 0;
- numbits_in_dd = 0;
-
-#define PUSH_BITS(data, numbits) \
- integer_unpack_push_bits(data, numbits, &dd, &numbits_in_dd, &dp)
-
- while (1) {
- size_t index_in_word = 0;
- const unsigned char *bytep = wordp + byte_start;
- while (index_in_word < word_num_fullbytes) {
- PUSH_BITS(*bytep, CHAR_BIT);
- bytep += byte_step;
- index_in_word++;
- }
- if (word_num_partialbits) {
- PUSH_BITS(*bytep & ((1 << word_num_partialbits) - 1), word_num_partialbits);
- bytep += byte_step;
- index_in_word++;
- }
-
- if (wordp == last_wordp)
- break;
-
- wordp += word_step;
- }
- if (dd)
- *dp++ = (BDIGIT)dd;
- assert(dp <= de);
- while (dp < de)
- *dp++ = 0;
-#undef PUSH_BITS
- }
-
- if (!(flags & INTEGER_PACK_2COMP)) {
- sign = (flags & INTEGER_PACK_NEGATIVE) ? -1 : 1;
- }
- else {
- if (nlp_bits) {
- if ((flags & INTEGER_PACK_NEGATIVE) ||
- (bdigits[num_bdigits-1] >> (BITSPERDIG - nlp_bits - 1))) {
- bdigits[num_bdigits-1] |= BIGLO(BDIGMAX << (BITSPERDIG - nlp_bits));
- sign = -1;
- }
- else {
- sign = 1;
- }
- }
- else {
- if (flags & INTEGER_PACK_NEGATIVE) {
- sign = bary_zero_p(bdigits, num_bdigits) ? -2 : -1;
- }
- else {
- if (num_bdigits != 0 && BDIGIT_MSB(bdigits[num_bdigits-1]))
- sign = -1;
- else
- sign = 1;
- }
- }
- if (sign == -1 && num_bdigits != 0) {
- bary_2comp(bdigits, num_bdigits);
- }
- }
-
- return sign;
-}
-
-static void
-bary_unpack(BDIGIT *bdigits, size_t num_bdigits, const void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
-{
- size_t num_bdigits0;
- int nlp_bits;
- int sign;
-
- validate_integer_pack_format(numwords, wordsize, nails, flags,
- INTEGER_PACK_MSWORD_FIRST|
- INTEGER_PACK_LSWORD_FIRST|
- INTEGER_PACK_MSBYTE_FIRST|
- INTEGER_PACK_LSBYTE_FIRST|
- INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP|
- INTEGER_PACK_FORCE_BIGNUM|
- INTEGER_PACK_NEGATIVE|
- INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION);
-
- num_bdigits0 = integer_unpack_num_bdigits(numwords, wordsize, nails, &nlp_bits);
-
- assert(num_bdigits0 <= num_bdigits);
-
- sign = bary_unpack_internal(bdigits, num_bdigits0, words, numwords, wordsize, nails, flags, nlp_bits);
-
- if (num_bdigits0 < num_bdigits) {
- BDIGITS_ZERO(bdigits + num_bdigits0, num_bdigits - num_bdigits0);
- if (sign == -2) {
- bdigits[num_bdigits0] = 1;
- }
- }
-}
-
-static int
-bary_subb(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, int borrow)
-{
- BDIGIT_DBL_SIGNED num;
- size_t i;
- size_t sn;
-
- assert(xn <= zn);
- assert(yn <= zn);
-
- sn = xn < yn ? xn : yn;
-
- num = borrow ? -1 : 0;
- for (i = 0; i < sn; i++) {
- num += (BDIGIT_DBL_SIGNED)xds[i] - yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- if (yn <= xn) {
- for (; i < xn; i++) {
- if (num == 0) goto num_is_zero;
- num += xds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- }
- else {
- for (; i < yn; i++) {
- num -= yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- }
- if (num == 0) goto num_is_zero;
- for (; i < zn; i++) {
- zds[i] = BDIGMAX;
- }
- return 1;
-
- num_is_zero:
- if (xds == zds && xn == zn)
- return 0;
- for (; i < xn; i++) {
- zds[i] = xds[i];
- }
- for (; i < zn; i++) {
- zds[i] = 0;
- }
- return 0;
-}
-
-static int
-bary_sub(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- return bary_subb(zds, zn, xds, xn, yds, yn, 0);
-}
-
-static int
-bary_sub_one(BDIGIT *zds, size_t zn)
-{
- return bary_subb(zds, zn, zds, zn, NULL, 0, 1);
-}
-
-static int
-bary_addc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, int carry)
-{
- BDIGIT_DBL num;
- size_t i;
-
- assert(xn <= zn);
- assert(yn <= zn);
-
- if (xn > yn) {
- const BDIGIT *tds;
- tds = xds; xds = yds; yds = tds;
- i = xn; xn = yn; yn = i;
- }
-
- num = carry ? 1 : 0;
- for (i = 0; i < xn; i++) {
- num += (BDIGIT_DBL)xds[i] + yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- for (; i < yn; i++) {
- if (num == 0) goto num_is_zero;
- num += yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- for (; i < zn; i++) {
- if (num == 0) goto num_is_zero;
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
- return num != 0;
-
- num_is_zero:
- if (yds == zds && yn == zn)
- return 0;
- for (; i < yn; i++) {
- zds[i] = yds[i];
- }
- for (; i < zn; i++) {
- zds[i] = 0;
- }
- return 0;
-}
-
-static int
-bary_add(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- return bary_addc(zds, zn, xds, xn, yds, yn, 0);
-}
-
-static int
-bary_add_one(BDIGIT *ds, size_t n)
-{
- size_t i;
- for (i = 0; i < n; i++) {
- ds[i] = BIGLO(ds[i]+1);
- if (ds[i] != 0)
- return 0;
- }
- return 1;
-}
-
-static void
-bary_mul_single(BDIGIT *zds, size_t zn, BDIGIT x, BDIGIT y)
-{
- BDIGIT_DBL n;
-
- assert(2 <= zn);
-
- n = (BDIGIT_DBL)x * y;
- bdigitdbl2bary(zds, 2, n);
- BDIGITS_ZERO(zds + 2, zn - 2);
-}
-
-static int
-bary_muladd_1xN(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
-{
- BDIGIT_DBL n;
- BDIGIT_DBL dd;
- size_t j;
-
- assert(zn > yn);
-
- if (x == 0)
- return 0;
- dd = x;
- n = 0;
- for (j = 0; j < yn; j++) {
- BDIGIT_DBL ee = n + dd * yds[j];
- if (ee) {
- n = zds[j] + ee;
- zds[j] = BIGLO(n);
- n = BIGDN(n);
- }
- else {
- n = 0;
- }
-
- }
- for (; j < zn; j++) {
- if (n == 0)
- break;
- n += zds[j];
- zds[j] = BIGLO(n);
- n = BIGDN(n);
- }
- return n != 0;
-}
-
-static BDIGIT_DBL_SIGNED
-bigdivrem_mulsub(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
-{
- size_t i;
- BDIGIT_DBL t2;
- BDIGIT_DBL_SIGNED num;
-
- assert(zn == yn + 1);
-
- num = 0;
- t2 = 0;
- i = 0;
-
- do {
- BDIGIT_DBL ee;
- t2 += (BDIGIT_DBL)yds[i] * x;
- ee = num - BIGLO(t2);
- num = (BDIGIT_DBL)zds[i] + ee;
- if (ee) zds[i] = BIGLO(num);
- num = BIGDN(num);
- t2 = BIGDN(t2);
- } while (++i < yn);
- num += zds[i] - t2; /* borrow from high digit; don't update */
- return num;
-}
-
-static int
-bary_mulsub_1xN(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
-{
- BDIGIT_DBL_SIGNED num;
-
- assert(zn == yn + 1);
-
- num = bigdivrem_mulsub(zds, zn, x, yds, yn);
- zds[yn] = BIGLO(num);
- if (BIGDN(num))
- return 1;
- return 0;
-}
-
-static void
-bary_mul_normal(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- size_t i;
-
- assert(xn + yn <= zn);
-
- BDIGITS_ZERO(zds, zn);
- for (i = 0; i < xn; i++) {
- bary_muladd_1xN(zds+i, zn-i, xds[i], yds, yn);
- }
-}
-
-VALUE
-rb_big_mul_normal(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), zn = xn + yn;
- VALUE z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- bary_mul_normal(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return z;
-}
-
-/* efficient squaring (2 times faster than normal multiplication)
- * ref: Handbook of Applied Cryptography, Algorithm 14.16
- * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
- */
-static void
-bary_sq_fast(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn)
-{
- size_t i, j;
- BDIGIT_DBL c, v, w;
- BDIGIT vl;
- int vh;
-
- assert(xn * 2 <= zn);
-
- BDIGITS_ZERO(zds, zn);
-
- if (xn == 0)
- return;
-
- for (i = 0; i < xn-1; i++) {
- v = (BDIGIT_DBL)xds[i];
- if (!v)
- continue;
- c = (BDIGIT_DBL)zds[i + i] + v * v;
- zds[i + i] = BIGLO(c);
- c = BIGDN(c);
- v *= 2;
- vl = BIGLO(v);
- vh = (int)BIGDN(v);
- for (j = i + 1; j < xn; j++) {
- w = (BDIGIT_DBL)xds[j];
- c += (BDIGIT_DBL)zds[i + j] + vl * w;
- zds[i + j] = BIGLO(c);
- c = BIGDN(c);
- if (vh)
- c += w;
- }
- if (c) {
- c += (BDIGIT_DBL)zds[i + xn];
- zds[i + xn] = BIGLO(c);
- c = BIGDN(c);
- if (c)
- zds[i + xn + 1] += (BDIGIT)c;
- }
- }
-
- /* i == xn-1 */
- v = (BDIGIT_DBL)xds[i];
- if (!v)
- return;
- c = (BDIGIT_DBL)zds[i + i] + v * v;
- zds[i + i] = BIGLO(c);
- c = BIGDN(c);
- if (c) {
- zds[i + xn] += BIGLO(c);
- }
-}
-
-VALUE
-rb_big_sq_fast(VALUE x)
-{
- size_t xn = BIGNUM_LEN(x), zn = 2 * xn;
- VALUE z = bignew(zn, 1);
- bary_sq_fast(BDIGITS(z), zn, BDIGITS(x), xn);
- RB_GC_GUARD(x);
- return z;
-}
-
-/* balancing multiplication by slicing larger argument */
-static void
-bary_mul_balance_with_mulfunc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn, mulfunc_t *mulfunc)
-{
- VALUE work = 0;
- size_t yn0 = yn;
- size_t r, n;
-
- assert(xn + yn <= zn);
- assert(xn <= yn);
- assert(!KARATSUBA_BALANCED(xn, yn) || !TOOM3_BALANCED(xn, yn));
-
- BDIGITS_ZERO(zds, xn);
-
- n = 0;
- while (yn > 0) {
- BDIGIT *tds;
- size_t tn;
- r = xn > yn ? yn : xn;
- tn = xn + r;
- if (2 * (xn + r) <= zn - n) {
- tds = zds + n + xn + r;
- mulfunc(tds, tn, xds, xn, yds + n, r, wds, wn);
- BDIGITS_ZERO(zds + n + xn, r);
- bary_add(zds + n, tn,
- zds + n, tn,
- tds, tn);
- }
- else {
- if (wn < xn) {
- wn = xn;
- wds = ALLOCV_N(BDIGIT, work, wn);
- }
- tds = zds + n;
- MEMCPY(wds, zds + n, BDIGIT, xn);
- mulfunc(tds, tn, xds, xn, yds + n, r, wds+xn, wn-xn);
- bary_add(zds + n, tn,
- zds + n, tn,
- wds, xn);
- }
- yn -= r;
- n += r;
- }
- BDIGITS_ZERO(zds+xn+yn0, zn - (xn+yn0));
-
- if (work)
- ALLOCV_END(work);
-}
-
-VALUE
-rb_big_mul_balance(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), zn = xn + yn;
- VALUE z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- bary_mul_balance_with_mulfunc(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn, NULL, 0, bary_mul_toom3_start);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return z;
-}
-
-/* multiplication by karatsuba method */
-static void
-bary_mul_karatsuba(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- VALUE work = 0;
-
- size_t n;
- int sub_p, borrow, carry1, carry2, carry3;
-
- int odd_y = 0;
- int odd_xy = 0;
- int sq;
-
- const BDIGIT *xds0, *xds1, *yds0, *yds1;
- BDIGIT *zds0, *zds1, *zds2, *zds3;
-
- assert(xn + yn <= zn);
- assert(xn <= yn);
- assert(yn < 2 * xn);
-
- sq = xds == yds && xn == yn;
-
- if (yn & 1) {
- odd_y = 1;
- yn--;
- if (yn < xn) {
- odd_xy = 1;
- xn--;
- }
- }
-
- n = yn / 2;
-
- assert(n < xn);
-
- if (wn < n) {
- /* This function itself needs only n BDIGITs for work area.
- * However this function calls bary_mul_karatsuba and
- * bary_mul_balance recursively.
- * 2n BDIGITs are enough to avoid allocations in
- * the recursively called functions.
- */
- wn = 2*n;
- wds = ALLOCV_N(BDIGIT, work, wn);
- }
-
- /* Karatsuba algorithm:
- *
- * x = x0 + r*x1
- * y = y0 + r*y1
- * z = x*y
- * = (x0 + r*x1) * (y0 + r*y1)
- * = x0*y0 + r*(x1*y0 + x0*y1) + r*r*x1*y1
- * = x0*y0 + r*(x0*y0 + x1*y1 - (x1-x0)*(y1-y0)) + r*r*x1*y1
- * = x0*y0 + r*(x0*y0 + x1*y1 - (x0-x1)*(y0-y1)) + r*r*x1*y1
- */
-
- xds0 = xds;
- xds1 = xds + n;
- yds0 = yds;
- yds1 = yds + n;
- zds0 = zds;
- zds1 = zds + n;
- zds2 = zds + 2*n;
- zds3 = zds + 3*n;
-
- sub_p = 1;
-
- /* zds0:? zds1:? zds2:? zds3:? wds:? */
-
- if (bary_sub(zds0, n, xds, n, xds+n, xn-n)) {
- bary_2comp(zds0, n);
- sub_p = !sub_p;
- }
-
- /* zds0:|x1-x0| zds1:? zds2:? zds3:? wds:? */
-
- if (sq) {
- sub_p = 1;
- bary_mul_karatsuba_start(zds1, 2*n, zds0, n, zds0, n, wds, wn);
- }
- else {
- if (bary_sub(wds, n, yds, n, yds+n, n)) {
- bary_2comp(wds, n);
- sub_p = !sub_p;
- }
-
- /* zds0:|x1-x0| zds1:? zds2:? zds3:? wds:|y1-y0| */
-
- bary_mul_karatsuba_start(zds1, 2*n, zds0, n, wds, n, wds+n, wn-n);
- }
-
- /* zds0:|x1-x0| zds1,zds2:|x1-x0|*|y1-y0| zds3:? wds:|y1-y0| */
-
- borrow = 0;
- if (sub_p) {
- borrow = !bary_2comp(zds1, 2*n);
- }
- /* zds0:|x1-x0| zds1,zds2:-?|x1-x0|*|y1-y0| zds3:? wds:|y1-y0| */
-
- MEMCPY(wds, zds1, BDIGIT, n);
-
- /* zds0:|x1-x0| zds1,zds2:-?|x1-x0|*|y1-y0| zds3:? wds:lo(-?|x1-x0|*|y1-y0|) */
-
- bary_mul_karatsuba_start(zds0, 2*n, xds0, n, yds0, n, wds+n, wn-n);
-
- /* zds0,zds1:x0*y0 zds2:hi(-?|x1-x0|*|y1-y0|) zds3:? wds:lo(-?|x1-x0|*|y1-y0|) */
-
- carry1 = bary_add(wds, n, wds, n, zds0, n);
- carry1 = bary_addc(zds2, n, zds2, n, zds1, n, carry1);
-
- /* zds0,zds1:x0*y0 zds2:hi(x0*y0-?|x1-x0|*|y1-y0|) zds3:? wds:lo(x0*y0-?|x1-x0|*|y1-y0|) */
-
- carry2 = bary_add(zds1, n, zds1, n, wds, n);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|) zds2:hi(x0*y0-?|x1-x0|*|y1-y0|) zds3:? wds:lo(x0*y0-?|x1-x0|*|y1-y0|) */
-
- MEMCPY(wds, zds2, BDIGIT, n);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|) zds2:_ zds3:? wds:hi(x0*y0-?|x1-x0|*|y1-y0|) */
-
- bary_mul_karatsuba_start(zds2, zn-2*n, xds1, xn-n, yds1, n, wds+n, wn-n);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|) zds2,zds3:x1*y1 wds:hi(x0*y0-?|x1-x0|*|y1-y0|) */
-
- carry3 = bary_add(zds1, n, zds1, n, zds2, n);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|)+lo(x1*y1) zds2,zds3:x1*y1 wds:hi(x0*y0-?|x1-x0|*|y1-y0|) */
-
- carry3 = bary_addc(zds2, n, zds2, n, zds3, (4*n < zn ? n : zn-3*n), carry3);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|)+lo(x1*y1) zds2,zds3:x1*y1+hi(x1*y1) wds:hi(x0*y0-?|x1-x0|*|y1-y0|) */
-
- bary_add(zds2, zn-2*n, zds2, zn-2*n, wds, n);
-
- /* zds0:lo(x0*y0) zds1:hi(x0*y0)+lo(x0*y0-?|x1-x0|*|y1-y0|)+lo(x1*y1) zds2,zds3:x1*y1+hi(x1*y1)+hi(x0*y0-?|x1-x0|*|y1-y0|) wds:_ */
-
- if (carry2)
- bary_add_one(zds2, zn-2*n);
-
- if (carry1 + carry3 - borrow < 0)
- bary_sub_one(zds3, zn-3*n);
- else if (carry1 + carry3 - borrow > 0) {
- BDIGIT c = carry1 + carry3 - borrow;
- bary_add(zds3, zn-3*n, zds3, zn-3*n, &c, 1);
- }
-
- /*
- if (SIZEOF_BDIGIT * zn <= 16) {
- uint128_t z, x, y;
- ssize_t i;
- for (x = 0, i = xn-1; 0 <= i; i--) { x <<= SIZEOF_BDIGIT*CHAR_BIT; x |= xds[i]; }
- for (y = 0, i = yn-1; 0 <= i; i--) { y <<= SIZEOF_BDIGIT*CHAR_BIT; y |= yds[i]; }
- for (z = 0, i = zn-1; 0 <= i; i--) { z <<= SIZEOF_BDIGIT*CHAR_BIT; z |= zds[i]; }
- assert(z == x * y);
- }
- */
-
- if (odd_xy) {
- bary_muladd_1xN(zds+yn, zn-yn, yds[yn], xds, xn);
- bary_muladd_1xN(zds+xn, zn-xn, xds[xn], yds, yn+1);
- }
- else if (odd_y) {
- bary_muladd_1xN(zds+yn, zn-yn, yds[yn], xds, xn);
- }
-
- if (work)
- ALLOCV_END(work);
-}
-
-VALUE
-rb_big_mul_karatsuba(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), zn = xn + yn;
- VALUE z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- if (!((xn <= yn && yn < 2) || KARATSUBA_BALANCED(xn, yn)))
- rb_raise(rb_eArgError, "unexpected bignum length for karatsuba");
- bary_mul_karatsuba(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn, NULL, 0);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return z;
-}
-
-static void
-bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- size_t n;
- size_t wnc;
- VALUE work = 0;
-
- /* "p" stands for "positive". Actually it means "non-negative", though. */
- size_t x0n; const BDIGIT *x0ds;
- size_t x1n; const BDIGIT *x1ds;
- size_t x2n; const BDIGIT *x2ds;
- size_t y0n; const BDIGIT *y0ds;
- size_t y1n; const BDIGIT *y1ds;
- size_t y2n; const BDIGIT *y2ds;
-
- size_t u1n; BDIGIT *u1ds; int u1p;
- size_t u2n; BDIGIT *u2ds; int u2p;
- size_t u3n; BDIGIT *u3ds; int u3p;
-
- size_t v1n; BDIGIT *v1ds; int v1p;
- size_t v2n; BDIGIT *v2ds; int v2p;
- size_t v3n; BDIGIT *v3ds; int v3p;
-
- size_t t0n; BDIGIT *t0ds; int t0p;
- size_t t1n; BDIGIT *t1ds; int t1p;
- size_t t2n; BDIGIT *t2ds; int t2p;
- size_t t3n; BDIGIT *t3ds; int t3p;
- size_t t4n; BDIGIT *t4ds; int t4p;
-
- size_t z0n; BDIGIT *z0ds;
- size_t z1n; BDIGIT *z1ds; int z1p;
- size_t z2n; BDIGIT *z2ds; int z2p;
- size_t z3n; BDIGIT *z3ds; int z3p;
- size_t z4n; BDIGIT *z4ds;
-
- size_t zzn; BDIGIT *zzds;
-
- int sq = xds == yds && xn == yn;
-
- assert(xn <= yn); /* assume y >= x */
- assert(xn + yn <= zn);
-
- n = (yn + 2) / 3;
- assert(2*n < xn);
-
- wnc = 0;
-
- wnc += (u1n = n+1); /* BITSPERDIG*n+2 bits */
- wnc += (u2n = n+1); /* BITSPERDIG*n+1 bits */
- wnc += (u3n = n+1); /* BITSPERDIG*n+3 bits */
- wnc += (v1n = n+1); /* BITSPERDIG*n+2 bits */
- wnc += (v2n = n+1); /* BITSPERDIG*n+1 bits */
- wnc += (v3n = n+1); /* BITSPERDIG*n+3 bits */
-
- wnc += (t0n = 2*n); /* BITSPERDIG*2*n bits */
- wnc += (t1n = 2*n+2); /* BITSPERDIG*2*n+4 bits but bary_mul needs u1n+v1n */
- wnc += (t2n = 2*n+2); /* BITSPERDIG*2*n+2 bits but bary_mul needs u2n+v2n */
- wnc += (t3n = 2*n+2); /* BITSPERDIG*2*n+6 bits but bary_mul needs u3n+v3n */
- wnc += (t4n = 2*n); /* BITSPERDIG*2*n bits */
-
- wnc += (z1n = 2*n+1); /* BITSPERDIG*2*n+5 bits */
- wnc += (z2n = 2*n+1); /* BITSPERDIG*2*n+6 bits */
- wnc += (z3n = 2*n+1); /* BITSPERDIG*2*n+8 bits */
-
- if (wn < wnc) {
- wn = wnc * 3 / 2; /* Allocate working memory for whole recursion at once. */
- wds = ALLOCV_N(BDIGIT, work, wn);
- }
-
- u1ds = wds; wds += u1n;
- u2ds = wds; wds += u2n;
- u3ds = wds; wds += u3n;
-
- v1ds = wds; wds += v1n;
- v2ds = wds; wds += v2n;
- v3ds = wds; wds += v3n;
-
- t0ds = wds; wds += t0n;
- t1ds = wds; wds += t1n;
- t2ds = wds; wds += t2n;
- t3ds = wds; wds += t3n;
- t4ds = wds; wds += t4n;
-
- z1ds = wds; wds += z1n;
- z2ds = wds; wds += z2n;
- z3ds = wds; wds += z3n;
-
- wn -= wnc;
-
- zzds = u1ds;
- zzn = 6*n+1;
-
- x0n = n;
- x1n = n;
- x2n = xn - 2*n;
- x0ds = xds;
- x1ds = xds + n;
- x2ds = xds + 2*n;
-
- if (sq) {
- y0n = x0n;
- y1n = x1n;
- y2n = x2n;
- y0ds = x0ds;
- y1ds = x1ds;
- y2ds = x2ds;
- }
- else {
- y0n = n;
- y1n = n;
- y2n = yn - 2*n;
- y0ds = yds;
- y1ds = yds + n;
- y2ds = yds + 2*n;
- }
-
- /*
- * ref. http://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication
- *
- * x(b) = x0 * b^0 + x1 * b^1 + x2 * b^2
- * y(b) = y0 * b^0 + y1 * b^1 + y2 * b^2
- *
- * z(b) = x(b) * y(b)
- * z(b) = z0 * b^0 + z1 * b^1 + z2 * b^2 + z3 * b^3 + z4 * b^4
- * where:
- * z0 = x0 * y0
- * z1 = x0 * y1 + x1 * y0
- * z2 = x0 * y2 + x1 * y1 + x2 * y0
- * z3 = x1 * y2 + x2 * y1
- * z4 = x2 * y2
- *
- * Toom3 method (a.k.a. Toom-Cook method):
- * (Step1) calculating 5 points z(b0), z(b1), z(b2), z(b3), z(b4),
- * where:
- * b0 = 0, b1 = 1, b2 = -1, b3 = -2, b4 = inf,
- * z(0) = x(0) * y(0) = x0 * y0
- * z(1) = x(1) * y(1) = (x0 + x1 + x2) * (y0 + y1 + y2)
- * z(-1) = x(-1) * y(-1) = (x0 - x1 + x2) * (y0 - y1 + y2)
- * z(-2) = x(-2) * y(-2) = (x0 - 2 * (x1 - 2 * x2)) * (y0 - 2 * (y1 - 2 * y2))
- * z(inf) = x(inf) * y(inf) = x2 * y2
- *
- * (Step2) interpolating z0, z1, z2, z3 and z4.
- *
- * (Step3) Substituting base value into b of the polynomial z(b),
- */
-
- /*
- * [Step1] calculating 5 points z(b0), z(b1), z(b2), z(b3), z(b4)
- */
-
- /* u1 <- x0 + x2 */
- bary_add(u1ds, u1n, x0ds, x0n, x2ds, x2n);
- u1p = 1;
-
- /* x(-1) : u2 <- u1 - x1 = x0 - x1 + x2 */
- if (bary_sub(u2ds, u2n, u1ds, u1n, x1ds, x1n)) {
- bary_2comp(u2ds, u2n);
- u2p = 0;
- }
- else {
- u2p = 1;
- }
-
- /* x(1) : u1 <- u1 + x1 = x0 + x1 + x2 */
- bary_add(u1ds, u1n, u1ds, u1n, x1ds, x1n);
-
- /* x(-2) : u3 <- 2 * (u2 + x2) - x0 = x0 - 2 * (x1 - 2 * x2) */
- u3p = 1;
- if (u2p) {
- bary_add(u3ds, u3n, u2ds, u2n, x2ds, x2n);
- }
- else if (bary_sub(u3ds, u3n, x2ds, x2n, u2ds, u2n)) {
- bary_2comp(u3ds, u3n);
- u3p = 0;
- }
- bary_small_lshift(u3ds, u3ds, u3n, 1);
- if (!u3p) {
- bary_add(u3ds, u3n, u3ds, u3n, x0ds, x0n);
- }
- else if (bary_sub(u3ds, u3n, u3ds, u3n, x0ds, x0n)) {
- bary_2comp(u3ds, u3n);
- u3p = 0;
- }
-
- if (sq) {
- v1n = u1n; v1ds = u1ds; v1p = u1p;
- v2n = u2n; v2ds = u2ds; v2p = u2p;
- v3n = u3n; v3ds = u3ds; v3p = u3p;
- }
- else {
- /* v1 <- y0 + y2 */
- bary_add(v1ds, v1n, y0ds, y0n, y2ds, y2n);
- v1p = 1;
-
- /* y(-1) : v2 <- v1 - y1 = y0 - y1 + y2 */
- v2p = 1;
- if (bary_sub(v2ds, v2n, v1ds, v1n, y1ds, y1n)) {
- bary_2comp(v2ds, v2n);
- v2p = 0;
- }
-
- /* y(1) : v1 <- v1 + y1 = y0 + y1 + y2 */
- bary_add(v1ds, v1n, v1ds, v1n, y1ds, y1n);
-
- /* y(-2) : v3 <- 2 * (v2 + y2) - y0 = y0 - 2 * (y1 - 2 * y2) */
- v3p = 1;
- if (v2p) {
- bary_add(v3ds, v3n, v2ds, v2n, y2ds, y2n);
- }
- else if (bary_sub(v3ds, v3n, y2ds, y2n, v2ds, v2n)) {
- bary_2comp(v3ds, v3n);
- v3p = 0;
- }
- bary_small_lshift(v3ds, v3ds, v3n, 1);
- if (!v3p) {
- bary_add(v3ds, v3n, v3ds, v3n, y0ds, y0n);
- }
- else if (bary_sub(v3ds, v3n, v3ds, v3n, y0ds, y0n)) {
- bary_2comp(v3ds, v3n);
- v3p = 0;
- }
- }
-
- /* z(0) : t0 <- x0 * y0 */
- bary_mul_toom3_start(t0ds, t0n, x0ds, x0n, y0ds, y0n, wds, wn);
- t0p = 1;
-
- /* z(1) : t1 <- u1 * v1 */
- bary_mul_toom3_start(t1ds, t1n, u1ds, u1n, v1ds, v1n, wds, wn);
- t1p = u1p == v1p;
- assert(t1ds[t1n-1] == 0);
- t1n--;
-
- /* z(-1) : t2 <- u2 * v2 */
- bary_mul_toom3_start(t2ds, t2n, u2ds, u2n, v2ds, v2n, wds, wn);
- t2p = u2p == v2p;
- assert(t2ds[t2n-1] == 0);
- t2n--;
-
- /* z(-2) : t3 <- u3 * v3 */
- bary_mul_toom3_start(t3ds, t3n, u3ds, u3n, v3ds, v3n, wds, wn);
- t3p = u3p == v3p;
- assert(t3ds[t3n-1] == 0);
- t3n--;
-
- /* z(inf) : t4 <- x2 * y2 */
- bary_mul_toom3_start(t4ds, t4n, x2ds, x2n, y2ds, y2n, wds, wn);
- t4p = 1;
-
- /*
- * [Step2] interpolating z0, z1, z2, z3 and z4.
- */
-
- /* z0 <- z(0) == t0 */
- z0n = t0n; z0ds = t0ds;
-
- /* z4 <- z(inf) == t4 */
- z4n = t4n; z4ds = t4ds;
-
- /* z3 <- (z(-2) - z(1)) / 3 == (t3 - t1) / 3 */
- if (t3p == t1p) {
- z3p = t3p;
- if (bary_sub(z3ds, z3n, t3ds, t3n, t1ds, t1n)) {
- bary_2comp(z3ds, z3n);
- z3p = !z3p;
- }
- }
- else {
- z3p = t3p;
- bary_add(z3ds, z3n, t3ds, t3n, t1ds, t1n);
- }
- bigdivrem_single(z3ds, z3ds, z3n, 3);
-
- /* z1 <- (z(1) - z(-1)) / 2 == (t1 - t2) / 2 */
- if (t1p == t2p) {
- z1p = t1p;
- if (bary_sub(z1ds, z1n, t1ds, t1n, t2ds, t2n)) {
- bary_2comp(z1ds, z1n);
- z1p = !z1p;
- }
- }
- else {
- z1p = t1p;
- bary_add(z1ds, z1n, t1ds, t1n, t2ds, t2n);
- }
- bary_small_rshift(z1ds, z1ds, z1n, 1, 0);
-
- /* z2 <- z(-1) - z(0) == t2 - t0 */
- if (t2p == t0p) {
- z2p = t2p;
- if (bary_sub(z2ds, z2n, t2ds, t2n, t0ds, t0n)) {
- bary_2comp(z2ds, z2n);
- z2p = !z2p;
- }
- }
- else {
- z2p = t2p;
- bary_add(z2ds, z2n, t2ds, t2n, t0ds, t0n);
- }
-
- /* z3 <- (z2 - z3) / 2 + 2 * z(inf) == (z2 - z3) / 2 + 2 * t4 */
- if (z2p == z3p) {
- z3p = z2p;
- if (bary_sub(z3ds, z3n, z2ds, z2n, z3ds, z3n)) {
- bary_2comp(z3ds, z3n);
- z3p = !z3p;
- }
- }
- else {
- z3p = z2p;
- bary_add(z3ds, z3n, z2ds, z2n, z3ds, z3n);
- }
- bary_small_rshift(z3ds, z3ds, z3n, 1, 0);
- if (z3p == t4p) {
- bary_muladd_1xN(z3ds, z3n, 2, t4ds, t4n);
- }
- else {
- if (bary_mulsub_1xN(z3ds, z3n, 2, t4ds, t4n)) {
- bary_2comp(z3ds, z3n);
- z3p = !z3p;
- }
- }
-
- /* z2 <- z2 + z1 - z(inf) == z2 + z1 - t4 */
- if (z2p == z1p) {
- bary_add(z2ds, z2n, z2ds, z2n, z1ds, z1n);
- }
- else {
- if (bary_sub(z2ds, z2n, z2ds, z2n, z1ds, z1n)) {
- bary_2comp(z2ds, z2n);
- z2p = !z2p;
- }
- }
-
- if (z2p == t4p) {
- if (bary_sub(z2ds, z2n, z2ds, z2n, t4ds, t4n)) {
- bary_2comp(z2ds, z2n);
- z2p = !z2p;
- }
- }
- else {
- bary_add(z2ds, z2n, z2ds, z2n, t4ds, t4n);
- }
-
- /* z1 <- z1 - z3 */
- if (z1p == z3p) {
- if (bary_sub(z1ds, z1n, z1ds, z1n, z3ds, z3n)) {
- bary_2comp(z1ds, z1n);
- z1p = !z1p;
- }
- }
- else {
- bary_add(z1ds, z1n, z1ds, z1n, z3ds, z3n);
- }
-
- /*
- * [Step3] Substituting base value into b of the polynomial z(b),
- */
-
- MEMCPY(zzds, z0ds, BDIGIT, z0n);
- BDIGITS_ZERO(zzds + z0n, 4*n - z0n);
- MEMCPY(zzds + 4*n, z4ds, BDIGIT, z4n);
- BDIGITS_ZERO(zzds + 4*n + z4n, zzn - (4*n + z4n));
- if (z1p)
- bary_add(zzds + n, zzn - n, zzds + n, zzn - n, z1ds, z1n);
- else
- bary_sub(zzds + n, zzn - n, zzds + n, zzn - n, z1ds, z1n);
- if (z2p)
- bary_add(zzds + 2*n, zzn - 2*n, zzds + 2*n, zzn - 2*n, z2ds, z2n);
- else
- bary_sub(zzds + 2*n, zzn - 2*n, zzds + 2*n, zzn - 2*n, z2ds, z2n);
- if (z3p)
- bary_add(zzds + 3*n, zzn - 3*n, zzds + 3*n, zzn - 3*n, z3ds, z3n);
- else
- bary_sub(zzds + 3*n, zzn - 3*n, zzds + 3*n, zzn - 3*n, z3ds, z3n);
-
- BARY_TRUNC(zzds, zzn);
- MEMCPY(zds, zzds, BDIGIT, zzn);
- BDIGITS_ZERO(zds + zzn, zn - zzn);
-
- if (work)
- ALLOCV_END(work);
-}
-
-VALUE
-rb_big_mul_toom3(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), zn = xn + yn;
- VALUE z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- if (xn > yn || yn < 3 || !TOOM3_BALANCED(xn,yn))
- rb_raise(rb_eArgError, "unexpected bignum length for toom3");
- bary_mul_toom3(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn, NULL, 0);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return z;
-}
-
-#ifdef USE_GMP
-static void
-bary_mul_gmp(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
- mpz_t x, y, z;
- size_t count;
-
- assert(xn + yn <= zn);
-
- mpz_init(x);
- mpz_init(y);
- mpz_init(z);
- mpz_import(x, xn, -1, sizeof(BDIGIT), 0, nails, xds);
- if (xds == yds && xn == yn) {
- mpz_mul(z, x, x);
- }
- else {
- mpz_import(y, yn, -1, sizeof(BDIGIT), 0, nails, yds);
- mpz_mul(z, x, y);
- }
- mpz_export(zds, &count, -1, sizeof(BDIGIT), 0, nails, z);
- BDIGITS_ZERO(zds+count, zn-count);
- mpz_clear(x);
- mpz_clear(y);
- mpz_clear(z);
-}
-
-VALUE
-rb_big_mul_gmp(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), zn = xn + yn;
- VALUE z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- bary_mul_gmp(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return z;
-}
-#endif
-
-static void
-bary_short_mul(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- assert(xn + yn <= zn);
-
- if (xn == 1 && yn == 1) {
- bary_mul_single(zds, zn, xds[0], yds[0]);
- }
- else {
- bary_mul_normal(zds, zn, xds, xn, yds, yn);
- rb_thread_check_ints();
- }
-}
-
-/* determine whether a bignum is sparse or not by random sampling */
-static inline int
-bary_sparse_p(const BDIGIT *ds, size_t n)
-{
- long c = 0;
-
- if ( ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
- if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
- if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
-
- return (c <= 1) ? 1 : 0;
-}
+ (RBIGNUM(x)->len == 1 || bigzero_p(x))))
+static int bigzero_p(VALUE);
static int
-bary_mul_precheck(BDIGIT **zdsp, size_t *znp, const BDIGIT **xdsp, size_t *xnp, const BDIGIT **ydsp, size_t *ynp)
-{
- size_t nlsz; /* number of least significant zero BDIGITs */
-
- BDIGIT *zds = *zdsp;
- size_t zn = *znp;
- const BDIGIT *xds = *xdsp;
- size_t xn = *xnp;
- const BDIGIT *yds = *ydsp;
- size_t yn = *ynp;
-
- assert(xn + yn <= zn);
-
- nlsz = 0;
-
- while (0 < xn) {
- if (xds[xn-1] == 0) {
- xn--;
- }
- else {
- do {
- if (xds[0] != 0)
- break;
- xds++;
- xn--;
- nlsz++;
- } while (0 < xn);
- break;
- }
- }
-
- while (0 < yn) {
- if (yds[yn-1] == 0) {
- yn--;
- }
- else {
- do {
- if (yds[0] != 0)
- break;
- yds++;
- yn--;
- nlsz++;
- } while (0 < yn);
- break;
- }
- }
-
- if (nlsz) {
- BDIGITS_ZERO(zds, nlsz);
- zds += nlsz;
- zn -= nlsz;
- }
-
- /* make sure that y is longer than x */
- if (xn > yn) {
- const BDIGIT *tds;
- size_t tn;
- tds = xds; xds = yds; yds = tds;
- tn = xn; xn = yn; yn = tn;
- }
- assert(xn <= yn);
-
- if (xn <= 1) {
- if (xn == 0) {
- BDIGITS_ZERO(zds, zn);
- return 1;
- }
-
- if (xds[0] == 1) {
- MEMCPY(zds, yds, BDIGIT, yn);
- BDIGITS_ZERO(zds+yn, zn-yn);
- return 1;
- }
- if (POW2_P(xds[0])) {
- zds[yn] = bary_small_lshift(zds, yds, yn, bit_length(xds[0])-1);
- BDIGITS_ZERO(zds+yn+1, zn-yn-1);
- return 1;
- }
- if (yn == 1 && yds[0] == 1) {
- zds[0] = xds[0];
- BDIGITS_ZERO(zds+1, zn-1);
- return 1;
- }
- bary_mul_normal(zds, zn, xds, xn, yds, yn);
- return 1;
- }
-
- *zdsp = zds;
- *znp = zn;
- *xdsp = xds;
- *xnp = xn;
- *ydsp = yds;
- *ynp = yn;
-
- return 0;
-}
-
-static void
-bary_mul_karatsuba_branch(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- /* normal multiplication when x is small */
- if (xn < KARATSUBA_MUL_DIGITS) {
- normal:
- if (xds == yds && xn == yn)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_short_mul(zds, zn, xds, xn, yds, yn);
- return;
- }
-
- /* normal multiplication when x or y is a sparse bignum */
- if (bary_sparse_p(xds, xn)) goto normal;
- if (bary_sparse_p(yds, yn)) {
- bary_short_mul(zds, zn, yds, yn, xds, xn);
- return;
- }
-
- /* balance multiplication by slicing y when x is much smaller than y */
- if (!KARATSUBA_BALANCED(xn, yn)) {
- bary_mul_balance_with_mulfunc(zds, zn, xds, xn, yds, yn, wds, wn, bary_mul_karatsuba_start);
- return;
- }
-
- /* multiplication by karatsuba method */
- bary_mul_karatsuba(zds, zn, xds, xn, yds, yn, wds, wn);
-}
-
-static void
-bary_mul_karatsuba_start(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- if (bary_mul_precheck(&zds, &zn, &xds, &xn, &yds, &yn))
- return;
-
- bary_mul_karatsuba_branch(zds, zn, xds, xn, yds, yn, wds, wn);
-}
-
-static void
-bary_mul_toom3_branch(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- if (xn < TOOM3_MUL_DIGITS) {
- bary_mul_karatsuba_branch(zds, zn, xds, xn, yds, yn, wds, wn);
- return;
- }
-
- if (!TOOM3_BALANCED(xn, yn)) {
- bary_mul_balance_with_mulfunc(zds, zn, xds, xn, yds, yn, wds, wn, bary_mul_toom3_start);
- return;
- }
-
- bary_mul_toom3(zds, zn, xds, xn, yds, yn, wds, wn);
-}
-
-static void
-bary_mul_toom3_start(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn)
-{
- if (bary_mul_precheck(&zds, &zn, &xds, &xn, &yds, &yn))
- return;
-
- bary_mul_toom3_branch(zds, zn, xds, xn, yds, yn, wds, wn);
-}
-
-static void
-bary_mul(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
-#ifdef USE_GMP
- const size_t naive_threshold = GMP_MUL_DIGITS;
-#else
- const size_t naive_threshold = KARATSUBA_MUL_DIGITS;
-#endif
- if (xn <= yn) {
- if (xn < naive_threshold) {
- if (xds == yds && xn == yn)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_short_mul(zds, zn, xds, xn, yds, yn);
- return;
- }
- }
- else {
- if (yn < naive_threshold) {
- bary_short_mul(zds, zn, yds, yn, xds, xn);
- return;
- }
- }
-
-#ifdef USE_GMP
- bary_mul_gmp(zds, zn, xds, xn, yds, yn);
-#else
- bary_mul_toom3_start(zds, zn, xds, xn, yds, yn, NULL, 0);
-#endif
-}
-
-struct big_div_struct {
- size_t yn, zn;
- BDIGIT *yds, *zds;
- volatile VALUE stop;
-};
-
-static void *
-bigdivrem1(void *ptr)
-{
- struct big_div_struct *bds = (struct big_div_struct*)ptr;
- size_t yn = bds->yn;
- size_t zn = bds->zn;
- BDIGIT *yds = bds->yds, *zds = bds->zds;
- BDIGIT_DBL_SIGNED num;
- BDIGIT q;
-
- do {
- if (bds->stop) {
- bds->zn = zn;
- return 0;
- }
- if (zds[zn-1] == yds[yn-1]) q = BDIGMAX;
- else q = (BDIGIT)((BIGUP(zds[zn-1]) + zds[zn-2])/yds[yn-1]);
- if (q) {
- num = bigdivrem_mulsub(zds+zn-(yn+1), yn+1,
- q,
- yds, yn);
- while (num) { /* "add back" required */
- q--;
- num = bary_add(zds+zn-(yn+1), yn,
- zds+zn-(yn+1), yn,
- yds, yn);
- num--;
- }
- }
- zn--;
- zds[zn] = q;
- } while (zn > yn);
- return 0;
-}
-
-static void
-rb_big_stop(void *ptr)
-{
- struct big_div_struct *bds = ptr;
- bds->stop = Qtrue;
-}
-
-static BDIGIT
-bigdivrem_single1(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT x_higher_bdigit, BDIGIT y)
-{
- assert(0 < xn);
- assert(x_higher_bdigit < y);
- if (POW2_P(y)) {
- BDIGIT r;
- r = xds[0] & (y-1);
- bary_small_rshift(qds, xds, xn, bit_length(y)-1, x_higher_bdigit);
- return r;
- }
- else {
- size_t i;
- BDIGIT_DBL t2;
- t2 = x_higher_bdigit;
- i = xn;
- while (i--) {
- t2 = BIGUP(t2) + xds[i];
- qds[i] = (BDIGIT)(t2 / y);
- t2 %= y;
- }
- return (BDIGIT)t2;
- }
-}
-
-static BDIGIT
-bigdivrem_single(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT y)
-{
- return bigdivrem_single1(qds, xds, xn, 0, y);
-}
-
-static void
-bigdivrem_restoring(BDIGIT *zds, size_t zn, BDIGIT *yds, size_t yn)
-{
- struct big_div_struct bds;
- size_t ynzero;
-
- assert(yn < zn);
- assert(BDIGIT_MSB(yds[yn-1]));
- assert(zds[zn-1] < yds[yn-1]);
-
- for (ynzero = 0; !yds[ynzero]; ynzero++);
-
- if (ynzero+1 == yn) {
- BDIGIT r;
- r = bigdivrem_single1(zds+yn, zds+ynzero, zn-yn, zds[zn-1], yds[ynzero]);
- zds[ynzero] = r;
- return;
- }
-
- bds.yn = yn - ynzero;
- bds.zds = zds + ynzero;
- bds.yds = yds + ynzero;
- bds.stop = Qfalse;
- bds.zn = zn - ynzero;
- if (bds.zn > 10000 || bds.yn > 10000) {
- retry:
- bds.stop = Qfalse;
- rb_thread_call_without_gvl(bigdivrem1, &bds, rb_big_stop, &bds);
-
- if (bds.stop == Qtrue) {
- /* execute trap handler, but exception was not raised. */
- goto retry;
- }
- }
- else {
- bigdivrem1(&bds);
- }
-}
-
-static void
-bary_divmod_normal(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- int shift;
- BDIGIT *zds, *yyds;
- size_t zn;
- VALUE tmpyz = 0;
-
- assert(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
- assert(qds ? (xn - yn + 1) <= qn : 1);
- assert(rds ? yn <= rn : 1);
-
- zn = xn + BIGDIVREM_EXTRA_WORDS;
-
- shift = nlz(yds[yn-1]);
- if (shift) {
- int alloc_y = !rds;
- int alloc_z = !qds || qn < zn;
- if (alloc_y && alloc_z) {
- yyds = ALLOCV_N(BDIGIT, tmpyz, yn+zn);
- zds = yyds + yn;
- }
- else {
- yyds = alloc_y ? ALLOCV_N(BDIGIT, tmpyz, yn) : rds;
- zds = alloc_z ? ALLOCV_N(BDIGIT, tmpyz, zn) : qds;
- }
- zds[xn] = bary_small_lshift(zds, xds, xn, shift);
- bary_small_lshift(yyds, yds, yn, shift);
- }
- else {
- if (qds && zn <= qn)
- zds = qds;
- else
- zds = ALLOCV_N(BDIGIT, tmpyz, zn);
- MEMCPY(zds, xds, BDIGIT, xn);
- zds[xn] = 0;
- /* bigdivrem_restoring will not modify y.
- * So use yds directly. */
- yyds = (BDIGIT *)yds;
- }
-
- bigdivrem_restoring(zds, zn, yyds, yn);
-
- if (rds) {
- if (shift)
- bary_small_rshift(rds, zds, yn, shift, 0);
- else
- MEMCPY(rds, zds, BDIGIT, yn);
- BDIGITS_ZERO(rds+yn, rn-yn);
- }
-
- if (qds) {
- size_t j = zn - yn;
- MEMMOVE(qds, zds+yn, BDIGIT, j);
- BDIGITS_ZERO(qds+j, qn-j);
- }
-
- if (tmpyz)
- ALLOCV_END(tmpyz);
-}
-
-VALUE
-rb_big_divrem_normal(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), qn, rn;
- BDIGIT *xds = BDIGITS(x), *yds = BDIGITS(y), *qds, *rds;
- VALUE q, r;
-
- BARY_TRUNC(yds, yn);
- if (yn == 0)
- rb_num_zerodiv();
- BARY_TRUNC(xds, xn);
-
- if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1]))
- return rb_assoc_new(LONG2FIX(0), x);
-
- qn = xn + BIGDIVREM_EXTRA_WORDS;
- q = bignew(qn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- qds = BDIGITS(q);
-
- rn = yn;
- r = bignew(rn, BIGNUM_SIGN(x));
- rds = BDIGITS(r);
-
- bary_divmod_normal(qds, qn, rds, rn, xds, xn, yds, yn);
-
- bigtrunc(q);
- bigtrunc(r);
-
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
-
- return rb_assoc_new(q, r);
-}
-
-#ifdef USE_GMP
-static void
-bary_divmod_gmp(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
- mpz_t x, y, q, r;
- size_t count;
-
- assert(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
- assert(qds ? (xn - yn + 1) <= qn : 1);
- assert(rds ? yn <= rn : 1);
- assert(qds || rds);
-
- mpz_init(x);
- mpz_init(y);
- if (qds) mpz_init(q);
- if (rds) mpz_init(r);
-
- mpz_import(x, xn, -1, sizeof(BDIGIT), 0, nails, xds);
- mpz_import(y, yn, -1, sizeof(BDIGIT), 0, nails, yds);
-
- if (!rds) {
- mpz_fdiv_q(q, x, y);
- }
- else if (!qds) {
- mpz_fdiv_r(r, x, y);
- }
- else {
- mpz_fdiv_qr(q, r, x, y);
- }
-
- mpz_clear(x);
- mpz_clear(y);
-
- if (qds) {
- mpz_export(qds, &count, -1, sizeof(BDIGIT), 0, nails, q);
- BDIGITS_ZERO(qds+count, qn-count);
- mpz_clear(q);
- }
-
- if (rds) {
- mpz_export(rds, &count, -1, sizeof(BDIGIT), 0, nails, r);
- BDIGITS_ZERO(rds+count, rn-count);
- mpz_clear(r);
- }
-}
-
-VALUE
-rb_big_divrem_gmp(VALUE x, VALUE y)
-{
- size_t xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y), qn, rn;
- BDIGIT *xds = BDIGITS(x), *yds = BDIGITS(y), *qds, *rds;
- VALUE q, r;
-
- BARY_TRUNC(yds, yn);
- if (yn == 0)
- rb_num_zerodiv();
- BARY_TRUNC(xds, xn);
-
- if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1]))
- return rb_assoc_new(LONG2FIX(0), x);
-
- qn = xn - yn + 1;
- q = bignew(qn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- qds = BDIGITS(q);
-
- rn = yn;
- r = bignew(rn, BIGNUM_SIGN(x));
- rds = BDIGITS(r);
-
- bary_divmod_gmp(qds, qn, rds, rn, xds, xn, yds, yn);
-
- bigtrunc(q);
- bigtrunc(r);
-
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
-
- return rb_assoc_new(q, r);
-}
-#endif
-
-static void
-bary_divmod_branch(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
-#ifdef USE_GMP
- if (GMP_DIV_DIGITS < xn) {
- bary_divmod_gmp(qds, qn, rds, rn, xds, xn, yds, yn);
- return;
- }
-#endif
- bary_divmod_normal(qds, qn, rds, rn, xds, xn, yds, yn);
-}
-
-static void
-bary_divmod(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- assert(xn <= qn);
- assert(yn <= rn);
-
- BARY_TRUNC(yds, yn);
- if (yn == 0)
- rb_num_zerodiv();
-
- BARY_TRUNC(xds, xn);
- if (xn == 0) {
- BDIGITS_ZERO(qds, qn);
- BDIGITS_ZERO(rds, rn);
- return;
- }
-
- if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1])) {
- MEMCPY(rds, xds, BDIGIT, xn);
- BDIGITS_ZERO(rds+xn, rn-xn);
- BDIGITS_ZERO(qds, qn);
- }
- else if (yn == 1) {
- MEMCPY(qds, xds, BDIGIT, xn);
- BDIGITS_ZERO(qds+xn, qn-xn);
- rds[0] = bigdivrem_single(qds, xds, xn, yds[0]);
- BDIGITS_ZERO(rds+1, rn-1);
- }
- else if (xn == 2 && yn == 2) {
- BDIGIT_DBL x = bary2bdigitdbl(xds, 2);
- BDIGIT_DBL y = bary2bdigitdbl(yds, 2);
- BDIGIT_DBL q = x / y;
- BDIGIT_DBL r = x % y;
- qds[0] = BIGLO(q);
- qds[1] = BIGLO(BIGDN(q));
- BDIGITS_ZERO(qds+2, qn-2);
- rds[0] = BIGLO(r);
- rds[1] = BIGLO(BIGDN(r));
- BDIGITS_ZERO(rds+2, rn-2);
- }
- else {
- bary_divmod_branch(qds, qn, rds, rn, xds, xn, yds, yn);
- }
-}
-
-
-#define BIGNUM_DEBUG 0
-#if BIGNUM_DEBUG
-#define ON_DEBUG(x) do { x; } while (0)
-static void
-dump_bignum(VALUE x)
+bigzero_p(x)
+ VALUE x;
{
long i;
- printf("%c0x0", BIGNUM_SIGN(x) ? '+' : '-');
- for (i = BIGNUM_LEN(x); i--; ) {
- printf("_%0*"PRIxBDIGIT, SIZEOF_BDIGIT*2, BDIGITS(x)[i]);
+ for (i = 0; i < RBIGNUM(x)->len; ++i) {
+ if (BDIGITS(x)[i]) return 0;
}
- printf(", len=%"PRIuSIZE, BIGNUM_LEN(x));
- puts("");
+ return 1;
}
static VALUE
-rb_big_dump(VALUE x)
-{
- dump_bignum(x);
- return x;
-}
-#else
-#define ON_DEBUG(x)
-#endif
-
-static int
-bigzero_p(VALUE x)
-{
- return bary_zero_p(BDIGITS(x), BIGNUM_LEN(x));
-}
-
-int
-rb_bigzero_p(VALUE x)
-{
- return BIGZEROP(x);
-}
-
-int
-rb_cmpint(VALUE val, VALUE a, VALUE b)
-{
- if (NIL_P(val)) {
- rb_cmperr(a, b);
- }
- if (FIXNUM_P(val)) {
- long l = FIX2LONG(val);
- if (l > 0) return 1;
- if (l < 0) return -1;
- return 0;
- }
- if (RB_BIGNUM_TYPE_P(val)) {
- if (BIGZEROP(val)) return 0;
- if (BIGNUM_SIGN(val)) return 1;
- return -1;
- }
- if (RTEST(rb_funcall(val, '>', 1, INT2FIX(0)))) return 1;
- if (RTEST(rb_funcall(val, '<', 1, INT2FIX(0)))) return -1;
- return 0;
-}
-
-#define BIGNUM_SET_LEN(b,l) \
- ((RBASIC(b)->flags & BIGNUM_EMBED_FLAG) ? \
- (void)(RBASIC(b)->flags = \
- (RBASIC(b)->flags & ~BIGNUM_EMBED_LEN_MASK) | \
- ((l) << BIGNUM_EMBED_LEN_SHIFT)) : \
- (void)(RBIGNUM(b)->as.heap.len = (l)))
-
-static void
-rb_big_realloc(VALUE big, size_t len)
-{
- BDIGIT *ds;
- if (RBASIC(big)->flags & BIGNUM_EMBED_FLAG) {
- if (BIGNUM_EMBED_LEN_MAX < len) {
- ds = ALLOC_N(BDIGIT, len);
- MEMCPY(ds, RBIGNUM(big)->as.ary, BDIGIT, BIGNUM_EMBED_LEN_MAX);
- RBIGNUM(big)->as.heap.len = BIGNUM_LEN(big);
- RBIGNUM(big)->as.heap.digits = ds;
- RBASIC(big)->flags &= ~BIGNUM_EMBED_FLAG;
- }
- }
- else {
- if (len <= BIGNUM_EMBED_LEN_MAX) {
- ds = RBIGNUM(big)->as.heap.digits;
- RBASIC(big)->flags |= BIGNUM_EMBED_FLAG;
- BIGNUM_SET_LEN(big, len);
- (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)RBIGNUM(big)->as.ary, sizeof(RBIGNUM(big)->as.ary));
- if (ds) {
- MEMCPY(RBIGNUM(big)->as.ary, ds, BDIGIT, len);
- xfree(ds);
- }
- }
- else {
- if (BIGNUM_LEN(big) == 0) {
- RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len);
- }
- else {
- REALLOC_N(RBIGNUM(big)->as.heap.digits, BDIGIT, len);
- }
- }
- }
-}
-
-void
-rb_big_resize(VALUE big, size_t len)
+bignew_1(klass, len, sign)
+ VALUE klass;
+ long len;
+ int sign;
{
- rb_big_realloc(big, len);
- BIGNUM_SET_LEN(big, len);
-}
+ NEWOBJ(big, struct RBignum);
+ OBJSETUP(big, klass, T_BIGNUM);
+ big->sign = sign?1:0;
+ big->len = len;
+ big->digits = ALLOC_N(BDIGIT, len);
-static VALUE
-bignew_1(VALUE klass, size_t len, int sign)
-{
- NEWOBJ_OF(big, struct RBignum, klass, T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0));
- BIGNUM_SET_SIGN(big, sign?1:0);
- if (len <= BIGNUM_EMBED_LEN_MAX) {
- RBASIC(big)->flags |= BIGNUM_EMBED_FLAG;
- BIGNUM_SET_LEN(big, len);
- (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)RBIGNUM(big)->as.ary, sizeof(RBIGNUM(big)->as.ary));
- }
- else {
- RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len);
- RBIGNUM(big)->as.heap.len = len;
- }
- OBJ_FREEZE(big);
return (VALUE)big;
}
-VALUE
-rb_big_new(size_t len, int sign)
-{
- return bignew(len, sign != 0);
-}
+#define bignew(len,sign) bignew_1(rb_cBignum,len,sign)
VALUE
-rb_big_clone(VALUE x)
+rb_big_clone(x)
+ VALUE x;
{
- size_t len = BIGNUM_LEN(x);
- VALUE z = bignew_1(CLASS_OF(x), len, BIGNUM_SIGN(x));
+ VALUE z = bignew_1(CLASS_OF(x), RBIGNUM(x)->len, RBIGNUM(x)->sign);
- MEMCPY(BDIGITS(z), BDIGITS(x), BDIGIT, len);
+ MEMCPY(BDIGITS(z), BDIGITS(x), BDIGIT, RBIGNUM(x)->len);
return z;
}
-static void
-big_extend_carry(VALUE x)
-{
- rb_big_resize(x, BIGNUM_LEN(x)+1);
- BDIGITS(x)[BIGNUM_LEN(x)-1] = 1;
-}
-
/* modify a bignum by 2's complement */
static void
-get2comp(VALUE x)
+get2comp(x)
+ VALUE x;
{
- long i = BIGNUM_LEN(x);
+ long i = RBIGNUM(x)->len;
BDIGIT *ds = BDIGITS(x);
+ BDIGIT_DBL num;
- if (bary_2comp(ds, i)) {
- big_extend_carry(x);
+ if (!i) return;
+ while (i--) ds[i] = ~ds[i];
+ i = 0; num = 1;
+ do {
+ num += ds[i];
+ ds[i++] = BIGLO(num);
+ num = BIGDN(num);
+ } while (i < RBIGNUM(x)->len);
+ if (num != 0) {
+ REALLOC_N(RBIGNUM(x)->digits, BDIGIT, ++RBIGNUM(x)->len);
+ ds = BDIGITS(x);
+ ds[RBIGNUM(x)->len-1] = RBIGNUM(x)->sign ? ~0 : 1;
}
}
void
-rb_big_2comp(VALUE x) /* get 2's complement */
+rb_big_2comp(x) /* get 2's complement */
+ VALUE x;
{
get2comp(x);
}
-static BDIGIT
-abs2twocomp(VALUE *xp, long *n_ret)
-{
- VALUE x = *xp;
- long n = BIGNUM_LEN(x);
- BDIGIT *ds = BDIGITS(x);
- BDIGIT hibits = 0;
-
- BARY_TRUNC(ds, n);
-
- if (n != 0 && BIGNUM_NEGATIVE_P(x)) {
- VALUE z = bignew_1(CLASS_OF(x), n, 0);
- MEMCPY(BDIGITS(z), ds, BDIGIT, n);
- bary_2comp(BDIGITS(z), n);
- hibits = BDIGMAX;
- *xp = z;
- }
- *n_ret = n;
- return hibits;
-}
-
-static void
-twocomp2abs_bang(VALUE x, int hibits)
-{
- BIGNUM_SET_SIGN(x, !hibits);
- if (hibits) {
- get2comp(x);
- }
-}
-
-static inline VALUE
-bigtrunc(VALUE x)
+static VALUE
+bigtrunc(x)
+ VALUE x;
{
- size_t len = BIGNUM_LEN(x);
+ long len = RBIGNUM(x)->len;
BDIGIT *ds = BDIGITS(x);
if (len == 0) return x;
while (--len && !ds[len]);
- if (BIGNUM_LEN(x) > len+1) {
- rb_big_resize(x, len+1);
- }
+ RBIGNUM(x)->len = ++len;
return x;
}
-static inline VALUE
+static VALUE
bigfixize(VALUE x)
{
- size_t n = BIGNUM_LEN(x);
+ long len = RBIGNUM(x)->len;
BDIGIT *ds = BDIGITS(x);
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- unsigned long u;
-#else
- BDIGIT u;
-#endif
- BARY_TRUNC(ds, n);
-
- if (n == 0) return INT2FIX(0);
-
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (sizeof(long)/SIZEOF_BDIGIT < n)
- goto return_big;
- else {
- int i = (int)n;
- u = 0;
- while (i--) {
- u = (unsigned long)(BIGUP(u) + ds[i]);
- }
- }
-#else /* SIZEOF_BDIGIT >= SIZEOF_LONG */
- if (1 < n)
- goto return_big;
- else
- u = ds[0];
-#endif
-
- if (BIGNUM_POSITIVE_P(x)) {
- if (POSFIXABLE(u)) return LONG2FIX((long)u);
- }
- else {
- if (u <= -FIXNUM_MIN) return LONG2FIX(-(long)u);
+ if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
+ long num = 0;
+ while (len--) {
+ num = BIGUP(num) + ds[len];
+ }
+ if (num >= 0) {
+ if (RBIGNUM(x)->sign) {
+ if (POSFIXABLE(num)) return LONG2FIX(num);
+ }
+ else {
+ if (NEGFIXABLE(-(long)num)) return LONG2FIX(-(long)num);
+ }
+ }
}
-
- return_big:
- rb_big_resize(x, n);
return x;
}
static VALUE
bignorm(VALUE x)
{
- if (RB_BIGNUM_TYPE_P(x)) {
- x = bigfixize(x);
+ if (!FIXNUM_P(x) && TYPE(x) == T_BIGNUM) {
+ x = bigfixize(bigtrunc(x));
}
return x;
}
VALUE
-rb_big_norm(VALUE x)
+rb_big_norm(x)
+ VALUE x;
{
return bignorm(x);
}
VALUE
-rb_uint2big(VALUE n)
+rb_uint2big(n)
+ unsigned long n;
{
- long i;
- VALUE big = bignew(bdigit_roomof(SIZEOF_VALUE), 1);
- BDIGIT *digits = BDIGITS(big);
+ BDIGIT_DBL num = n;
+ long i = 0;
+ BDIGIT *digits;
+ VALUE big;
-#if SIZEOF_BDIGIT >= SIZEOF_VALUE
- digits[0] = n;
-#else
- for (i = 0; i < bdigit_roomof(SIZEOF_VALUE); i++) {
- digits[i] = BIGLO(n);
- n = BIGDN(n);
+ big = bignew(DIGSPERLONG, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLONG) {
+ digits[i++] = BIGLO(num);
+ num = BIGDN(num);
}
-#endif
- i = bdigit_roomof(SIZEOF_VALUE);
+ i = DIGSPERLONG;
while (--i && !digits[i]) ;
- BIGNUM_SET_LEN(big, i+1);
+ RBIGNUM(big)->len = i+1;
return big;
}
VALUE
-rb_int2big(SIGNED_VALUE n)
+rb_int2big(n)
+ long n;
{
long neg = 0;
- VALUE u;
VALUE big;
if (n < 0) {
- u = 1 + (VALUE)(-(n + 1)); /* u = -n avoiding overflow */
+ n = -n;
neg = 1;
}
- else {
- u = n;
- }
- big = rb_uint2big(u);
+ big = rb_uint2big(n);
if (neg) {
- BIGNUM_SET_SIGN(big, 0);
+ RBIGNUM(big)->sign = 0;
}
return big;
}
VALUE
-rb_uint2inum(VALUE n)
+rb_uint2inum(n)
+ unsigned long n;
{
if (POSFIXABLE(n)) return LONG2FIX(n);
return rb_uint2big(n);
}
VALUE
-rb_int2inum(SIGNED_VALUE n)
+rb_int2inum(n)
+ long n;
{
if (FIXABLE(n)) return LONG2FIX(n);
return rb_int2big(n);
}
-void
-rb_big_pack(VALUE val, unsigned long *buf, long num_longs)
-{
- rb_integer_pack(val, buf, num_longs, sizeof(long), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP);
-}
-
-VALUE
-rb_big_unpack(unsigned long *buf, long num_longs)
-{
- return rb_integer_unpack(buf, num_longs, sizeof(long), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP);
-}
+#ifdef HAVE_LONG_LONG
-/*
- * Calculate the number of bytes to be required to represent
- * the absolute value of the integer given as _val_.
- *
- * [val] an integer.
- * [nlz_bits_ret] number of leading zero bits in the most significant byte is returned if not NULL.
- *
- * This function returns ((val_numbits * CHAR_BIT + CHAR_BIT - 1) / CHAR_BIT)
- * where val_numbits is the number of bits of abs(val).
- * This function should not overflow.
- *
- * If nlz_bits_ret is not NULL,
- * (return_value * CHAR_BIT - val_numbits) is stored in *nlz_bits_ret.
- * In this case, 0 <= *nlz_bits_ret < CHAR_BIT.
- *
- */
-size_t
-rb_absint_size(VALUE val, int *nlz_bits_ret)
+void
+rb_quad_pack(buf, val)
+ char *buf;
+ VALUE val;
{
- BDIGIT *dp;
- BDIGIT *de;
- BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
-
- int num_leading_zeros;
+ LONG_LONG q;
val = rb_to_int(val);
-
if (FIXNUM_P(val)) {
- long v = FIX2LONG(val);
- if (v < 0) {
- v = -v;
- }
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- fixbuf[0] = v;
-#else
- {
- int i;
- for (i = 0; i < numberof(fixbuf); i++) {
- fixbuf[i] = BIGLO(v);
- v = BIGDN(v);
- }
- }
-#endif
- dp = fixbuf;
- de = fixbuf + numberof(fixbuf);
- }
- else {
- dp = BDIGITS(val);
- de = dp + BIGNUM_LEN(val);
- }
- while (dp < de && de[-1] == 0)
- de--;
- if (dp == de) {
- if (nlz_bits_ret)
- *nlz_bits_ret = 0;
- return 0;
- }
- num_leading_zeros = nlz(de[-1]);
- if (nlz_bits_ret)
- *nlz_bits_ret = num_leading_zeros % CHAR_BIT;
- return (de - dp) * SIZEOF_BDIGIT - num_leading_zeros / CHAR_BIT;
-}
-
-static size_t
-absint_numwords_small(size_t numbytes, int nlz_bits_in_msbyte, size_t word_numbits, size_t *nlz_bits_ret)
-{
- size_t val_numbits = numbytes * CHAR_BIT - nlz_bits_in_msbyte;
- size_t div = val_numbits / word_numbits;
- size_t mod = val_numbits % word_numbits;
- size_t numwords;
- size_t nlz_bits;
- numwords = mod == 0 ? div : div + 1;
- nlz_bits = mod == 0 ? 0 : word_numbits - mod;
- *nlz_bits_ret = nlz_bits;
- return numwords;
-}
-
-static size_t
-absint_numwords_generic(size_t numbytes, int nlz_bits_in_msbyte, size_t word_numbits, size_t *nlz_bits_ret)
-{
- static const BDIGIT char_bit[1] = { CHAR_BIT };
- BDIGIT numbytes_bary[bdigit_roomof(sizeof(numbytes))];
- BDIGIT val_numbits_bary[bdigit_roomof(sizeof(numbytes) + 1)];
- BDIGIT nlz_bits_in_msbyte_bary[1];
- BDIGIT word_numbits_bary[bdigit_roomof(sizeof(word_numbits))];
- BDIGIT div_bary[numberof(val_numbits_bary) + BIGDIVREM_EXTRA_WORDS];
- BDIGIT mod_bary[numberof(word_numbits_bary)];
- BDIGIT one[1] = { 1 };
- size_t nlz_bits;
- size_t mod;
- int sign;
- size_t numwords;
-
- nlz_bits_in_msbyte_bary[0] = nlz_bits_in_msbyte;
-
- /*
- * val_numbits = numbytes * CHAR_BIT - nlz_bits_in_msbyte
- * div, mod = val_numbits.divmod(word_numbits)
- * numwords = mod == 0 ? div : div + 1
- * nlz_bits = mod == 0 ? 0 : word_numbits - mod
- */
-
- bary_unpack(BARY_ARGS(numbytes_bary), &numbytes, 1, sizeof(numbytes), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- BARY_SHORT_MUL(val_numbits_bary, numbytes_bary, char_bit);
- if (nlz_bits_in_msbyte)
- BARY_SUB(val_numbits_bary, val_numbits_bary, nlz_bits_in_msbyte_bary);
- bary_unpack(BARY_ARGS(word_numbits_bary), &word_numbits, 1, sizeof(word_numbits), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- BARY_DIVMOD(div_bary, mod_bary, val_numbits_bary, word_numbits_bary);
- if (BARY_ZERO_P(mod_bary)) {
- nlz_bits = 0;
+ q = FIX2LONG(val);
}
else {
- BARY_ADD(div_bary, div_bary, one);
- bary_pack(+1, BARY_ARGS(mod_bary), &mod, 1, sizeof(mod), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- nlz_bits = word_numbits - mod;
- }
- sign = bary_pack(+1, BARY_ARGS(div_bary), &numwords, 1, sizeof(numwords), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
+ long len = RBIGNUM(val)->len;
+ BDIGIT *ds;
- if (sign == 2) {
-#if defined __GNUC__ && (__GNUC__ == 4 && __GNUC_MINOR__ == 4)
- *nlz_bits_ret = 0;
-#endif
- return (size_t)-1;
+ if (len > SIZEOF_LONG_LONG/SIZEOF_BDIGITS)
+ rb_raise(rb_eRangeError, "bignum too big to convert into `quad int'");
+ ds = BDIGITS(val);
+ q = 0;
+ while (len--) {
+ q = BIGUP(q);
+ q += ds[len];
+ }
+ if (!RBIGNUM(val)->sign) q = -q;
}
- *nlz_bits_ret = nlz_bits;
- return numwords;
+ memcpy(buf, (char*)&q, SIZEOF_LONG_LONG);
}
-/*
- * Calculate the number of words to be required to represent
- * the absolute value of the integer given as _val_.
- *
- * [val] an integer.
- * [word_numbits] number of bits in a word.
- * [nlz_bits_ret] number of leading zero bits in the most significant word is returned if not NULL.
- *
- * This function returns ((val_numbits * CHAR_BIT + word_numbits - 1) / word_numbits)
- * where val_numbits is the number of bits of abs(val).
- *
- * This function can overflow.
- * When overflow occur, (size_t)-1 is returned.
- *
- * If nlz_bits_ret is not NULL and overflow is not occur,
- * (return_value * word_numbits - val_numbits) is stored in *nlz_bits_ret.
- * In this case, 0 <= *nlz_bits_ret < word_numbits.
- *
- */
-size_t
-rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret)
+VALUE
+rb_quad_unpack(buf, sign)
+ const char *buf;
+ int sign;
{
- size_t numbytes;
- int nlz_bits_in_msbyte;
- size_t numwords;
- size_t nlz_bits;
-
- if (word_numbits == 0)
- return (size_t)-1;
-
- numbytes = rb_absint_size(val, &nlz_bits_in_msbyte);
+ unsigned LONG_LONG q;
+ long neg = 0;
+ long i;
+ BDIGIT *digits;
+ VALUE big;
- if (numbytes <= SIZE_MAX / CHAR_BIT) {
- numwords = absint_numwords_small(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits);
-#ifdef DEBUG_INTEGER_PACK
- {
- size_t numwords0, nlz_bits0;
- numwords0 = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits0);
- assert(numwords0 == numwords);
- assert(nlz_bits0 == nlz_bits);
- }
-#endif
+ memcpy(&q, buf, SIZEOF_LONG_LONG);
+ if (sign) {
+ if (FIXABLE((LONG_LONG)q)) return LONG2FIX((LONG_LONG)q);
+ if ((LONG_LONG)q < 0) {
+ q = -(LONG_LONG)q;
+ neg = 1;
+ }
}
else {
- numwords = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits);
+ if (POSFIXABLE(q)) return LONG2FIX(q);
}
- if (numwords == (size_t)-1)
- return numwords;
-
- if (nlz_bits_ret)
- *nlz_bits_ret = nlz_bits;
- return numwords;
-}
-
-/* Test abs(val) consists only a bit or not.
- *
- * Returns 1 if abs(val) == 1 << n for some n >= 0.
- * Returns 0 otherwise.
- *
- * rb_absint_singlebit_p can be used to determine required buffer size
- * for rb_integer_pack used with INTEGER_PACK_2COMP (two's complement).
- *
- * Following example calculates number of bits required to
- * represent val in two's complement number, without sign bit.
- *
- * size_t size;
- * int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val);
- * size = rb_absint_numwords(val, 1, NULL)
- * if (size == (size_t)-1) ...overflow...
- * if (neg && rb_absint_singlebit_p(val))
- * size--;
- *
- * Following example calculates number of bytes required to
- * represent val in two's complement number, with sign bit.
- *
- * size_t size;
- * int neg = FIXNUM_P(val) ? FIX2LONG(val) < 0 : BIGNUM_NEGATIVE_P(val);
- * int nlz_bits;
- * size = rb_absint_size(val, &nlz_bits);
- * if (nlz_bits == 0 && !(neg && rb_absint_singlebit_p(val)))
- * size++;
- */
-int
-rb_absint_singlebit_p(VALUE val)
-{
- BDIGIT *dp;
- BDIGIT *de;
- BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
- BDIGIT d;
+ i = 0;
+ big = bignew(DIGSPERLL, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLL) {
+ digits[i++] = BIGLO(q);
+ q = BIGDN(q);
+ }
- val = rb_to_int(val);
+ i = DIGSPERLL;
+ while (i-- && !digits[i]) ;
+ RBIGNUM(big)->len = i+1;
- if (FIXNUM_P(val)) {
- long v = FIX2LONG(val);
- if (v < 0) {
- v = -v;
- }
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- fixbuf[0] = v;
-#else
- {
- int i;
- for (i = 0; i < numberof(fixbuf); i++) {
- fixbuf[i] = BIGLO(v);
- v = BIGDN(v);
- }
- }
-#endif
- dp = fixbuf;
- de = fixbuf + numberof(fixbuf);
+ if (neg) {
+ RBIGNUM(big)->sign = 0;
}
- else {
- dp = BDIGITS(val);
- de = dp + BIGNUM_LEN(val);
- }
- while (dp < de && de[-1] == 0)
- de--;
- while (dp < de && dp[0] == 0)
- dp++;
- if (dp == de) /* no bit set. */
- return 0;
- if (dp != de-1) /* two non-zero words. two bits set, at least. */
- return 0;
- d = *dp;
- return POW2_P(d);
+ return bignorm(big);
}
+#else
-/*
- * Export an integer into a buffer.
- *
- * This function fills the buffer specified by _words_ and _numwords_ as
- * val in the format specified by _wordsize_, _nails_ and _flags_.
- *
- * [val] Fixnum, Bignum or another integer like object which has to_int method.
- * [words] buffer to export abs(val).
- * [numwords] the size of given buffer as number of words.
- * [wordsize] the size of word as number of bytes.
- * [nails] number of padding bits in a word.
- * Most significant nails bits of each word are filled by zero.
- * [flags] bitwise or of constants which name starts "INTEGER_PACK_".
- *
- * flags:
- * [INTEGER_PACK_MSWORD_FIRST] Store the most significant word as the first word.
- * [INTEGER_PACK_LSWORD_FIRST] Store the least significant word as the first word.
- * [INTEGER_PACK_MSBYTE_FIRST] Store the most significant byte in a word as the first byte in the word.
- * [INTEGER_PACK_LSBYTE_FIRST] Store the least significant byte in a word as the first byte in the word.
- * [INTEGER_PACK_NATIVE_BYTE_ORDER] INTEGER_PACK_MSBYTE_FIRST or INTEGER_PACK_LSBYTE_FIRST corresponding to the host's endian.
- * [INTEGER_PACK_2COMP] Use 2's complement representation.
- * [INTEGER_PACK_LITTLE_ENDIAN] Same as INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST
- * [INTEGER_PACK_BIG_ENDIAN] Same as INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST
- * [INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION] Use generic implementation (for test and debug).
- *
- * This function fills the buffer specified by _words_
- * as abs(val) if INTEGER_PACK_2COMP is not specified in _flags_.
- * If INTEGER_PACK_2COMP is specified, 2's complement representation of val is
- * filled in the buffer.
- *
- * This function returns the signedness and overflow condition.
- * The overflow condition depends on INTEGER_PACK_2COMP.
- *
- * INTEGER_PACK_2COMP is not specified:
- * -2 : negative overflow. val <= -2**(numwords*(wordsize*CHAR_BIT-nails))
- * -1 : negative without overflow. -2**(numwords*(wordsize*CHAR_BIT-nails)) < val < 0
- * 0 : zero. val == 0
- * 1 : positive without overflow. 0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))
- * 2 : positive overflow. 2**(numwords*(wordsize*CHAR_BIT-nails)) <= val
- *
- * INTEGER_PACK_2COMP is specified:
- * -2 : negative overflow. val < -2**(numwords*(wordsize*CHAR_BIT-nails))
- * -1 : negative without overflow. -2**(numwords*(wordsize*CHAR_BIT-nails)) <= val < 0
- * 0 : zero. val == 0
- * 1 : positive without overflow. 0 < val < 2**(numwords*(wordsize*CHAR_BIT-nails))
- * 2 : positive overflow. 2**(numwords*(wordsize*CHAR_BIT-nails)) <= val
- *
- * The value, -2**(numwords*(wordsize*CHAR_BIT-nails)), is representable
- * in 2's complement representation but not representable in absolute value.
- * So -1 is returned for the value if INTEGER_PACK_2COMP is specified
- * but returns -2 if INTEGER_PACK_2COMP is not specified.
- *
- * The least significant words are filled in the buffer when overflow occur.
- */
+#define QUAD_SIZE 8
-int
-rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
+void
+rb_quad_pack(buf, val)
+ char *buf;
+ VALUE val;
{
- int sign;
- BDIGIT *ds;
- size_t num_bdigits;
- BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
-
- RB_GC_GUARD(val) = rb_to_int(val);
+ long len;
+ memset(buf, 0, QUAD_SIZE);
+ val = rb_to_int(val);
if (FIXNUM_P(val)) {
- long v = FIX2LONG(val);
- if (v < 0) {
- sign = -1;
- v = -v;
- }
- else {
- sign = 1;
- }
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- fixbuf[0] = v;
-#else
- {
- int i;
- for (i = 0; i < numberof(fixbuf); i++) {
- fixbuf[i] = BIGLO(v);
- v = BIGDN(v);
- }
- }
-#endif
- ds = fixbuf;
- num_bdigits = numberof(fixbuf);
- }
- else {
- sign = BIGNUM_POSITIVE_P(val) ? 1 : -1;
- ds = BDIGITS(val);
- num_bdigits = BIGNUM_LEN(val);
+ val = rb_int2big(FIX2LONG(val));
+ }
+ len = RBIGNUM(val)->len * SIZEOF_BDIGITS;
+ if (len > QUAD_SIZE) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `quad int'");
+ }
+ memcpy(buf, (char*)BDIGITS(val), len);
+ if (!RBIGNUM(val)->sign) {
+ len = QUAD_SIZE;
+ while (len--) {
+ *buf = ~*buf;
+ buf++;
+ }
}
-
- return bary_pack(sign, ds, num_bdigits, words, numwords, wordsize, nails, flags);
}
-/*
- * Import an integer into a buffer.
- *
- * [words] buffer to import.
- * [numwords] the size of given buffer as number of words.
- * [wordsize] the size of word as number of bytes.
- * [nails] number of padding bits in a word.
- * Most significant nails bits of each word are ignored.
- * [flags] bitwise or of constants which name starts "INTEGER_PACK_".
- *
- * flags:
- * [INTEGER_PACK_MSWORD_FIRST] Interpret the first word as the most significant word.
- * [INTEGER_PACK_LSWORD_FIRST] Interpret the first word as the least significant word.
- * [INTEGER_PACK_MSBYTE_FIRST] Interpret the first byte in a word as the most significant byte in the word.
- * [INTEGER_PACK_LSBYTE_FIRST] Interpret the first byte in a word as the least significant byte in the word.
- * [INTEGER_PACK_NATIVE_BYTE_ORDER] INTEGER_PACK_MSBYTE_FIRST or INTEGER_PACK_LSBYTE_FIRST corresponding to the host's endian.
- * [INTEGER_PACK_2COMP] Use 2's complement representation.
- * [INTEGER_PACK_LITTLE_ENDIAN] Same as INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_LSBYTE_FIRST
- * [INTEGER_PACK_BIG_ENDIAN] Same as INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_MSBYTE_FIRST
- * [INTEGER_PACK_FORCE_BIGNUM] the result will be a Bignum
- * even if it is representable as a Fixnum.
- * [INTEGER_PACK_NEGATIVE] Returns non-positive value.
- * (Returns non-negative value if not specified.)
- * [INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION] Use generic implementation (for test and debug).
- *
- * This function returns the imported integer as Fixnum or Bignum.
- *
- * The range of the result value depends on INTEGER_PACK_2COMP and INTEGER_PACK_NEGATIVE.
- *
- * INTEGER_PACK_2COMP is not set:
- * 0 <= val < 2**(numwords*(wordsize*CHAR_BIT-nails)) if !INTEGER_PACK_NEGATIVE
- * -2**(numwords*(wordsize*CHAR_BIT-nails)) < val <= 0 if INTEGER_PACK_NEGATIVE
- *
- * INTEGER_PACK_2COMP is set:
- * -2**(numwords*(wordsize*CHAR_BIT-nails)-1) <= val <= 2**(numwords*(wordsize*CHAR_BIT-nails)-1)-1 if !INTEGER_PACK_NEGATIVE
- * -2**(numwords*(wordsize*CHAR_BIT-nails)) <= val <= -1 if INTEGER_PACK_NEGATIVE
- *
- * INTEGER_PACK_2COMP without INTEGER_PACK_NEGATIVE means sign extension.
- * INTEGER_PACK_2COMP with INTEGER_PACK_NEGATIVE mean assuming the higher bits are 1.
- *
- * Note that this function returns 0 when numwords is zero and
- * INTEGER_PACK_2COMP is set but INTEGER_PACK_NEGATIVE is not set.
- */
+#define BNEG(b) (RSHIFT(((BDIGIT*)b)[QUAD_SIZE/SIZEOF_BDIGITS-1],BITSPERDIG-1) != 0)
VALUE
-rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
-{
- VALUE val;
- size_t num_bdigits;
+rb_quad_unpack(buf, sign)
+ const char *buf;
int sign;
- int nlp_bits;
- BDIGIT *ds;
- BDIGIT fixbuf[2] = { 0, 0 };
-
- validate_integer_pack_format(numwords, wordsize, nails, flags,
- INTEGER_PACK_MSWORD_FIRST|
- INTEGER_PACK_LSWORD_FIRST|
- INTEGER_PACK_MSBYTE_FIRST|
- INTEGER_PACK_LSBYTE_FIRST|
- INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP|
- INTEGER_PACK_FORCE_BIGNUM|
- INTEGER_PACK_NEGATIVE|
- INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION);
-
- num_bdigits = integer_unpack_num_bdigits(numwords, wordsize, nails, &nlp_bits);
-
- if (LONG_MAX-1 < num_bdigits)
- rb_raise(rb_eArgError, "too big to unpack as an integer");
- if (num_bdigits <= numberof(fixbuf) && !(flags & INTEGER_PACK_FORCE_BIGNUM)) {
- val = Qfalse;
- ds = fixbuf;
- }
- else {
- val = bignew((long)num_bdigits, 0);
- ds = BDIGITS(val);
- }
- sign = bary_unpack_internal(ds, num_bdigits, words, numwords, wordsize, nails, flags, nlp_bits);
-
- if (sign == -2) {
- if (val) {
- big_extend_carry(val);
- }
- else if (num_bdigits == numberof(fixbuf)) {
- val = bignew((long)num_bdigits+1, 0);
- MEMCPY(BDIGITS(val), fixbuf, BDIGIT, num_bdigits);
- BDIGITS(val)[num_bdigits++] = 1;
- }
- else {
- ds[num_bdigits++] = 1;
- }
- }
-
- if (!val) {
- BDIGIT_DBL u = fixbuf[0] + BIGUP(fixbuf[1]);
- if (u == 0)
- return LONG2FIX(0);
- if (0 < sign && POSFIXABLE(u))
- return LONG2FIX(u);
- if (sign < 0 && BDIGIT_MSB(fixbuf[1]) == 0 &&
- NEGFIXABLE(-(BDIGIT_DBL_SIGNED)u))
- return LONG2FIX(-(BDIGIT_DBL_SIGNED)u);
- val = bignew((long)num_bdigits, 0 <= sign);
- MEMCPY(BDIGITS(val), fixbuf, BDIGIT, num_bdigits);
- }
-
- if ((flags & INTEGER_PACK_FORCE_BIGNUM) && sign != 0 &&
- bary_zero_p(BDIGITS(val), BIGNUM_LEN(val)))
- sign = 0;
- BIGNUM_SET_SIGN(val, 0 <= sign);
-
- if (flags & INTEGER_PACK_FORCE_BIGNUM)
- return bigtrunc(val);
- return bignorm(val);
-}
-
-#define conv_digit(c) (ruby_digit36_to_number_table[(unsigned char)(c)])
-
-static void
-str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size_t *num_digits_p, size_t *len_p)
{
- char nondigit = 0;
- size_t num_digits = 0;
- const char *digits_start = str;
- const char *digits_end = str;
-
- int c;
+ VALUE big = bignew(QUAD_SIZE/SIZEOF_BDIGITS, 1);
- if (badcheck && *str == '_') goto bad;
+ memcpy((char*)BDIGITS(big), buf, QUAD_SIZE);
+ if (sign && BNEG(buf)) {
+ long len = QUAD_SIZE;
+ char *tmp = (char*)BDIGITS(big);
- while ((c = *str++) != 0) {
- if (c == '_') {
- if (nondigit) {
- if (badcheck) goto bad;
- break;
- }
- nondigit = (char) c;
- continue;
+ RBIGNUM(big)->sign = 0;
+ while (len--) {
+ *tmp = ~*tmp;
+ tmp++;
}
- else if ((c = conv_digit(c)) < 0) {
- break;
- }
- if (c >= base) break;
- nondigit = 0;
- num_digits++;
- digits_end = str;
}
- if (badcheck) {
- str--;
- if (s+1 < str && str[-1] == '_') goto bad;
- while (*str && ISSPACE(*str)) str++;
- if (*str) {
- bad:
- rb_invalid_str(s, "Integer()");
- }
- }
- *num_digits_p = num_digits;
- *len_p = digits_end - digits_start;
-}
-
-static VALUE
-str2big_poweroftwo(
- int sign,
- const char *digits_start,
- const char *digits_end,
- size_t num_digits,
- int bits_per_digit)
-{
- BDIGIT *dp;
- BDIGIT_DBL dd;
- int numbits;
-
- size_t num_bdigits;
- const char *p;
- int c;
- VALUE z;
- num_bdigits = (num_digits / BITSPERDIG) * bits_per_digit + roomof((num_digits % BITSPERDIG) * bits_per_digit, BITSPERDIG);
- z = bignew(num_bdigits, sign);
- dp = BDIGITS(z);
- dd = 0;
- numbits = 0;
- for (p = digits_end; digits_start < p; p--) {
- if ((c = conv_digit(p[-1])) < 0)
- continue;
- dd |= (BDIGIT_DBL)c << numbits;
- numbits += bits_per_digit;
- if (BITSPERDIG <= numbits) {
- *dp++ = BIGLO(dd);
- dd = BIGDN(dd);
- numbits -= BITSPERDIG;
- }
- }
- if (numbits) {
- *dp++ = BIGLO(dd);
- }
- assert((size_t)(dp - BDIGITS(z)) == num_bdigits);
-
- return z;
+ return bignorm(big);
}
-static VALUE
-str2big_normal(
- int sign,
- const char *digits_start,
- const char *digits_end,
- size_t num_bdigits,
- int base)
-{
- size_t blen = 1;
- BDIGIT *zds;
- BDIGIT_DBL num;
-
- size_t i;
- const char *p;
- int c;
- VALUE z;
-
- z = bignew(num_bdigits, sign);
- zds = BDIGITS(z);
- BDIGITS_ZERO(zds, num_bdigits);
-
- for (p = digits_start; p < digits_end; p++) {
- if ((c = conv_digit(*p)) < 0)
- continue;
- num = c;
- i = 0;
- for (;;) {
- while (i<blen) {
- num += (BDIGIT_DBL)zds[i]*base;
- zds[i++] = BIGLO(num);
- num = BIGDN(num);
- }
- if (num) {
- blen++;
- continue;
- }
- break;
- }
- assert(blen <= num_bdigits);
- }
-
- return z;
-}
-
-static VALUE
-str2big_karatsuba(
- int sign,
- const char *digits_start,
- const char *digits_end,
- size_t num_digits,
- size_t num_bdigits,
- int digits_per_bdigits_dbl,
- int base)
-{
- VALUE powerv;
- size_t unit;
- VALUE tmpuv = 0;
- BDIGIT *uds, *vds, *tds;
- BDIGIT_DBL dd;
- BDIGIT_DBL current_base;
- int m;
- int power_level = 0;
-
- size_t i;
- const char *p;
- int c;
- VALUE z;
-
- uds = ALLOCV_N(BDIGIT, tmpuv, 2*num_bdigits);
- vds = uds + num_bdigits;
-
- powerv = power_cache_get_power(base, power_level, NULL);
-
- i = 0;
- dd = 0;
- current_base = 1;
- m = digits_per_bdigits_dbl;
- if (num_digits < (size_t)m)
- m = (int)num_digits;
- for (p = digits_end; digits_start < p; p--) {
- if ((c = conv_digit(p[-1])) < 0)
- continue;
- dd = dd + c * current_base;
- current_base *= base;
- num_digits--;
- m--;
- if (m == 0) {
- uds[i++] = BIGLO(dd);
- uds[i++] = (BDIGIT)BIGDN(dd);
- dd = 0;
- m = digits_per_bdigits_dbl;
- if (num_digits < (size_t)m)
- m = (int)num_digits;
- current_base = 1;
- }
- }
- assert(i == num_bdigits);
- for (unit = 2; unit < num_bdigits; unit *= 2) {
- for (i = 0; i < num_bdigits; i += unit*2) {
- if (2*unit <= num_bdigits - i) {
- bary_mul(vds+i, unit*2, BDIGITS(powerv), BIGNUM_LEN(powerv), uds+i+unit, unit);
- bary_add(vds+i, unit*2, vds+i, unit*2, uds+i, unit);
- }
- else if (unit <= num_bdigits - i) {
- bary_mul(vds+i, num_bdigits-i, BDIGITS(powerv), BIGNUM_LEN(powerv), uds+i+unit, num_bdigits-(i+unit));
- bary_add(vds+i, num_bdigits-i, vds+i, num_bdigits-i, uds+i, unit);
- }
- else {
- MEMCPY(vds+i, uds+i, BDIGIT, num_bdigits-i);
- }
- }
- power_level++;
- powerv = power_cache_get_power(base, power_level, NULL);
- tds = vds;
- vds = uds;
- uds = tds;
- }
- BARY_TRUNC(uds, num_bdigits);
- z = bignew(num_bdigits, sign);
- MEMCPY(BDIGITS(z), uds, BDIGIT, num_bdigits);
-
- if (tmpuv)
- ALLOCV_END(tmpuv);
-
- return z;
-}
-
-#ifdef USE_GMP
-static VALUE
-str2big_gmp(
- int sign,
- const char *digits_start,
- const char *digits_end,
- size_t num_digits,
- size_t num_bdigits,
- int base)
-{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
- char *buf, *p;
- const char *q;
- VALUE tmps;
- mpz_t mz;
- VALUE z;
- BDIGIT *zds;
- size_t zn, count;
-
- buf = ALLOCV_N(char, tmps, num_digits+1);
- p = buf;
- for (q = digits_start; q < digits_end; q++) {
- if (conv_digit(*q) < 0)
- continue;
- *p++ = *q;
- }
- *p = '\0';
-
- mpz_init(mz);
- mpz_set_str(mz, buf, base);
- zn = num_bdigits;
- z = bignew(zn, sign);
- zds = BDIGITS(z);
- mpz_export(BDIGITS(z), &count, -1, sizeof(BDIGIT), 0, nails, mz);
- BDIGITS_ZERO(zds+count, zn-count);
- mpz_clear(mz);
-
- if (tmps)
- ALLOCV_END(tmps);
-
- return z;
-}
#endif
-/*
- * Parse +str+ as Ruby Integer, i.e., underscores, 0d and 0b prefixes.
- *
- * str: pointer to the string to be parsed.
- * should be NUL-terminated.
- * base: base of conversion, must be 2..36, or -36..0.
- * if +base+ > 0, the conversion is done according to the +base+
- * and unmatched prefix is parsed as a part of the result if
- * present.
- * if +base+ <= 0, the conversion is done according to the
- * prefix if present, in base <code>-base</code> if +base+ < -1,
- * or in base 10.
- * badcheck: if non-zero, +ArgumentError+ is raised when +str+ is not
- * valid as an Integer. if zero, Fixnum 0 is returned in
- * that case.
- */
VALUE
-rb_cstr_to_inum(const char *str, int base, int badcheck)
+rb_cstr_to_inum(str, base, badcheck)
+ const char *str;
+ int base;
+ int badcheck;
{
const char *s = str;
- char sign = 1;
+ char *end;
+ char sign = 1, nondigit = 0;
int c;
+ BDIGIT_DBL num;
+ long len, blen = 1;
+ long i;
VALUE z;
+ BDIGIT *zds;
- int bits_per_digit;
-
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t num_bdigits;
- size_t len;
+#define conv_digit(c) \
+ (!ISASCII(c) ? -1 : \
+ isdigit(c) ? ((c) - '0') : \
+ islower(c) ? ((c) - 'a' + 10) : \
+ isupper(c) ? ((c) - 'A' + 10) : \
+ -1)
if (!str) {
- if (badcheck) {
- bad:
- rb_invalid_str(s, "Integer()");
- }
+ if (badcheck) goto bad;
return INT2FIX(0);
}
- while (ISSPACE(*str)) str++;
+ if (badcheck) {
+ while (ISSPACE(*str)) str++;
+ }
+ else {
+ while (ISSPACE(*str) || *str == '_') str++;
+ }
if (str[0] == '+') {
str++;
@@ -3995,19 +396,15 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
switch (str[1]) {
case 'x': case 'X':
base = 16;
- str += 2;
break;
case 'b': case 'B':
base = 2;
- str += 2;
break;
case 'o': case 'O':
base = 8;
- str += 2;
break;
case 'd': case 'D':
base = 10;
- str += 2;
break;
default:
base = 8;
@@ -4020,40 +417,50 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
base = 10;
}
}
- else if (base == 2) {
+ switch (base) {
+ case 2:
+ len = 1;
if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
str += 2;
}
- }
- else if (base == 8) {
+ break;
+ case 3:
+ len = 2;
+ break;
+ case 8:
if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
str += 2;
}
- }
- else if (base == 10) {
+ case 4: case 5: case 6: case 7:
+ len = 3;
+ break;
+ case 10:
if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
str += 2;
}
- }
- else if (base == 16) {
+ case 9: case 11: case 12: case 13: case 14: case 15:
+ len = 4;
+ break;
+ case 16:
+ len = 4;
if (str[0] == '0' && (str[1] == 'x'||str[1] == 'X')) {
str += 2;
}
- }
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
- if (*str == '0') { /* squeeze preceding 0s */
- int us = 0;
- while ((c = *++str) == '0' || c == '_') {
- if (c == '_') {
- if (++us >= 2)
- break;
- }
- else {
- us = 0;
- }
+ break;
+ default:
+ if (base < 2 || 36 < base) {
+ rb_raise(rb_eArgError, "illegal radix %d", base);
+ }
+ if (base <= 32) {
+ len = 5;
+ }
+ else {
+ len = 6;
}
+ break;
+ }
+ if (*str == '0') { /* squeeze preceeding 0s */
+ while (*++str == '0');
if (!(c = *str) || ISSPACE(c)) --str;
}
c = *str;
@@ -4062,13 +469,12 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
if (badcheck) goto bad;
return INT2FIX(0);
}
+ len *= strlen(str)*sizeof(char);
- bits_per_digit = bit_length(base-1);
- if (bits_per_digit * strlen(str) <= sizeof(long) * CHAR_BIT) {
- char *end;
- unsigned long val = STRTOUL(str, &end, base);
+ if (len <= (sizeof(VALUE)*CHAR_BIT)) {
+ unsigned long val = strtoul((char*)str, &end, base);
- if (str < end && *end == '_') goto bigparse;
+ if (*end == '_') goto bigparse;
if (badcheck) {
if (end == str) goto bad; /* no number */
while (*end && ISSPACE(*end)) end++;
@@ -4084,853 +490,274 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
}
else {
VALUE big = rb_uint2big(val);
- BIGNUM_SET_SIGN(big, sign);
+ RBIGNUM(big)->sign = sign;
return bignorm(big);
}
}
-
bigparse:
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
+ len = (len/BITSPERDIG)+1;
+ if (badcheck && *str == '_') goto bad;
- if (POW2_P(base)) {
- z = str2big_poweroftwo(sign, digits_start, digits_end, num_digits,
- bits_per_digit);
+ z = bignew(len, sign);
+ zds = BDIGITS(z);
+ for (i=len;i--;) zds[i]=0;
+ while ((c = *str++) != 0) {
+ if (c == '_') {
+ if (badcheck) {
+ if (nondigit) goto bad;
+ nondigit = c;
+ }
+ continue;
+ }
+ else if ((c = conv_digit(c)) < 0) {
+ break;
+ }
+ if (c >= base) break;
+ nondigit = 0;
+ i = 0;
+ num = c;
+ for (;;) {
+ while (i<blen) {
+ num += (BDIGIT_DBL)zds[i]*base;
+ zds[i++] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ if (num) {
+ blen++;
+ continue;
+ }
+ break;
+ }
}
- else {
- int digits_per_bdigits_dbl;
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
-#ifdef USE_GMP
- if (GMP_STR2BIG_DIGITS < num_bdigits) {
- z = str2big_gmp(sign, digits_start, digits_end, num_digits,
- num_bdigits, base);
- }
- else
-#endif
- if (num_bdigits < KARATSUBA_MUL_DIGITS) {
- z = str2big_normal(sign, digits_start, digits_end,
- num_bdigits, base);
- }
- else {
- z = str2big_karatsuba(sign, digits_start, digits_end, num_digits,
- num_bdigits, digits_per_bdigits_dbl, base);
- }
+ if (badcheck) {
+ str--;
+ if (s+1 < str && str[-1] == '_') goto bad;
+ while (*str && ISSPACE(*str)) str++;
+ if (*str) {
+ bad:
+ rb_invalid_str(s, "Integer");
+ }
}
return bignorm(z);
}
VALUE
-rb_str_to_inum(VALUE str, int base, int badcheck)
+rb_str_to_inum(str, base, badcheck)
+ VALUE str;
+ int base;
+ int badcheck;
{
char *s;
long len;
- VALUE v = 0;
- VALUE ret;
StringValue(str);
- rb_must_asciicompat(str);
if (badcheck) {
s = StringValueCStr(str);
}
else {
- s = RSTRING_PTR(str);
+ s = RSTRING(str)->ptr;
}
if (s) {
- len = RSTRING_LEN(str);
+ len = RSTRING(str)->len;
if (s[len]) { /* no sentinel somehow */
- char *p = ALLOCV(v, len+1);
+ char *p = ALLOCA_N(char, len+1);
MEMCPY(p, s, char, len);
p[len] = '\0';
s = p;
}
}
- ret = rb_cstr_to_inum(s, base, badcheck);
- if (v)
- ALLOCV_END(v);
- return ret;
-}
-
-VALUE
-rb_str2big_poweroftwo(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- if (base < 2 || 36 < base || !POW2_P(base)) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- z = str2big_poweroftwo(positive_p, digits_start, digits_end, num_digits,
- bit_length(base-1));
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-VALUE
-rb_str2big_normal(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_normal(positive_p, digits_start, digits_end,
- num_bdigits, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-VALUE
-rb_str2big_karatsuba(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_karatsuba(positive_p, digits_start, digits_end, num_digits,
- num_bdigits, digits_per_bdigits_dbl, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-#ifdef USE_GMP
-VALUE
-rb_str2big_gmp(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_gmp(positive_p, digits_start, digits_end, num_digits, num_bdigits, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
+ return rb_cstr_to_inum(s, base, badcheck);
}
-#endif
#if HAVE_LONG_LONG
-static VALUE
-rb_ull2big(unsigned LONG_LONG n)
+VALUE
+rb_ull2big(n)
+ unsigned LONG_LONG n;
{
- long i;
- VALUE big = bignew(bdigit_roomof(SIZEOF_LONG_LONG), 1);
- BDIGIT *digits = BDIGITS(big);
+ BDIGIT_DBL num = n;
+ long i = 0;
+ BDIGIT *digits;
+ VALUE big;
-#if SIZEOF_BDIGIT >= SIZEOF_LONG_LONG
- digits[0] = n;
-#else
- for (i = 0; i < bdigit_roomof(SIZEOF_LONG_LONG); i++) {
- digits[i] = BIGLO(n);
- n = BIGDN(n);
+ big = bignew(DIGSPERLL, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLL) {
+ digits[i++] = BIGLO(num);
+ num = BIGDN(num);
}
-#endif
- i = bdigit_roomof(SIZEOF_LONG_LONG);
+ i = DIGSPERLL;
while (i-- && !digits[i]) ;
- BIGNUM_SET_LEN(big, i+1);
+ RBIGNUM(big)->len = i+1;
return big;
}
-static VALUE
-rb_ll2big(LONG_LONG n)
+VALUE
+rb_ll2big(n)
+ LONG_LONG n;
{
long neg = 0;
- unsigned LONG_LONG u;
VALUE big;
if (n < 0) {
- u = 1 + (unsigned LONG_LONG)(-(n + 1)); /* u = -n avoiding overflow */
+ n = -n;
neg = 1;
}
- else {
- u = n;
- }
- big = rb_ull2big(u);
+ big = rb_ull2big(n);
if (neg) {
- BIGNUM_SET_SIGN(big, 0);
+ RBIGNUM(big)->sign = 0;
}
return big;
}
VALUE
-rb_ull2inum(unsigned LONG_LONG n)
+rb_ull2inum(n)
+ unsigned LONG_LONG n;
{
if (POSFIXABLE(n)) return LONG2FIX(n);
return rb_ull2big(n);
}
VALUE
-rb_ll2inum(LONG_LONG n)
+rb_ll2inum(n)
+ LONG_LONG n;
{
if (FIXABLE(n)) return LONG2FIX(n);
return rb_ll2big(n);
}
#endif /* HAVE_LONG_LONG */
-
+
VALUE
-rb_cstr2inum(const char *str, int base)
+rb_cstr2inum(str, base)
+ const char *str;
+ int base;
{
return rb_cstr_to_inum(str, base, base==0);
}
VALUE
-rb_str2inum(VALUE str, int base)
-{
- return rb_str_to_inum(str, base, base==0);
-}
-
-static VALUE
-big_shift3(VALUE x, int lshift_p, size_t shift_numdigits, int shift_numbits)
-{
- BDIGIT *xds, *zds;
- long s1;
- int s2;
- VALUE z;
- long xn;
-
- if (lshift_p) {
- if (LONG_MAX < shift_numdigits) {
- rb_raise(rb_eArgError, "too big number");
- }
- s1 = shift_numdigits;
- s2 = shift_numbits;
- xn = BIGNUM_LEN(x);
- z = bignew(xn+s1+1, BIGNUM_SIGN(x));
- zds = BDIGITS(z);
- BDIGITS_ZERO(zds, s1);
- xds = BDIGITS(x);
- zds[xn+s1] = bary_small_lshift(zds+s1, xds, xn, s2);
- }
- else {
- long zn;
- BDIGIT hibitsx;
- if (LONG_MAX < shift_numdigits || (size_t)BIGNUM_LEN(x) <= shift_numdigits) {
- if (BIGNUM_POSITIVE_P(x) ||
- bary_zero_p(BDIGITS(x), BIGNUM_LEN(x)))
- return INT2FIX(0);
- else
- return INT2FIX(-1);
- }
- s1 = shift_numdigits;
- s2 = shift_numbits;
- hibitsx = abs2twocomp(&x, &xn);
- xds = BDIGITS(x);
- if (xn <= s1) {
- return hibitsx ? INT2FIX(-1) : INT2FIX(0);
- }
- zn = xn - s1;
- z = bignew(zn, 0);
- zds = BDIGITS(z);
- bary_small_rshift(zds, xds+s1, zn, s2, hibitsx != 0 ? BDIGMAX : 0);
- twocomp2abs_bang(z, hibitsx != 0);
- }
- RB_GC_GUARD(x);
- return z;
-}
-
-static VALUE
-big_shift2(VALUE x, int lshift_p, VALUE y)
-{
- int sign;
- size_t lens[2];
- size_t shift_numdigits;
- int shift_numbits;
-
- assert(POW2_P(CHAR_BIT));
- assert(POW2_P(BITSPERDIG));
-
- if (BIGZEROP(x))
- return INT2FIX(0);
- sign = rb_integer_pack(y, lens, numberof(lens), sizeof(size_t), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
- if (sign < 0) {
- lshift_p = !lshift_p;
- sign = -sign;
- }
- if (lshift_p) {
- if (1 < sign || CHAR_BIT <= lens[1])
- rb_raise(rb_eRangeError, "shift width too big");
- }
- else {
- if (1 < sign || CHAR_BIT <= lens[1])
- return BIGNUM_POSITIVE_P(x) ? INT2FIX(0) : INT2FIX(-1);
- }
- shift_numbits = (int)(lens[0] & (BITSPERDIG-1));
- shift_numdigits = (lens[0] >> bit_length(BITSPERDIG-1)) |
- (lens[1] << (CHAR_BIT*SIZEOF_SIZE_T - bit_length(BITSPERDIG-1)));
- return big_shift3(x, lshift_p, shift_numdigits, shift_numbits);
-}
-
-static VALUE
-big_lshift(VALUE x, unsigned long shift)
-{
- long s1 = shift/BITSPERDIG;
- int s2 = (int)(shift%BITSPERDIG);
- return big_shift3(x, 1, s1, s2);
-}
-
-static VALUE
-big_rshift(VALUE x, unsigned long shift)
-{
- long s1 = shift/BITSPERDIG;
- int s2 = (int)(shift%BITSPERDIG);
- return big_shift3(x, 0, s1, s2);
-}
-
-#define MAX_BASE36_POWER_TABLE_ENTRIES (SIZEOF_SIZE_T * CHAR_BIT + 1)
-
-static VALUE base36_power_cache[35][MAX_BASE36_POWER_TABLE_ENTRIES];
-static size_t base36_numdigits_cache[35][MAX_BASE36_POWER_TABLE_ENTRIES];
-
-static void
-power_cache_init(void)
-{
- int i, j;
- for (i = 0; i < 35; ++i) {
- for (j = 0; j < MAX_BASE36_POWER_TABLE_ENTRIES; ++j) {
- base36_power_cache[i][j] = Qnil;
- }
- }
-}
-
-static inline VALUE
-power_cache_get_power(int base, int power_level, size_t *numdigits_ret)
-{
- /*
- * MAX_BASE36_POWER_TABLE_ENTRIES is big enough to that
- * base36_power_cache[base][MAX_BASE36_POWER_TABLE_ENTRIES-1] fills whole memory.
- * So MAX_BASE36_POWER_TABLE_ENTRIES <= power_level is not possible to calculate.
- *
- * number-of-bytes =
- * log256(base36_power_cache[base][MAX_BASE36_POWER_TABLE_ENTRIES-1]) =
- * log256(maxpow_in_bdigit_dbl(base)**(2**(MAX_BASE36_POWER_TABLE_ENTRIES-1))) =
- * log256(maxpow_in_bdigit_dbl(base)**(2**(SIZEOF_SIZE_T*CHAR_BIT))) =
- * (2**(SIZEOF_SIZE_T*CHAR_BIT))*log256(maxpow_in_bdigit_dbl(base)) =
- * (256**SIZEOF_SIZE_T)*log256(maxpow_in_bdigit_dbl(base)) >
- * (256**SIZEOF_SIZE_T)*(sizeof(BDIGIT_DBL)-1) >
- * 256**SIZEOF_SIZE_T
- */
- if (MAX_BASE36_POWER_TABLE_ENTRIES <= power_level)
- rb_bug("too big power number requested: maxpow_in_bdigit_dbl(%d)**(2**%d)", base, power_level);
-
- if (NIL_P(base36_power_cache[base - 2][power_level])) {
- VALUE power;
- size_t numdigits;
- if (power_level == 0) {
- int numdigits0;
- BDIGIT_DBL dd = maxpow_in_bdigit_dbl(base, &numdigits0);
- power = bignew(2, 1);
- bdigitdbl2bary(BDIGITS(power), 2, dd);
- numdigits = numdigits0;
- }
- else {
- power = bigtrunc(bigsq(power_cache_get_power(base, power_level - 1, &numdigits)));
- numdigits *= 2;
- }
- rb_obj_hide(power);
- base36_power_cache[base - 2][power_level] = power;
- base36_numdigits_cache[base - 2][power_level] = numdigits;
- rb_gc_register_mark_object(power);
- }
- if (numdigits_ret)
- *numdigits_ret = base36_numdigits_cache[base - 2][power_level];
- return base36_power_cache[base - 2][power_level];
-}
-
-struct big2str_struct {
- int negative;
+rb_str2inum(str, base)
+ VALUE str;
int base;
- BDIGIT_DBL hbase2;
- int hbase2_numdigits;
- VALUE result;
- char *ptr;
-};
-
-static void
-big2str_alloc(struct big2str_struct *b2s, size_t len)
-{
- if (LONG_MAX-1 < len)
- rb_raise(rb_eArgError, "too big number");
- b2s->result = rb_usascii_str_new(0, (long)(len + 1)); /* plus one for sign */
- b2s->ptr = RSTRING_PTR(b2s->result);
- if (b2s->negative)
- *b2s->ptr++ = '-';
-}
-
-static void
-big2str_2bdigits(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t taillen)
-{
- size_t j;
- BDIGIT_DBL num;
- char buf[SIZEOF_BDIGIT_DBL*CHAR_BIT], *p;
- int beginning = !b2s->ptr;
- size_t len = 0;
-
- assert(xn <= 2);
- num = bary2bdigitdbl(xds, xn);
-
- if (beginning) {
- if (num == 0)
- return;
- p = buf;
- j = sizeof(buf);
- do {
- p[--j] = ruby_digitmap[num % b2s->base];
- num /= b2s->base;
- } while (num);
- len = sizeof(buf) - j;
- big2str_alloc(b2s, len + taillen);
- MEMCPY(b2s->ptr, buf + j, char, len);
- }
- else {
- p = b2s->ptr;
- j = b2s->hbase2_numdigits;
- do {
- p[--j] = ruby_digitmap[num % b2s->base];
- num /= b2s->base;
- } while (j);
- len = b2s->hbase2_numdigits;
- }
- b2s->ptr += len;
-}
-
-static void
-big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
- int power_level, size_t taillen)
-{
- VALUE b;
- size_t half_numdigits, lower_numdigits;
- int lower_power_level;
- size_t bn;
- const BDIGIT *bds;
- size_t len;
-
- /*
- * Precondition:
- * abs(x) < maxpow**(2**power_level)
- * where
- * maxpow = maxpow_in_bdigit_dbl(base, &numdigits)
- *
- * This function generates sequence of zeros, and then stringized abs(x) into b2s->ptr.
- *
- * b2s->ptr can be NULL.
- * It is allocated when the first character is generated via big2str_alloc.
- *
- * The prefix zeros should be generated if and only if b2s->ptr is not NULL.
- * When the zeros are generated, the zeros and abs(x) consists
- * numdigits*(2**power_level) characters at total.
- *
- * Note:
- * power_cache_get_power(base, power_level, &len) may not be cached yet. It should not be called.
- * power_cache_get_power(base, power_level-1, &len) should be cached already if 0 <= power_level-1.
- */
-
- if (xn == 0 || bary_zero_p(xds, xn)) {
- if (b2s->ptr) {
- /* When x is zero, power_cache_get_power(base, power_level) should be cached already. */
- power_cache_get_power(b2s->base, power_level, &len);
- memset(b2s->ptr, '0', len);
- b2s->ptr += len;
- }
- return;
- }
-
- if (power_level == 0) {
- big2str_2bdigits(b2s, xds, xn, taillen);
- return;
- }
-
- lower_power_level = power_level-1;
- b = power_cache_get_power(b2s->base, lower_power_level, &lower_numdigits);
- bn = BIGNUM_LEN(b);
- bds = BDIGITS(b);
-
- half_numdigits = lower_numdigits;
-
- while (0 < lower_power_level &&
- (xn < bn ||
- (xn == bn && bary_cmp(xds, xn, bds, bn) < 0))) {
- lower_power_level--;
- b = power_cache_get_power(b2s->base, lower_power_level, &lower_numdigits);
- bn = BIGNUM_LEN(b);
- bds = BDIGITS(b);
- }
-
- if (lower_power_level == 0 &&
- (xn < bn ||
- (xn == bn && bary_cmp(xds, xn, bds, bn) < 0))) {
- if (b2s->ptr) {
- len = half_numdigits * 2 - lower_numdigits;
- memset(b2s->ptr, '0', len);
- b2s->ptr += len;
- }
- big2str_2bdigits(b2s, xds, xn, taillen);
- }
- else {
- BDIGIT *qds, *rds;
- size_t qn, rn;
- BDIGIT *tds;
- int shift;
-
- if (lower_power_level != power_level-1 && b2s->ptr) {
- len = (half_numdigits - lower_numdigits) * 2;
- memset(b2s->ptr, '0', len);
- b2s->ptr += len;
- }
-
- shift = nlz(bds[bn-1]);
-
- qn = xn + BIGDIVREM_EXTRA_WORDS;
-
- if (shift == 0) {
- /* bigdivrem_restoring will not modify y.
- * So use bds directly. */
- tds = (BDIGIT *)bds;
- xds[xn] = 0;
- }
- else {
- /* bigdivrem_restoring will modify y.
- * So use temporary buffer. */
- tds = xds + qn;
- assert(qn + bn <= xn + wn);
- bary_small_lshift(tds, bds, bn, shift);
- xds[xn] = bary_small_lshift(xds, xds, xn, shift);
- }
-
- bigdivrem_restoring(xds, qn, tds, bn);
-
- rds = xds;
- rn = bn;
-
- qds = xds + bn;
- qn = qn - bn;
-
- if (shift) {
- bary_small_rshift(rds, rds, rn, shift, 0);
- }
-
- BARY_TRUNC(qds, qn);
- assert(qn <= bn);
- big2str_karatsuba(b2s, qds, qn, xn+wn - (rn+qn), lower_power_level, lower_numdigits+taillen);
- BARY_TRUNC(rds, rn);
- big2str_karatsuba(b2s, rds, rn, xn+wn - rn, lower_power_level, taillen);
- }
-}
-
-static VALUE
-big2str_base_poweroftwo(VALUE x, int base)
-{
- int word_numbits = ffs(base) - 1;
- size_t numwords;
- VALUE result;
- char *ptr;
- numwords = rb_absint_numwords(x, word_numbits, NULL);
- if (BIGNUM_NEGATIVE_P(x)) {
- if (LONG_MAX-1 < numwords)
- rb_raise(rb_eArgError, "too big number");
- result = rb_usascii_str_new(0, 1+numwords);
- ptr = RSTRING_PTR(result);
- *ptr++ = BIGNUM_POSITIVE_P(x) ? '+' : '-';
- }
- else {
- if (LONG_MAX < numwords)
- rb_raise(rb_eArgError, "too big number");
- result = rb_usascii_str_new(0, numwords);
- ptr = RSTRING_PTR(result);
- }
- rb_integer_pack(x, ptr, numwords, 1, CHAR_BIT-word_numbits,
- INTEGER_PACK_BIG_ENDIAN);
- while (0 < numwords) {
- *ptr = ruby_digitmap[*(unsigned char *)ptr];
- ptr++;
- numwords--;
- }
- return result;
-}
-
-VALUE
-rb_big2str_poweroftwo(VALUE x, int base)
-{
- return big2str_base_poweroftwo(x, base);
-}
-
-static VALUE
-big2str_generic(VALUE x, int base)
{
- BDIGIT *xds;
- size_t xn;
- struct big2str_struct b2s_data;
- int power_level;
- VALUE power;
-
- xds = BDIGITS(x);
- xn = BIGNUM_LEN(x);
- BARY_TRUNC(xds, xn);
-
- if (xn == 0) {
- return rb_usascii_str_new2("0");
- }
-
- if (base < 2 || 36 < base)
- rb_raise(rb_eArgError, "invalid radix %d", base);
-
- if (xn >= LONG_MAX/BITSPERDIG) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
- }
-
- power_level = 0;
- power = power_cache_get_power(base, power_level, NULL);
- while (power_level < MAX_BASE36_POWER_TABLE_ENTRIES &&
- (size_t)BIGNUM_LEN(power) <= (xn+1)/2) {
- power_level++;
- power = power_cache_get_power(base, power_level, NULL);
- }
- assert(power_level != MAX_BASE36_POWER_TABLE_ENTRIES);
-
- if ((size_t)BIGNUM_LEN(power) <= xn) {
- /*
- * This increment guarantees x < power_cache_get_power(base, power_level)
- * without invoking it actually.
- * (power_cache_get_power(base, power_level) can be slow and not used
- * in big2str_karatsuba.)
- *
- * Although it is possible that x < power_cache_get_power(base, power_level-1),
- * it is no problem because big2str_karatsuba checks it and
- * doesn't affect the result when b2s_data.ptr is NULL.
- */
- power_level++;
- }
-
- b2s_data.negative = BIGNUM_NEGATIVE_P(x);
- b2s_data.base = base;
- b2s_data.hbase2 = maxpow_in_bdigit_dbl(base, &b2s_data.hbase2_numdigits);
-
- b2s_data.result = Qnil;
- b2s_data.ptr = NULL;
-
- if (power_level == 0) {
- big2str_2bdigits(&b2s_data, xds, xn, 0);
- }
- else {
- VALUE tmpw = 0;
- BDIGIT *wds;
- size_t wn;
- wn = power_level * BIGDIVREM_EXTRA_WORDS + BIGNUM_LEN(power);
- wds = ALLOCV_N(BDIGIT, tmpw, xn + wn);
- MEMCPY(wds, xds, BDIGIT, xn);
- big2str_karatsuba(&b2s_data, wds, xn, wn, power_level, 0);
- if (tmpw)
- ALLOCV_END(tmpw);
- }
- RB_GC_GUARD(x);
-
- *b2s_data.ptr = '\0';
- rb_str_resize(b2s_data.result, (long)(b2s_data.ptr - RSTRING_PTR(b2s_data.result)));
-
- RB_GC_GUARD(x);
- return b2s_data.result;
-}
-
-VALUE
-rb_big2str_generic(VALUE x, int base)
-{
- return big2str_generic(x, base);
-}
-
-#ifdef USE_GMP
-static VALUE
-big2str_gmp(VALUE x, int base)
-{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
- mpz_t mx;
- size_t size;
- VALUE str;
- BDIGIT *xds = BDIGITS(x);
- size_t xn = BIGNUM_LEN(x);
-
- mpz_init(mx);
- mpz_import(mx, xn, -1, sizeof(BDIGIT), 0, nails, xds);
-
- size = mpz_sizeinbase(mx, base);
-
- if (BIGNUM_NEGATIVE_P(x)) {
- mpz_neg(mx, mx);
- str = rb_usascii_str_new(0, size+1);
- }
- else {
- str = rb_usascii_str_new(0, size);
- }
- mpz_get_str(RSTRING_PTR(str), base, mx);
- mpz_clear(mx);
-
- if (RSTRING_PTR(str)[RSTRING_LEN(str)-1] == '\0') {
- rb_str_set_len(str, RSTRING_LEN(str)-1);
- }
-
- RB_GC_GUARD(x);
- return str;
+ return rb_str_to_inum(str, base, base==0);
}
+const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
VALUE
-rb_big2str_gmp(VALUE x, int base)
-{
- return big2str_gmp(x, base);
-}
-#endif
-
-static VALUE
-rb_big2str1(VALUE x, int base)
+rb_big2str0(x, base, trim)
+ VALUE x;
+ int base;
+ int trim;
{
- BDIGIT *xds;
- size_t xn;
+ volatile VALUE t;
+ BDIGIT *ds;
+ long i, j, hbase;
+ VALUE ss;
+ char *s;
if (FIXNUM_P(x)) {
return rb_fix2str(x, base);
}
-
- bigtrunc(x);
- xds = BDIGITS(x);
- xn = BIGNUM_LEN(x);
- BARY_TRUNC(xds, xn);
-
- if (xn == 0) {
- return rb_usascii_str_new2("0");
- }
-
- if (base < 2 || 36 < base)
- rb_raise(rb_eArgError, "invalid radix %d", base);
-
- if (xn >= LONG_MAX/BITSPERDIG) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
+ i = RBIGNUM(x)->len;
+ if (BIGZEROP(x)) {
+ return rb_str_new2("0");
+ }
+ if (i >= LONG_MAX/SIZEOF_BDIGITS/CHAR_BIT) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
+ }
+ j = SIZEOF_BDIGITS*CHAR_BIT*i;
+ switch (base) {
+ case 2: break;
+ case 3:
+ j = j * 53L / 84 + 1;
+ break;
+ case 4: case 5: case 6: case 7:
+ j = (j + 1) / 2;
+ break;
+ case 8: case 9:
+ j = (j + 2) / 3;
+ break;
+ case 10: case 11: case 12: case 13: case 14: case 15:
+ j = j * 28L / 93 + 1;
+ break;
+ case 16: case 17: case 18: case 19: case 20: case 21:
+ case 22: case 23: case 24: case 25: case 26: case 27:
+ case 28: case 29: case 30: case 31:
+ j = (j + 3) / 4;
+ break;
+ case 32: case 33: case 34: case 35: case 36:
+ j = (j + 4) / 5;
+ break;
+ default:
+ rb_raise(rb_eArgError, "illegal radix %d", base);
+ break;
+ }
+ j++; /* space for sign */
+
+ hbase = base * base;
+#if SIZEOF_BDIGITS > 2
+ hbase *= hbase;
+#endif
+
+ t = rb_big_clone(x);
+ ds = BDIGITS(t);
+ ss = rb_str_new(0, j+1);
+ s = RSTRING(ss)->ptr;
+
+ s[0] = RBIGNUM(x)->sign ? '+' : '-';
+ TRAP_BEG;
+ while (i && j > 1) {
+ long k = i;
+ BDIGIT_DBL num = 0;
+
+ while (k--) {
+ num = BIGUP(num) + ds[k];
+ ds[k] = (BDIGIT)(num / hbase);
+ num %= hbase;
+ }
+ if (trim && ds[i-1] == 0) i--;
+ k = SIZEOF_BDIGITS;
+ while (k--) {
+ s[--j] = ruby_digitmap[num % base];
+ num /= base;
+ if (!trim && j <= 1) break;
+ if (trim && i == 0 && num == 0) break;
+ }
}
-
- if (POW2_P(base)) {
- /* base == 2 || base == 4 || base == 8 || base == 16 || base == 32 */
- return big2str_base_poweroftwo(x, base);
+ if (trim) {while (s[j] == '0') j++;}
+ i = RSTRING(ss)->len - j;
+ if (RBIGNUM(x)->sign) {
+ memmove(s, s+j, i);
+ RSTRING(ss)->len = i-1;
}
-
-#ifdef USE_GMP
- if (GMP_BIG2STR_DIGITS < xn) {
- return big2str_gmp(x, base);
+ else {
+ memmove(s+1, s+j, i);
+ RSTRING(ss)->len = i;
}
-#endif
+ s[RSTRING(ss)->len] = '\0';
+ TRAP_END;
- return big2str_generic(x, base);
+ return ss;
}
VALUE
rb_big2str(VALUE x, int base)
{
- return rb_big2str1(x, base);
+ return rb_big2str0(x, base, Qtrue);
}
/*
* call-seq:
- * big.to_s(base=10) -> string
- *
+ * big.to_s(base=10) => string
+ *
* Returns a string containing the representation of <i>big</i> radix
* <i>base</i> (2 through 36).
- *
+ *
* 12345654321.to_s #=> "12345654321"
* 12345654321.to_s(2) #=> "1011011111110110111011110000110001"
* 12345654321.to_s(8) #=> "133766736061"
@@ -4939,144 +766,130 @@ rb_big2str(VALUE x, int base)
*/
static VALUE
-rb_big_to_s(int argc, VALUE *argv, VALUE x)
+rb_big_to_s(argc, argv, x)
+ int argc;
+ VALUE *argv;
+ VALUE x;
{
+ VALUE b;
int base;
+ rb_scan_args(argc, argv, "01", &b);
if (argc == 0) base = 10;
- else {
- VALUE b;
-
- rb_scan_args(argc, argv, "01", &b);
- base = NUM2INT(b);
- }
+ else base = NUM2INT(b);
return rb_big2str(x, base);
}
static unsigned long
-big2ulong(VALUE x, const char *type)
+big2ulong(x, type)
+ VALUE x;
+ char *type;
{
- size_t len = BIGNUM_LEN(x);
- unsigned long num;
+ long len = RBIGNUM(x)->len;
+ BDIGIT_DBL num;
BDIGIT *ds;
- if (len == 0)
- return 0;
- if (BIGSIZE(x) > sizeof(long)) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
- }
+ if (len > SIZEOF_LONG/SIZEOF_BDIGITS)
+ rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
ds = BDIGITS(x);
-#if SIZEOF_LONG <= SIZEOF_BDIGIT
- num = (unsigned long)ds[0];
-#else
num = 0;
while (len--) {
- num <<= BITSPERDIG;
- num += (unsigned long)ds[len]; /* overflow is already checked */
+ num = BIGUP(num);
+ num += ds[len];
}
-#endif
return num;
}
unsigned long
-rb_big2ulong(VALUE x)
+rb_big2ulong_pack(x)
+ VALUE x;
+{
+ unsigned long num = big2ulong(x, "unsigned long");
+ if (!RBIGNUM(x)->sign) {
+ return -num;
+ }
+ return num;
+}
+
+unsigned long
+rb_big2ulong(x)
+ VALUE x;
{
unsigned long num = big2ulong(x, "unsigned long");
- if (BIGNUM_POSITIVE_P(x)) {
- return num;
- }
- else {
- if (num <= LONG_MAX)
- return -(long)num;
- if (num == 1+(unsigned long)(-(LONG_MIN+1)))
- return LONG_MIN;
+ if (!RBIGNUM(x)->sign) {
+ if ((long)num < 0) {
+ rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
+ }
+ return -num;
}
- rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
+ return num;
}
long
-rb_big2long(VALUE x)
+rb_big2long(x)
+ VALUE x;
{
unsigned long num = big2ulong(x, "long");
- if (BIGNUM_POSITIVE_P(x)) {
- if (num <= LONG_MAX)
- return num;
+ if ((long)num < 0 && (RBIGNUM(x)->sign || (long)num != LONG_MIN)) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
}
- else {
- if (num <= LONG_MAX)
- return -(long)num;
- if (num == 1+(unsigned long)(-(LONG_MIN+1)))
- return LONG_MIN;
- }
- rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
+ if (!RBIGNUM(x)->sign) return -(long)num;
+ return num;
}
#if HAVE_LONG_LONG
static unsigned LONG_LONG
-big2ull(VALUE x, const char *type)
+big2ull(x, type)
+ VALUE x;
+ char *type;
{
- size_t len = BIGNUM_LEN(x);
- unsigned LONG_LONG num;
- BDIGIT *ds = BDIGITS(x);
+ long len = RBIGNUM(x)->len;
+ BDIGIT_DBL num;
+ BDIGIT *ds;
- if (len == 0)
- return 0;
- if (BIGSIZE(x) > SIZEOF_LONG_LONG)
+ if (len > SIZEOF_LONG_LONG/SIZEOF_BDIGITS)
rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
-#if SIZEOF_LONG_LONG <= SIZEOF_BDIGIT
- num = (unsigned LONG_LONG)ds[0];
-#else
+ ds = BDIGITS(x);
num = 0;
while (len--) {
num = BIGUP(num);
num += ds[len];
}
-#endif
return num;
}
unsigned LONG_LONG
-rb_big2ull(VALUE x)
+rb_big2ull(x)
+ VALUE x;
{
unsigned LONG_LONG num = big2ull(x, "unsigned long long");
- if (BIGNUM_POSITIVE_P(x)) {
- return num;
- }
- else {
- if (num <= LLONG_MAX)
- return -(LONG_LONG)num;
- if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
- return LLONG_MIN;
- }
- rb_raise(rb_eRangeError, "bignum out of range of unsigned long long");
+ if (!RBIGNUM(x)->sign) return -num;
+ return num;
}
LONG_LONG
-rb_big2ll(VALUE x)
+rb_big2ll(x)
+ VALUE x;
{
unsigned LONG_LONG num = big2ull(x, "long long");
- if (BIGNUM_POSITIVE_P(x)) {
- if (num <= LLONG_MAX)
- return num;
- }
- else {
- if (num <= LLONG_MAX)
- return -(LONG_LONG)num;
- if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
- return LLONG_MIN;
+ if ((LONG_LONG)num < 0 && (RBIGNUM(x)->sign
+ || (LONG_LONG)num != LLONG_MIN)) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
}
- rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
+ if (!RBIGNUM(x)->sign) return -(LONG_LONG)num;
+ return num;
}
#endif /* HAVE_LONG_LONG */
static VALUE
-dbl2big(double d)
+dbl2big(d)
+ double d;
{
long i = 0;
BDIGIT c;
@@ -5091,7 +904,7 @@ dbl2big(double d)
rb_raise(rb_eFloatDomainError, "NaN");
}
- while (1.0 <= u) {
+ while (!POSFIXABLE(u) || 0 != (long)u) {
u /= (double)(BIGRAD);
i++;
}
@@ -5108,1000 +921,613 @@ dbl2big(double d)
}
VALUE
-rb_dbl2big(double d)
+rb_dbl2big(d)
+ double d;
{
return bignorm(dbl2big(d));
}
-static double
-big2dbl(VALUE x)
+double
+rb_big2dbl(x)
+ VALUE x;
{
double d = 0.0;
- long i = (bigtrunc(x), BIGNUM_LEN(x)), lo = 0, bits;
- BDIGIT *ds = BDIGITS(x), dl;
+ long i = RBIGNUM(x)->len;
+ BDIGIT *ds = BDIGITS(x);
- if (i) {
- bits = i * BITSPERDIG - nlz(ds[i-1]);
- if (bits > DBL_MANT_DIG+DBL_MAX_EXP) {
- d = HUGE_VAL;
- }
- else {
- if (bits > DBL_MANT_DIG+1)
- lo = (bits -= DBL_MANT_DIG+1) / BITSPERDIG;
- else
- bits = 0;
- while (--i > lo) {
- d = ds[i] + BIGRAD*d;
- }
- dl = ds[i];
- if (bits && (dl & ((BDIGIT)1 << (bits %= BITSPERDIG)))) {
- int carry = (dl & ~(BDIGMAX << bits)) != 0;
- if (!carry) {
- while (i-- > 0) {
- carry = ds[i] != 0;
- if (carry) break;
- }
- }
- if (carry) {
- dl &= BDIGMAX << bits;
- dl = BIGLO(dl + ((BDIGIT)1 << bits));
- if (!dl) d += 1;
- }
- }
- d = dl + BIGRAD*d;
- if (lo) {
- if (lo > INT_MAX / BITSPERDIG)
- d = HUGE_VAL;
- else if (lo < INT_MIN / BITSPERDIG)
- d = 0.0;
- else
- d = ldexp(d, (int)(lo * BITSPERDIG));
- }
- }
+ while (i--) {
+ d = ds[i] + BIGRAD*d;
}
- if (!BIGNUM_SIGN(x)) d = -d;
- return d;
-}
-
-double
-rb_big2dbl(VALUE x)
-{
- double d = big2dbl(x);
-
if (isinf(d)) {
- rb_warning("Bignum out of Float range");
- if (d < 0.0)
- d = -HUGE_VAL;
- else
- d = HUGE_VAL;
+ rb_warn("Bignum out of Float range");
+ d = HUGE_VAL;
}
+ if (!RBIGNUM(x)->sign) d = -d;
return d;
}
/*
* call-seq:
* big.to_f -> float
- *
+ *
* Converts <i>big</i> to a <code>Float</code>. If <i>big</i> doesn't
* fit in a <code>Float</code>, the result is infinity.
- *
+ *
*/
static VALUE
-rb_big_to_f(VALUE x)
+rb_big_to_f(x)
+ VALUE x;
{
- return DBL2NUM(rb_big2dbl(x));
-}
-
-VALUE
-rb_integer_float_cmp(VALUE x, VALUE y)
-{
- double yd = RFLOAT_VALUE(y);
- double yi, yf;
- VALUE rel;
-
- if (isnan(yd))
- return Qnil;
- if (isinf(yd)) {
- if (yd > 0.0) return INT2FIX(-1);
- else return INT2FIX(1);
- }
- yf = modf(yd, &yi);
- if (FIXNUM_P(x)) {
-#if SIZEOF_LONG * CHAR_BIT < DBL_MANT_DIG /* assume FLT_RADIX == 2 */
- double xd = (double)FIX2LONG(x);
- if (xd < yd)
- return INT2FIX(-1);
- if (xd > yd)
- return INT2FIX(1);
- return INT2FIX(0);
-#else
- long xn, yn;
- if (yi < FIXNUM_MIN)
- return INT2FIX(1);
- if (FIXNUM_MAX+1 <= yi)
- return INT2FIX(-1);
- xn = FIX2LONG(x);
- yn = (long)yi;
- if (xn < yn)
- return INT2FIX(-1);
- if (xn > yn)
- return INT2FIX(1);
- if (yf < 0.0)
- return INT2FIX(1);
- if (0.0 < yf)
- return INT2FIX(-1);
- return INT2FIX(0);
-#endif
- }
- y = rb_dbl2big(yi);
- rel = rb_big_cmp(x, y);
- if (yf == 0.0 || rel != INT2FIX(0))
- return rel;
- if (yf < 0.0)
- return INT2FIX(1);
- return INT2FIX(-1);
-}
-
-VALUE
-rb_integer_float_eq(VALUE x, VALUE y)
-{
- double yd = RFLOAT_VALUE(y);
- double yi, yf;
-
- if (isnan(yd) || isinf(yd))
- return Qfalse;
- yf = modf(yd, &yi);
- if (yf != 0)
- return Qfalse;
- if (FIXNUM_P(x)) {
-#if SIZEOF_LONG * CHAR_BIT < DBL_MANT_DIG /* assume FLT_RADIX == 2 */
- double xd = (double)FIX2LONG(x);
- if (xd != yd)
- return Qfalse;
- return Qtrue;
-#else
- long xn, yn;
- if (yi < LONG_MIN || LONG_MAX < yi)
- return Qfalse;
- xn = FIX2LONG(x);
- yn = (long)yi;
- if (xn != yn)
- return Qfalse;
- return Qtrue;
-#endif
- }
- y = rb_dbl2big(yi);
- return rb_big_eq(x, y);
+ return rb_float_new(rb_big2dbl(x));
}
/*
* call-seq:
- * big <=> numeric -> -1, 0, +1 or nil
- *
- * Comparison---Returns -1, 0, or +1 depending on whether +big+ is
- * less than, equal to, or greater than +numeric+. This is the
- * basis for the tests in Comparable.
- *
- * +nil+ is returned if the two values are incomparable.
- *
- */
-
-VALUE
-rb_big_cmp(VALUE x, VALUE y)
-{
- int cmp;
-
- if (FIXNUM_P(y)) {
- x = bignorm(x);
- if (FIXNUM_P(x)) {
- if (FIX2LONG(x) > FIX2LONG(y)) return INT2FIX(1);
- if (FIX2LONG(x) < FIX2LONG(y)) return INT2FIX(-1);
- return INT2FIX(0);
- }
- else {
- if (BIGNUM_NEGATIVE_P(x)) return INT2FIX(-1);
- return INT2FIX(1);
- }
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return rb_integer_float_cmp(x, y);
- }
- else {
- return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
- }
-
- if (BIGNUM_SIGN(x) > BIGNUM_SIGN(y)) return INT2FIX(1);
- if (BIGNUM_SIGN(x) < BIGNUM_SIGN(y)) return INT2FIX(-1);
-
- cmp = bary_cmp(BDIGITS(x), BIGNUM_LEN(x), BDIGITS(y), BIGNUM_LEN(y));
- if (BIGNUM_SIGN(x))
- return INT2FIX(cmp);
- else
- return INT2FIX(-cmp);
-}
-
-enum big_op_t {
- big_op_gt,
- big_op_ge,
- big_op_lt,
- big_op_le
-};
-
-static VALUE
-big_op(VALUE x, VALUE y, enum big_op_t op)
-{
- VALUE rel;
- int n;
-
- if (FIXNUM_P(y) || RB_BIGNUM_TYPE_P(y)) {
- rel = rb_big_cmp(x, y);
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- rel = rb_integer_float_cmp(x, y);
- }
- else {
- ID id = 0;
- switch (op) {
- case big_op_gt: id = '>'; break;
- case big_op_ge: id = rb_intern(">="); break;
- case big_op_lt: id = '<'; break;
- case big_op_le: id = rb_intern("<="); break;
- }
- return rb_num_coerce_relop(x, y, id);
- }
-
- if (NIL_P(rel)) return Qfalse;
- n = FIX2INT(rel);
-
- switch (op) {
- case big_op_gt: return n > 0 ? Qtrue : Qfalse;
- case big_op_ge: return n >= 0 ? Qtrue : Qfalse;
- case big_op_lt: return n < 0 ? Qtrue : Qfalse;
- case big_op_le: return n <= 0 ? Qtrue : Qfalse;
- }
- return Qundef;
-}
-
-/*
- * call-seq:
- * big > real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * greater than that of <code>real</code>.
+ * big <=> numeric => -1, 0, +1
+ *
+ * Comparison---Returns -1, 0, or +1 depending on whether <i>big</i> is
+ * less than, equal to, or greater than <i>numeric</i>. This is the
+ * basis for the tests in <code>Comparable</code>.
+ *
*/
static VALUE
-big_gt(VALUE x, VALUE y)
+rb_big_cmp(x, y)
+ VALUE x, y;
{
- return big_op(x, y, big_op_gt);
-}
+ long xlen = RBIGNUM(x)->len;
-/*
- * call-seq:
- * big >= real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * greater than or equal to that of <code>real</code>.
- */
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ y = rb_int2big(FIX2LONG(y));
+ break;
-static VALUE
-big_ge(VALUE x, VALUE y)
-{
- return big_op(x, y, big_op_ge);
-}
+ case T_BIGNUM:
+ break;
-/*
- * call-seq:
- * big < real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * less than that of <code>real</code>.
- */
+ case T_FLOAT:
+ return rb_dbl_cmp(rb_big2dbl(x), RFLOAT(y)->value);
-static VALUE
-big_lt(VALUE x, VALUE y)
-{
- return big_op(x, y, big_op_lt);
-}
+ default:
+ return rb_num_coerce_cmp(x, y);
+ }
-/*
- * call-seq:
- * big <= real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * less than or equal to that of <code>real</code>.
- */
+ if (RBIGNUM(x)->sign > RBIGNUM(y)->sign) return INT2FIX(1);
+ if (RBIGNUM(x)->sign < RBIGNUM(y)->sign) return INT2FIX(-1);
+ if (xlen < RBIGNUM(y)->len)
+ return (RBIGNUM(x)->sign) ? INT2FIX(-1) : INT2FIX(1);
+ if (xlen > RBIGNUM(y)->len)
+ return (RBIGNUM(x)->sign) ? INT2FIX(1) : INT2FIX(-1);
-static VALUE
-big_le(VALUE x, VALUE y)
-{
- return big_op(x, y, big_op_le);
+ while(xlen-- && (BDIGITS(x)[xlen]==BDIGITS(y)[xlen]));
+ if (-1 == xlen) return INT2FIX(0);
+ return (BDIGITS(x)[xlen] > BDIGITS(y)[xlen]) ?
+ (RBIGNUM(x)->sign ? INT2FIX(1) : INT2FIX(-1)) :
+ (RBIGNUM(x)->sign ? INT2FIX(-1) : INT2FIX(1));
}
/*
* call-seq:
- * big == obj -> true or false
- *
+ * big == obj => true or false
+ *
* Returns <code>true</code> only if <i>obj</i> has the same value
* as <i>big</i>. Contrast this with <code>Bignum#eql?</code>, which
* requires <i>obj</i> to be a <code>Bignum</code>.
- *
+ *
* 68719476736 == 68719476736.0 #=> true
*/
-VALUE
-rb_big_eq(VALUE x, VALUE y)
+static VALUE
+rb_big_eq(x, y)
+ VALUE x, y;
{
- if (FIXNUM_P(y)) {
- if (bignorm(x) == y) return Qtrue;
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return rb_integer_float_eq(x, y);
- }
- else {
+ break;
+ case T_BIGNUM:
+ break;
+ case T_FLOAT:
+ {
+ volatile double a, b;
+
+ a = RFLOAT(y)->value;
+ if (isnan(a)) return Qfalse;
+ b = rb_big2dbl(x);
+ return (a == b)?Qtrue:Qfalse;
+ }
+ default:
return rb_equal(y, x);
}
- if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y)) return Qfalse;
- if (BIGNUM_LEN(x) != BIGNUM_LEN(y)) return Qfalse;
- if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) != 0) return Qfalse;
+ if (RBIGNUM(x)->sign != RBIGNUM(y)->sign) return Qfalse;
+ if (RBIGNUM(x)->len != RBIGNUM(y)->len) return Qfalse;
+ if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM(y)->len) != 0) return Qfalse;
return Qtrue;
}
/*
* call-seq:
- * big.eql?(obj) -> true or false
- *
+ * big.eql?(obj) => true or false
+ *
* Returns <code>true</code> only if <i>obj</i> is a
* <code>Bignum</code> with the same value as <i>big</i>. Contrast this
* with <code>Bignum#==</code>, which performs type conversions.
- *
+ *
* 68719476736.eql?(68719476736.0) #=> false
*/
-VALUE
-rb_big_eql(VALUE x, VALUE y)
+static VALUE
+rb_big_eql(x, y)
+ VALUE x, y;
{
- if (!RB_BIGNUM_TYPE_P(y)) return Qfalse;
- if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y)) return Qfalse;
- if (BIGNUM_LEN(x) != BIGNUM_LEN(y)) return Qfalse;
- if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) != 0) return Qfalse;
+ if (TYPE(y) != T_BIGNUM) return Qfalse;
+ if (RBIGNUM(x)->sign != RBIGNUM(y)->sign) return Qfalse;
+ if (RBIGNUM(x)->len != RBIGNUM(y)->len) return Qfalse;
+ if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM(y)->len) != 0) return Qfalse;
return Qtrue;
}
/*
* call-seq:
- * -big -> integer
+ * -big => other_big
*
- * Unary minus (returns an integer whose value is 0-big)
+ * Unary minus (returns a new Bignum whose value is 0-big)
*/
-VALUE
-rb_big_uminus(VALUE x)
+static VALUE
+rb_big_uminus(x)
+ VALUE x;
{
VALUE z = rb_big_clone(x);
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
+ RBIGNUM(z)->sign = !RBIGNUM(x)->sign;
return bignorm(z);
}
/*
* call-seq:
- * ~big -> integer
+ * ~big => integer
*
* Inverts the bits in big. As Bignums are conceptually infinite
* length, the result acts as if it had an infinite number of one
* bits to the left. In hex representations, this is displayed
* as two periods to the left of the digits.
- *
+ *
* sprintf("%X", ~0x1122334455) #=> "..FEEDDCCBBAA"
*/
static VALUE
-rb_big_neg(VALUE x)
+rb_big_neg(x)
+ VALUE x;
{
VALUE z = rb_big_clone(x);
- BDIGIT *ds = BDIGITS(z);
- long n = BIGNUM_LEN(z);
+ long i;
+ BDIGIT *ds;
- if (!n) return INT2FIX(-1);
-
- if (BIGNUM_POSITIVE_P(z)) {
- if (bary_add_one(ds, n)) {
- big_extend_carry(z);
- }
- BIGNUM_SET_NEGATIVE_SIGN(z);
- }
- else {
- bary_neg(ds, n);
- if (bary_add_one(ds, n))
- return INT2FIX(-1);
- bary_neg(ds, n);
- BIGNUM_SET_POSITIVE_SIGN(z);
- }
+ if (!RBIGNUM(x)->sign) get2comp(z);
+ ds = BDIGITS(z);
+ i = RBIGNUM(x)->len;
+ if (!i) return INT2FIX(~0);
+ while (i--) ds[i] = ~ds[i];
+ RBIGNUM(z)->sign = !RBIGNUM(z)->sign;
+ if (RBIGNUM(x)->sign) get2comp(z);
return bignorm(z);
}
static VALUE
-bigsub(VALUE x, VALUE y)
-{
- VALUE z;
- BDIGIT *xds, *yds, *zds;
- long xn, yn, zn;
-
- xn = BIGNUM_LEN(x);
- yn = BIGNUM_LEN(y);
- zn = xn < yn ? yn : xn;
-
- z = bignew(zn, 1);
-
- xds = BDIGITS(x);
- yds = BDIGITS(y);
- zds = BDIGITS(z);
-
- if (bary_sub(zds, zn, xds, xn, yds, yn)) {
- bary_2comp(zds, zn);
- BIGNUM_SET_NEGATIVE_SIGN(z);
- }
-
- return z;
-}
-
-static VALUE bigadd_int(VALUE x, long y);
-
-static VALUE
-bigsub_int(VALUE x, long y0)
+bigsub(x, y)
+ VALUE x, y;
{
- VALUE z;
- BDIGIT *xds, *zds;
- long xn, zn;
+ VALUE z = 0;
+ BDIGIT *zds;
BDIGIT_DBL_SIGNED num;
- long i, y;
-
- y = y0;
- xds = BDIGITS(x);
- xn = BIGNUM_LEN(x);
-
- if (xn == 0)
- return LONG2NUM(-y0);
-
- zn = xn;
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
- z = bignew(zn, BIGNUM_SIGN(x));
- zds = BDIGITS(z);
-
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- assert(xn == zn);
- num = (BDIGIT_DBL_SIGNED)xds[0] - y;
- if (xn == 1 && num < 0) {
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
- zds[0] = (BDIGIT)-num;
- RB_GC_GUARD(x);
- return bignorm(z);
- }
- zds[0] = BIGLO(num);
- num = BIGDN(num);
- i = 1;
- if (i < xn)
- goto y_is_zero_x;
- goto finish;
-#else
- num = 0;
- for (i=0; i < xn; i++) {
- if (y == 0) goto y_is_zero_x;
- num += (BDIGIT_DBL_SIGNED)xds[i] - BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
- }
- for (; i < zn; i++) {
- if (y == 0) goto y_is_zero_z;
- num -= BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
- }
- goto finish;
-#endif
-
- for (; i < xn; i++) {
- y_is_zero_x:
- if (num == 0) goto num_is_zero_x;
- num += xds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- for (; i < zn; i++) {
- y_is_zero_z:
- if (num == 0) goto num_is_zero_z;
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- }
-#endif
- goto finish;
-
- for (; i < xn; i++) {
- num_is_zero_x:
- zds[i] = xds[i];
- }
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- for (; i < zn; i++) {
- num_is_zero_z:
- zds[i] = 0;
- }
-#endif
- goto finish;
-
- finish:
- assert(num == 0 || num == -1);
- if (num < 0) {
- get2comp(z);
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
+ long i = RBIGNUM(x)->len;
+
+ /* if x is larger than y, swap */
+ if (RBIGNUM(x)->len < RBIGNUM(y)->len) {
+ z = x; x = y; y = z; /* swap x y */
+ }
+ else if (RBIGNUM(x)->len == RBIGNUM(y)->len) {
+ while (i > 0) {
+ i--;
+ if (BDIGITS(x)[i] > BDIGITS(y)[i]) {
+ break;
+ }
+ if (BDIGITS(x)[i] < BDIGITS(y)[i]) {
+ z = x; x = y; y = z; /* swap x y */
+ break;
+ }
+ }
}
- RB_GC_GUARD(x);
- return bignorm(z);
-}
-static VALUE
-bigadd_int(VALUE x, long y)
-{
- VALUE z;
- BDIGIT *xds, *zds;
- long xn, zn;
- BDIGIT_DBL num;
- long i;
-
- xds = BDIGITS(x);
- xn = BIGNUM_LEN(x);
-
- if (xn == 0)
- return LONG2NUM(y);
-
- zn = xn;
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
- zn++;
-
- z = bignew(zn, BIGNUM_SIGN(x));
+ z = bignew(RBIGNUM(x)->len, z==0);
zds = BDIGITS(z);
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- num = (BDIGIT_DBL)xds[0] + y;
- zds[0] = BIGLO(num);
- num = BIGDN(num);
- i = 1;
- if (i < xn)
- goto y_is_zero_x;
- goto y_is_zero_z;
-#else
- num = 0;
- for (i=0; i < xn; i++) {
- if (y == 0) goto y_is_zero_x;
- num += (BDIGIT_DBL)xds[i] + BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
- }
- for (; i < zn; i++) {
- if (y == 0) goto y_is_zero_z;
- num += BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
- }
- goto finish;
-
-#endif
-
- for (;i < xn; i++) {
- y_is_zero_x:
- if (num == 0) goto num_is_zero_x;
- num += (BDIGIT_DBL)xds[i];
+ for (i = 0, num = 0; i < RBIGNUM(y)->len; i++) {
+ num += (BDIGIT_DBL_SIGNED)BDIGITS(x)[i] - BDIGITS(y)[i];
zds[i] = BIGLO(num);
num = BIGDN(num);
- }
- for (; i < zn; i++) {
- y_is_zero_z:
- if (num == 0) goto num_is_zero_z;
- zds[i] = BIGLO(num);
+ }
+ while (num && i < RBIGNUM(x)->len) {
+ num += BDIGITS(x)[i];
+ zds[i++] = BIGLO(num);
num = BIGDN(num);
}
- goto finish;
-
- for (;i < xn; i++) {
- num_is_zero_x:
- zds[i] = xds[i];
- }
- for (; i < zn; i++) {
- num_is_zero_z:
- zds[i] = 0;
+ while (i < RBIGNUM(x)->len) {
+ zds[i] = BDIGITS(x)[i];
+ i++;
}
- goto finish;
-
- finish:
- RB_GC_GUARD(x);
- return bignorm(z);
+
+ return z;
}
static VALUE
-bigadd(VALUE x, VALUE y, int sign)
+bigadd(x, y, sign)
+ VALUE x, y;
+ int sign;
{
VALUE z;
- size_t len;
+ BDIGIT_DBL num;
+ long i, len;
- sign = (sign == BIGNUM_SIGN(y));
- if (BIGNUM_SIGN(x) != sign) {
+ sign = (sign == RBIGNUM(y)->sign);
+ if (RBIGNUM(x)->sign != sign) {
if (sign) return bigsub(y, x);
return bigsub(x, y);
}
- if (BIGNUM_LEN(x) > BIGNUM_LEN(y)) {
- len = BIGNUM_LEN(x) + 1;
+ if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
+ len = RBIGNUM(x)->len + 1;
+ z = x; x = y; y = z;
}
else {
- len = BIGNUM_LEN(y) + 1;
+ len = RBIGNUM(y)->len + 1;
}
z = bignew(len, sign);
- bary_add(BDIGITS(z), BIGNUM_LEN(z),
- BDIGITS(x), BIGNUM_LEN(x),
- BDIGITS(y), BIGNUM_LEN(y));
+ len = RBIGNUM(x)->len;
+ for (i = 0, num = 0; i < len; i++) {
+ num += (BDIGIT_DBL)BDIGITS(x)[i] + BDIGITS(y)[i];
+ BDIGITS(z)[i] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ len = RBIGNUM(y)->len;
+ while (num && i < len) {
+ num += BDIGITS(y)[i];
+ BDIGITS(z)[i++] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ while (i < len) {
+ BDIGITS(z)[i] = BDIGITS(y)[i];
+ i++;
+ }
+ BDIGITS(z)[i] = (BDIGIT)num;
return z;
}
/*
* call-seq:
- * big + other -> Numeric
+ * big + other => Numeric
*
* Adds big and other, returning the result.
*/
VALUE
-rb_big_plus(VALUE x, VALUE y)
+rb_big_plus(x, y)
+ VALUE x, y;
{
- long n;
-
- if (FIXNUM_P(y)) {
- n = FIX2LONG(y);
- if ((n > 0) != BIGNUM_SIGN(x)) {
- if (n < 0) {
- n = -n;
- }
- return bigsub_int(x, n);
- }
- if (n < 0) {
- n = -n;
- }
- return bigadd_int(x, n);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ y = rb_int2big(FIX2LONG(y));
+ /* fall through */
+ case T_BIGNUM:
return bignorm(bigadd(x, y, 1));
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
- }
- else {
- return rb_num_coerce_bin(x, y, '+');
+
+ case T_FLOAT:
+ return rb_float_new(rb_big2dbl(x) + RFLOAT(y)->value);
+
+ default:
+ return rb_num_coerce_bin(x, y);
}
}
/*
* call-seq:
- * big - other -> Numeric
+ * big - other => Numeric
*
* Subtracts other from big, returning the result.
*/
VALUE
-rb_big_minus(VALUE x, VALUE y)
+rb_big_minus(x, y)
+ VALUE x, y;
{
- long n;
-
- if (FIXNUM_P(y)) {
- n = FIX2LONG(y);
- if ((n > 0) != BIGNUM_SIGN(x)) {
- if (n < 0) {
- n = -n;
- }
- return bigadd_int(x, n);
- }
- if (n < 0) {
- n = -n;
- }
- return bigsub_int(x, n);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ y = rb_int2big(FIX2LONG(y));
+ /* fall through */
+ case T_BIGNUM:
return bignorm(bigadd(x, y, 0));
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));
- }
- else {
- return rb_num_coerce_bin(x, y, '-');
- }
-}
-
-static VALUE
-bigsq(VALUE x)
-{
- long xn, zn;
- VALUE z;
- BDIGIT *xds, *zds;
-
- xn = BIGNUM_LEN(x);
- zn = 2 * xn;
- z = bignew(zn, 1);
+ case T_FLOAT:
+ return rb_float_new(rb_big2dbl(x) - RFLOAT(y)->value);
- xds = BDIGITS(x);
- zds = BDIGITS(z);
-
-#ifdef USE_GMP
- if (xn < GMP_MUL_DIGITS)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_mul(zds, zn, xds, xn, xds, xn);
-#else
- if (xn < KARATSUBA_MUL_DIGITS)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_mul(zds, zn, xds, xn, xds, xn);
-#endif
-
- RB_GC_GUARD(x);
- return z;
+ default:
+ return rb_num_coerce_bin(x, y);
+ }
}
-static VALUE
-bigmul0(VALUE x, VALUE y)
+VALUE
+rb_big_mul0(x, y)
+ VALUE x, y;
{
- long xn, yn, zn;
+ long i, j;
+ BDIGIT_DBL n = 0;
VALUE z;
- BDIGIT *xds, *yds, *zds;
+ BDIGIT *zds;
- if (x == y)
- return bigsq(x);
+ if (FIXNUM_P(x)) x = rb_int2big(FIX2LONG(x));
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ y = rb_int2big(FIX2LONG(y));
+ break;
- xn = BIGNUM_LEN(x);
- yn = BIGNUM_LEN(y);
- zn = xn + yn;
+ case T_BIGNUM:
+ break;
- z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
+ case T_FLOAT:
+ return rb_float_new(rb_big2dbl(x) * RFLOAT(y)->value);
- xds = BDIGITS(x);
- yds = BDIGITS(y);
- zds = BDIGITS(z);
+ default:
+ return rb_num_coerce_bin(x, y);
+ }
- bary_mul(zds, zn, xds, xn, yds, yn);
+ j = RBIGNUM(x)->len + RBIGNUM(y)->len + 1;
+ z = bignew(j, RBIGNUM(x)->sign==RBIGNUM(y)->sign);
+ zds = BDIGITS(z);
+ while (j--) zds[j] = 0;
+ for (i = 0; i < RBIGNUM(x)->len; i++) {
+ BDIGIT_DBL dd = BDIGITS(x)[i];
+ if (dd == 0) continue;
+ n = 0;
+ for (j = 0; j < RBIGNUM(y)->len; j++) {
+ BDIGIT_DBL ee = n + (BDIGIT_DBL)dd * BDIGITS(y)[j];
+ n = zds[i + j] + ee;
+ if (ee) zds[i + j] = BIGLO(n);
+ n = BIGDN(n);
+ }
+ if (n) {
+ zds[i + j] = n;
+ }
+ }
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
return z;
}
/*
* call-seq:
- * big * other -> Numeric
+ * big * other => Numeric
*
* Multiplies big and other, returning the result.
*/
VALUE
-rb_big_mul(VALUE x, VALUE y)
+rb_big_mul(x, y)
+ VALUE x, y;
{
- if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));
- }
- else {
- return rb_num_coerce_bin(x, y, '*');
- }
-
- return bignorm(bigmul0(x, y));
+ return bignorm(rb_big_mul0(x, y));
}
-static VALUE
-bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
-{
- long xn = BIGNUM_LEN(x), yn = BIGNUM_LEN(y);
- VALUE z;
- BDIGIT *xds, *yds, *zds;
- BDIGIT dd;
-
- VALUE q = Qnil, r = Qnil;
- BDIGIT *qds, *rds;
- long qn, rn;
+static void
+bigdivrem(x, y, divp, modp)
+ VALUE x, y;
+ VALUE *divp, *modp;
+{
+ long nx = RBIGNUM(x)->len, ny = RBIGNUM(y)->len;
+ long i, j;
+ VALUE yy, z;
+ BDIGIT *xds, *yds, *zds, *tds;
+ BDIGIT_DBL t2;
+ BDIGIT_DBL_SIGNED num;
+ BDIGIT dd, q;
+ if (BIGZEROP(y)) rb_num_zerodiv();
yds = BDIGITS(y);
- BARY_TRUNC(yds, yn);
- if (yn == 0)
- rb_num_zerodiv();
-
- xds = BDIGITS(x);
- BARY_TRUNC(xds, xn);
-
- if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1])) {
+ if (nx < ny || (nx == ny && BDIGITS(x)[nx - 1] < BDIGITS(y)[ny - 1])) {
if (divp) *divp = rb_int2big(0);
if (modp) *modp = x;
- return Qnil;
+ return;
}
- if (yn == 1) {
+ xds = BDIGITS(x);
+ if (ny == 1) {
dd = yds[0];
- z = bignew(xn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
+ z = rb_big_clone(x);
zds = BDIGITS(z);
- dd = bigdivrem_single(zds, xds, xn, dd);
+ t2 = 0; i = nx;
+ while (i--) {
+ t2 = BIGUP(t2) + zds[i];
+ zds[i] = (BDIGIT)(t2 / dd);
+ t2 %= dd;
+ }
+ RBIGNUM(z)->sign = RBIGNUM(x)->sign==RBIGNUM(y)->sign;
if (modp) {
- *modp = rb_uint2big((VALUE)dd);
- BIGNUM_SET_SIGN(*modp, BIGNUM_SIGN(x));
+ *modp = rb_uint2big((unsigned long)t2);
+ RBIGNUM(*modp)->sign = RBIGNUM(x)->sign;
}
if (divp) *divp = z;
- return Qnil;
- }
- if (xn == 2 && yn == 2) {
- BDIGIT_DBL x0 = bary2bdigitdbl(xds, 2);
- BDIGIT_DBL y0 = bary2bdigitdbl(yds, 2);
- BDIGIT_DBL q0 = x0 / y0;
- BDIGIT_DBL r0 = x0 % y0;
- if (divp) {
- z = bignew(bdigit_roomof(sizeof(BDIGIT_DBL)), BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- zds = BDIGITS(z);
- zds[0] = BIGLO(q0);
- zds[1] = BIGLO(BIGDN(q0));
- *divp = z;
- }
- if (modp) {
- z = bignew(bdigit_roomof(sizeof(BDIGIT_DBL)), BIGNUM_SIGN(x));
- zds = BDIGITS(z);
- zds[0] = BIGLO(r0);
- zds[1] = BIGLO(BIGDN(r0));
- *modp = z;
- }
- return Qnil;
- }
-
- if (divp) {
- qn = xn + BIGDIVREM_EXTRA_WORDS;
- q = bignew(qn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- qds = BDIGITS(q);
- }
- else {
- qn = 0;
- qds = NULL;
+ return;
}
+ z = bignew(nx==ny?nx+2:nx+1, RBIGNUM(x)->sign==RBIGNUM(y)->sign);
+ zds = BDIGITS(z);
+ if (nx==ny) zds[nx+1] = 0;
+ while (!yds[ny-1]) ny--;
- if (modp) {
- rn = yn;
- r = bignew(rn, BIGNUM_SIGN(x));
- rds = BDIGITS(r);
+ dd = 0;
+ q = yds[ny-1];
+ while ((q & (1<<(BITSPERDIG-1))) == 0) {
+ q <<= 1;
+ dd++;
+ }
+ if (dd) {
+ yy = rb_big_clone(y);
+ tds = BDIGITS(yy);
+ j = 0;
+ t2 = 0;
+ while (j<ny) {
+ t2 += (BDIGIT_DBL)yds[j]<<dd;
+ tds[j++] = BIGLO(t2);
+ t2 = BIGDN(t2);
+ }
+ yds = tds;
+ j = 0;
+ t2 = 0;
+ while (j<nx) {
+ t2 += (BDIGIT_DBL)xds[j]<<dd;
+ zds[j++] = BIGLO(t2);
+ t2 = BIGDN(t2);
+ }
+ zds[j] = (BDIGIT)t2;
}
else {
- rn = 0;
- rds = NULL;
+ zds[nx] = 0;
+ j = nx;
+ while (j--) zds[j] = xds[j];
}
- bary_divmod_branch(qds, qn, rds, rn, xds, xn, yds, yn);
-
- if (divp) {
- bigtrunc(q);
- *divp = q;
- }
- if (modp) {
- bigtrunc(r);
- *modp = r;
+ j = nx==ny?nx+1:nx;
+ do {
+ if (zds[j] == yds[ny-1]) q = BIGRAD-1;
+ else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);
+ if (q) {
+ i = 0; num = 0; t2 = 0;
+ do { /* multiply and subtract */
+ BDIGIT_DBL ee;
+ t2 += (BDIGIT_DBL)yds[i] * q;
+ ee = num - BIGLO(t2);
+ num = (BDIGIT_DBL)zds[j - ny + i] + ee;
+ if (ee) zds[j - ny + i] = BIGLO(num);
+ num = BIGDN(num);
+ t2 = BIGDN(t2);
+ } while (++i < ny);
+ num += zds[j - ny + i] - t2;/* borrow from high digit; don't update */
+ while (num) { /* "add back" required */
+ i = 0; num = 0; q--;
+ do {
+ BDIGIT_DBL ee = num + yds[i];
+ num = (BDIGIT_DBL)zds[j - ny + i] + ee;
+ if (ee) zds[j - ny + i] = BIGLO(num);
+ num = BIGDN(num);
+ } while (++i < ny);
+ num--;
+ }
+ }
+ zds[j] = q;
+ } while (--j >= ny);
+ if (divp) { /* move quotient down in z */
+ *divp = rb_big_clone(z);
+ zds = BDIGITS(*divp);
+ j = (nx==ny ? nx+2 : nx+1) - ny;
+ for (i = 0;i < j;i++) zds[i] = zds[i+ny];
+ RBIGNUM(*divp)->len = i;
+ }
+ if (modp) { /* normalize remainder */
+ *modp = rb_big_clone(z);
+ zds = BDIGITS(*modp);
+ while (--ny && !zds[ny]); ++ny;
+ if (dd) {
+ t2 = 0; i = ny;
+ while(i--) {
+ t2 = (t2 | zds[i]) >> dd;
+ q = zds[i];
+ zds[i] = BIGLO(t2);
+ t2 = BIGUP(q);
+ }
+ }
+ RBIGNUM(*modp)->len = ny;
+ RBIGNUM(*modp)->sign = RBIGNUM(x)->sign;
}
-
- return Qnil;
}
static void
-bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
+bigdivmod(x, y, divp, modp)
+ VALUE x, y;
+ VALUE *divp, *modp;
{
VALUE mod;
bigdivrem(x, y, divp, &mod);
- if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y) && !BIGZEROP(mod)) {
+ if (RBIGNUM(x)->sign != RBIGNUM(y)->sign && !BIGZEROP(mod)) {
if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);
if (modp) *modp = bigadd(mod, y, 1);
}
- else if (modp) {
- *modp = mod;
+ else {
+ if (divp) *divp = *divp;
+ if (modp) *modp = mod;
}
}
+/*
+ * call-seq:
+ * big / other => Numeric
+ * big.div(other) => Numeric
+ *
+ * Divides big by other, returning the result.
+ */
static VALUE
-rb_big_divide(VALUE x, VALUE y, ID op)
+rb_big_div(x, y)
+ VALUE x, y;
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- if (op == '/') {
- return DBL2NUM(rb_big2dbl(x) / RFLOAT_VALUE(y));
- }
- else {
- double dy = RFLOAT_VALUE(y);
- if (dy == 0.0) rb_num_zerodiv();
- return rb_dbl2big(rb_big2dbl(x) / dy);
- }
- }
- else {
- return rb_num_coerce_bin(x, y, op);
- }
- bigdivmod(x, y, &z, 0);
+ break;
- return bignorm(z);
-}
+ case T_BIGNUM:
+ break;
-/*
- * call-seq:
- * big / other -> Numeric
- *
- * Performs division: the class of the resulting object depends on
- * the class of <code>numeric</code> and on the magnitude of the
- * result.
- */
-
-VALUE
-rb_big_div(VALUE x, VALUE y)
-{
- return rb_big_divide(x, y, '/');
-}
+ case T_FLOAT:
+ return rb_float_new(rb_big2dbl(x) / RFLOAT(y)->value);
-/*
- * call-seq:
- * big.div(other) -> integer
- *
- * Performs integer division: returns integer value.
- */
+ default:
+ return rb_num_coerce_bin(x, y);
+ }
+ bigdivmod(x, y, &z, 0);
-VALUE
-rb_big_idiv(VALUE x, VALUE y)
-{
- return rb_big_divide(x, y, rb_intern("div"));
+ return bignorm(z);
}
/*
* call-seq:
- * big % other -> Numeric
- * big.modulo(other) -> Numeric
+ * big % other => Numeric
+ * big.modulo(other) => Numeric
*
* Returns big modulo other. See Numeric.divmod for more
* information.
*/
-VALUE
-rb_big_modulo(VALUE x, VALUE y)
+static VALUE
+rb_big_modulo(x, y)
+ VALUE x, y;
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, '%');
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ default:
+ return rb_num_coerce_bin(x, y);
}
bigdivmod(x, y, 0, &z);
@@ -6110,152 +1536,119 @@ rb_big_modulo(VALUE x, VALUE y)
/*
* call-seq:
- * big.remainder(numeric) -> number
- *
+ * big.remainder(numeric) => number
+ *
* Returns the remainder after dividing <i>big</i> by <i>numeric</i>.
- *
+ *
* -1234567890987654321.remainder(13731) #=> -6966
* -1234567890987654321.remainder(13731.24) #=> -9906.22531493148
*/
static VALUE
-rb_big_remainder(VALUE x, VALUE y)
+rb_big_remainder(x, y)
+ VALUE x, y;
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, rb_intern("remainder"));
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ default:
+ return rb_num_coerce_bin(x, y);
}
bigdivrem(x, y, 0, &z);
return bignorm(z);
}
+static VALUE big_lshift _((VALUE, unsigned long));
+static VALUE big_rshift _((VALUE, unsigned long));
+
+static VALUE big_shift(x, n)
+ VALUE x;
+ int n;
+{
+ if (n < 0)
+ return big_lshift(x, (unsigned int)n);
+ else if (n > 0)
+ return big_rshift(x, (unsigned int)n);
+ return x;
+}
+
/*
* call-seq:
- * big.divmod(numeric) -> array
- *
+ * big.divmod(numeric) => array
+ *
* See <code>Numeric#divmod</code>.
- *
+ *
*/
VALUE
-rb_big_divmod(VALUE x, VALUE y)
+rb_big_divmod(x, y)
+ VALUE x, y;
{
VALUE div, mod;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, rb_intern("divmod"));
- }
- bigdivmod(x, y, &div, &mod);
+ break;
- return rb_assoc_new(bignorm(div), bignorm(mod));
-}
+ case T_BIGNUM:
+ break;
-static VALUE
-big_shift(VALUE x, long n)
-{
- if (n < 0)
- return big_lshift(x, 1+(unsigned long)(-(n+1)));
- else if (n > 0)
- return big_rshift(x, (unsigned long)n);
- return x;
-}
-
-static VALUE
-big_fdiv(VALUE x, VALUE y, long ey)
-{
-#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)
- VALUE z;
- long l, ex;
-
- bigtrunc(x);
- l = BIGNUM_LEN(x);
- ex = l * BITSPERDIG - nlz(BDIGITS(x)[l-1]);
- ex -= 2 * DBL_BIGDIG * BITSPERDIG;
- if (ex) x = big_shift(x, ex);
-
- bigdivrem(x, y, &z, 0);
- l = ex - ey;
-#if SIZEOF_LONG > SIZEOF_INT
- {
- /* Visual C++ can't be here */
- if (l > INT_MAX) return DBL2NUM(INFINITY);
- if (l < INT_MIN) return DBL2NUM(0.0);
+ default:
+ return rb_num_coerce_bin(x, y);
}
-#endif
- return DBL2NUM(ldexp(big2dbl(z), (int)l));
-}
-
-static VALUE
-big_fdiv_int(VALUE x, VALUE y)
-{
- long l, ey;
- bigtrunc(y);
- l = BIGNUM_LEN(y);
- ey = l * BITSPERDIG - nlz(BDIGITS(y)[l-1]);
- ey -= DBL_BIGDIG * BITSPERDIG;
- if (ey) y = big_shift(y, ey);
- return big_fdiv(x, y, ey);
-}
+ bigdivmod(x, y, &div, &mod);
-static VALUE
-big_fdiv_float(VALUE x, VALUE y)
-{
- int i;
- y = dbl2big(ldexp(frexp(RFLOAT_VALUE(y), &i), DBL_MANT_DIG));
- return big_fdiv(x, y, i - DBL_MANT_DIG);
+ return rb_assoc_new(bignorm(div), bignorm(mod));
}
/*
* call-seq:
- * big.fdiv(numeric) -> float
- *
+ * big.quo(numeric) -> float
+ *
* Returns the floating point result of dividing <i>big</i> by
* <i>numeric</i>.
- *
- * -1234567890987654321.fdiv(13731) #=> -89910996357705.5
- * -1234567890987654321.fdiv(13731.24) #=> -89909424858035.7
- *
+ *
+ * -1234567890987654321.quo(13731) #=> -89910996357705.5
+ * -1234567890987654321.quo(13731.24) #=> -89909424858035.7
+ *
*/
-
-VALUE
-rb_big_fdiv(VALUE x, VALUE y)
+static VALUE
+rb_big_quo(x, y)
+ VALUE x, y;
{
- double dx, dy;
+ double dx = rb_big2dbl(x);
+ double dy;
- dx = big2dbl(x);
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
dy = (double)FIX2LONG(y);
- if (isinf(dx))
- return big_fdiv_int(x, rb_int2big(FIX2LONG(y)));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ break;
+
+ case T_BIGNUM:
dy = rb_big2dbl(y);
- if (isinf(dx) || isinf(dy))
- return big_fdiv_int(x, y);
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- dy = RFLOAT_VALUE(y);
- if (isnan(dy))
- return y;
- if (isinf(dx))
- return big_fdiv_float(x, y);
- }
- else {
- return rb_num_coerce_bin(x, y, rb_intern("fdiv"));
+ break;
+
+ case T_FLOAT:
+ dy = RFLOAT(y)->value;
+ break;
+
+ default:
+ return rb_num_coerce_bin(x, y);
}
- return DBL2NUM(dx / dy);
+ return rb_float_new(dx / dy);
}
/*
* call-seq:
- * big ** exponent -> numeric
+ * big ** exponent #=> numeric
*
* Raises _big_ to the _exponent_ power (which may be an integer, float,
* or anything that will coerce to a number). The result may be
@@ -6267,726 +1660,555 @@ rb_big_fdiv(VALUE x, VALUE y)
*/
VALUE
-rb_big_pow(VALUE x, VALUE y)
+rb_big_pow(x, y)
+ VALUE x, y;
{
double d;
- SIGNED_VALUE yy;
-
- again:
+ long yy;
+
if (y == INT2FIX(0)) return INT2FIX(1);
- if (RB_FLOAT_TYPE_P(y)) {
- d = RFLOAT_VALUE(y);
- if ((!BIGNUM_SIGN(x) && !BIGZEROP(x)) && d != round(d))
- return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- y = bignorm(y);
- if (FIXNUM_P(y))
- goto again;
+ switch (TYPE(y)) {
+ case T_FLOAT:
+ d = RFLOAT(y)->value;
+ break;
+
+ case T_BIGNUM:
rb_warn("in a**b, b may be too big");
d = rb_big2dbl(y);
- }
- else if (FIXNUM_P(y)) {
+ break;
+
+ case T_FIXNUM:
yy = FIX2LONG(y);
+ if (yy > 0) {
+ VALUE z = x;
+ const long BIGLEN_LIMIT = 1024*1024 / SIZEOF_BDIGITS;
- if (yy < 0)
- return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
- else {
- VALUE z = 0;
- SIGNED_VALUE mask;
- const size_t xbits = rb_absint_numwords(x, 1, NULL);
- const size_t BIGLEN_LIMIT = 32*1024*1024;
-
- if (xbits == (size_t)-1 ||
- (xbits > BIGLEN_LIMIT) ||
- (xbits * yy > BIGLEN_LIMIT)) {
+ if ((RBIGNUM(x)->len > BIGLEN_LIMIT) ||
+ (RBIGNUM(x)->len > BIGLEN_LIMIT / yy)) {
rb_warn("in a**b, b may be too big");
d = (double)yy;
+ break;
}
- else {
- for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
- if (z) z = bigsq(z);
- if (yy & mask) {
- z = z ? bigtrunc(bigmul0(z, x)) : x;
- }
+ for (;;) {
+ yy -= 1;
+ if (yy == 0) break;
+ while (yy % 2 == 0) {
+ yy /= 2;
+ x = rb_big_mul0(x, x);
+ bigtrunc(x);
}
- return bignorm(z);
+ z = rb_big_mul0(z, x);
+ bigtrunc(z);
}
+ return bignorm(z);
}
- }
- else {
- return rb_num_coerce_bin(x, y, rb_intern("**"));
- }
- return DBL2NUM(pow(rb_big2dbl(x), d));
-}
-
-static VALUE
-bigand_int(VALUE x, long xn, BDIGIT hibitsx, long y)
-{
- VALUE z;
- BDIGIT *xds, *zds;
- long zn;
- long i;
- BDIGIT hibitsy;
-
- if (y == 0) return INT2FIX(0);
- if (xn == 0) return hibitsx ? LONG2NUM(y) : 0;
- hibitsy = 0 <= y ? 0 : BDIGMAX;
- xds = BDIGITS(x);
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- if (!hibitsy) {
- y &= xds[0];
- return LONG2NUM(y);
- }
-#endif
-
- zn = xn;
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (hibitsx && zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
+ d = (double)yy;
+ break;
- z = bignew(zn, 0);
- zds = BDIGITS(z);
-
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- i = 1;
- zds[0] = xds[0] & BIGLO(y);
-#else
- for (i=0; i < xn; i++) {
- if (y == 0 || y == -1) break;
- zds[i] = xds[i] & BIGLO(y);
- y = BIGDN(y);
- }
- for (; i < zn; i++) {
- if (y == 0 || y == -1) break;
- zds[i] = hibitsx & BIGLO(y);
- y = BIGDN(y);
+ default:
+ return rb_num_coerce_bin(x, y);
}
-#endif
- for (;i < xn; i++) {
- zds[i] = xds[i] & hibitsy;
- }
- for (;i < zn; i++) {
- zds[i] = hibitsx & hibitsy;
- }
- twocomp2abs_bang(z, hibitsx && hibitsy);
- RB_GC_GUARD(x);
- return bignorm(z);
+ return rb_float_new(pow(rb_big2dbl(x), d));
}
/*
* call-seq:
- * big & numeric -> integer
+ * big & numeric => integer
*
* Performs bitwise +and+ between _big_ and _numeric_.
*/
VALUE
-rb_big_and(VALUE x, VALUE y)
+rb_big_and(xx, yy)
+ VALUE xx, yy;
{
- VALUE z;
+ volatile VALUE x, y, z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
-
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '&');
- }
+ long i, l1, l2;
+ char sign;
- hibitsx = abs2twocomp(&x, &xn);
+ x = xx;
+ y = rb_to_int(yy);
if (FIXNUM_P(y)) {
- return bigand_int(x, xn, hibitsx, FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
- hibitsy = abs2twocomp(&y, &yn);
- if (xn > yn) {
- tmpv = x; x = y; y = tmpv;
- tmpn = xn; xn = yn; yn = tmpn;
- tmph = hibitsx; hibitsx = hibitsy; hibitsy = tmph;
+ if (!RBIGNUM(y)->sign) {
+ y = rb_big_clone(y);
+ get2comp(y);
}
- n1 = xn;
- n2 = yn;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- hibits1 = hibitsx;
- hibits2 = hibitsy;
-
- if (!hibits1)
- n2 = n1;
-
- z = bignew(n2, 0);
- zds = BDIGITS(z);
-
- for (i=0; i<n1; i++) {
- zds[i] = ds1[i] & ds2[i];
+ if (!RBIGNUM(x)->sign) {
+ x = rb_big_clone(x);
+ get2comp(x);
}
- for (; i<n2; i++) {
- zds[i] = hibits1 & ds2[i];
+ if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
+ l1 = RBIGNUM(y)->len;
+ l2 = RBIGNUM(x)->len;
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM(y)->sign;
}
- twocomp2abs_bang(z, hibits1 && hibits2);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return bignorm(z);
-}
-
-static VALUE
-bigor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
-{
- VALUE z;
- BDIGIT *xds, *zds;
- long zn;
- long i;
- BDIGIT hibitsy;
-
- if (y == -1) return INT2FIX(-1);
- if (xn == 0) return hibitsx ? INT2FIX(-1) : LONG2FIX(y);
- hibitsy = 0 <= y ? 0 : BDIGMAX;
- xds = BDIGITS(x);
-
- zn = BIGNUM_LEN(x);
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
- z = bignew(zn, 0);
+ else {
+ l1 = RBIGNUM(x)->len;
+ l2 = RBIGNUM(y)->len;
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM(x)->sign;
+ }
+ z = bignew(l2, RBIGNUM(x)->sign || RBIGNUM(y)->sign);
zds = BDIGITS(z);
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- i = 1;
- zds[0] = xds[0] | BIGLO(y);
- if (i < zn)
- goto y_is_fixed_point;
- goto finish;
-#else
- for (i=0; i < xn; i++) {
- if (y == 0 || y == -1) goto y_is_fixed_point;
- zds[i] = xds[i] | BIGLO(y);
- y = BIGDN(y);
- }
- if (hibitsx)
- goto fill_hibits;
- for (; i < zn; i++) {
- if (y == 0 || y == -1) goto y_is_fixed_point;
- zds[i] = BIGLO(y);
- y = BIGDN(y);
- }
- goto finish;
-#endif
-
- y_is_fixed_point:
- if (hibitsy)
- goto fill_hibits;
- for (; i < xn; i++) {
- zds[i] = xds[i];
- }
- if (hibitsx)
- goto fill_hibits;
- for (; i < zn; i++) {
- zds[i] = 0;
+ for (i=0; i<l1; i++) {
+ zds[i] = ds1[i] & ds2[i];
}
- goto finish;
-
- fill_hibits:
- for (; i < zn; i++) {
- zds[i] = BDIGMAX;
+ for (; i<l2; i++) {
+ zds[i] = sign?0:ds2[i];
}
-
- finish:
- twocomp2abs_bang(z, hibitsx || hibitsy);
- RB_GC_GUARD(x);
+ if (!RBIGNUM(z)->sign) get2comp(z);
return bignorm(z);
}
/*
* call-seq:
- * big | numeric -> integer
+ * big | numeric => integer
*
* Performs bitwise +or+ between _big_ and _numeric_.
*/
VALUE
-rb_big_or(VALUE x, VALUE y)
+rb_big_or(xx, yy)
+ VALUE xx, yy;
{
- VALUE z;
+ volatile VALUE x, y, z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
-
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '|');
- }
+ long i, l1, l2;
+ char sign;
- hibitsx = abs2twocomp(&x, &xn);
+ x = xx;
+ y = rb_to_int(yy);
if (FIXNUM_P(y)) {
- return bigor_int(x, xn, hibitsx, FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
- hibitsy = abs2twocomp(&y, &yn);
- if (xn > yn) {
- tmpv = x; x = y; y = tmpv;
- tmpn = xn; xn = yn; yn = tmpn;
- tmph = hibitsx; hibitsx = hibitsy; hibitsy = tmph;
+ if (!RBIGNUM(y)->sign) {
+ y = rb_big_clone(y);
+ get2comp(y);
}
- n1 = xn;
- n2 = yn;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- hibits1 = hibitsx;
- hibits2 = hibitsy;
-
- if (hibits1)
- n2 = n1;
-
- z = bignew(n2, 0);
- zds = BDIGITS(z);
-
- for (i=0; i<n1; i++) {
- zds[i] = ds1[i] | ds2[i];
+ if (!RBIGNUM(x)->sign) {
+ x = rb_big_clone(x);
+ get2comp(x);
}
- for (; i<n2; i++) {
- zds[i] = hibits1 | ds2[i];
+ if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
+ l1 = RBIGNUM(y)->len;
+ l2 = RBIGNUM(x)->len;
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM(y)->sign;
}
- twocomp2abs_bang(z, hibits1 || hibits2);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
- return bignorm(z);
-}
-
-static VALUE
-bigxor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
-{
- VALUE z;
- BDIGIT *xds, *zds;
- long zn;
- long i;
- BDIGIT hibitsy;
-
- hibitsy = 0 <= y ? 0 : BDIGMAX;
- xds = BDIGITS(x);
- zn = BIGNUM_LEN(x);
-#if SIZEOF_BDIGIT < SIZEOF_LONG
- if (zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
- z = bignew(zn, 0);
+ else {
+ l1 = RBIGNUM(x)->len;
+ l2 = RBIGNUM(y)->len;
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM(x)->sign;
+ }
+ z = bignew(l2, RBIGNUM(x)->sign && RBIGNUM(y)->sign);
zds = BDIGITS(z);
-#if SIZEOF_BDIGIT >= SIZEOF_LONG
- i = 1;
- zds[0] = xds[0] ^ BIGLO(y);
-#else
- for (i = 0; i < xn; i++) {
- zds[i] = xds[i] ^ BIGLO(y);
- y = BIGDN(y);
- }
- for (; i < zn; i++) {
- zds[i] = hibitsx ^ BIGLO(y);
- y = BIGDN(y);
- }
-#endif
- for (; i < xn; i++) {
- zds[i] = xds[i] ^ hibitsy;
+ for (i=0; i<l1; i++) {
+ zds[i] = ds1[i] | ds2[i];
}
- for (; i < zn; i++) {
- zds[i] = hibitsx ^ hibitsy;
+ for (; i<l2; i++) {
+ zds[i] = sign?ds2[i]:(BIGRAD-1);
}
- twocomp2abs_bang(z, (hibitsx ^ hibitsy) != 0);
- RB_GC_GUARD(x);
+ if (!RBIGNUM(z)->sign) get2comp(z);
+
return bignorm(z);
}
+
/*
* call-seq:
- * big ^ numeric -> integer
+ * big ^ numeric => integer
*
* Performs bitwise +exclusive or+ between _big_ and _numeric_.
*/
VALUE
-rb_big_xor(VALUE x, VALUE y)
+rb_big_xor(xx, yy)
+ VALUE xx, yy;
{
+ volatile VALUE x, y;
VALUE z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
-
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '^');
- }
+ long i, l1, l2;
+ char sign;
- hibitsx = abs2twocomp(&x, &xn);
+ x = xx;
+ y = rb_to_int(yy);
if (FIXNUM_P(y)) {
- return bigxor_int(x, xn, hibitsx, FIX2LONG(y));
- }
- hibitsy = abs2twocomp(&y, &yn);
- if (xn > yn) {
- tmpv = x; x = y; y = tmpv;
- tmpn = xn; xn = yn; yn = tmpn;
- tmph = hibitsx; hibitsx = hibitsy; hibitsy = tmph;
- }
- n1 = xn;
- n2 = yn;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- hibits1 = hibitsx;
- hibits2 = hibitsy;
-
- z = bignew(n2, 0);
+ y = rb_int2big(FIX2LONG(y));
+ }
+ if (!RBIGNUM(y)->sign) {
+ y = rb_big_clone(y);
+ get2comp(y);
+ }
+ if (!RBIGNUM(x)->sign) {
+ x = rb_big_clone(x);
+ get2comp(x);
+ }
+ if (RBIGNUM(x)->len > RBIGNUM(y)->len) {
+ l1 = RBIGNUM(y)->len;
+ l2 = RBIGNUM(x)->len;
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM(y)->sign;
+ }
+ else {
+ l1 = RBIGNUM(x)->len;
+ l2 = RBIGNUM(y)->len;
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM(x)->sign;
+ }
+ RBIGNUM(x)->sign = RBIGNUM(x)->sign?1:0;
+ RBIGNUM(y)->sign = RBIGNUM(y)->sign?1:0;
+ z = bignew(l2, !(RBIGNUM(x)->sign ^ RBIGNUM(y)->sign));
zds = BDIGITS(z);
- for (i=0; i<n1; i++) {
+ for (i=0; i<l1; i++) {
zds[i] = ds1[i] ^ ds2[i];
}
- for (; i<n2; i++) {
- zds[i] = hibitsx ^ ds2[i];
+ for (; i<l2; i++) {
+ zds[i] = sign?ds2[i]:~ds2[i];
}
- twocomp2abs_bang(z, (hibits1 ^ hibits2) != 0);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
+ if (!RBIGNUM(z)->sign) get2comp(z);
+
return bignorm(z);
}
+static VALUE
+check_shiftdown(VALUE y, VALUE x)
+{
+ if (!RBIGNUM(x)->len) return INT2FIX(0);
+ if (RBIGNUM(y)->len > SIZEOF_LONG / SIZEOF_BDIGITS) {
+ return RBIGNUM(x)->sign ? INT2FIX(0) : INT2FIX(-1);
+ }
+ return Qnil;
+}
+
/*
* call-seq:
- * big << numeric -> integer
+ * big << numeric => integer
*
* Shifts big left _numeric_ positions (right if _numeric_ is negative).
*/
VALUE
-rb_big_lshift(VALUE x, VALUE y)
+rb_big_lshift(x, y)
+ VALUE x, y;
{
- int lshift_p;
- size_t shift_numdigits;
- int shift_numbits;
+ long shift;
+ int neg = 0;
for (;;) {
if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
- unsigned long shift;
- if (0 <= l) {
- lshift_p = 1;
- shift = l;
- }
- else {
- lshift_p = 0;
- shift = 1+(unsigned long)(-(l+1));
+ shift = FIX2LONG(y);
+ if (shift < 0) {
+ neg = 1;
+ shift = -shift;
}
- shift_numbits = (int)(shift & (BITSPERDIG-1));
- shift_numdigits = shift >> bit_length(BITSPERDIG-1);
- return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ break;
}
- else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(big_shift2(x, 1, y));
+ else if (TYPE(y) == T_BIGNUM) {
+ if (!RBIGNUM(y)->sign) {
+ VALUE t = check_shiftdown(y, x);
+ if (!NIL_P(t)) return t;
+ neg = 1;
+ }
+ shift = big2ulong(y, "long", Qtrue);
+ break;
}
y = rb_to_int(y);
}
+
+ if (neg) return big_rshift(x, shift);
+ return big_lshift(x, shift);
}
+static VALUE
+big_lshift(x, shift)
+ VALUE x;
+ unsigned long shift;
+{
+ BDIGIT *xds, *zds;
+ long s1 = shift/BITSPERDIG;
+ int s2 = shift%BITSPERDIG;
+ VALUE z;
+ BDIGIT_DBL num = 0;
+ long len, i;
+
+ len = RBIGNUM(x)->len;
+ z = bignew(len+s1+1, RBIGNUM(x)->sign);
+ zds = BDIGITS(z);
+ for (i=0; i<s1; i++) {
+ *zds++ = 0;
+ }
+ xds = BDIGITS(x);
+ for (i=0; i<len; i++) {
+ num = num | (BDIGIT_DBL)*xds++<<s2;
+ *zds++ = BIGLO(num);
+ num = BIGDN(num);
+ }
+ *zds = BIGLO(num);
+ return bignorm(z);
+}
/*
* call-seq:
- * big >> numeric -> integer
+ * big >> numeric => integer
*
* Shifts big right _numeric_ positions (left if _numeric_ is negative).
*/
VALUE
-rb_big_rshift(VALUE x, VALUE y)
+rb_big_rshift(x, y)
+ VALUE x, y;
{
- int lshift_p;
- size_t shift_numdigits;
- int shift_numbits;
+ long shift;
+ int neg = 0;
for (;;) {
if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
- unsigned long shift;
- if (0 <= l) {
- lshift_p = 0;
- shift = l;
- }
- else {
- lshift_p = 1;
- shift = 1+(unsigned long)(-(l+1));
+ shift = FIX2LONG(y);
+ if (shift < 0) {
+ neg = 1;
+ shift = -shift;
}
- shift_numbits = (int)(shift & (BITSPERDIG-1));
- shift_numdigits = shift >> bit_length(BITSPERDIG-1);
- return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ break;
}
- else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(big_shift2(x, 0, y));
+ else if (TYPE(y) == T_BIGNUM) {
+ if (RBIGNUM(y)->sign) {
+ VALUE t = check_shiftdown(y, x);
+ if (!NIL_P(t)) return t;
+ }
+ else {
+ neg = 1;
+ }
+ shift = big2ulong(y, "long", Qtrue);
+ break;
}
y = rb_to_int(y);
}
+
+ if (neg) return big_lshift(x, shift);
+ return big_rshift(x, shift);
+}
+
+static VALUE
+big_rshift(x, shift)
+ VALUE x;
+ unsigned long shift;
+{
+ BDIGIT *xds, *zds;
+ long s1 = shift/BITSPERDIG;
+ int s2 = shift%BITSPERDIG;
+ VALUE z;
+ BDIGIT_DBL num = 0;
+ long i, j;
+ volatile VALUE save_x;
+
+ if (s1 > RBIGNUM(x)->len) {
+ if (RBIGNUM(x)->sign)
+ return INT2FIX(0);
+ else
+ return INT2FIX(-1);
+ }
+ if (!RBIGNUM(x)->sign) {
+ save_x = x = rb_big_clone(x);
+ get2comp(x);
+ }
+ xds = BDIGITS(x);
+ i = RBIGNUM(x)->len; j = i - s1;
+ if (j == 0) {
+ if (RBIGNUM(x)->sign) return INT2FIX(0);
+ else return INT2FIX(-1);
+ }
+ z = bignew(j, RBIGNUM(x)->sign);
+ if (!RBIGNUM(x)->sign) {
+ num = ((BDIGIT_DBL)~0) << BITSPERDIG;
+ }
+ zds = BDIGITS(z);
+ while (i--, j--) {
+ num = (num | xds[i]) >> s2;
+ zds[j] = BIGLO(num);
+ num = BIGUP(xds[i]);
+ }
+ if (!RBIGNUM(x)->sign) {
+ get2comp(z);
+ }
+ return bignorm(z);
}
/*
* call-seq:
* big[n] -> 0, 1
- *
+ *
* Bit Reference---Returns the <em>n</em>th bit in the (assumed) binary
* representation of <i>big</i>, where <i>big</i>[0] is the least
* significant bit.
- *
+ *
* a = 9**15
* 50.downto(0) do |n|
* print a[n]
* end
- *
+ *
* <em>produces:</em>
- *
+ *
* 000101110110100000111000011110010100111100010111001
- *
+ *
*/
static VALUE
-rb_big_aref(VALUE x, VALUE y)
+rb_big_aref(x, y)
+ VALUE x, y;
{
BDIGIT *xds;
- size_t shift;
- size_t i, s1, s2;
- long l;
- BDIGIT bit;
+ BDIGIT_DBL num;
+ unsigned long shift;
+ long i, s1, s2;
- if (RB_BIGNUM_TYPE_P(y)) {
- if (!BIGNUM_SIGN(y))
+ if (TYPE(y) == T_BIGNUM) {
+ if (!RBIGNUM(y)->sign)
return INT2FIX(0);
- bigtrunc(y);
- if (BIGSIZE(y) > sizeof(size_t)) {
+ if (RBIGNUM(bigtrunc(y))->len > SIZEOF_LONG/SIZEOF_BDIGITS) {
out_of_range:
- return BIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
+ return RBIGNUM(x)->sign ? INT2FIX(0) : INT2FIX(1);
}
-#if SIZEOF_SIZE_T <= SIZEOF_LONG
- shift = big2ulong(y, "long");
-#else
- shift = big2ull(y, "long long");
-#endif
+ shift = big2ulong(y, "long", Qfalse);
}
else {
- l = NUM2LONG(y);
- if (l < 0) return INT2FIX(0);
- shift = (size_t)l;
+ i = NUM2LONG(y);
+ if (i < 0) return INT2FIX(0);
+ shift = (VALUE)i;
}
s1 = shift/BITSPERDIG;
s2 = shift%BITSPERDIG;
- bit = (BDIGIT)1 << s2;
- if (s1 >= BIGNUM_LEN(x)) goto out_of_range;
-
- xds = BDIGITS(x);
- if (BIGNUM_POSITIVE_P(x))
- return (xds[s1] & bit) ? INT2FIX(1) : INT2FIX(0);
- if (xds[s1] & (bit-1))
- return (xds[s1] & bit) ? INT2FIX(0) : INT2FIX(1);
- for (i = 0; i < s1; i++)
- if (xds[i])
- return (xds[s1] & bit) ? INT2FIX(0) : INT2FIX(1);
- return (xds[s1] & bit) ? INT2FIX(1) : INT2FIX(0);
+ if (s1 >= RBIGNUM(x)->len) goto out_of_range;
+ if (!RBIGNUM(x)->sign) {
+ xds = BDIGITS(x);
+ i = 0; num = 1;
+ while (num += ~xds[i], ++i <= s1) {
+ num = BIGDN(num);
+ }
+ }
+ else {
+ num = BDIGITS(x)[s1];
+ }
+ if (num & ((BDIGIT_DBL)1<<s2))
+ return INT2FIX(1);
+ return INT2FIX(0);
}
/*
* call-seq:
- * big.hash -> fixnum
+ * big.hash => fixnum
*
* Compute a hash based on the value of _big_.
- *
- * See also Object#hash.
*/
static VALUE
-rb_big_hash(VALUE x)
+rb_big_hash(x)
+ VALUE x;
{
- st_index_t hash;
+ long i, len, key;
+ BDIGIT *digits;
- hash = rb_memhash(BDIGITS(x), sizeof(BDIGIT)*BIGNUM_LEN(x)) ^ BIGNUM_SIGN(x);
- return INT2FIX(hash);
+ key = 0; digits = BDIGITS(x); len = RBIGNUM(x)->len;
+ for (i=0; i<len; i++) {
+ key ^= *digits++;
+ }
+ return LONG2FIX(key);
}
/*
- * call-seq:
- * big.coerce(numeric) -> array
- *
- * Returns an array with both a +numeric+ and a +big+ represented as Bignum
- * objects.
- *
- * This is achieved by converting +numeric+ to a Bignum.
- *
- * A TypeError is raised if the +numeric+ is not a Fixnum or Bignum type.
- *
- * (0x3FFFFFFFFFFFFFFF+1).coerce(42) #=> [42, 4611686018427387904]
+ * MISSING: documentation
*/
static VALUE
-rb_big_coerce(VALUE x, VALUE y)
+rb_big_coerce(x, y)
+ VALUE x, y;
{
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);
+ }
+ else if (TYPE(y) == T_BIGNUM) {
+ return rb_assoc_new(y, x);
}
- else if (!RB_BIGNUM_TYPE_P(y)) {
- rb_raise(rb_eTypeError, "can't coerce %"PRIsVALUE" to Bignum",
- rb_obj_class(y));
+ else {
+ rb_raise(rb_eTypeError, "can't coerce %s to Bignum",
+ rb_obj_classname(y));
}
- return rb_assoc_new(y, x);
+ /* not reached */
+ return Qnil;
}
/*
* call-seq:
* big.abs -> aBignum
- * big.magnitude -> aBignum
- *
+ *
* Returns the absolute value of <i>big</i>.
- *
+ *
* -1234567890987654321.abs #=> 1234567890987654321
*/
static VALUE
-rb_big_abs(VALUE x)
+rb_big_abs(x)
+ VALUE x;
{
- if (!BIGNUM_SIGN(x)) {
+ if (!RBIGNUM(x)->sign) {
x = rb_big_clone(x);
- BIGNUM_SET_SIGN(x, 1);
+ RBIGNUM(x)->sign = 1;
}
return x;
}
-/*
- * call-seq:
- * big.size -> integer
- *
- * Returns the number of bytes in the machine representation of
- * <i>big</i>.
- *
- * (256**10 - 1).size #=> 12
- * (256**20 - 1).size #=> 20
- * (256**40 - 1).size #=> 40
- */
-
-static VALUE
-rb_big_size(VALUE big)
-{
- return SIZET2NUM(BIGSIZE(big));
-}
-
-/*
- * call-seq:
- * int.bit_length -> integer
- *
- * Returns the number of bits of the value of <i>int</i>.
- *
- * "the number of bits" means that
- * the bit position of the highest bit which is different to the sign bit.
- * (The bit position of the bit 2**n is n+1.)
- * If there is no such bit (zero or minus one), zero is returned.
- *
- * I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
- *
- * (-2**10000-1).bit_length #=> 10001
- * (-2**10000).bit_length #=> 10000
- * (-2**10000+1).bit_length #=> 10000
- *
- * (-2**1000-1).bit_length #=> 1001
- * (-2**1000).bit_length #=> 1000
- * (-2**1000+1).bit_length #=> 1000
- *
- * (2**1000-1).bit_length #=> 1000
- * (2**1000).bit_length #=> 1001
- * (2**1000+1).bit_length #=> 1001
- *
- * (2**10000-1).bit_length #=> 10000
- * (2**10000).bit_length #=> 10001
- * (2**10000+1).bit_length #=> 10001
- *
- * This method can be used to detect overflow in Array#pack as follows.
- *
- * if n.bit_length < 32
- * [n].pack("l") # no overflow
- * else
- * raise "overflow"
- * end
- */
-
-static VALUE
-rb_big_bit_length(VALUE big)
+VALUE
+rb_big_rand(max, rand_buf)
+ VALUE max;
+ double *rand_buf;
{
- int nlz_bits;
- size_t numbytes;
-
- static const BDIGIT char_bit[1] = { CHAR_BIT };
- BDIGIT numbytes_bary[bdigit_roomof(sizeof(size_t))];
- BDIGIT nlz_bary[1];
- BDIGIT result_bary[bdigit_roomof(sizeof(size_t)+1)];
-
- numbytes = rb_absint_size(big, &nlz_bits);
+ VALUE v;
+ long len = RBIGNUM(max)->len;
- if (numbytes == 0)
- return LONG2FIX(0);
-
- if (BIGNUM_NEGATIVE_P(big) && rb_absint_singlebit_p(big)) {
- if (nlz_bits != CHAR_BIT-1) {
- nlz_bits++;
- }
- else {
- nlz_bits = 0;
- numbytes--;
- }
+ if (BIGZEROP(max)) {
+ return rb_float_new(rand_buf[0]);
}
-
- if (numbytes <= SIZE_MAX / CHAR_BIT) {
- return SIZET2NUM(numbytes * CHAR_BIT - nlz_bits);
+ v = bignew(len,1);
+ len--;
+ BDIGITS(v)[len] = BDIGITS(max)[len] * rand_buf[len];
+ while (len--) {
+ BDIGITS(v)[len] = ((BDIGIT)~0) * rand_buf[len];
}
- nlz_bary[0] = nlz_bits;
-
- bary_unpack(BARY_ARGS(numbytes_bary), &numbytes, 1, sizeof(numbytes), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- BARY_SHORT_MUL(result_bary, numbytes_bary, char_bit);
- BARY_SUB(result_bary, result_bary, nlz_bary);
-
- return rb_integer_unpack(result_bary, numberof(result_bary), sizeof(BDIGIT), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
-}
-
-/*
- * call-seq:
- * big.odd? -> true or false
- *
- * Returns <code>true</code> if <i>big</i> is an odd number.
- */
-
-static VALUE
-rb_big_odd_p(VALUE num)
-{
- if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
- return Qtrue;
- }
- return Qfalse;
+ return v;
}
/*
* call-seq:
- * big.even? -> true or false
- *
- * Returns <code>true</code> if <i>big</i> is an even number.
+ * big.size -> integer
+ *
+ * Returns the number of bytes in the machine representation of
+ * <i>big</i>.
+ *
+ * (256**10 - 1).size #=> 12
+ * (256**20 - 1).size #=> 20
+ * (256**40 - 1).size #=> 40
*/
static VALUE
-rb_big_even_p(VALUE num)
+rb_big_size(big)
+ VALUE big;
{
- if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
- return Qfalse;
- }
- return Qtrue;
+ return LONG2FIX(RBIGNUM(big)->len*SIZEOF_BDIGITS);
}
/*
@@ -6996,24 +2218,23 @@ rb_big_even_p(VALUE num)
* Fixnum. When a calculation involving
* Bignum objects returns a result that will fit in a
* Fixnum, the result is automatically converted.
- *
+ *
* For the purposes of the bitwise operations and <code>[]</code>, a
* Bignum is treated as if it were an infinite-length
* bitstring with 2's complement representation.
- *
+ *
* While Fixnum values are immediate, Bignum
* objects are not---assignment and parameter passing work with
* references to objects, not the objects themselves.
- *
+ *
*/
void
-Init_Bignum(void)
+Init_Bignum()
{
rb_cBignum = rb_define_class("Bignum", rb_cInteger);
rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1);
- rb_define_alias(rb_cBignum, "inspect", "to_s");
rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1);
rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0);
rb_define_method(rb_cBignum, "+", rb_big_plus, 1);
@@ -7021,11 +2242,11 @@ Init_Bignum(void)
rb_define_method(rb_cBignum, "*", rb_big_mul, 1);
rb_define_method(rb_cBignum, "/", rb_big_div, 1);
rb_define_method(rb_cBignum, "%", rb_big_modulo, 1);
- rb_define_method(rb_cBignum, "div", rb_big_idiv, 1);
+ rb_define_method(rb_cBignum, "div", rb_big_div, 1);
rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);
rb_define_method(rb_cBignum, "modulo", rb_big_modulo, 1);
rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
- rb_define_method(rb_cBignum, "fdiv", rb_big_fdiv, 1);
+ rb_define_method(rb_cBignum, "quo", rb_big_quo, 1);
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
rb_define_method(rb_cBignum, "&", rb_big_and, 1);
rb_define_method(rb_cBignum, "|", rb_big_or, 1);
@@ -7037,25 +2258,9 @@ Init_Bignum(void)
rb_define_method(rb_cBignum, "<=>", rb_big_cmp, 1);
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
- rb_define_method(rb_cBignum, ">", big_gt, 1);
- rb_define_method(rb_cBignum, ">=", big_ge, 1);
- rb_define_method(rb_cBignum, "<", big_lt, 1);
- rb_define_method(rb_cBignum, "<=", big_le, 1);
- rb_define_method(rb_cBignum, "===", rb_big_eq, 1);
rb_define_method(rb_cBignum, "eql?", rb_big_eql, 1);
rb_define_method(rb_cBignum, "hash", rb_big_hash, 0);
rb_define_method(rb_cBignum, "to_f", rb_big_to_f, 0);
rb_define_method(rb_cBignum, "abs", rb_big_abs, 0);
- rb_define_method(rb_cBignum, "magnitude", rb_big_abs, 0);
rb_define_method(rb_cBignum, "size", rb_big_size, 0);
- rb_define_method(rb_cBignum, "bit_length", rb_big_bit_length, 0);
- rb_define_method(rb_cBignum, "odd?", rb_big_odd_p, 0);
- rb_define_method(rb_cBignum, "even?", rb_big_even_p, 0);
-
-#ifdef USE_GMP
- /* The version of loaded GMP. */
- rb_define_const(rb_cBignum, "GMP_VERSION", rb_sprintf("GMP %s", gmp_version));
-#endif
-
- power_cache_init();
}
diff --git a/bin/erb b/bin/erb
index 6a88c3b26a..a6fcd5370c 100755
--- a/bin/erb
+++ b/bin/erb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
# Tiny eRuby --- ERB2
-# Copyright (c) 1999-2000,2002 Masatoshi SEKI
+# Copyright (c) 1999-2000,2002 Masatoshi SEKI
# You can redistribute it and/or modify it under the same terms as Ruby.
require 'erb'
@@ -11,32 +11,19 @@ class ERB
return nil if self.empty?
arg = self.shift
return nil if arg == '--'
- case arg
- when /\A-(.)(.*)/
- if $1 == '-'
- arg, @maybe_arg = arg.split(/=/, 2)
- return arg
- end
- raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T'
- if $2.size > 0
- self.unshift "-#{$2}"
- @maybe_arg = $2
- else
- @maybe_arg = nil
- end
+ if arg =~ /^-(.)(.*)/
+ return arg if $1 == '-'
+ raise 'unknown switch "-"' if $2.index('-')
+ self.unshift "-#{$2}" if $2.size > 0
"-#{$1}"
- when /\A(\w+)=/
- arg
else
self.unshift arg
nil
end
end
-
+
def ARGV.req_arg
- (@maybe_arg || self.shift || raise('missing argument')).tap {
- @maybe_arg = nil
- }
+ self.shift || raise('missing argument')
end
def trim_mode_opt(trim_mode, disable_percent)
@@ -57,7 +44,6 @@ class ERB
def run(factory=ERB)
trim_mode = 0
disable_percent = false
- variables = {}
begin
while switch = ARGV.switch
case switch
@@ -76,53 +62,56 @@ class ERB
require ARGV.req_arg
when '-S' # security level
arg = ARGV.req_arg
- raise "invalid safe_level #{arg.dump}" unless arg =~ /\A[0-1]\z/
+ raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-4]$/
safe_level = arg.to_i
when '-T' # trim mode
arg = ARGV.req_arg
if arg == '-'
- trim_mode = arg
+ trim_mode = arg
next
end
- raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
+ raise "invalid trim mode #{arg.dump}" unless arg =~ /^[0-2]$/
trim_mode = arg.to_i
- when '-E', '--encoding'
+ when '-K' # KCODE
arg = ARGV.req_arg
- set_encoding(*arg.split(/:/, 2))
- when '-U'
- set_encoding(Encoding::UTF_8, Encoding::UTF_8)
+ case arg.downcase
+ when 'e', '-e', 'euc'
+ $KCODE = 'EUC'
+ when 's', '-s', 'sjis'
+ $KCODE = 'SJIS'
+ when 'u', '-u', 'utf8'
+ $KCODE = 'UTF8'
+ when 'n', '-n', 'none'
+ $KCODE = 'NONE'
+ else
+ raise "invalid KCODE #{arg.dump}"
+ end
when '-P'
disable_percent = true
when '--help'
raise "print this help"
- when /\A-/
- raise "unknown switch #{switch.dump}"
else
- var, val = *switch.split('=', 2)
- (variables ||= {})[var] = val
+ raise "unknown switch #{switch.dump}"
end
end
rescue # usage
STDERR.puts $!.to_s
- STDERR.puts File.basename($0) +
- " [switches] [var=value...] [inputfile]"
+ STDERR.puts File.basename($0) +
+ " [switches] [inputfile]"
STDERR.puts <<EOU
-x print ruby script
-n print ruby script with line number
-v enable verbose mode
-d set $DEBUG to true
- -r library load a library
- -S safe_level set $SAFE (0..1)
- -E ex[:in] set default external/internal encodings
- -U set default encoding to UTF-8.
- -T trim_mode specify trim_mode (0..2, -)
+ -r [library] load a library
+ -K [kcode] specify KANJI code-set
+ -S [safe_level] set $SAFE (0..4)
+ -T [trim_mode] specify trim_mode (0..2, -)
-P ignore lines which start with "%"
- var=value set variable
EOU
exit 1
end
- $<.set_encoding(Encoding::ASCII_8BIT, nil)
src = $<.read
filename = $FILENAME
exit 2 unless src
@@ -131,38 +120,19 @@ EOU
erb.filename = filename
if output
if number
- erb.src.each_line.with_index do |line, l|
- puts "%3d %s"%[l+1, line]
+ l = 1
+ for line in erb.src
+ puts "%3d %s"%[l, line]
+ l += 1
end
else
puts erb.src
end
else
- bind = TOPLEVEL_BINDING.taint
- if variables
- enc = erb.encoding
- for var, val in variables do
- val = val.encode(enc) if val
- bind.local_variable_set(var, val)
- end
- end
- erb.run(bind)
+ erb.run(TOPLEVEL_BINDING.taint)
end
end
module_function :run
-
- def set_encoding(extern, intern = nil)
- verbose, $VERBOSE = $VERBOSE, nil
- Encoding.default_external = extern unless extern.nil? || extern == ""
- Encoding.default_internal = intern unless intern.nil? || intern == ""
- [$stdin, $stdout, $stderr].each do |io|
- io.set_encoding(extern, intern)
- end
- ensure
- $VERBOSE = verbose
- end
- module_function :set_encoding
- class << self; private :set_encoding; end
end
end
diff --git a/bin/gem b/bin/gem
deleted file mode 100755
index a4ec754abb..0000000000
--- a/bin/gem
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env ruby
-#--
-# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
-# All rights reserved.
-# See LICENSE.txt for permissions.
-#++
-
-require 'rubygems'
-require 'rubygems/gem_runner'
-require 'rubygems/exceptions'
-
-required_version = Gem::Requirement.new ">= 1.8.7"
-
-unless required_version.satisfied_by? Gem.ruby_version then
- abort "Expected Ruby Version #{required_version}, is #{Gem.ruby_version}"
-end
-
-args = ARGV.clone
-
-begin
- Gem::GemRunner.new.run args
-rescue Gem::SystemExitException => e
- exit e.exit_code
-end
-
diff --git a/bin/irb b/bin/irb
index c64ee85fbd..f277bc4b69 100755..100644
--- a/bin/irb
+++ b/bin/irb
@@ -1,11 +1,21 @@
#!/usr/bin/env ruby
#
-# irb.rb - interactive ruby
-# $Release Version: 0.9.6 $
+# irb.rb - intaractive ruby
+# $Release Version: 0.9.5 $
# $Revision$
+# $Date$
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
require "irb"
-IRB.start(__FILE__)
+if __FILE__ == $0
+ IRB.start(__FILE__)
+else
+ # check -e option
+ if /^-e$/ =~ $0
+ IRB.start(__FILE__)
+ else
+ IRB.setup(__FILE__)
+ end
+end
diff --git a/bin/rdoc b/bin/rdoc
index aaa23292df..fe619137fd 100755..100644
--- a/bin/rdoc
+++ b/bin/rdoc
@@ -5,40 +5,63 @@
#
# Copyright (c) 2003 Dave Thomas
# Released under the same terms as Ruby
+#
+# $Revision$
-begin
- gem 'rdoc'
-rescue NameError => e # --disable-gems
- raise unless e.name == :gem
-rescue Gem::LoadError
+## Transitional Hack ####
+#
+# RDoc was initially distributed independently, and installed
+# itself into <prefix>/lib/ruby/site_ruby/<ver>/rdoc...
+#
+# Now that RDoc is part of the distribution, it's installed into
+# <prefix>/lib/ruby/<ver>, which unfortunately appears later in the
+# search path. This means that if you have previously installed RDoc,
+# and then install from ruby-lang, you'll pick up the old one by
+# default. This hack checks for the condition, and readjusts the
+# search path if necessary.
+
+def adjust_for_existing_rdoc(path)
+
+ $stderr.puts %{
+ It seems as if you have a previously-installed RDoc in
+ the directory #{path}.
+
+ Because this is now out-of-date, you might want to consider
+ removing the directories:
+
+ #{File.join(path, "rdoc")}
+
+ and
+
+ #{File.join(path, "markup")}
+
+ }
+
+ # Move all the site_ruby directories to the end
+ p $:
+ $:.replace($:.partition {|path| /site_ruby/ !~ path}.flatten)
+ p $:
end
+$:.each do |path|
+ if /site_ruby/ =~ path
+ rdoc_path = File.join(path, 'rdoc', 'rdoc.rb')
+ if File.exists?(rdoc_path)
+ adjust_for_existing_rdoc(path)
+ break
+ end
+ end
+end
+
+## End of Transitional Hack ##
+
+
require 'rdoc/rdoc'
begin
r = RDoc::RDoc.new
- r.document ARGV
-rescue Errno::ENOSPC
- $stderr.puts 'Ran out of space creating documentation'
- $stderr.puts
- $stderr.puts 'Please free up some space and try again'
-rescue SystemExit
- raise
-rescue Exception => e
- if $DEBUG_RDOC then
- $stderr.puts e.message
- $stderr.puts "#{e.backtrace.join "\n\t"}"
- $stderr.puts
- elsif Interrupt === e then
- $stderr.puts
- $stderr.puts 'Interrupted'
- else
- $stderr.puts "uh-oh! RDoc had a problem:"
- $stderr.puts e.message
- $stderr.puts
- $stderr.puts "run with --debug for full backtrace"
- end
-
- exit 1
+ r.document(ARGV)
+rescue RDoc::RDocError => e
+ $stderr.puts e.message
+ exit(1)
end
-
diff --git a/bin/ri b/bin/ri
index 7fbed0c099..fb3e00eda3 100755
--- a/bin/ri
+++ b/bin/ri
@@ -1,12 +1,49 @@
#!/usr/bin/env ruby
+# usage:
+#
+# ri name...
+#
+# where name can be
+#
+# Class | Class::method | Class#method | Class.method | method
+#
+# All names may be abbreviated to their minimum unbiguous form. If a name
+# _is_ ambiguous, all valid options will be listed.
+#
+# The form '.' method matches either class or instance methods, while
+# #method matches only instance and ::method matches only class methods.
+#
+#
+# == Installing Documentation
+#
+# 'ri' uses a database of documentation built by the RDoc utility.
+#
+# So, how do you install this documentation on your system?
+# It depends on how you installed Ruby.
+#
+# <em>If you installed Ruby from source files</em> (that is, if it some point
+# you typed 'make' during the process :), you can install the RDoc
+# documentation yourself. Just go back to the place where you have
+# your Ruby source and type
+#
+# make install-doc
+#
+# You'll probably need to do this as a superuser, as the documentation
+# is installed in the Ruby target tree (normally somewhere under
+# <tt>/usr/local</tt>.
+#
+# <em>If you installed Ruby from a binary distribution</em> (perhaps
+# using a one-click installer, or using some other packaging system),
+# then the team that produced the package probably forgot to package
+# the documentation as well. Contact them, and see if they can add
+# it to the next release.
+#
-begin
- gem 'rdoc'
-rescue NameError => e # --disable-gems
- raise unless e.name == :gem
-rescue Gem::LoadError
-end
-require 'rdoc/ri/driver'
+require 'rdoc/ri/ri_driver'
+
+######################################################################
+
+ri = RiDriver.new
+ri.process_args
-RDoc::RI::Driver.run ARGV
diff --git a/bin/testrb b/bin/testrb
new file mode 100755
index 0000000000..ff49cb5466
--- /dev/null
+++ b/bin/testrb
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+require 'test/unit'
+(r = Test::Unit::AutoRunner.new(true)).process_args(ARGV) or
+ abort r.options.banner + " tests..."
+exit r.run
diff --git a/bootstraptest/pending.rb b/bootstraptest/pending.rb
deleted file mode 100644
index 744c0adac1..0000000000
--- a/bootstraptest/pending.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-assert_equal 'A', %q{
- class A
- @@a = 'A'
- def a=(x)
- @@a = x
- end
- def a
- @@a
- end
- end
-
- B = A.dup
- B.new.a = 'B'
- A.new.a
-}, '[ruby-core:17019]'
-
-assert_equal 'ok', %q{
- def m
- lambda{
- proc{
- return :ng1
- }
- }.call.call
- :ng2
- end
-
- begin
- m()
- rescue LocalJumpError
- :ok
- end
-}
-
-assert_normal_exit %q{
- r = Range.allocate
- def r.<=>(o) true end
- r.instance_eval { initialize r, r }
- r.inspect
-}
diff --git a/bootstraptest/runner.rb b/bootstraptest/runner.rb
deleted file mode 100755
index 5eb468a338..0000000000
--- a/bootstraptest/runner.rb
+++ /dev/null
@@ -1,511 +0,0 @@
-"exec" "${RUBY-ruby}" "-x" "$0" "$@" || true # -*- mode: ruby; coding: utf-8 -*-
-#!./ruby
-# $Id$
-
-# NOTE:
-# Never use optparse in this file.
-# Never use test/unit in this file.
-# Never use Ruby extensions in this file.
-
-begin
- require 'fileutils'
- require 'tmpdir'
-rescue LoadError
- $:.unshift File.join(File.dirname(__FILE__), '../lib')
- retry
-end
-
-if !Dir.respond_to?(:mktmpdir)
- # copied from lib/tmpdir.rb
- def Dir.mktmpdir(prefix_suffix=nil, tmpdir=nil)
- case prefix_suffix
- when nil
- prefix = "d"
- suffix = ""
- when String
- prefix = prefix_suffix
- suffix = ""
- when Array
- prefix = prefix_suffix[0]
- suffix = prefix_suffix[1]
- else
- raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
- end
- tmpdir ||= Dir.tmpdir
- t = Time.now.strftime("%Y%m%d")
- n = nil
- begin
- path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
- path << "-#{n}" if n
- path << suffix
- Dir.mkdir(path, 0700)
- rescue Errno::EEXIST
- n ||= 0
- n += 1
- retry
- end
-
- if block_given?
- begin
- yield path
- ensure
- FileUtils.remove_entry_secure path
- end
- else
- path
- end
- end
-end
-
-def main
- @ruby = File.expand_path('miniruby')
- @verbose = false
- $stress = false
- @color = nil
- @tty = nil
- @quiet = false
- dir = nil
- quiet = false
- tests = nil
- ARGV.delete_if {|arg|
- case arg
- when /\A--ruby=(.*)/
- @ruby = $1
- @ruby.gsub!(/^([^ ]*)/){File.expand_path($1)}
- @ruby.gsub!(/(\s+-I\s*)((?!(?:\.\/)*-(?:\s|\z))\S+)/){$1+File.expand_path($2)}
- @ruby.gsub!(/(\s+-r\s*)(\.\.?\/\S+)/){$1+File.expand_path($2)}
- true
- when /\A--sets=(.*)/
- tests = Dir.glob("#{File.dirname($0)}/test_{#{$1}}*.rb").sort
- puts tests.map {|path| File.basename(path) }.inspect
- true
- when /\A--dir=(.*)/
- dir = $1
- true
- when /\A(--stress|-s)/
- $stress = true
- when /\A--color(?:=(?:always|(auto)|(never)|(.*)))?\z/
- warn "unknown --color argument: #$3" if $3
- @color = $1 ? nil : !$2
- true
- when /\A--tty(=(?:yes|(no)|(.*)))?\z/
- warn "unknown --tty argument: #$3" if $3
- @tty = !$1 || !$2
- true
- when /\A(-q|--q(uiet))\z/
- quiet = true
- @quiet = true
- true
- when /\A(-v|--v(erbose))\z/
- @verbose = true
- when /\A(-h|--h(elp)?)\z/
- puts(<<-End)
-Usage: #{File.basename($0, '.*')} --ruby=PATH [--sets=NAME,NAME,...]
- --sets=NAME,NAME,... Name of test sets.
- --dir=DIRECTORY Working directory.
- default: /tmp/bootstraptestXXXXX.tmpwd
- --color[=WHEN] Colorize the output. WHEN defaults to 'always'
- or can be 'never' or 'auto'.
- -s, --stress stress test.
- -v, --verbose Output test name before exec.
- -q, --quiet Don\'t print header message.
- -h, --help Print this message and quit.
-End
- exit true
- when /\A-j/
- true
- else
- false
- end
- }
- if tests and not ARGV.empty?
- $stderr.puts "--tests and arguments are exclusive"
- exit false
- end
- tests ||= ARGV
- tests = Dir.glob("#{File.dirname($0)}/test_*.rb").sort if tests.empty?
- pathes = tests.map {|path| File.expand_path(path) }
-
- @progress = %w[- \\ | /]
- @progress_bs = "\b" * @progress[0].size
- @tty = $stderr.tty? if @tty.nil?
- case @color
- when nil
- @color = @tty && /dumb/ !~ ENV["TERM"]
- end
- @tty &&= !@verbose
- if @color
- # dircolors-like style
- colors = (colors = ENV['TEST_COLORS']) ? Hash[colors.scan(/(\w+)=([^:\n]*)/)] : {}
- begin
- File.read(File.join(__dir__, "../test/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c|
- colors[n] ||= c
- end
- rescue
- end
- @passed = "\e[;#{colors["pass"] || "32"}m"
- @failed = "\e[;#{colors["fail"] || "31"}m"
- @reset = "\e[m"
- else
- @passed = @failed = @reset = ""
- end
- unless quiet
- puts Time.now
- if defined?(RUBY_DESCRIPTION)
- puts "Driver is #{RUBY_DESCRIPTION}"
- elsif defined?(RUBY_PATCHLEVEL)
- puts "Driver is ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}#{RUBY_PLATFORM}) [#{RUBY_PLATFORM}]"
- else
- puts "Driver is ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
- end
- puts "Target is #{`#{@ruby} -v`.chomp}"
- puts
- $stdout.flush
- end
-
- in_temporary_working_directory(dir) {
- exec_test pathes
- }
-end
-
-def erase(e = true)
- if e and @columns > 0 and !@verbose
- "\r#{" "*@columns}\r"
- else
- ""
- end
-end
-
-def exec_test(pathes)
- @count = 0
- @error = 0
- @errbuf = []
- @location = nil
- @columns = 0
- @width = pathes.map {|path| File.basename(path).size}.max + 2
- pathes.each do |path|
- @basename = File.basename(path)
- $stderr.printf("%s%-*s ", erase(@quiet), @width, @basename)
- $stderr.flush
- @columns = @width + 1
- $stderr.puts if @verbose
- count = @count
- error = @error
- load File.expand_path(path)
- if @tty
- if @error == error
- msg = "PASS #{@count-count}"
- @columns += msg.size - 1
- $stderr.print "#{@progress_bs}#{@passed}#{msg}#{@reset}"
- else
- msg = "FAIL #{@error-error}/#{@count-count}"
- $stderr.print "#{@progress_bs}#{@failed}#{msg}#{@reset}"
- @columns = 0
- end
- end
- $stderr.puts unless @quiet and @tty and @error == error
- end
- $stderr.print(erase) if @quiet
- if @error == 0
- if @count == 0
- $stderr.puts "No tests, no problem"
- else
- $stderr.puts "#{@passed}PASS#{@reset} all #{@count} tests"
- end
- exit true
- else
- @errbuf.each do |msg|
- $stderr.puts msg
- end
- $stderr.puts "#{@failed}FAIL#{@reset} #{@error}/#{@count} tests failed"
- exit false
- end
-end
-
-def show_progress(message = '')
- if @verbose
- $stderr.print "\##{@count} #{@location} "
- elsif @tty
- $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
- end
- t = Time.now if @verbose
- faildesc, errout = with_stderr {yield}
- t = Time.now - t if @verbose
- if !faildesc
- if @tty
- $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
- elsif @verbose
- $stderr.printf(". %.3f\n", t)
- else
- $stderr.print '.'
- end
- else
- $stderr.print "#{@failed}F"
- $stderr.printf(" %.3f", t) if @verbose
- $stderr.print "#{@reset}"
- $stderr.puts if @verbose
- error faildesc, message
- unless errout.empty?
- $stderr.print "#{@failed}stderr output is not empty#{@reset}\n", adjust_indent(errout)
- end
- if @tty and !@verbose
- $stderr.printf("%-*s%s", @width, @basename, @progress[@count % @progress.size])
- end
- end
-rescue Interrupt
- raise Interrupt
-rescue Exception => err
- $stderr.print 'E'
- $stderr.puts if @verbose
- error err.message, message
-end
-
-# NativeClient is special. The binary is cross-compiled. But runs on the build environment.
-# So RUBY_PLATFORM in this process is not useful to detect it.
-def nacl?
- @ruby and File.basename(@ruby.split(/\s/).first)['sel_ldr']
-end
-
-def assert_check(testsrc, message = '', opt = '')
- show_progress(message) {
- result = get_result_string(testsrc, opt)
- check_coredump
- yield(result)
- }
-end
-
-def assert_equal(expected, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if expected == result
- nil
- else
- desc = "#{result.inspect} (expected #{expected.inspect})"
- pretty(testsrc, desc, result)
- end
- }
-end
-
-def assert_match(expected_pattern, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if expected_pattern =~ result
- nil
- else
- desc = "#{expected_pattern.inspect} expected to be =~\n#{result.inspect}"
- pretty(testsrc, desc, result)
- end
- }
-end
-
-def assert_not_match(unexpected_pattern, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if unexpected_pattern !~ result
- nil
- else
- desc = "#{unexpected_pattern.inspect} expected to be !~\n#{result.inspect}"
- pretty(testsrc, desc, result)
- end
- }
-end
-
-def assert_valid_syntax(testsrc, message = '')
- newtest
- assert_check(testsrc, message, '-c') {|result|
- result if /Syntax OK/ !~ result
- }
-end
-
-def assert_normal_exit(testsrc, *rest)
- newtest
- opt = {}
- opt = rest.pop if Hash === rest.last
- message, ignore_signals = rest
- message ||= ''
- timeout = opt[:timeout]
- show_progress(message) {
- faildesc = nil
- filename = make_srcfile(testsrc)
- old_stderr = $stderr.dup
- timeout_signaled = false
- begin
- $stderr.reopen("assert_normal_exit.log", "w")
- io = IO.popen("#{@ruby} -W0 #{filename}")
- pid = io.pid
- th = Thread.new {
- io.read
- io.close
- $?
- }
- if !th.join(timeout)
- Process.kill :KILL, pid
- timeout_signaled = true
- end
- status = th.value
- ensure
- $stderr.reopen(old_stderr)
- old_stderr.close
- end
- if status&.signaled?
- signo = status.termsig
- signame = Signal.list.invert[signo]
- unless ignore_signals and ignore_signals.include?(signame)
- sigdesc = "signal #{signo}"
- if signame
- sigdesc = "SIG#{signame} (#{sigdesc})"
- end
- if timeout_signaled
- sigdesc << " (timeout)"
- end
- faildesc = pretty(testsrc, "killed by #{sigdesc}", nil)
- stderr_log = File.read("assert_normal_exit.log")
- if !stderr_log.empty?
- faildesc << "\n" if /\n\z/ !~ faildesc
- stderr_log << "\n" if /\n\z/ !~ stderr_log
- stderr_log.gsub!(/^.*\n/) { '| ' + $& }
- faildesc << stderr_log
- end
- end
- end
- faildesc
- }
-end
-
-def assert_finish(timeout_seconds, testsrc, message = '')
- newtest
- show_progress(message) {
- faildesc = nil
- filename = make_srcfile(testsrc)
- io = IO.popen("#{@ruby} -W0 #{filename}")
- pid = io.pid
- waited = false
- tlimit = Time.now + timeout_seconds
- while Time.now < tlimit
- if Process.waitpid pid, Process::WNOHANG
- waited = true
- break
- end
- sleep 0.1
- end
- if !waited
- Process.kill(:KILL, pid)
- Process.waitpid pid
- faildesc = pretty(testsrc, "not finished in #{timeout_seconds} seconds", nil)
- end
- io.close
- faildesc
- }
-end
-
-def flunk(message = '')
- newtest
- show_progress('') { message }
-end
-
-def pretty(src, desc, result)
- src = src.sub(/\A.*\n/, '')
- (/\n/ =~ src ? "\n#{adjust_indent(src)}" : src) + " #=> #{desc}"
-end
-
-INDENT = 27
-
-def adjust_indent(src)
- untabify(src).gsub(/^ {#{INDENT}}/o, '').gsub(/^/, ' ').sub(/\s*\z/, "\n")
-end
-
-def untabify(str)
- str.gsub(/^\t+/) {' ' * (8 * $&.size) }
-end
-
-def make_srcfile(src)
- filename = 'bootstraptest.tmp.rb'
- File.open(filename, 'w') {|f|
- f.puts "GC.stress = true" if $stress
- f.puts "print(begin; #{src}; end)"
- }
- filename
-end
-
-def get_result_string(src, opt = '')
- if @ruby
- filename = make_srcfile(src)
- begin
- `#{@ruby} -W0 #{opt} #{filename}`
- ensure
- raise Interrupt if $? and $?.signaled? && $?.termsig == Signal.list["INT"]
- raise CoreDumpError, "core dumped" if $? and $?.coredump?
- end
- else
- eval(src).to_s
- end
-end
-
-def with_stderr
- out = err = nil
- begin
- r, w = IO.pipe
- stderr = $stderr.dup
- $stderr.reopen(w)
- w.close
- reader = Thread.start {r.read}
- begin
- out = yield
- ensure
- $stderr.reopen(stderr)
- err = reader.value
- end
- ensure
- w.close rescue nil
- r.close rescue nil
- end
- return out, err
-end
-
-def newtest
- @location = File.basename(caller(2).first)
- @count += 1
- cleanup_coredump
-end
-
-def error(msg, additional_message)
- msg = "#{@failed}\##{@count} #{@location}#{@reset}: #{msg} #{additional_message}"
- if @tty
- $stderr.puts "#{erase}#{msg}"
- else
- @errbuf.push msg
- end
- @error += 1
-end
-
-def in_temporary_working_directory(dir)
- if dir
- Dir.mkdir dir
- Dir.chdir(dir) {
- yield
- }
- else
- Dir.mktmpdir(["bootstraptest", ".tmpwd"]) {|d|
- Dir.chdir(d) {
- yield
- }
- }
- end
-end
-
-def cleanup_coredump
- FileUtils.rm_f 'core'
- FileUtils.rm_f Dir.glob('core.*')
- FileUtils.rm_f @ruby+'.stackdump' if @ruby
-end
-
-class CoreDumpError < StandardError; end
-
-def check_coredump
- if File.file?('core') or not Dir.glob('core.*').empty? or
- (@ruby and File.exist?(@ruby+'.stackdump'))
- raise CoreDumpError, "core dumped"
- end
-end
-
-main
diff --git a/bootstraptest/test_attr.rb b/bootstraptest/test_attr.rb
deleted file mode 100644
index 721a847145..0000000000
--- a/bootstraptest/test_attr.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-assert_equal 'ok', %q{
- module M
- class A
- class << self
- attr_accessor :at
- def workflow_rule
- yield self
- end
-
- def eval_str(str)
- eval(str)
- end
- end
- end
- end
- begin
- M::A.eval_str(<<-END)
- workflow_rule do |r|
- r.at 1
- end
- END
- rescue ArgumentError => e
- print "ok"
- end
-}, '[ruby-core:14641]'
-
-assert_equal %{ok}, %{
- class A
- attr :m
- end
- begin
- A.new.m(3)
- rescue ArgumentError => e
- print "ok"
- end
-}, '[ruby-core:15120]'
diff --git a/bootstraptest/test_autoload.rb b/bootstraptest/test_autoload.rb
deleted file mode 100644
index a9f8e6dacd..0000000000
--- a/bootstraptest/test_autoload.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-assert_equal 'ok', %q{
- File.unlink('zzz.rb') if File.file?('zzz.rb')
- instance_eval do
- autoload :ZZZ, './zzz.rb'
- begin
- ZZZ
- rescue LoadError
- :ok
- end
- end
-}, '[ruby-dev:43816]'
-
-assert_equal 'ok', %q{
- open('zzz.rb', 'w') {|f| f.puts '' }
- instance_eval do
- autoload :ZZZ, './zzz.rb'
- begin
- ZZZ
- rescue NameError
- :ok
- end
- end
-}, '[ruby-dev:43816]'
-
-assert_equal 'ok', %q{
- open('zzz.rb', 'w') {|f| f.puts 'class ZZZ; def self.ok;:ok;end;end'}
- instance_eval do
- autoload :ZZZ, './zzz.rb'
- ZZZ.ok
- end
-}, '[ruby-dev:43816]'
-
-assert_equal 'ok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
- ZZZ.ok
-}
-
-assert_equal 'ok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
- require "./zzz.rb"
- ZZZ.ok
-}
-
-assert_equal 'okok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
- t1 = Thread.new {ZZZ.ok}
- t2 = Thread.new {ZZZ.ok}
- [t1.value, t2.value].join
-}
-
-assert_finish 5, %q{
- autoload :ZZZ, File.expand_path(__FILE__)
- begin
- ZZZ
- rescue NameError
- end
-}, '[ruby-core:21696]'
-
-assert_equal 'A::C', %q{
- open("zzz.rb", "w") {}
- class A
- autoload :C, "./zzz"
- class C
- end
- C
- end
-}
diff --git a/bootstraptest/test_block.rb b/bootstraptest/test_block.rb
deleted file mode 100644
index cdc5960a59..0000000000
--- a/bootstraptest/test_block.rb
+++ /dev/null
@@ -1,613 +0,0 @@
-assert_equal %q{1}, %q{
- 1.times{
- begin
- a = 1
- ensure
- foo = nil
- end
- }
-}
-assert_equal %q{2}, %q{
- [1,2,3].find{|x| x == 2}
-}
-assert_equal %q{2}, %q{
- class E
- include Enumerable
- def each(&block)
- [1, 2, 3].each(&block)
- end
- end
- E.new.find {|x| x == 2 }
-}
-assert_equal %q{6}, %q{
- sum = 0
- for x in [1, 2, 3]
- sum += x
- end
- sum
-}
-assert_equal %q{15}, %q{
- sum = 0
- for x in (1..5)
- sum += x
- end
- sum
-}
-assert_equal %q{0}, %q{
- sum = 0
- for x in []
- sum += x
- end
- sum
-}
-assert_equal %q{1}, %q{
- ans = []
- 1.times{
- for n in 1..3
- a = n
- ans << a
- end
- }
-}
-assert_equal %q{1..3}, %q{
- ans = []
- for m in 1..3
- for n in 1..3
- a = [m, n]
- ans << a
- end
- end
-}
-assert_equal %q{[1, 2, 3]}, %q{
- (1..3).to_a
-}
-assert_equal %q{[4, 8, 12]}, %q{
- (1..3).map{|e|
- e * 4
- }
-}
-assert_equal %q{[1, 2, 3]}, %q{
- class C
- include Enumerable
- def each
- [1,2,3].each{|e|
- yield e
- }
- end
- end
-
- C.new.to_a
-}
-assert_equal %q{[4, 5, 6]}, %q{
- class C
- include Enumerable
- def each
- [1,2,3].each{|e|
- yield e
- }
- end
- end
-
- C.new.map{|e|
- e + 3
- }
-}
-assert_equal %q{100}, %q{
- def m
- yield
- end
- def n
- yield
- end
-
- m{
- n{
- 100
- }
- }
-}
-assert_equal %q{20}, %q{
- def m
- yield 1
- end
-
- m{|ib|
- m{|jb|
- i = 20
- }
- }
-}
-assert_equal %q{2}, %q{
- def m
- yield 1
- end
-
- m{|ib|
- m{|jb|
- ib = 20
- kb = 2
- }
- }
-}
-assert_equal %q{3}, %q{
- def iter1
- iter2{
- yield
- }
- end
-
- def iter2
- yield
- end
-
- iter1{
- jb = 2
- iter1{
- jb = 3
- }
- jb
- }
-}
-assert_equal %q{2}, %q{
- def iter1
- iter2{
- yield
- }
- end
-
- def iter2
- yield
- end
-
- iter1{
- jb = 2
- iter1{
- jb
- }
- jb
- }
-}
-assert_equal %q{2}, %q{
- def m
- yield 1
- end
- m{|ib|
- ib*2
- }
-}
-assert_equal %q{92580}, %q{
- def m
- yield 12345, 67890
- end
- m{|ib,jb|
- ib*2+jb
- }
-}
-assert_equal %q{[10, nil]}, %q{
- def iter
- yield 10
- end
-
- a = nil
- [iter{|a|
- a
- }, a]
-}
-assert_equal %q{21}, %q{
- def iter
- yield 10
- end
-
- iter{|a|
- iter{|a|
- a + 1
- } + a
- }
-}
-assert_equal %q{[10, 20, 30, 40, nil, nil, nil, nil]}, %q{
- def iter
- yield 10, 20, 30, 40
- end
-
- a = b = c = d = nil
- iter{|a, b, c, d|
- [a, b, c, d]
- } + [a, b, c, d]
-}
-assert_equal %q{[10, 20, 30, 40, nil, nil]}, %q{
- def iter
- yield 10, 20, 30, 40
- end
-
- a = b = nil
- iter{|a, b, c, d|
- [a, b, c, d]
- } + [a, b]
-}
-assert_equal %q{[1]}, %q{
- $a = []
-
- def iter
- yield 1
- end
-
- def m
- x = iter{|x|
- $a << x
- y = 0
- }
- end
- m
- $a
-}
-assert_equal %q{[1, [2]]}, %q{
- def iter
- yield 1, 2
- end
-
- iter{|a, *b|
- [a, b]
- }
-}
-assert_equal %q{[[1, 2]]}, %q{
- def iter
- yield 1, 2
- end
-
- iter{|*a|
- [a]
- }
-}
-assert_equal %q{[1, 2, []]}, %q{
- def iter
- yield 1, 2
- end
-
- iter{|a, b, *c|
- [a, b, c]
- }
-}
-assert_equal %q{[1, 2, nil, []]}, %q{
- def iter
- yield 1, 2
- end
-
- iter{|a, b, c, *d|
- [a, b, c, d]
- }
-}
-assert_equal %q{1}, %q{
- def m
- yield
- end
- m{
- 1
- }
-}
-assert_equal %q{15129}, %q{
- def m
- yield 123
- end
- m{|ib|
- m{|jb|
- ib*jb
- }
- }
-}
-assert_equal %q{2}, %q{
- def m a
- yield a
- end
- m(1){|ib|
- m(2){|jb|
- ib*jb
- }
- }
-}
-assert_equal %q{9}, %q{
- sum = 0
- 3.times{|ib|
- 2.times{|jb|
- sum += ib + jb
- }}
- sum
-}
-assert_equal %q{10}, %q{
- 3.times{|bl|
- break 10
- }
-}
-assert_equal %q{[1, 2]}, %q{
- def iter
- yield 1,2,3
- end
-
- iter{|i, j|
- [i, j]
- }
-}
-assert_equal %q{[1, nil]}, %q{
- def iter
- yield 1
- end
-
- iter{|i, j|
- [i, j]
- }
-}
-
-assert_equal '0', %q{
-def m()
-end
-m {|(v0,*,(*)),|}
-m {|(*v0,(*)),|}
-m {|(v0,*v1,(*)),|}
-m {|((v0,*v1,v2)),|}
-m {|(v0,*v1,v2),|}
-m {|(v0,*v1,(v2)),|}
-m {|((*),*v0,v1),|}
-m {|((v0),*v1,v2),|}
-m {|(v0,v1,*v2,v3),|}
-m {|v0,(v1,*v2,v3),|}
-m {|(v0,*v1,v2),v3,|}
-m {|(v0,*v1,v2)|}
-m {|(v0,*v1,v2),&v3|}
-m {|(v0,*v1,v2),*|}
-m {|(v0,*v1,v2),*,&v3|}
-m {|*,(v0,*v1,v2)|}
-m {|*,(v0,*v1,v2),&v3|}
-m {|v0,*,(v1,*v2,v3)|}
-m {|v0,*,(v1,*v2,v3),&v4|}
-m {|(v0,*v1,v2),*,v3|}
-m {|(v0,*v1,v2),*,v3,&v4|}
-m {|(v0, *v1, v2)|}
-m {|(*,v)|}
-0
-}, "block parameter (shouldn't SEGV: [ruby-dev:31143])"
-
-assert_equal 'nil', %q{
- def m
- yield
- end
- m{|&b| b}.inspect
-}, '[ruby-dev:31147]'
-
-assert_equal 'nil', %q{
- def m()
- yield
- end
- m {|(v,(*))|}.inspect
-}, '[ruby-dev:31160]'
-
-assert_equal 'nil', %q{
- def m()
- yield
- end
- m {|(*,a,b)|}.inspect
-}, '[ruby-dev:31153]'
-
-assert_equal 'nil', %q{
- def m()
- yield
- end
- m {|((*))|}.inspect
-}
-
-assert_equal %q{[1, 1, [1, nil], [1, nil], [1, nil], [1, nil], [1, 1], 1, [1, nil], [1, nil], [1, nil], [1, nil], [[1, 1], [1, 1]], [1, 1], [1, 1], [1, 1], [1, nil], [1, nil], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [1, 1], [1, 1], [[[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]]]}, %q{
-def m(ary = [])
- yield(ary)
-end
-
-$ans = []
-o = 1
-5.times{
- v,(*) = o; $ans << o
- m(o){|(v,(*))| $ans << v}
- ((x, y)) = o; $ans << [x, y]
- m(o){|((x, y))| $ans << [x, y]}
- (((x, y))) = o; $ans << [x, y]
- m(o){|(((x, y)))| $ans << [x, y]}
- o = [o, o]
-}; $ans
-}
-
-assert_equal '0', %q{
- def m()
- yield [0]
- end
- m {|*,v| v}.inspect
-}, '[ruby-dev:31437]'
-assert_equal '[0]', %q{
- def m
- yield [0]
- end
- m{|v, &b| v}.inspect
-}, '[ruby-dev:31440]'
-assert_equal 'ok', %q{
- begin
- lambda{|a|}.call(1, 2)
- rescue ArgumentError
- :ok
- else
- :ng
- end
-}, '[ruby-dev:31464]'
-assert_equal 'ok', %q{
- begin
- lambda{|&b|}.call(3)
- rescue ArgumentError
- :ok
- else
- :ng
- end
-}, '[ruby-dev:31472]'
-assert_equal 'ok', %q{
- class C
- def each
- yield [1,2]
- yield 1,2
- end
- end
- vs1 = []
- C.new.each {|*v| vs1 << v }
- vs2 = []
- C.new.to_enum.each {|*v| vs2 << v }
- vs1 == vs2 ? :ok : :ng
-}, '[ruby-dev:32329]'
-
-assert_normal_exit %q{
- e = [1,2,3].each
- 10000.times {
- e = [e].each
- }
- Thread.new { GC.start }.join
-}, '[ruby-dev:32604]'
-
-
-assert_equal '[nil, []]', %q{
- def m() yield nil,[] end
- l = lambda {|*v| v}
- GC.stress=true
- r = m(&l)
- GC.stress=false
- r.inspect
-}, '[ruby-dev:32567]'
-
-assert_equal NilClass.to_s, %q{
- r = false; 1.times{|&b| r = b}; r.class
-}
-
-assert_equal 'ok', %q{
- class C
- define_method(:foo) do |arg, &block|
- if block then block.call else arg end
- end
- end
- C.new.foo("ng") {"ok"}
-}, '[ruby-talk:266422]'
-
-assert_equal 'ok', %q{
- class C
- define_method(:xyz) do |o, k, &block|
- block.call(o, k)
- end
- end
- C.new.xyz("o","k") {|o, k| o+k}
-}, '[ruby-core:20544]'
-
-assert_equal 'ok', %q{
- class C
- define_method(:xyz) do |*args, &block|
- block.call(*args)
- end
- end
- C.new.xyz("o","k") {|*args| args.join("")}
-}, '[ruby-core:20544]'
-
-assert_equal 'ok', %q{
- STDERR.reopen(STDOUT)
- class C
- define_method(:foo) do |&block|
- block.call if block
- end
- result = "ng"
- new.foo() {result = "ok"}
- result
- end
-}
-
-assert_equal "ok", %q{
- class Bar
- def bar; :ok; end
- end
- def foo
- yield(Bar.new) if block_given?
- end
- foo(&:bar)
-}, '[ruby-core:14279]'
-
-assert_normal_exit %q{
- class Controller
- def respond_to(&block)
- responder = Responder.new
- block.call(responder)
- responder.respond
- end
- def test_for_bug
- respond_to{|format|
- format.js{
- puts "in test"
- render{|obj|
- puts obj
- }
- }
- }
- end
- def render(&block)
- puts "in render"
- end
- end
-
- class Responder
- def method_missing(symbol, &block)
- puts "enter method_missing"
- @response = Proc.new{
- puts 'in method missing'
- block.call
- }
- puts "leave method_missing"
- end
- def respond
- @response.call
- end
- end
- t = Controller.new
- t.test_for_bug
-}, '[ruby-core:14395]'
-
-assert_equal 'true', %q{
- class C0
- def foo
- block_given?
- end
- end
-
- class C1 < C0
- def foo
- super
- end
- end
-
- C1.new.foo{}
-}
-
-assert_equal 'true', %q{
- class C0
- def foo
- block_given?
- end
- end
-
- class C1 < C0
- def foo
- super()
- end
- end
-
- C1.new.foo{}
-}
-
-assert_equal 'ok', %q{
- 1.times do
- begin
- raise
- rescue
- begin
- raise
- rescue
- break
- end
- end
- end
- 'ok'
-}
diff --git a/bootstraptest/test_class.rb b/bootstraptest/test_class.rb
deleted file mode 100644
index b7fe0a1acd..0000000000
--- a/bootstraptest/test_class.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-# class
-assert_equal 'true', %q( class C; end
- Object.const_defined?(:C) )
-assert_equal 'Class', %q( class C; end
- C.class )
-assert_equal 'C', %q( class C; end
- C.name )
-assert_equal 'C', %q( class C; end
- C.new.class )
-assert_equal 'C', %q( class C; end
- C.new.class.name )
-assert_equal 'Class', %q( class C; end
- C.new.class.class )
-assert_equal 'true', %q( Object.__send__(:remove_const, :TrueClass)
- GC.start
- true.inspect)
-assert_equal 'false', %q( Object.__send__(:remove_const, :FalseClass)
- GC.start
- false.inspect)
-assert_equal 'nil', %q( Object.__send__(:remove_const, :NilClass)
- GC.start
- nil.inspect)
-
-
-# inherited class
-assert_equal 'true', %q( class A; end
- class C < A; end
- Object.const_defined?(:C) )
-assert_equal 'Class', %q( class A; end
- class C < A; end
- C.class )
-assert_equal 'C', %q( class A; end
- class C < A; end
- C.name )
-assert_equal 'C', %q( class A; end
- class C < A; end
- C.new.class )
-assert_equal 'C', %q( class A; end
- class C < A; end
- C.new.class.name )
-assert_equal 'Class', %q( class A; end
- class C < A; end
- C.new.class.class )
-
-# module
-assert_equal 'true', %q( module M; end
- Object.const_defined?(:M) )
-assert_equal 'Module', %q( module M; end
- M.class )
-assert_equal 'M', %q( module M; end
- M.name )
-assert_equal 'C', %q( module M; end
- class C; include M; end
- C.new.class )
-
-# nested class
-assert_equal 'A::B', %q( class A; end
- class A::B; end
- A::B )
-assert_equal 'A::B', %q( class A; end
- class A::B; end
- A::B.name )
-assert_equal 'A::B', %q( class A; end
- class A::B; end
- A::B.new.class )
-assert_equal 'Class', %q( class A; end
- class A::B; end
- A::B.new.class.class )
-assert_equal 'A::B::C', %q( class A; end
- class A::B; end
- class A::B::C; end
- A::B::C )
-assert_equal 'A::B::C', %q( class A; end
- class A::B; end
- class A::B::C; end
- A::B::C.name )
-assert_equal 'Class', %q( class A; end
- class A::B; end
- class A::B::C; end
- A::B::C.class )
-assert_equal 'A::B::C', %q( class A; end
- class A::B; end
- class A::B::C; end
- A::B::C.new.class )
-assert_equal 'Class', %q( class A; end
- class A::B; end
- class A::B::C; end
- A::B::C.new.class.class )
-assert_equal 'A::B2', %q( class A; end
- class A::B; end
- class A::B2 < A::B; end
- A::B2 )
-assert_equal 'Class', %q( class A; end
- class A::B; end
- class A::B2 < A::B; end
- A::B2.class )
-
-# reopen
-assert_equal 'true', %q( class C; end; c1 = ::C
- class C; end; c2 = ::C
- c1.equal?(c2) )
-assert_equal '1', %q( class C; end
- class A; end
- begin class C < A; end; rescue TypeError; 1 end )
-assert_equal '1', %q( class C; end
- begin module C; end; rescue TypeError; 1 end )
-assert_equal '1', %q( C = 1 # [yarv-dev:782]
- begin class C; end; rescue TypeError; 1 end )
-assert_equal '1', %q( C = 1 # [yarv-dev:800]
- begin module C; end; rescue TypeError; 1 end )
-
-# colon2, colon3
-assert_equal '1', %q( class A; end; A::C = 1; A::C )
-assert_equal '1', %q( A = 7; begin A::C = 7; rescue TypeError; 1 end )
-assert_equal '1', %q( begin 7::C = 7; rescue TypeError; 1 end )
-assert_equal 'C', %q( class A; class ::C; end end; C )
-assert_equal 'Class', %q( class A; class ::C; end end; C.class )
-assert_equal 'OK', %q( class A; ::C = "OK"; end; C )
-assert_equal 'String', %q( class A; ::C = "OK"; end; C.class )
-
-# class/module dup
-assert_equal 'Class', %q( class C; end; C.dup.class )
-assert_equal 'Module', %q( module M; end; M.dup.class )
-
-
-assert_equal "ok", %q{
- module Foo
- end
-
- begin
- def foo(&b)
- Foo.module_eval &b
- end
- foo{
- def bar
- end
- }
- bar()
- rescue NameError
- :ok
- end
-}, '[ruby-core:14378]'
-
-assert_equal '3', %q{
- $i = 0
- class C
- def self.const_missing *args
- $i+=1
- end
- end
-
- 3.times{
- C::FOO
- }
- $i
-}
-
-assert_match /::C\z/, %q{
- c = nil
- Module.new{|m| c = class m::C; name; end}
- c
-}, '[ruby-dev:38456]'
-
-assert_normal_exit %q{
- s = Symbol.dup
- class << s
- end
- s.allocate.to_s
-}, '[ruby-core:30843]'
diff --git a/bootstraptest/test_eval.rb b/bootstraptest/test_eval.rb
deleted file mode 100644
index bf7478006d..0000000000
--- a/bootstraptest/test_eval.rb
+++ /dev/null
@@ -1,324 +0,0 @@
-assert_equal %q{ok}, %q{
- def m
- a = :ok
- $b = binding
- end
- m
- eval('a', $b)
-}
-assert_equal %q{[:ok, :ok2]}, %q{
- def m
- a = :ok
- $b = binding
- end
- m
- eval('b = :ok2', $b)
- eval('[a, b]', $b)
-}
-assert_equal %q{[nil, 1]}, %q{
- $ans = []
- def m
- $b = binding
- end
- m
- $ans << eval(%q{
- $ans << eval(%q{
- a
- }, $b)
- a = 1
- }, $b)
- $ans
-}
-assert_equal %q{C}, %q{
- Const = :top
- class C
- Const = :C
- def m
- binding
- end
- end
- eval('Const', C.new.m)
-}
-assert_equal %q{top}, %q{
- Const = :top
- a = 1
- class C
- Const = :C
- def m
- eval('Const', TOPLEVEL_BINDING)
- end
- end
- C.new.m
-}
-assert_equal %q{:ok
-ok}, %q{
- class C
- $b = binding
- end
- eval %q{
- def m
- :ok
- end
- }, $b
- p C.new.m
-}
-assert_equal %q{ok}, %q{
- b = proc{
- a = :ok
- binding
- }.call
- a = :ng
- eval("a", b)
-}
-assert_equal %q{C}, %q{
- class C
- def foo
- binding
- end
- end
- C.new.foo.eval("self.class.to_s")
-}
-assert_equal %q{1}, %q{
- eval('1')
-}
-assert_equal %q{1}, %q{
- eval('a=1; a')
-}
-assert_equal %q{1}, %q{
- a = 1
- eval('a')
-}
-assert_equal %q{ok}, %q{
- __send__ :eval, %{
- :ok
- }
-}
-assert_equal %q{ok}, %q{
- 1.__send__ :instance_eval, %{
- :ok
- }
-}
-assert_equal %q{1}, %q{
- 1.instance_eval{
- self
- }
-}
-assert_equal %q{foo}, %q{
- 'foo'.instance_eval{
- self
- }
-}
-assert_equal %q{1}, %q{
- class Fixnum
- Const = 1
- end
- 1.instance_eval %{
- Const
- }
-}
-assert_equal %q{top}, %q{
- Const = :top
- class C
- Const = :C
- end
- C.module_eval{
- Const
- }
-}
-assert_equal %q{C}, %q{
- Const = :top
- class C
- Const = :C
- end
- C.class_eval %{
- def m
- Const
- end
- }
- C.new.m
-}
-assert_equal %q{top}, %q{
- Const = :top
- class C
- Const = :C
- end
- C.class_eval{
- def m
- Const
- end
- }
- C.new.m
-}
-assert_equal %q{[:top, :C, :top, :C]}, %q{
- Const = :top
- class C
- Const = :C
- end
- $nest = false
- $ans = []
- def m
- $ans << Const
- C.module_eval %{
- $ans << Const
- Boo = false unless defined? Boo
- unless $nest
- $nest = true
- m
- end
- }
- end
- m
- $ans
-}
-assert_equal %q{[10, main]}, %q{
- $nested = false
- $ans = []
- $pr = proc{
- $ans << self
- unless $nested
- $nested = true
- $pr.call
- end
- }
- class C
- def initialize &b
- 10.instance_eval(&b)
- end
- end
- C.new(&$pr)
- $ans
-}
-
-%w[break next redo].each do |keyword|
- assert_match %r"Can't escape from eval with #{keyword}\z", %{
- begin
- eval "0 rescue #{keyword}"
- rescue SyntaxError => e
- e.message
- end
- }, '[ruby-dev:31372]'
-end
-
-assert_normal_exit %q{
- STDERR.reopen(STDOUT)
- class Foo
- def self.add_method
- class_eval("def some-bad-name; puts 'hello' unless @some_variable.some_function(''); end")
- end
- end
- Foo.add_method
-}, '[ruby-core:14556] reported by Frederick Cheung'
-
-assert_equal 'ok', %q{
- class Module
- def my_module_eval(&block)
- module_eval(&block)
- end
- end
- class String
- Integer.my_module_eval do
- def hoge; end
- end
- end
- if Integer.instance_methods(false).map{|m|m.to_sym}.include?(:hoge) &&
- !String.instance_methods(false).map{|m|m.to_sym}.include?(:hoge)
- :ok
- else
- :ng
- end
-}, "[ruby-dev:34236]"
-
-assert_equal 'ok', %q{
- begin
- eval("class nil::Foo; end")
- :ng
- rescue Exception
- :ok
- end
-}
-
-assert_equal 'ok', %q{
- begin
- 0.instance_eval { def m() :m end }
- 1.m
- :ng
- rescue Exception
- :ok
- end
-}, '[ruby-dev:34579]'
-
-assert_equal 'ok', %q{
- begin
- 12.instance_eval { @@a }
- rescue NameError
- :ok
- end
-}, '[ruby-core:16794]'
-
-assert_equal 'ok', %q{
- begin
- 12.instance_exec { @@a }
- rescue NameError
- :ok
- end
-}, '[ruby-core:16794]'
-
-assert_equal 'ok', %q{
- nil.instance_eval {
- def defd_using_instance_eval() :ok end
- }
- nil.defd_using_instance_eval
-}, '[ruby-core:28324]'
-
-assert_equal 'ok', %q{
- nil.instance_exec {
- def defd_using_instance_exec() :ok end
- }
- nil.defd_using_instance_exec
-}, '[ruby-core:28324]'
-
-assert_normal_exit %q{
- eval("", method(:proc).call {}.binding)
-}
-
-assert_equal "", %q{
- b = binding
- 10.times{
- eval('', b)
- }
- begin
- eval('1.times{raise}', b)
- rescue => e
- e.message
- end
-}, '[ruby-dev:35392]'
-
-assert_equal "[:x]", %q{
- def kaboom!
- yield.eval("local_variables")
- end
-
- for x in enum_for(:kaboom!)
- binding
- end
-}, '[ruby-core:25125]'
-
-assert_normal_exit %q{
- hash = {}
- ("aaaa".."matz").each_with_index do |s, i|
- hash[s] = i
- end
- begin
- eval "class C; @@h = #{hash.inspect}; end"
- end
-}, '[ruby-core:25714]'
-
-assert_normal_exit %q{
- begin
- eval("# encoding:utf-16le\nfoo")
- rescue Exception => e
- p e
- RubyVM::InstructionSequence.compile("p:hello")
- end
-}, 'check escaping the internal value th->base_block'
-
diff --git a/bootstraptest/test_exception.rb b/bootstraptest/test_exception.rb
deleted file mode 100644
index 35c8d25e37..0000000000
--- a/bootstraptest/test_exception.rb
+++ /dev/null
@@ -1,432 +0,0 @@
-assert_equal %q{2}, %q{
- begin
- 1+1
- ensure
- 2+2
- end
-}
-assert_equal %q{4}, %q{
- begin
- 1+1
- begin
- 2+2
- ensure
- 3+3
- end
- ensure
- 4+4
- end
-}
-assert_equal %q{4}, %q{
- begin
- 1+1
- begin
- 2+2
- ensure
- 3+3
- end
- ensure
- 4+4
- begin
- 5+5
- ensure
- 6+6
- end
- end
-}
-assert_equal %q{NilClass}, %q{
- a = nil
- 1.times{|e|
- begin
- rescue => err
- end
- a = err.class
- }
- a
-}
-assert_equal %q{RuntimeError}, %q{
- a = nil
- 1.times{|e|
- begin
- raise
- rescue => err
- end
- a = err.class
- }
- a
-}
-assert_equal %q{}, %q{
- $!
-}
-assert_equal %q{FOO}, %q{
- begin
- raise "FOO"
- rescue
- $!
- end
-}
-assert_equal %q{FOO}, %q{
- def m
- $!
- end
- begin
- raise "FOO"
- rescue
- m()
- end
-}
-assert_equal %q{[#<RuntimeError: BAR>, #<RuntimeError: FOO>]}, %q{
- $ans = []
- def m
- $!
- end
- begin
- raise "FOO"
- rescue
- begin
- raise "BAR"
- rescue
- $ans << m()
- end
- $ans << m()
- end
- $ans
-}
-assert_equal %q{[#<RuntimeError: FOO>, #<RuntimeError: FOO>]}, %q{
- $ans = []
- def m
- $!
- end
-
- begin
- begin
- raise "FOO"
- ensure
- $ans << m()
- end
- rescue
- $ans << m()
- end
-}
-assert_equal %q{[nil]}, %q{
- $ans = []
- def m
- $!
- end
- def m2
- 1.times{
- begin
- return
- ensure
- $ans << m
- end
- }
- end
- m2
- $ans
-}
-assert_equal %q{ok}, %q{
- begin
- raise
- rescue
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- begin
- raise
- rescue
- :ok
- ensure
- :ng
- end
-}
-assert_equal %q{RuntimeError}, %q{
- begin
- raise
- rescue => e
- e.class
- end
-}
-assert_equal %q{ng}, %q{
- begin
- raise
- rescue StandardError
- :ng
- rescue Exception
- :ok
- end
-}
-assert_equal %q{c}, %q{
- begin
- begin
- raise "a"
- rescue
- raise "b"
- ensure
- raise "c"
- end
- rescue => e
- e.message
- end
-}
-assert_equal %q{33}, %q{
- def m a, b
- a + b
- end
- m(1, begin
- raise
- rescue
- 2
- end) +
- m(10, begin
- raise
- rescue
- 20
- ensure
- 30
- end)
-}
-assert_equal %q{3}, %q{
- def m a, b
- a + b
- end
- m(begin
- raise
- rescue
- 1
- end,
- begin
- raise
- rescue
- 2
- end)
-}
-assert_equal %q{ok3}, %q{
- class E1 < Exception
- end
-
- def m
- yield
- end
-
- begin
- begin
- begin
- m{
- raise
- }
- rescue E1
- :ok2
- ensure
- end
- rescue
- :ok3
- ensure
- end
- rescue E1
- :ok
- ensure
- end
-}
-assert_equal %q{7}, %q{
- $i = 0
- def m
- iter{
- begin
- $i += 1
- begin
- $i += 2
- break
- ensure
-
- end
- ensure
- $i += 4
- end
- $i = 0
- }
- end
-
- def iter
- yield
- end
- m
- $i
-}
-assert_equal %q{10}, %q{
- $i = 0
- def m
- begin
- $i += 1
- begin
- $i += 2
- return
- ensure
- $i += 3
- end
- ensure
- $i += 4
- end
- p :end
- end
- m
- $i
-}
-assert_equal %q{1}, %q{
- begin
- 1
- rescue
- 2
- end
-}
-assert_equal %q{4}, %q{
- begin
- 1
- begin
- 2
- rescue
- 3
- end
- 4
- rescue
- 5
- end
-}
-assert_equal %q{3}, %q{
- begin
- 1
- rescue
- 2
- else
- 3
- end
-}
-assert_equal %q{2}, %q{
- begin
- 1+1
- rescue
- 2+2
- ensure
- 3+3
- end
- }
-assert_equal %q{2}, %q{
- begin
- 1+1
- rescue
- 2+2
- ensure
- 3+3
- end
- }
-assert_equal %q{6}, %q{
- begin
- 1+1
- rescue
- 2+2
- else
- 3+3
- ensure
- 4+4
- end
- }
-assert_equal %q{12}, %q{
- begin
- 1+1
- begin
- 2+2
- rescue
- 3+3
- else
- 4+4
- end
- rescue
- 5+5
- else
- 6+6
- ensure
- 7+7
- end
- }
-assert_equal %q{ok}, %q{ #
- proc{
- begin
- raise
- break
- rescue
- :ok
- end
- }.call
-}
-assert_equal %q{}, %q{
- proc do
- begin
- raise StandardError
- redo
- rescue StandardError
- end
- end.call
-}
-
-##
-assert_match /undefined method `foo\'/, %q{#`
- STDERR.reopen(STDOUT)
- class C
- def inspect
- bar {}
- end
-
- def bar
- raise
- ensure
- end
- end
- C.new.foo
-}, "[ruby-dev:31407]"
-
-assert_equal 'nil', %q{
- doit = false
- exc = nil
- t = Thread.new {
- begin
- doit = true
- sleep 10
- ensure
- exc = $!
- end
- }
- Thread.pass until doit
- t.kill
- t.join
- exc.inspect
-}, '[ruby-dev:32608]'
-
-assert_equal 'exception class/object expected', %q{
- class ZeroDivisionError
- def self.new(message)
- 42
- end
- end
- begin
- 1/0
- rescue Exception => e
- e.message
- end
-}, '[ruby-core:24767]'
-
-assert_equal 'ok', %q{
- class C
- def ===(o)
- true
- end
- end
- begin
- begin
- raise
- rescue C.new
- end
- rescue TypeError
- :ok
- end
-}
diff --git a/bootstraptest/test_finalizer.rb b/bootstraptest/test_finalizer.rb
deleted file mode 100644
index 22a16b1220..0000000000
--- a/bootstraptest/test_finalizer.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-assert_normal_exit %q{
-a1,a2,b1,b2=Array.new(4){""}
-ObjectSpace.define_finalizer(b2,proc{})
-ObjectSpace.define_finalizer(b1,proc{b1.inspect})
-
-ObjectSpace.define_finalizer(a2,proc{a1.inspect})
-ObjectSpace.define_finalizer(a1,proc{})
-}, '[ruby-dev:35778]'
diff --git a/bootstraptest/test_flip.rb b/bootstraptest/test_flip.rb
deleted file mode 100644
index ff194868b2..0000000000
--- a/bootstraptest/test_flip.rb
+++ /dev/null
@@ -1 +0,0 @@
-assert_equal %q{E}, %q{$_ = "E"; eval("nil if true..~/^E/",nil,"-e"); $_}
diff --git a/bootstraptest/test_flow.rb b/bootstraptest/test_flow.rb
deleted file mode 100644
index 0390062a24..0000000000
--- a/bootstraptest/test_flow.rb
+++ /dev/null
@@ -1,591 +0,0 @@
-assert_equal %q{[1, 2, 4, 5, 6, 7, 8]}, %q{$a = []; begin; ; $a << 1
- [1,2].each{; $a << 2
- break; $a << 3
- }; $a << 4
- begin; $a << 5
- ensure; $a << 6
- end; $a << 7
-; $a << 8
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 6, 7, 8]}, %q{$a = []; begin; ; $a << 1
- begin; $a << 2
- [1,2].each do; $a << 3
- break; $a << 4
- end; $a << 5
- ensure; $a << 6
- end; $a << 7
-; $a << 8
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{ok}, %q{
- ["a"].inject("ng"){|x,y|
- break :ok
- }
-}
-assert_equal %q{ok}, %q{
- unless ''.respond_to? :lines
- class String
- def lines
- self
- end
- end
- end
-
- ('a').lines.map{|e|
- break :ok
- }
-}
-assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1
- ["a"].inject("ng"){|x,y|; $a << 2
- break :ok; $a << 3
- }; $a << 4
-; $a << 5
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1
- ('a'..'b').map{|e|; $a << 2
- break :ok; $a << 3
- }; $a << 4
-; $a << 5
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- break; $a << 4
- ensure; $a << 5
- end; $a << 6
- end; $a << 7
-; $a << 8
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 6, 9, 10]}, %q{$a = []; begin; ; $a << 1
- i=0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- begin; $a << 5
- ensure; $a << 6
- break; $a << 7
- end; $a << 8
- end; $a << 9
-; $a << 10
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1
- i=0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- begin; $a << 5
- raise; $a << 6
- ensure; $a << 7
- break; $a << 8
- end; $a << 9
- end; $a << 10
-; $a << 11
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1
- i=0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- begin; $a << 5
- raise; $a << 6
- rescue; $a << 7
- break; $a << 8
- end; $a << 9
- end; $a << 10
-; $a << 11
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- raise StandardError; $a << 4
- ensure; $a << 5
- break; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- raise StandardError; $a << 4
- rescue; $a << 5
- break; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 6, 8, 10, 11]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- begin; $a << 4
- break; $a << 5
- ensure; $a << 6
- end; $a << 7
- ensure; $a << 8
- end; $a << 9
- end; $a << 10
-; $a << 11
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1
- i = 0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- j = 0; $a << 5
- while j<3; $a << 6
- j+=1; $a << 7
- begin; $a << 8
- raise; $a << 9
- rescue; $a << 10
- break; $a << 11
- end; $a << 12
- end; $a << 13
- end; $a << 14
-; $a << 15
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1
- i = 0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- j = 0; $a << 5
- while j<3; $a << 6
- j+=1; $a << 7
- 1.times{; $a << 8
- begin; $a << 9
- raise; $a << 10
- rescue; $a << 11
- break; $a << 12
- end; $a << 13
- }; $a << 14
- end; $a << 15
- end; $a << 16
-; $a << 17
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1
- i = 0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- j = 0; $a << 5
- while j<3; $a << 6
- j+=1; $a << 7
- begin; $a << 8
- raise; $a << 9
- ensure; $a << 10
- break; $a << 11
- end; $a << 12
- end; $a << 13
- end; $a << 14
-; $a << 15
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1
- i = 0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- j = 0; $a << 5
- while j<3; $a << 6
- j+=1; $a << 7
- 1.times{; $a << 8
- begin; $a << 9
- raise; $a << 10
- ensure; $a << 11
- break; $a << 12
- end; $a << 13
- }; $a << 14
- end; $a << 15
- end; $a << 16
-; $a << 17
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
- while true; $a << 2
- begin; $a << 3
- break; $a << 4
- ensure; $a << 5
- break; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 99]}, %q{
-$a = [];
-begin; ; $a << 1
- while true; $a << 2
- begin; $a << 3
- break; $a << 4
- ensure; $a << 5
- raise; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 6, 8, 9, 10, 11]}, %q{$a = []; begin; ; $a << 1
- begin; $a << 2
- [1,2].each do; $a << 3
- begin; $a << 4
- break; $a << 5
- ensure; $a << 6
- end; $a << 7
- end; $a << 8
- ensure; $a << 9
- end; $a << 10
-; $a << 11
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 4, 99]}, %q{$a = []; begin; ; $a << 1
- begin; $a << 2
- raise StandardError; $a << 3
- ensure; $a << 4
- end; $a << 5
-; $a << 6
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4]}, %q{$a = []; begin; ; $a << 1
- begin; $a << 2
- ensure; $a << 3
- end ; $a << 4
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 5, 99]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- break; $a << 4
- ensure; $a << 5
- raise StandardError; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{3}, %q{
- def m a, b
- a + b
- end
- m(1,
- while true
- break 2
- end
- )
-}
-assert_equal %q{4}, %q{
- def m a, b
- a + b
- end
- m(1,
- (i=0; while i<2
- i+=1
- class C
- next 2
- end
- end; 3)
- )
-}
-assert_equal %q{34}, %q{
- def m a, b
- a+b
- end
- m(1, 1.times{break 3}) +
- m(10, (1.times{next 3}; 20))
-}
-assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
- 3.times{; $a << 2
- class C; $a << 3
- break; $a << 4
- end; $a << 5
- }; $a << 6
-; $a << 7
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
- 3.times{; $a << 2
- class A; $a << 3
- class B; $a << 4
- break; $a << 5
- end; $a << 6
- end; $a << 7
- }; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 2, 3, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
- 3.times{; $a << 2
- class C; $a << 3
- next; $a << 4
- end; $a << 5
- }; $a << 6
-; $a << 7
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
- 3.times{; $a << 2
- class C; $a << 3
- class D; $a << 4
- next; $a << 5
- end; $a << 6
- end; $a << 7
- }; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
- while true; $a << 2
- class C; $a << 3
- break; $a << 4
- end; $a << 5
- end; $a << 6
-; $a << 7
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
- while true; $a << 2
- class C; $a << 3
- class D; $a << 4
- break; $a << 5
- end; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
- i=0; $a << 2
- while i<3; $a << 3
- i+=1; $a << 4
- class C; $a << 5
- next 10; $a << 6
- end; $a << 7
- end; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{1}, %q{
- 1.times{
- while true
- class C
- begin
- break
- ensure
- break
- end
- end
- end
- }
-}
-assert_equal %q{[1, 2, 3, 5, 2, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1
- [1,2].each do; $a << 2
- begin; $a << 3
- next; $a << 4
- ensure; $a << 5
- end; $a << 6
- end; $a << 7
-; $a << 8
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 2, 6, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1
- o = "test"; $a << 2
- def o.test(a); $a << 3
- return a; $a << 4
- ensure; $a << 5
- end; $a << 6
- o.test(123); $a << 7
-; $a << 8
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 4, 7, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
- def m1 *args; $a << 2
- ; $a << 3
- end; $a << 4
- def m2; $a << 5
- m1(:a, :b, (return 1; :c)); $a << 6
- end; $a << 7
- m2; $a << 8
-; $a << 9
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 8, 2, 3, 4, 5, 9, 10]}, %q{$a = []; begin; ; $a << 1
- def m(); $a << 2
- begin; $a << 3
- 2; $a << 4
- ensure; $a << 5
- return 3; $a << 6
- end; $a << 7
- end; $a << 8
- m; $a << 9
-; $a << 10
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 3, 11, 4, 5, 6, 7, 12, 13]}, %q{$a = []; begin; ; $a << 1
- def m2; $a << 2
- end; $a << 3
- def m(); $a << 4
- m2(begin; $a << 5
- 2; $a << 6
- ensure; $a << 7
- return 3; $a << 8
- end); $a << 9
- 4; $a << 10
- end; $a << 11
- m(); $a << 12
-; $a << 13
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[1, 16, 2, 3, 4, 5, 6, 7, 10, 11, 17, 18]}, %q{$a = []; begin; ; $a << 1
- def m; $a << 2
- 1; $a << 3
- 1.times{; $a << 4
- 2; $a << 5
- begin; $a << 6
- 3; $a << 7
- return; $a << 8
- 4; $a << 9
- ensure; $a << 10
- 5; $a << 11
- end; $a << 12
- 6; $a << 13
- }; $a << 14
- 7; $a << 15
- end; $a << 16
- m(); $a << 17
-; $a << 18
-; rescue Exception; $a << 99; end; $a}
-assert_equal %q{[:ok, :ok2, :last]}, %q{
- a = []
- i = 0
- begin
- while i < 1
- i+=1
- begin
- begin
- next
- ensure
- a << :ok
- end
- ensure
- a << :ok2
- end
- end
- ensure
- a << :last
- end
- a
-}
-assert_equal %q{[:ok, :ok2, :last]}, %q{
- a = []
- i = 0
- begin
- while i < 1
- i+=1
- begin
- begin
- break
- ensure
- a << :ok
- end
- ensure
- a << :ok2
- end
- end
- ensure
- a << :last
- end
- a
-}
-assert_equal %q{[:ok, :ok2, :last]}, %q{
- a = []
- i = 0
- begin
- while i < 1
- if i>0
- break
- end
- i+=1
- begin
- begin
- redo
- ensure
- a << :ok
- end
- ensure
- a << :ok2
- end
- end
- ensure
- a << :last
- end
- a
-}
-assert_equal %Q{ENSURE\n}, %q{
- def test
- while true
- return
- end
- ensure
- puts("ENSURE")
- end
- test
-}, '[ruby-dev:37967]'
-
-[['[ruby-core:28129]', %q{
- class Bug2728
- include Enumerable
- define_method(:dynamic_method) do
- "dynamically defined method"
- end
- def each
- begin
- yield :foo
- ensure
- dynamic_method
- end
- end
- end
- e = Bug2728.new
-}],
- ['[ruby-core:28132]', %q{
- class Bug2729
- include Enumerable
- def each
- begin
- yield :foo
- ensure
- proc {}.call
- end
- end
- end
- e = Bug2729.new
-}],
- ['[ruby-core:39125]', %q{
- class Bug5234
- include Enumerable
- def each
- begin
- yield :foo
- ensure
- proc
- end
- end
- end
- e = Bug5234.new
-}],
- ['[ruby-dev:45656]', %q{
- class Bug6460
- include Enumerable
- def each
- begin
- yield :foo
- ensure
- 1.times { Proc.new }
- end
- end
- end
- e = Bug6460.new
-}]].each do |bug, src|
- assert_equal "foo", src + %q{e.detect {true}}, bug
- assert_equal "true", src + %q{e.any? {true}}, bug
- assert_equal "false", src + %q{e.all? {false}}, bug
- assert_equal "true", src + %q{e.include?(:foo)}, bug
-end
-
-assert_equal "foo", %q{
- class Bug6460
- def m1
- m2 {|e|
- return e
- }
- end
-
- def m2
- begin
- yield :foo
- ensure
- begin
- begin
- yield :foo
- ensure
- Proc.new
- raise ''
- end
- rescue
- end
- end
- end
- end
- Bug6460.new.m1
-}, '[ruby-dev:46372]'
diff --git a/bootstraptest/test_fork.rb b/bootstraptest/test_fork.rb
deleted file mode 100644
index 1cd9f7ac6c..0000000000
--- a/bootstraptest/test_fork.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-assert_equal '0', %q{
- begin
- GC.stress = true
- pid = fork {}
- Process.wait pid
- $?.to_i
- rescue NotImplementedError
- 0
- end
-}, '[ruby-dev:32404]'
-
-assert_finish 10, %q{
- begin
- children = (1..10).map{
- Thread.start{fork{}}.value
- }
- while !children.empty? and pid = Process.wait
- children.delete(pid)
- end
- rescue NotImplementedError
- end
-}, '[ruby-core:22158]'
-
-assert_normal_exit(<<'End', '[ruby-dev:37934]')
- main = Thread.current
- Thread.new { sleep 0.01 until main.stop?; Thread.kill main }
- Process.setrlimit(:NPROC, 1) if defined?(Process::RLIMIT_NPROC)
- fork {}
-End
-
-assert_equal 'ok', %q{
- begin
- r, w = IO.pipe
- if pid1 = fork
- w.close
- r.read(1)
- Process.kill("USR1", pid1)
- _, s = Process.wait2(pid1)
- s.success? ? :ok : :ng
- else
- r.close
- if pid2 = fork
- trap("USR1") { Time.now.to_s; Process.kill("USR2", pid2) }
- w.close
- Process.wait2(pid2)
- else
- w.close
- sleep 0.2
- end
- exit true
- end
- rescue NotImplementedError
- :ok
- end
-}, '[ruby-core:28924]'
-
-assert_equal '[1, 2]', %q{
- a = []
- main = Thread.current
- trap(:INT) { a.push(1).size == 2 and main.wakeup }
- trap(:TERM) { a.push(2).size == 2 and main.wakeup }
- pid = $$
- begin
- pid = fork do
- Process.kill(:INT, pid)
- Process.kill(:TERM, pid)
- end
- Process.wait(pid)
- 100.times {break if a.size > 1; sleep 0.001}
- a.sort
- rescue NotImplementedError
- [1, 2]
- end
-}, '[ruby-dev:44005] [Ruby 1.9 - Bug #4950]'
-
diff --git a/bootstraptest/test_gc.rb b/bootstraptest/test_gc.rb
deleted file mode 100644
index eb68c9845e..0000000000
--- a/bootstraptest/test_gc.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-assert_normal_exit %q{
-a = []
-ms = "a".."k"
-("A".."Z").each do |mod|
- mod = eval("module #{mod}; self; end")
- ms.each do |meth|
- iseq = RubyVM::InstructionSequence.compile("module #{mod}; def #{meth}; end; end")
- GC.stress = true
- iseq.eval
- GC.stress = false
- end
- o = Object.new.extend(mod)
- ms.each do |meth|
- o.send(meth)
- end
-end
-}, '[ruby-dev:39453]'
-
-assert_normal_exit %q{
-a = []
-ms = "a".."k"
-("A".."Z").each do |mod|
- mod = eval("module #{mod}; self; end")
- ms.each do |meth|
- GC.stress = true
- mod.module_eval {define_method(meth) {}}
- GC.stress = false
- end
- o = Object.new.extend(mod)
- ms.each do |meth|
- o.send(meth)
- end
-end
-}, '[ruby-dev:39453]'
diff --git a/bootstraptest/test_io.rb b/bootstraptest/test_io.rb
deleted file mode 100644
index 1d2b19368a..0000000000
--- a/bootstraptest/test_io.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-assert_finish 5, %q{
- r, w = IO.pipe
- t1 = Thread.new { r.sysread(1) }
- t2 = Thread.new { r.sysread(1) }
- sleep 0.01 until t1.stop? and t2.stop?
- w.write "a"
- w.write "a"
-}, '[ruby-dev:31866]'
-
-assert_finish 10, %q{
- begin
- require "io/nonblock"
- require "timeout"
- timeout(3) do
- r, w = IO.pipe
- w.nonblock?
- w.nonblock = true
- w.write_nonblock("a" * 100000)
- w.nonblock = false
- t1 = Thread.new { w.write("b" * 4096) }
- t2 = Thread.new { w.write("c" * 4096) }
- sleep 0.5
- r.sysread(4096).length
- sleep 0.5
- r.sysread(4096).length
- t1.join
- t2.join
- end
- rescue LoadError, Timeout::Error, NotImplementedError
- end
-}, '[ruby-dev:32566]'
-
-assert_finish 1, %q{
- r, w = IO.pipe
- Thread.new {
- w << "ab"
- sleep 0.01
- w << "ab"
- }
- r.gets("abab")
-}
-
-assert_equal 'ok', %q{
- require 'tmpdir'
- begin
- tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
- rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
- rescue Errno::EEXIST
- retry
- end
- save = STDIN.dup
- STDIN.reopen(rw)
- STDIN.reopen(save)
- rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
- :ok
-}
-
-assert_equal 'ok', %q{
- require 'tmpdir'
- begin
- tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
- rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
- rescue Errno::EEXIST
- retry
- end
- save = STDIN.dup
- STDIN.reopen(rw)
- STDIN.print "a"
- STDIN.reopen(save)
- rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
- :ok
-}
-
-assert_equal 'ok', %q{
- dup = STDIN.dup
- dupfd = dup.fileno
- dupfd == STDIN.dup.fileno ? :ng : :ok
-}, '[ruby-dev:46834]'
-
-assert_normal_exit %q{
- ARGF.set_encoding "foo"
-}
-
-10.times do
- assert_normal_exit %q{
- at_exit { p :foo }
-
- megacontent = "abc" * 12345678
- #File.open("megasrc", "w") {|f| f << megacontent }
-
- t0 = Thread.main
- Thread.new { sleep 0.001 until t0.stop?; Process.kill(:INT, $$) }
-
- r1, w1 = IO.pipe
- r2, w2 = IO.pipe
- t1 = Thread.new { w1 << megacontent; w1.close }
- t2 = Thread.new { r2.read; r2.close }
- IO.copy_stream(r1, w2) rescue nil
- w2.close
- r1.close
- t1.join
- t2.join
- }, 'megacontent-copy_stream', ["INT"], :timeout => 10 or break
-end
-
-assert_normal_exit %q{
- r, w = IO.pipe
- STDOUT.reopen(w)
- STDOUT.reopen(__FILE__, "r")
-}, '[ruby-dev:38131]'
diff --git a/bootstraptest/test_jump.rb b/bootstraptest/test_jump.rb
deleted file mode 100644
index 595aaa7c4b..0000000000
--- a/bootstraptest/test_jump.rb
+++ /dev/null
@@ -1,308 +0,0 @@
-assert_equal %q{ok}, %q{
- def m
- :ng1
- mm{
- yield
- }
- :ng2
- end
-
- def mm
- :ng3
- yield
- :ng4
- end
-
- m{
- break :ok
- }
-}
-assert_equal %q{ok}, %q{
- 3.times{
- break :ok
- }
-}
-assert_equal %q{}, %q{
- catch(:foo){
- throw :foo
- }
-}
-assert_equal %q{false}, %q{
- catch(:foo){
- throw :foo, false
- }
-}
-assert_equal %q{}, %q{
- catch(:foo){
- throw :foo, nil
- }
-}
-assert_equal %q{ok}, %q{
- catch(:foo){
- throw :foo, :ok
- }
-}
-assert_equal %q{}, %q{
- catch(:foo){
- 1.times{
- throw :foo
- }
- }
-}
-assert_equal %q{ok}, %q{
- catch(:foo){
- 1.times{
- throw :foo, :ok
- }
- }
-}
-assert_equal %q{ok}, %q{
- catch(:foo){
- catch(:bar){
- throw :foo, :ok
- }
- :ng
- }
-}
-assert_equal %q{ok}, %q{
- catch(:foo){
- catch(:bar){
- 1.times{
- throw :foo, :ok
- }
- }
- :ng
- }
-}
-assert_equal %q{2}, %q{
- module Enumerable
- def all_?
- self.each{|e|
- unless yield(e)
- return false
- end
- }
- true
- end
- end
-
- xxx = 0
- [1,2].each{|bi|
- [3,4].each{|bj|
- [true, nil, true].all_?{|be| be}
- break
- }
- xxx += 1
- }
- xxx
-}
-assert_equal %q{ok}, %q{
- def m
- yield
- end
-
- m{
- begin
- ensure
- break :ok
- end
- }
-}
-assert_equal %q{ok}, %q{
- def m
- yield
- :ok
- end
- i=0
- m{
- if i>10
- i*i
- else
- i+=1
- next
- end
- }
-}
-assert_equal %q{ok}, %q{
- def m
- yield
- end
-
- m{
- next :ok
- }
-}
-assert_equal %q{131}, %q{
- def m
- yield + 10
- end
- i=0
- m{
- if i>10
- i*i
- else
- i+=1
- redo
- end
- }
-}
-assert_equal %q{ok}, %q{
-begin
- eval %q{
- 1.times{
- retry
- }
- }
-rescue SyntaxError
- :ok
-end
-}
-assert_equal %q{3}, %q{
- def m
- return 3
- end
- m
-}
-assert_equal %q{ok}, %q{
- def m
- :ng1
- mm{
- return :ok
- }
- :ng2
- end
-
- def mm
- :ng3
- yield
- :ng4
- end
- m
-}
-assert_equal %q{100}, %q{
- $i = 0
- def m
- begin
- iter{
- return
- }
- ensure
- $i = 100
- end
- end
-
- def iter
- yield
- end
- m
- $i
-}
-assert_equal %q{ok}, %q{
- def m
- begin
- raise
- rescue
- return :ok
- end
- :ng
- end
- m
-}
-assert_equal %q{1}, %q{
- def m
- begin
- raise
- rescue
- return 1
- end
- end
-
- m
-}
-assert_equal %q{1}, %q{
- def m
- begin
- #
- ensure
- return 1
- end
- end
-
- m
-}
-assert_equal 'ok', %q{
- begin
- catch {|t| throw t, :ok }
- rescue ArgumentError
- :ng
- end
-}, '[ruby-dev:31609]'
-
-assert_equal "1", %q{
- catch do |t|
- begin
- throw t, 1
- 2
- ensure
- 3
- end
- end
-}, "[ruby-dev:31698]"
-
-assert_normal_exit %q{
- f = 0
- 1.times do
- begin
- f += 1
- ensure
- redo unless f > 2
- end
- end
-}
-
-assert_normal_exit %q{
- -> do
- 1.times do
- begin
- raise
- rescue
- return
- end
- end
- end.call
-}
-
-assert_normal_exit %q{
- while true
- begin
- raise
- next
- rescue
- end
- break
- end
-}, '[ruby-core:28172]'
-
-assert_equal "true", %q{
- class Object
- def return_eigenclass
- class << self
- return self
- end
- end
- end
- s = "foo"
- s.return_eigenclass == class << s; self; end
-}, '[ruby-core:21379]'
-
-assert_equal "true", %q{
- class Object
- def yield_eigenclass
- class << self
- yield self
- end
- end
- end
- s = "foo"
- s.yield_eigenclass {|c| c == class << s; self; end }
-}, '[ruby-dev:40975]'
diff --git a/bootstraptest/test_literal.rb b/bootstraptest/test_literal.rb
deleted file mode 100644
index aa65bddae1..0000000000
--- a/bootstraptest/test_literal.rb
+++ /dev/null
@@ -1,231 +0,0 @@
-# empty program
-assert_equal '', ''
-assert_equal '', ' '
-assert_equal '', "\n"
-
-# special const
-assert_equal 'true', 'true'
-assert_equal 'TrueClass', 'true.class'
-assert_equal 'false', 'false'
-assert_equal 'FalseClass', 'false.class'
-assert_equal '', 'nil'
-assert_equal 'nil', 'nil.inspect'
-assert_equal 'NilClass', 'nil.class'
-assert_equal 'sym', ':sym'
-assert_equal ':sym', ':sym.inspect'
-assert_equal 'Symbol', ':sym.class'
-assert_equal '1234', '1234'
-assert_equal 'Fixnum', '1234.class'
-assert_equal '1234', '1_2_3_4'
-assert_equal 'Fixnum', '1_2_3_4.class'
-assert_equal '18', '0x12'
-assert_equal 'Fixnum', '0x12.class'
-assert_equal '15', '0o17'
-assert_equal 'Fixnum', '0o17.class'
-assert_equal '5', '0b101'
-assert_equal 'Fixnum', '0b101.class'
-assert_equal '123456789012345678901234567890', '123456789012345678901234567890'
-assert_equal 'Bignum', '123456789012345678901234567890.class'
-assert_equal '2.0', '2.0'
-assert_equal 'Float', '1.3.class'
-
-# self
-assert_equal 'main', 'self'
-assert_equal 'Object', 'self.class'
-
-# string literal
-assert_equal 'a', '?a'
-assert_equal 'String', '?a.class'
-assert_equal 'A', '?A'
-assert_equal 'String', '?A.class'
-assert_equal "\n", '?\n'
-assert_equal 'String', '?\n.class'
-assert_equal ' ', '?\ '
-assert_equal 'String', '?\ .class'
-assert_equal 'string', "'string'"
-assert_equal 'string', '"string"'
-assert_equal 'string', '%(string)'
-assert_equal 'string', '%q(string)'
-assert_equal 'string', '%Q(string)'
-assert_equal 'string string', '"string string"'
-assert_equal ' ', '" "'
-assert_equal "\0", '"\0"'
-assert_equal "\1", '"\1"'
-assert_equal "3", '"\x33"'
-assert_equal "\n", '"\n"'
-
-# dynamic string literal
-assert_equal '2', '"#{1 + 1}"'
-assert_equal '16', '"#{2 ** 4}"'
-assert_equal 'string', 's = "string"; "#{s}"'
-
-# dynamic symbol literal
-assert_equal 'a3c', ':"a#{1+2}c"'
-assert_equal ':a3c', ':"a#{1+2}c".inspect'
-assert_equal 'Symbol', ':"a#{1+2}c".class'
-
-# xstring
-unless nacl?
- assert_equal "foo\n", %q(`echo foo`)
- assert_equal "foo\n", %q(s = "foo"; `echo #{s}`)
-end
-
-# regexp
-assert_equal '', '//.source'
-assert_equal 'Regexp', '//.class'
-assert_equal '0', '// =~ "a"'
-assert_equal '0', '// =~ ""'
-assert_equal 'a', '/a/.source'
-assert_equal 'Regexp', '/a/.class'
-assert_equal '0', '/a/ =~ "a"'
-assert_equal '0', '/test/ =~ "test"'
-assert_equal '', '/test/ =~ "tes"'
-assert_equal '0', 're = /test/; re =~ "test"'
-assert_equal '0', 'str = "test"; /test/ =~ str'
-assert_equal '0', 're = /test/; str = "test"; re =~ str'
-
-# dynamic regexp
-assert_equal 'regexp', %q(/re#{'ge'}xp/.source)
-assert_equal 'Regexp', %q(/re#{'ge'}xp/.class)
-
-# array
-assert_equal 'Array', '[].class'
-assert_equal '0', '[].size'
-assert_equal '0', '[].length'
-assert_equal '[]', '[].inspect'
-assert_equal 'Array', '[0].class'
-assert_equal '1', '[3].size'
-assert_equal '[3]', '[3].inspect'
-assert_equal '3', 'a = [3]; a[0]'
-assert_equal 'Array', '[1,2].class'
-assert_equal '2', '[1,2].size'
-assert_equal '[1, 2]', '[1,2].inspect'
-assert_equal 'Array', '[1,2,3,4,5].class'
-assert_equal '5', '[1,2,3,4,5].size'
-assert_equal '[1, 2, 3, 4, 5]', '[1,2,3,4,5].inspect'
-assert_equal '1', 'a = [1,2]; a[0]'
-assert_equal '2', 'a = [1,2]; a[1]'
-assert_equal 'Array', 'a = [1 + 2, 3 + 4, 5 + 6]; a.class'
-assert_equal '[3, 7, 11]', 'a = [1 + 2, 3 + 4, 5 + 6]; a.inspect'
-assert_equal '7', 'a = [1 + 2, 3 + 4, 5 + 6]; a[1]'
-assert_equal '1', '([0][0] += 1)'
-assert_equal '1', '([2][0] -= 1)'
-assert_equal 'Array', 'a = [obj = Object.new]; a.class'
-assert_equal '1', 'a = [obj = Object.new]; a.size'
-assert_equal 'true', 'a = [obj = Object.new]; a[0] == obj'
-assert_equal '5', 'a = [1,2,3]; a[1] = 5; a[1]'
-assert_equal 'bar', '[*:foo];:bar'
-assert_equal '[1, 2]', 'def nil.to_a; [2]; end; [1, *nil]'
-assert_equal '[1, 2]', 'def nil.to_a; [1, 2]; end; [*nil]'
-assert_equal '[0, 1, {2=>3}]', '[0, *[1], 2=>3]', "[ruby-dev:31592]"
-
-
-# hash
-assert_equal 'Hash', '{}.class'
-assert_equal '{}', '{}.inspect'
-assert_equal 'Hash', '{1=>2}.class'
-assert_equal '{1=>2}', '{1=>2}.inspect'
-assert_equal '2', 'h = {1 => 2}; h[1]'
-assert_equal '0', 'h = {1 => 2}; h.delete(1); h.size'
-assert_equal '', 'h = {1 => 2}; h.delete(1); h[1]'
-assert_equal '2', 'h = {"string" => "literal", "goto" => "hell"}; h.size'
-assert_equal 'literal', 'h = {"string"=>"literal", "goto"=>"hell"}; h["string"]'
-assert_equal 'hell', 'h = {"string"=>"literal", "goto"=>"hell"}; h["goto"]'
-
-# range
-assert_equal 'Range', '(1..2).class'
-assert_equal '1..2', '(1..2).inspect'
-assert_equal '1', '(1..2).begin'
-assert_equal '2', '(1..2).end'
-assert_equal 'false', '(1..2).exclude_end?'
-assert_equal 'Range', 'r = 1..2; r.class'
-assert_equal '1..2', 'r = 1..2; r.inspect'
-assert_equal '1', 'r = 1..2; r.begin'
-assert_equal '2', 'r = 1..2; r.end'
-assert_equal 'false', 'r = 1..2; r.exclude_end?'
-assert_equal 'Range', '(1...3).class'
-assert_equal '1...3', '(1...3).inspect'
-assert_equal '1', '(1...3).begin'
-assert_equal '3', '(1...3).end'
-assert_equal 'true', '(1...3).exclude_end?'
-assert_equal 'Range', 'r = (1...3); r.class'
-assert_equal '1...3', 'r = (1...3); r.inspect'
-assert_equal '1', 'r = (1...3); r.begin'
-assert_equal '3', 'r = (1...3); r.end'
-assert_equal 'true', 'r = (1...3); r.exclude_end?'
-assert_equal 'Range', 'r = (1+2 .. 3+4); r.class'
-assert_equal '3..7', 'r = (1+2 .. 3+4); r.inspect'
-assert_equal '3', 'r = (1+2 .. 3+4); r.begin'
-assert_equal '7', 'r = (1+2 .. 3+4); r.end'
-assert_equal 'false', 'r = (1+2 .. 3+4); r.exclude_end?'
-assert_equal 'Range', 'r = (1+2 ... 3+4); r.class'
-assert_equal '3...7', 'r = (1+2 ... 3+4); r.inspect'
-assert_equal '3', 'r = (1+2 ... 3+4); r.begin'
-assert_equal '7', 'r = (1+2 ... 3+4); r.end'
-assert_equal 'true', 'r = (1+2 ... 3+4); r.exclude_end?'
-assert_equal 'Range', 'r = ("a".."c"); r.class'
-assert_equal '"a".."c"', 'r = ("a".."c"); r.inspect'
-assert_equal 'a', 'r = ("a".."c"); r.begin'
-assert_equal 'c', 'r = ("a".."c"); r.end'
-
-assert_equal 'String', '__FILE__.class'
-assert_equal 'Fixnum', '__LINE__.class'
-
-###
-
-assert_equal 'ok', %q{
- # this cause "called on terminated object".
- ObjectSpace.each_object(Module) {|m| m.name.inspect }
- :ok
-}
-
-assert_normal_exit %q{
- begin
- r = 0**-1
- r + r
- rescue
- end
-}, '[ruby-dev:34524]'
-
-assert_normal_exit %q{
- begin
- r = Marshal.load("\x04\bU:\rRational[\ai\x06i\x05")
- r + r
- rescue
- end
-}, '[ruby-dev:34536]'
-
-assert_equal 'ok', %q{
- "#{}""#{}ok"
-}, '[ruby-dev:38968]'
-
-assert_equal 'ok', %q{
- "#{}o""#{}k""#{}"
-}, '[ruby-core:25284]'
-
-assert_equal 'ok', %q{ # long array literal
- x = nil
- eval "a = [#{(1..10_000).map{'x'}.join(", ")}]"
- :ok
-}
-
-assert_equal 'ok', %q{ # long array literal (optimized)
- eval "a = [#{(1..10_000).to_a.join(", ")}]"
- :ok
-}
-
-assert_equal 'ok', %q{ # long hash literal
- x = nil
- eval "a = {#{(1..10_000).map{|n| "#{n} => x"}.join(', ')}}"
- :ok
-}
-
-assert_equal 'ok', %q{ # long hash literal (optimized)
- eval "a = {#{(1..10_000).map{|n| "#{n} => #{n}"}.join(', ')}}"
- :ok
-}
-
-assert_equal 'ok', %q{
- [print(:ok), exit] # void literal with side-effect
- :dummy
-}
diff --git a/bootstraptest/test_literal_suffix.rb b/bootstraptest/test_literal_suffix.rb
deleted file mode 100644
index 4316c9e040..0000000000
--- a/bootstraptest/test_literal_suffix.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# numbers with suffix
-assert_equal '0/1', '0r'
-assert_equal 'Rational', '0r.class'
-assert_equal '1/1', '1r'
-assert_equal 'Rational', '1r.class'
-assert_equal '-1/1', '-1r'
-assert_equal 'Rational', '(-1r).class'
-assert_equal '1/1', '0x1r'
-assert_equal 'Rational', '0x1r.class'
-assert_equal '1/1', '0b1r'
-assert_equal 'Rational', '0b1r.class'
-assert_equal '1/1', '0d1r'
-assert_equal 'Rational', '0d1r.class'
-assert_equal '1/1', '0o1r'
-assert_equal 'Rational', '0o1r.class'
-assert_equal '1/1', '01r'
-assert_equal 'Rational', '01r.class'
-assert_equal '6/5', '1.2r'
-assert_equal 'Rational', '1.2r.class'
-assert_equal '-6/5', '-1.2r'
-assert_equal 'Rational', '(-1.2r).class'
-assert_equal '0+0i', '0i'
-assert_equal 'Complex', '0i.class'
-assert_equal '0+1i', '1i'
-assert_equal 'Complex', '1i.class'
-assert_equal '0+1i', '0x1i'
-assert_equal 'Complex', '0x1i.class'
-assert_equal '0+1i', '0b1i'
-assert_equal 'Complex', '0b1i.class'
-assert_equal '0+1i', '0d1i'
-assert_equal 'Complex', '0d1i.class'
-assert_equal '0+1i', '0o1i'
-assert_equal 'Complex', '0o1i.class'
-assert_equal '0+1i', '01i'
-assert_equal 'Complex', '01i.class'
-assert_equal '0+1.2i', '1.2i'
-assert_equal 'Complex', '1.2i.class'
-assert_equal '0+1/1i', '1ri'
-assert_equal 'Complex', '1ri.class'
-assert_equal '0+6/5i', '1.2ri'
-assert_equal 'Complex', '1.2ri.class'
-assert_equal '0+10.0i', '1e1i'
-assert_equal 'Complex', '1e1i.class'
-assert_equal '1', '1if true'
-assert_equal '1', '1rescue nil'
-assert_equal '10000000000000000001/10000000000000000000',
- '1.0000000000000000001r'
-
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1.2ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1e1r', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
diff --git a/bootstraptest/test_load.rb b/bootstraptest/test_load.rb
deleted file mode 100644
index e63c93a8f4..0000000000
--- a/bootstraptest/test_load.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-assert_equal 'ok', %q{
- open("require-lock-test.rb", "w") {|f|
- f.puts "sleep 0.1"
- f.puts "module M"
- f.puts "end"
- }
- $:.unshift Dir.pwd
- vs = (1..2).map {|i|
- Thread.start {
- require "require-lock-test"
- M
- }
- }.map {|t| t.value }
- vs[0] == M && vs[1] == M ? :ok : :ng
-}, '[ruby-dev:32048]'
-
-assert_equal 'ok', %q{
- %w[a a/foo b].each {|d| Dir.mkdir(d)}
- open("b/foo", "w") {|f| f.puts "$ok = :ok"}
- $:.replace(%w[a b])
- begin
- load "foo"
- $ok
- rescue => e
- e.message
- end
-}, '[ruby-dev:38097]'
diff --git a/bootstraptest/test_marshal.rb b/bootstraptest/test_marshal.rb
deleted file mode 100644
index 7e34176169..0000000000
--- a/bootstraptest/test_marshal.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-
-assert_normal_exit %q{
- Marshal.load(Marshal.dump({"k"=>"v"}), lambda {|v| v})
-}
-
diff --git a/bootstraptest/test_massign.rb b/bootstraptest/test_massign.rb
deleted file mode 100644
index 0f63dd424a..0000000000
--- a/bootstraptest/test_massign.rb
+++ /dev/null
@@ -1,183 +0,0 @@
-assert_equal '[[1], 2, 3]', '*v1, (a, b) = [1,[2, 3]]; [v1, a, b]'
-assert_equal '[[1], 2, 3]', '*v1,(*), (a, b) = [1,:x,[2, 3]]; [v1, a, b]'
-
-assert_equal '[]', '*a = *nil; a'
-assert_equal '[nil]', '*a = nil; a'
-assert_equal '2', 'a, a = 1, 2; a', "[ruby-dev:31522]"
-assert_equal '[1, 2]', 'a, b = 1, 2'
-assert_equal '[1, 2]', %q{
- ans = []
- trace_var(:$a){|v| ans << v}
- trace_var(:$b){|v| ans << v}
- $a, $b = 1, 2
- ans
-}
-
-assert_equal 'ok', %q{
- r = :ok
- :ng.tap {|(r)|}
- r
-}, '[ruby-dev:31507]'
-
-=begin
-# generated by this script:
-
-3.times{|i|
- 8.times{|e|
- ary = (0...e).to_a
- a,b,c,d,e,f = nil
- vals = %w(a b c d e f)
- vals[i] = '*' + vals[i]
- program = "#{vals.join(", ")} = *ary"
- eval(program)
- ans = [a,b,c,d,e,f]
- puts %Q{
- assert_equal "#{ans.inspect}", %q{
- ary = #{ary.inspect}
- #{program}; [a, b, c, d, e, f]
- }}
- }
-}
-=end
-
- assert_equal "[[], nil, nil, nil, nil, nil]", %q{
- ary = []
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[], 0, nil, nil, nil, nil]", %q{
- ary = [0]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[], 0, 1, nil, nil, nil]", %q{
- ary = [0, 1]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[], 0, 1, 2, nil, nil]", %q{
- ary = [0, 1, 2]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[], 0, 1, 2, 3, nil]", %q{
- ary = [0, 1, 2, 3]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[], 0, 1, 2, 3, 4]", %q{
- ary = [0, 1, 2, 3, 4]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[0], 1, 2, 3, 4, 5]", %q{
- ary = [0, 1, 2, 3, 4, 5]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[[0, 1], 2, 3, 4, 5, 6]", %q{
- ary = [0, 1, 2, 3, 4, 5, 6]
- *a, b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[nil, [], nil, nil, nil, nil]", %q{
- ary = []
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [], nil, nil, nil, nil]", %q{
- ary = [0]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [], 1, nil, nil, nil]", %q{
- ary = [0, 1]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [], 1, 2, nil, nil]", %q{
- ary = [0, 1, 2]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [], 1, 2, 3, nil]", %q{
- ary = [0, 1, 2, 3]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [], 1, 2, 3, 4]", %q{
- ary = [0, 1, 2, 3, 4]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [1], 2, 3, 4, 5]", %q{
- ary = [0, 1, 2, 3, 4, 5]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, [1, 2], 3, 4, 5, 6]", %q{
- ary = [0, 1, 2, 3, 4, 5, 6]
- a, *b, c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[nil, nil, [], nil, nil, nil]", %q{
- ary = []
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, nil, [], nil, nil, nil]", %q{
- ary = [0]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [], nil, nil, nil]", %q{
- ary = [0, 1]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [], 2, nil, nil]", %q{
- ary = [0, 1, 2]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [], 2, 3, nil]", %q{
- ary = [0, 1, 2, 3]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [], 2, 3, 4]", %q{
- ary = [0, 1, 2, 3, 4]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [2], 3, 4, 5]", %q{
- ary = [0, 1, 2, 3, 4, 5]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
- assert_equal "[0, 1, [2, 3], 4, 5, 6]", %q{
- ary = [0, 1, 2, 3, 4, 5, 6]
- a, b, *c, d, e, f = *ary; [a, b, c, d, e, f]
- }
-
-
-#
-assert_equal 'ok', %q{
- a,s=[],"aaa"
- 300.times { a<<s; s=s.succ }
- eval <<-END__
- GC.stress=true
- Fiber.new do
- #{ a.join(",") },*zzz=1
- end.resume
- END__
- :ok
-}, '[ruby-dev:32581]'
-
-assert_equal 'ok', %q{
- while true
- *, z = 1
- break
- end
- :ok
-}, '[ruby-dev:32892]'
diff --git a/bootstraptest/test_method.rb b/bootstraptest/test_method.rb
deleted file mode 100644
index 3462aa9434..0000000000
--- a/bootstraptest/test_method.rb
+++ /dev/null
@@ -1,1192 +0,0 @@
-# regular argument
-assert_equal '1', 'def m() 1 end; m()'
-assert_equal '1', 'def m(a) a end; m(1)'
-assert_equal '[1, 2]', 'def m(a,b) [a, b] end; m(1,2)'
-assert_equal '[1, 2, 3]', 'def m(a,b,c) [a, b, c] end; m(1,2,3)'
-assert_match /\Awrong number of arguments \(.*\b1\b.* 0\)\z/, %q{
- def m; end
- begin
- m(1)
- rescue => e
- e.message
- end
-}
-
-assert_match /\Awrong number of arguments \(.*\b0\b.* 1\)\z/, %q{
- def m a; end
- begin
- m
- rescue => e
- e.message
- end
-}
-
-# default argument
-assert_equal '1', 'def m(x=1) x end; m()'
-assert_equal '1', 'def m(x=7) x end; m(1)'
-assert_equal '1', 'def m(a,x=1) x end; m(7)'
-assert_equal '1', 'def m(a,x=7) x end; m(7,1)'
-assert_equal '1', 'def m(a,b,x=1) x end; m(7,7)'
-assert_equal '1', 'def m(a,b,x=7) x end; m(7,7,1)'
-assert_equal '1', 'def m(a,x=1,y=1) x end; m(7)'
-assert_equal '1', 'def m(a,x=1,y=1) y end; m(7)'
-assert_equal '1', 'def m(a,x=7,y=1) x end; m(7,1)'
-assert_equal '1', 'def m(a,x=7,y=1) y end; m(7,1)'
-assert_equal '1', 'def m(a,x=7,y=7) x end; m(7,1,1)'
-assert_equal '1', 'def m(a,x=7,y=7) y end; m(7,1,1)'
-
-# rest argument
-assert_equal '[]', 'def m(*a) a end; m().inspect'
-assert_equal '[1]', 'def m(*a) a end; m(1).inspect'
-assert_equal '[1, 2]', 'def m(*a) a end; m(1,2).inspect'
-assert_equal '[]', 'def m(x,*a) a end; m(7).inspect'
-assert_equal '[1]', 'def m(x,*a) a end; m(7,1).inspect'
-assert_equal '[1, 2]', 'def m(x,*a) a end; m(7,1,2).inspect'
-assert_equal '[]', 'def m(x,y,*a) a end; m(7,7).inspect'
-assert_equal '[1]', 'def m(x,y,*a) a end; m(7,7,1).inspect'
-assert_equal '[1, 2]', 'def m(x,y,*a) a end; m(7,7,1,2).inspect'
-assert_equal '[]', 'def m(x,y=7,*a) a end; m(7).inspect'
-assert_equal '[]', 'def m(x,y,z=7,*a) a end; m(7,7).inspect'
-assert_equal '[]', 'def m(x,y,z=7,*a) a end; m(7,7,7).inspect'
-assert_equal '[]', 'def m(x,y,z=7,zz=7,*a) a end; m(7,7,7).inspect'
-assert_equal '[]', 'def m(x,y,z=7,zz=7,*a) a end; m(7,7,7,7).inspect'
-assert_equal '1', 'def m(x,y,z=7,zz=1,*a) zz end; m(7,7,7).inspect'
-assert_equal '1', 'def m(x,y,z=7,zz=1,*a) zz end; m(7,7,7).inspect'
-assert_equal '1', 'def m(x,y,z=7,zz=7,*a) zz end; m(7,7,7,1).inspect'
-
-# block argument
-assert_equal 'Proc', 'def m(&block) block end; m{}.class'
-assert_equal 'nil', 'def m(&block) block end; m().inspect'
-assert_equal 'Proc', 'def m(a,&block) block end; m(7){}.class'
-assert_equal 'nil', 'def m(a,&block) block end; m(7).inspect'
-assert_equal '1', 'def m(a,&block) a end; m(1){}'
-assert_equal 'Proc', 'def m(a,b=nil,&block) block end; m(7){}.class'
-assert_equal 'nil', 'def m(a,b=nil,&block) block end; m(7).inspect'
-assert_equal 'Proc', 'def m(a,b=nil,&block) block end; m(7,7){}.class'
-assert_equal '1', 'def m(a,b=nil,&block) b end; m(7,1){}'
-assert_equal 'Proc', 'def m(a,b=nil,*c,&block) block end; m(7){}.class'
-assert_equal 'nil', 'def m(a,b=nil,*c,&block) block end; m(7).inspect'
-assert_equal '1', 'def m(a,b=nil,*c,&block) a end; m(1).inspect'
-assert_equal '1', 'def m(a,b=1,*c,&block) b end; m(7).inspect'
-assert_equal '1', 'def m(a,b=7,*c,&block) b end; m(7,1).inspect'
-assert_equal '[1]', 'def m(a,b=7,*c,&block) c end; m(7,7,1).inspect'
-
-# splat
-assert_equal '1', 'def m(a) a end; m(*[1])'
-assert_equal '1', 'def m(x,a) a end; m(7,*[1])'
-assert_equal '1', 'def m(x,y,a) a end; m(7,7,*[1])'
-assert_equal '1', 'def m(a,b) a end; m(*[1,7])'
-assert_equal '1', 'def m(a,b) b end; m(*[7,1])'
-assert_equal '1', 'def m(x,a,b) b end; m(7,*[7,1])'
-assert_equal '1', 'def m(x,y,a,b) b end; m(7,7,*[7,1])'
-assert_equal '1', 'def m(a,b,c) a end; m(*[1,7,7])'
-assert_equal '1', 'def m(a,b,c) b end; m(*[7,1,7])'
-assert_equal '1', 'def m(a,b,c) c end; m(*[7,7,1])'
-assert_equal '1', 'def m(x,a,b,c) a end; m(7,*[1,7,7])'
-assert_equal '1', 'def m(x,y,a,b,c) a end; m(7,7,*[1,7,7])'
-
-# hash argument
-assert_equal '1', 'def m(h) h end; m(7=>1)[7]'
-assert_equal '1', 'def m(h) h end; m(7=>1).size'
-assert_equal '1', 'def m(h) h end; m(7=>1, 8=>7)[7]'
-assert_equal '2', 'def m(h) h end; m(7=>1, 8=>7).size'
-assert_equal '1', 'def m(h) h end; m(7=>1, 8=>7, 9=>7)[7]'
-assert_equal '3', 'def m(h) h end; m(7=>1, 8=>7, 9=>7).size'
-assert_equal '1', 'def m(x,h) h end; m(7, 7=>1)[7]'
-assert_equal '1', 'def m(x,h) h end; m(7, 7=>1, 8=>7)[7]'
-assert_equal '1', 'def m(x,h) h end; m(7, 7=>1, 8=>7, 9=>7)[7]'
-assert_equal '1', 'def m(x,y,h) h end; m(7,7, 7=>1)[7]'
-assert_equal '1', 'def m(x,y,h) h end; m(7,7, 7=>1, 8=>7)[7]'
-assert_equal '1', 'def m(x,y,h) h end; m(7,7, 7=>1, 8=>7, 9=>7)[7]'
-
-# block argument
-assert_equal '1', %q(def m(&block) mm(&block) end
- def mm() yield 1 end
- m {|a| a })
-assert_equal '1', %q(def m(x,&block) mm(x,&block) end
- def mm(x) yield 1 end
- m(7) {|a| a })
-assert_equal '1', %q(def m(x,y,&block) mm(x,y,&block) end
- def mm(x,y) yield 1 end
- m(7,7) {|a| a })
-
-# recursive call
-assert_equal '1', %q(def m(n) n == 0 ? 1 : m(n-1) end; m(5))
-
-# instance method
-assert_equal '1', %q(class C; def m() 1 end end; C.new.m)
-assert_equal '1', %q(class C; def m(a) a end end; C.new.m(1))
-assert_equal '1', %q(class C; def m(a = 1) a end end; C.new.m)
-assert_equal '[1]', %q(class C; def m(*a) a end end; C.new.m(1).inspect)
-assert_equal '1', %q( class C
- def m() mm() end
- def mm() 1 end
- end
- C.new.m )
-
-# singleton method (const)
-assert_equal '1', %q(class C; def C.m() 1 end end; C.m)
-assert_equal '1', %q(class C; def C.m(a) a end end; C.m(1))
-assert_equal '1', %q(class C; def C.m(a = 1) a end end; C.m)
-assert_equal '[1]', %q(class C; def C.m(*a) a end end; C.m(1).inspect)
-assert_equal '1', %q(class C; end; def C.m() 1 end; C.m)
-assert_equal '1', %q(class C; end; def C.m(a) a end; C.m(1))
-assert_equal '1', %q(class C; end; def C.m(a = 1) a end; C.m)
-assert_equal '[1]', %q(class C; end; def C.m(*a) a end; C.m(1).inspect)
-assert_equal '1', %q(class C; def m() 7 end end; def C.m() 1 end; C.m)
-assert_equal '1', %q( class C
- def C.m() mm() end
- def C.mm() 1 end
- end
- C.m )
-
-# singleton method (lvar)
-assert_equal '1', %q(obj = Object.new; def obj.m() 1 end; obj.m)
-assert_equal '1', %q(obj = Object.new; def obj.m(a) a end; obj.m(1))
-assert_equal '1', %q(obj = Object.new; def obj.m(a=1) a end; obj.m)
-assert_equal '[1]', %q(obj = Object.new; def obj.m(*a) a end; obj.m(1))
-assert_equal '1', %q(class C; def m() 7 end; end
- obj = C.new
- def obj.m() 1 end
- obj.m)
-
-# inheritance
-assert_equal '1', %q(class A; def m(a) a end end
- class B < A; end
- B.new.m(1))
-assert_equal '1', %q(class A; end
- class B < A; def m(a) a end end
- B.new.m(1))
-assert_equal '1', %q(class A; def m(a) a end end
- class B < A; end
- class C < B; end
- C.new.m(1))
-
-# include
-assert_equal '1', %q(class A; def m(a) a end end
- module M; end
- class B < A; include M; end
- B.new.m(1))
-assert_equal '1', %q(class A; end
- module M; def m(a) a end end
- class B < A; include M; end
- B.new.m(1))
-
-# alias
-assert_equal '1', %q( def a() 1 end
- alias m a
- m() )
-assert_equal '1', %q( class C
- def a() 1 end
- alias m a
- end
- C.new.m )
-assert_equal '1', %q( class C
- def a() 1 end
- alias :m a
- end
- C.new.m )
-assert_equal '1', %q( class C
- def a() 1 end
- alias m :a
- end
- C.new.m )
-assert_equal '1', %q( class C
- def a() 1 end
- alias :m :a
- end
- C.new.m )
-assert_equal '1', %q( class C
- def a() 1 end
- alias m a
- undef a
- end
- C.new.m )
-
-# undef
-assert_equal '1', %q( class C
- def m() end
- undef m
- end
- begin C.new.m; rescue NoMethodError; 1 end )
-assert_equal '1', %q( class A
- def m() end
- end
- class C < A
- def m() end
- undef m
- end
- begin C.new.m; rescue NoMethodError; 1 end )
-assert_equal '1', %q( class A; def a() end end # [yarv-dev:999]
- class B < A
- def b() end
- undef a, b
- end
- begin B.new.a; rescue NoMethodError; 1 end )
-assert_equal '1', %q( class A; def a() end end # [yarv-dev:999]
- class B < A
- def b() end
- undef a, b
- end
- begin B.new.b; rescue NoMethodError; 1 end )
-
-assert_equal '3', %q{
- def m1
- 1
- end
- alias m2 m1
- alias :"#{'m3'}" m1
- m1 + m2 + m3
-}, '[ruby-dev:32308]'
-assert_equal '1', %q{
- def foobar
- end
- undef :"foo#{:bar}"
- 1
-}, '[ruby-dev:32308]'
-assert_equal '1', %q{
- def foobar
- 1
- end
- alias :"bar#{:baz}" :"foo#{:bar}"
- barbaz
-}, '[ruby-dev:32308]'
-
-# private
-assert_equal '1', %q( class C
- def m() mm() end
- def mm() 1 end
- private :mm
- end
- C.new.m )
-assert_equal '1', %q( class C
- def m() 7 end
- private :m
- end
- begin C.m; rescue NoMethodError; 1 end )
-assert_equal '1', %q( class C
- def C.m() mm() end
- def C.mm() 1 end
- private_class_method :mm
- end
- C.m )
-assert_equal '1', %q( class C
- def C.m() 7 end
- private_class_method :m
- end
- begin C.m; rescue NoMethodError; 1 end )
-assert_equal '1', %q( class C; def m() 1 end end
- C.new.m # cache
- class C
- alias mm m; private :mm
- end
- C.new.m
- begin C.new.mm; 7; rescue NoMethodError; 1 end )
-
-# nested method
-assert_equal '1', %q( class C
- def m
- def mm() 1 end
- end
- end
- C.new.m
- C.new.mm )
-assert_equal '1', %q( class C
- def m
- def mm() 1 end
- end
- end
- instance_eval "C.new.m; C.new.mm" )
-
-# method_missing
-assert_equal ':m', %q( class C
- def method_missing(mid, *args) mid end
- end
- C.new.m.inspect )
-assert_equal ':mm', %q( class C
- def method_missing(mid, *args) mid end
- end
- C.new.mm.inspect )
-assert_equal '[1, 2]', %q( class C
- def method_missing(mid, *args) args end
- end
- C.new.m(1,2).inspect )
-assert_equal '1', %q( class C
- def method_missing(mid, *args) yield 1 end
- end
- C.new.m {|a| a })
-assert_equal 'nil', %q( class C
- def method_missing(mid, *args, &block) block end
- end
- C.new.m.inspect )
-
-# send
-assert_equal '1', %q( class C; def m() 1 end end;
- C.new.__send__(:m) )
-assert_equal '1', %q( class C; def m() 1 end end;
- C.new.send(:m) )
-assert_equal '1', %q( class C; def m(a) a end end;
- C.new.send(:m,1) )
-assert_equal '1', %q( class C; def m(a,b) a end end;
- C.new.send(:m,1,7) )
-assert_equal '1', %q( class C; def m(x,a=1) a end end;
- C.new.send(:m,7) )
-assert_equal '1', %q( class C; def m(x,a=7) a end end;
- C.new.send(:m,7,1) )
-assert_equal '[1, 2]', %q( class C; def m(*a) a end end;
- C.new.send(:m,1,2).inspect )
-assert_equal '1', %q( class C; def m() 7 end; private :m end
- begin C.new.public_send(:m); rescue NoMethodError; 1 end )
-assert_equal '1', %q( class C; def m() 1 end; private :m end
- C.new.send(:m) )
-
-# with block
-assert_equal '[[:ok1, :foo], [:ok2, :foo, :bar]]',
-%q{
- class C
- def [](a)
- $ary << [yield, a]
- end
- def []=(a, b)
- $ary << [yield, a, b]
- end
- end
-
- $ary = []
- C.new[:foo, &lambda{:ok1}]
- C.new[:foo, &lambda{:ok2}] = :bar
- $ary
-}
-
-# with
-assert_equal '[:ok1, [:ok2, 11]]', %q{
- class C
- def []
- $ary << :ok1
- 10
- end
- def []=(a)
- $ary << [:ok2, a]
- end
- end
- $ary = []
- C.new[]+=1
- $ary
-}
-
-# splat and block arguments
-assert_equal %q{[[[:x, :y, :z], NilClass], [[1, :x, :y, :z], NilClass], [[1, 2, :x, :y, :z], NilClass], [[:obj], NilClass], [[1, :obj], NilClass], [[1, 2, :obj], NilClass], [[], Proc], [[1], Proc], [[1, 2], Proc], [[], Proc], [[1], Proc], [[1, 2], Proc], [[:x, :y, :z], Proc], [[1, :x, :y, :z], Proc], [[1, 2, :x, :y, :z], Proc]]}, %q{
-def m(*args, &b)
- $result << [args, b.class]
-end
-$result = []
-ary = [:x, :y, :z]
-obj = :obj
-b = Proc.new{}
-
-m(*ary)
-m(1,*ary)
-m(1,2,*ary)
-m(*obj)
-m(1,*obj)
-m(1,2,*obj)
-m(){}
-m(1){}
-m(1,2){}
-m(&b)
-m(1,&b)
-m(1,2,&b)
-m(*ary,&b)
-m(1,*ary,&b)
-m(1,2,*ary,&b)
-$result
-}
-
-# aset and splat
-assert_equal '4', %q{class Foo;def []=(a,b,c,d);end;end;Foo.new[1,*a=[2,3]]=4}
-assert_equal '4', %q{class Foo;def []=(a,b,c,d);end;end;def m(&blk)Foo.new[1,*a=[2,3],&blk]=4;end;m{}}
-
-# post test
-assert_equal %q{[1, 2, :o1, :o2, [], 3, 4, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4)}
-
-assert_equal %q{[1, 2, 3, :o2, [], 4, 5, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5)}
-
-assert_equal %q{[1, 2, 3, 4, [], 5, 6, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6)}
-
-assert_equal %q{[1, 2, 3, 4, [5], 6, 7, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7)}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6], 7, 8, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8)}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7], 8, 9, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9)}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7, 8], 9, 10, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, NilClass, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)}
-
-assert_equal %q{[1, 2, :o1, :o2, [], 3, 4, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4){}}
-
-assert_equal %q{[1, 2, 3, :o2, [], 4, 5, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5){}}
-
-assert_equal %q{[1, 2, 3, 4, [], 5, 6, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6){}}
-
-assert_equal %q{[1, 2, 3, 4, [5], 6, 7, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7){}}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6], 7, 8, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8){}}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7], 8, 9, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9){}}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7, 8], 9, 10, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9, 10){}}
-
-assert_equal %q{[1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, Proc, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2, &b)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, b.class, x, y]
-end
-; m(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11){}}
-
-assert_equal %q{[1, 2, :o1, :o2, [], 3, 4, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, x, y]
-end
-; m(1, 2, 3, 4)}
-
-assert_equal %q{[1, 2, 3, :o2, [], 4, 5, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, x, y]
-end
-; m(1, 2, 3, 4, 5)}
-
-assert_equal %q{[1, 2, 3, 4, [], 5, 6, nil, nil]}, %q{
-def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2)
- x, y = :x, :y if $foo
- [m1, m2, o1, o2, r, p1, p2, x, y]
-end
-; m(1, 2, 3, 4, 5, 6)}
-
-
-#
-# super
-#
-=begin
-# below programs are generated by this program:
-
-BASE = <<EOS__
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; <TEST>; super; end; end
-EOS__
-
-tests = {
-%q{
- def m
-} => %q{
- C1.new.m
-},
-#
-%q{
- def m a
-} => %q{
- C1.new.m 1
-},
-%q{
- def m a
- a = :a
-} => %q{
- C1.new.m 1
-},
-#
-%q{
- def m a, o=:o
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
-},
-%q{
- def m a, o=:o
- a = :a
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
-},
-%q{
- def m a, o=:o
- o = :x
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
-},
-#
-%q{
- def m a, *r
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
- C1.new.m 1, 2, 3
-},
-%q{
- def m a, *r
- r = [:x, :y]
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
- C1.new.m 1, 2, 3
-},
-#
-%q{
- def m a, o=:o, *r
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
- C1.new.m 1, 2, 3
- C1.new.m 1, 2, 3, 4
-},
-#
-%q{
- def m a, o=:o, *r, &b
-} => %q{
- C1.new.m 1
- C1.new.m 1, 2
- C1.new.m 1, 2, 3
- C1.new.m 1, 2, 3, 4
- C1.new.m(1){}
- C1.new.m(1, 2){}
- C1.new.m(1, 2, 3){}
- C1.new.m(1, 2, 3, 4){}
-},
-#
-"def m(m1, m2, o1=:o1, o2=:o2, p1, p2)" =>
-%q{
-C1.new.m(1,2,3,4)
-C1.new.m(1,2,3,4,5)
-C1.new.m(1,2,3,4,5,6)
-},
-#
-"def m(m1, m2, *r, p1, p2)" =>
-%q{
-C1.new.m(1,2,3,4)
-C1.new.m(1,2,3,4,5)
-C1.new.m(1,2,3,4,5,6)
-C1.new.m(1,2,3,4,5,6,7)
-C1.new.m(1,2,3,4,5,6,7,8)
-},
-#
-"def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2)" =>
-%q{
-C1.new.m(1,2,3,4)
-C1.new.m(1,2,3,4,5)
-C1.new.m(1,2,3,4,5,6)
-C1.new.m(1,2,3,4,5,6,7)
-C1.new.m(1,2,3,4,5,6,7,8)
-C1.new.m(1,2,3,4,5,6,7,8,9)
-},
-
-###
-}
-
-
-tests.each{|setup, methods| setup = setup.dup; setup.strip!
- setup = BASE.gsub(/<TEST>/){setup}
- methods.split(/\n/).each{|m| m = m.dup; m.strip!
- next if m.empty?
- expr = "#{setup}; #{m}"
- result = eval(expr)
- puts "assert_equal %q{#{result.inspect}}, %q{\n#{expr}}"
- puts
- }
-}
-
-=end
-
-assert_equal %q{[:C0_m, [1, 2, :o1, :o2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, p1, p2); super; end; end
-; C1.new.m(1,2,3,4)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, :o2, 4, 5]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6)}
-
-assert_equal %q{[:C0_m, [1, :o]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [1, 2, 3]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r; super; end; end
-; C1.new.m 1, 2, 3}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r; super; end; end
-; C1.new.m 1, 2, 3, 4}
-
-assert_equal %q{[:C0_m, [:a]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a
- a = :a; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6, 7]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6,7)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6, 7, 8]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6,7,8)}
-
-assert_equal %q{[:C0_m, [1, :o]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [1, 2, 3]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m 1, 2, 3}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m 1, 2, 3, 4}
-
-assert_equal %q{[:C0_m, [1, :o]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m(1){}}
-
-assert_equal %q{[:C0_m, [1, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m(1, 2){}}
-
-assert_equal %q{[:C0_m, [1, 2, 3]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m(1, 2, 3){}}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o, *r, &b; super; end; end
-; C1.new.m(1, 2, 3, 4){}}
-
-assert_equal %q{[:C0_m, [1, :x]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o
- o = :x; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, :x]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o
- o = :x; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [:a, :o]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o
- a = :a; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [:a, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o
- a = :a; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [1]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, :x, :y]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r
- r = [:x, :y]; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, :x, :y]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r
- r = [:x, :y]; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [1, :x, :y]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r
- r = [:x, :y]; super; end; end
-; C1.new.m 1, 2, 3}
-
-assert_equal %q{[:C0_m, [1, 2, :o1, :o2, 3, 4]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, :o2, 4, 5]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6, 7]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6,7)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6, 7, 8]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6,7,8)}
-
-assert_equal %q{[:C0_m, [1, 2, 3, 4, 5, 6, 7, 8, 9]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m(m1, m2, o1=:o1, o2=:o2, *r, p1, p2); super; end; end
-; C1.new.m(1,2,3,4,5,6,7,8,9)}
-
-assert_equal %q{[:C0_m, [1]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal %q{[:C0_m, [1, 2, 3]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, *r; super; end; end
-; C1.new.m 1, 2, 3}
-
-assert_equal %q{[:C0_m, []]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m; super; end; end
-; C1.new.m}
-
-assert_equal %q{[:C0_m, [1, :o]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o; super; end; end
-; C1.new.m 1}
-
-assert_equal %q{[:C0_m, [1, 2]]}, %q{
-class C0; def m *args; [:C0_m, args]; end; end
-class C1 < C0; def m a, o=:o; super; end; end
-; C1.new.m 1, 2}
-
-assert_equal 'ok', %q{
- class C
- def x=(n)
- end
- def m
- self.x = :ok
- end
- end
- C.new.m
-}
-
-assert_equal 'ok', %q{
- proc{
- $SAFE = 1
- class C
- def m
- :ok
- end
- end
- }.call
- C.new.m
-}, '[ruby-core:11998]'
-
-assert_equal 'ok', %q{
- class B
- def m() :fail end
- end
- class C < B
- undef m
- begin
- remove_method :m
- rescue NameError
- end
- end
- begin
- C.new.m
- rescue NameError
- :ok
- end
-}, '[ruby-dev:31816], [ruby-dev:31817]'
-
-assert_normal_exit %q{
- begin
- Process.setrlimit(Process::RLIMIT_STACK, 4_206_592)
- # FreeBSD SEGVs this less than 4M + 12K bytes.
- rescue Exception
- exit
- end
- class C
- attr "a" * (10*1024*1024)
- end
-}, '[ruby-dev:31818]'
-
-assert_equal 'ok', %q{
- class Module
- def define_method2(name, &block)
- define_method(name, &block)
- end
- end
- class C
- define_method2(:m) {|x, y| :fail }
- end
- begin
- C.new.m([1,2])
- rescue ArgumentError
- :ok
- end
-}
-
-assert_not_match /method_missing/, %q{
- STDERR.reopen(STDOUT)
- variable_or_mehtod_not_exist
-}
-
-assert_equal '[false, false, false, false, true, true]', %q{
- class C
- define_method(:foo) {
- block_given?
- }
- end
-
- C.new.foo {}
-
- class D
- def foo
- D.module_eval{
- define_method(:m1){
- block_given?
- }
- }
- end
- def bar
- D.module_eval{
- define_method(:m2){
- block_given?
- }
- }
- end
- end
-
- D.new.foo
- D.new.bar{}
- [C.new.foo, C.new.foo{}, D.new.m1, D.new.m1{}, D.new.m2, D.new.m2{}]
-}, '[ruby-core:14813]'
-
-assert_equal 'ok', %q{
- class Foo
- define_method(:foo) do |&b|
- b.call
- end
- end
- Foo.new.foo do
- break :ok
- end
-}, '[ruby-dev:36028]'
-
-assert_equal '[1, 2, [3, 4]]', %q{
- def regular(a, b, *c)
- [a, b, c]
- end
- regular(*[], 1, *[], *[2, 3], *[], 4)
-}, '[ruby-core:19413]'
-
-assert_equal '[1, [:foo, 3, 4, :foo]]', %q{
- def regular(a, *b)
- [a, b]
- end
- a = b = [:foo]
- regular(1, *a, *[3, 4], *b)
-}
-
-assert_equal '["B", "A"]', %q{
- class A
- def m
- 'A'
- end
- end
-
- class B < A
- define_method(:m) do
- ['B', super()]
- end
- end
-
- class C < B
- end
-
- C.new.m
-}
-
-assert_equal 'ok', %q{
- module Foo
- def foo
- begin
- super
- rescue NoMethodError
- :ok
- end
- end
- module_function :foo
- end
- Foo.foo
-}, '[ruby-dev:37587]'
-
-assert_equal 'Object#foo', %q{
- class Object
- def self.foo
- "Object.foo"
- end
- def foo
- "Object#foo"
- end
- end
-
- module Foo
- def foo
- begin
- super
- rescue NoMethodError
- :ok
- end
- end
- module_function :foo
- end
- Foo.foo
-}, '[ruby-dev:37587]'
-
-assert_normal_exit %q{
- class BasicObject
- remove_method :method_missing
- end
- begin
- "a".lalala!
- rescue NoMethodError => e
- e.message == "undefined method `lalala!' for \"a\":String" ? :ok : :ng
- end
-}, '[ruby-core:22298]'
-
-assert_equal 'ok', %q{
- "hello"[0] ||= "H"
- "ok"
-}
-
-assert_equal 'ok', %q{
- "hello"[0, 1] ||= "H"
- "ok"
-}
-
-assert_equal 'ok', %q{
- class C
- define_method(:foo) do
- C.class_eval { remove_method(:foo) }
- super()
- end
- end
- begin
- C.new.foo
- rescue NoMethodError
- 'ok'
- end
-}
-assert_equal 'ok', %q{
- [0][0, &proc{}] += 21
- 'ok'
-}, '[ruby-core:30534]'
-
-# should not cache when splat
-assert_equal 'ok', %q{
- class C
- attr_reader :a
- def initialize
- @a = 1
- end
- end
-
- def m *args
- C.new.a(*args)
- end
-
- m()
- begin
- m(1)
- rescue ArgumentError
- 'ok'
- end
-}
-
-assert_equal 'DC', %q{
- $result = []
-
- class C
- def foo *args
- $result << 'C'
- end
- end
- class D
- def foo *args
- $result << 'D'
- end
- end
-
- o1 = $o1 = C.new
- o2 = $o2 = D.new
-
- args = Object.new
- def args.to_a
- test1 $o2, nil
- []
- end
- def test1 o, args
- o.foo(*args)
- end
- test1 o1, args
- $result.join
-}
-
-assert_equal 'DC', %q{
- $result = []
-
- class C
- def foo *args
- $result << 'C'
- end
- end
- class D
- def foo *args
- $result << 'D'
- end
- end
-
- o1 = $o1 = C.new
- o2 = $o2 = D.new
-
- block = Object.new
- def block.to_proc
- test2 $o2, %w(a, b, c), nil
- Proc.new{}
- end
- def test2 o, args, block
- o.foo(*args, &block)
- end
- test2 o1, [], block
- $result.join
-}
diff --git a/bootstraptest/test_objectspace.rb b/bootstraptest/test_objectspace.rb
deleted file mode 100644
index 862a94e376..0000000000
--- a/bootstraptest/test_objectspace.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-assert_normal_exit %q{
- eval("", TOPLEVEL_BINDING)
- minobj = ObjectSpace.to_enum(:each_object).min_by {|a| a.object_id }
- maxobj = ObjectSpace.to_enum(:each_object).max_by {|a| a.object_id }
- (((minobj.object_id-100)..(minobj.object_id+100))+
- ((maxobj.object_id-100)..(maxobj.object_id+100))).each {|id|
- begin
- o = ObjectSpace._id2ref(id)
- rescue RangeError
- next
- end
- o.inspect if defined?(o.inspect)
- }
-}, '[ruby-dev:31911]'
-
-assert_normal_exit %q{
- ary = (1..10).to_a
- ary.permutation(2) {|x|
- if x == [1,2]
- ObjectSpace.each_object(String) {|s|
- s.clear if !s.frozen? && (s.length == 40 || s.length == 80)
- }
- end
- }
-}, '[ruby-dev:31982]'
-
-assert_normal_exit %q{
- ary = (1..100).to_a
- ary.permutation(2) {|x|
- if x == [1,2]
- ObjectSpace.each_object(Array) {|o| o.clear if o == ary && o.object_id != ary.object_id }
- end
- }
-}, '[ruby-dev:31985]'
-
-assert_normal_exit %q{
- ObjectSpace.define_finalizer("") do
- Mutex.new.lock
- end
-}, '[ruby-dev:44049]'
-
-assert_normal_exit %q{
- ObjectSpace.define_finalizer("") do
- Thread.new {}
- end
-}, '[ruby-core:37858]'
diff --git a/bootstraptest/test_proc.rb b/bootstraptest/test_proc.rb
deleted file mode 100644
index c23394e8d2..0000000000
--- a/bootstraptest/test_proc.rb
+++ /dev/null
@@ -1,483 +0,0 @@
-assert_equal %q{[1, 2, 3]}, %q{
- def getproc &b
- b
- end
-
- def m
- yield
- end
-
- m{
- i = 1
- m{
- j = 2
- m{
- k = 3
- getproc{
- [i, j, k]
- }
- }
- }
- }.call
-}
-assert_equal %q{7}, %q{
- def make_proc(&b)
- b
- end
-
- def make_closure
- a = 0
- make_proc{
- a+=1
- }
- end
-
- cl = make_closure
- cl.call + cl.call * cl.call
-}
-assert_equal %q{ok}, %q{
- class C
- def foo
- :ok
- end
- end
-
- def block
- C.method(:new).to_proc
- end
- b = block()
- b.call.foo
-}
-assert_equal %q{[0, 1, :last, 0, 2, :last]}, %q{
- def proc &b
- b
- end
-
- pr = []
- proc{|i_b|
- p3 = proc{|j_b|
- pr << proc{|k_b|
- [i_b, j_b, k_b]
- }
- }
- p3.call(1)
- p3.call(2)
- }.call(0)
-
- pr[0].call(:last).concat pr[1].call(:last)
-}
-assert_equal %q{12}, %q{
- def iter
- yield
- end
-
- def getproc &b
- b
- end
-
- iter{
- bvar = 3
- getproc{
- bvar2 = 4
- bvar * bvar2
- }
- }.call
-}
-assert_equal %q{200}, %q{
- def iter
- yield
- end
-
- def getproc &b
- b
- end
-
- loc1 = 0
- pr1 = iter{
- bl1 = 1
- getproc{
- loc1 += 1
- bl1 += 1
- loc1 + bl1
- }
- }
-
- pr2 = iter{
- bl1 = 1
- getproc{
- loc1 += 1
- bl1 += 1
- loc1 + bl1
- }
- }
-
- pr1.call; pr2.call
- pr1.call; pr2.call
- pr1.call; pr2.call
- (pr1.call + pr2.call) * loc1
-}
-assert_equal %q{[1, 2]}, %q{
- def proc(&pr)
- pr
- end
-
- def m
- a = 1
- m2{
- a
- }
- end
-
- def m2
- b = 2
- proc{
- [yield, b]
- }
- end
-
- pr = m
- x = ['a', 1,2,3,4,5,6,7,8,9,0,
- 1,2,3,4,5,6,7,8,9,0,
- 1,2,3,4,5,6,7,8,9,0,
- 1,2,3,4,5,6,7,8,9,0,
- 1,2,3,4,5,6,7,8,9,0,]
- pr.call
-}
-assert_equal %q{1}, %q{
- def proc(&pr)
- pr
- end
-
- def m
- a = 1
- m2{
- a
- }
- end
-
- def m2
- b = 2
- proc{
- [yield, b]
- }
- 100000.times{|x|
- "#{x}"
- }
- yield
- end
- m
-}
-assert_equal %q{[:C, :C]}, %q{
- Const = :top
- class C
- Const = :C
- $pr = proc{
- (1..2).map{
- Const
- }
- }
- end
- $pr.call
-}
-assert_equal %q{top}, %q{
- Const = :top
- class C
- Const = :C
- end
- pr = proc{
- Const
- }
- C.class_eval %q{
- pr.call
- }
-}
-assert_equal %q{1}, %q{
- def m(&b)
- b
- end
-
- m{|e_proctest| e_proctest}.call(1)
-}
-assert_equal %q{12}, %q{
- def m(&b)
- b
- end
-
- m{|e_proctest1, e_proctest2|
- a = e_proctest1 * e_proctest2 * 2
- a * 3
- }.call(1, 2)
-}
-assert_equal %q{[[], [1], [1, 2], [1, 2, 3]]}, %q{
- [
- Proc.new{|*args| args}.call(),
- Proc.new{|*args| args}.call(1),
- Proc.new{|*args| args}.call(1, 2),
- Proc.new{|*args| args}.call(1, 2, 3),
- ]
-}
-assert_equal %q{[[nil, []], [1, []], [1, [2]], [1, [2, 3]]]}, %q{
- [
- Proc.new{|a, *b| [a, b]}.call(),
- Proc.new{|a, *b| [a, b]}.call(1),
- Proc.new{|a, *b| [a, b]}.call(1, 2),
- Proc.new{|a, *b| [a, b]}.call(1, 2, 3),
- ]
-}
-assert_equal %q{0}, %q{
- pr = proc{
- $SAFE
- }
- $SAFE = 1
- pr.call
-}
-assert_equal %q{[1, 0]}, %q{
- pr = proc{
- $SAFE += 1
- }
- [pr.call, $SAFE]
-}
-assert_equal %q{1}, %q{
- def m(&b)
- b
- end
- m{1}.call
-}
-assert_equal %q{3}, %q{
- def m(&b)
- b
- end
-
- m{
- a = 1
- a + 2
- }.call
-}
-assert_equal %Q{ok\n}, %q{
- class A; def get_block; proc {puts "ok"} end end
- block = A.new.get_block
- GC.start
- block.call
-}, '[ruby-core:14885]'
-
-assert_equal 'ok', %q{
- a = lambda {|x, y, &b| b }
- b = a.curry[1]
- if b.call(2){} == nil
- :ng
- else
- :ok
- end
-}, '[ruby-core:15551]'
-
-assert_equal 'ok', %q{
- lambda {
- break :ok
- :ng
- }.call
-}, '[ruby-dev:34646]'
-
-assert_equal %q{[:bar, :foo]}, %q{
- def foo
- klass = Class.new do
- define_method(:bar) do
- return :bar
- end
- end
- [klass.new.bar, :foo]
- end
- foo
-}, "[ ruby-Bugs-19304 ]"
-
-assert_equal 'ok', %q{
- $x = :ok
- def def7(x, y)
- x[y]
- $x = :ng
- end
- def test_def7
- def7(lambda {|x| x.call}, Proc.new {return})
- $x = :ng
- end
- test_def7
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- lambda { a = lambda { return }; $x = :ng; a[]; $x = :ok }.call
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- lambda { a = lambda { break }; $x = :ng; a[]; $x = :ok }.call
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- def def8
- $x = :ng
- lambda { a = Proc.new { return }; a[]}.call
- $x = :ok
- end
- def8
- $x
-}, '[ruby-core:17164]'
-
-
-assert_equal 'ok', %q{
- def def9
- lambda {|a| $x = :ok; a[]; $x = :ng }.call(Proc.new { return })
- $x = :ng
- end
- def9
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- def def10
- $x = :ng
- lambda { 1.times { return } }.call
- $x = :ok
- end
- $x = :ok
- def10
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- def def11
- yield
- end
- begin
- lambda { def11 { return } }.call
- rescue LocalJumpError
- :ng
- else
- :ok
- end
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- def def12
- b = Proc.new { $x = :ng; lambda { return }.call; $x = :ok }.call
- end
- def12
- $x
-}, '[ruby-core:17164]'
-
-assert_equal 'ok', %q{
- def m
- pr = proc{
- proc{
- return :ok
- }
- }.call
- pr.call
- :ng
- end
- m()
-}
-
-assert_equal 'ok', %q{
- class Foo
- def call_it
- p = Proc.new
- p.call
- end
- end
-
- def give_it
- proc { :ok }
- end
-
- f = Foo.new
- a_proc = give_it
- f.call_it(&give_it())
-}, '[ruby-core:15711]'
-
-assert_equal 'foo!', %q{
- class FooProc < Proc
- def initialize
- @foo = "foo!"
- end
-
- def bar
- @foo
- end
- end
-
- def bar
- FooProc.new &lambda{
- p 1
- }
- end
-
- fp = bar(&lambda{
- p 2
- })
-
- fp.bar
-}, 'Subclass of Proc'
-
-assert_equal 'ok', %q{
- o = Object.new
- def o.write(s); end
- $stderr = o
- at_exit{
- print $!.message
- }
- raise "ok"
-}
-
-assert_equal 'ok', %q{
- lambda do
- class A
- class B
- proc{return :ng}.call
- end
- end
- end.call
- :ok
-}
-
-assert_equal 'ok', %q{
- $proc = proc{return}
- begin
- lambda do
- class A
- class B
- $proc.call
- end
- end
- end.call
- :ng
- rescue LocalJumpError
- :ok
- end
-}
-
-assert_equal 'ok', %q{
- def x
- binding
- end
- b = x{|a| a }
- b.eval('yield("ok")')
-}, '[Bug #5634]'
-
-assert_equal 'ok', %q{
- def x
- binding
- end
- eval("x { 'ok' }").eval "yield"
-}, '[Bug #5634]'
-
-assert_equal 'ok', %q{
- def x
- binding
- end
- def m
- x{ 'ok' }
- end
- eval('yield', m)
-}, '[Bug #5634]'
-
diff --git a/bootstraptest/test_string.rb b/bootstraptest/test_string.rb
deleted file mode 100644
index 849dcd45b0..0000000000
--- a/bootstraptest/test_string.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-assert_normal_exit %q{
- inspect.clear
-}, '[ruby-core:68110]'
diff --git a/bootstraptest/test_struct.rb b/bootstraptest/test_struct.rb
deleted file mode 100644
index a65964d5f9..0000000000
--- a/bootstraptest/test_struct.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-assert_equal 'Struct::Foo', %q{
- Struct.instance_eval { const_set(:Foo, nil) }
- Struct.new("Foo")
- Struct::Foo
-}
diff --git a/bootstraptest/test_syntax.rb b/bootstraptest/test_syntax.rb
deleted file mode 100644
index a111990a1f..0000000000
--- a/bootstraptest/test_syntax.rb
+++ /dev/null
@@ -1,904 +0,0 @@
-assert_equal %q{4}, %q{1 && 2 && 3 && 4}
-assert_equal %q{}, %q{1 && nil && 3 && 4}
-assert_equal %q{}, %q{1 && 2 && 3 && nil}
-assert_equal %q{false}, %q{1 && 2 && 3 && false}
-assert_equal %q{4}, %q{1 and 2 and 3 and 4}
-assert_equal %q{}, %q{1 and nil and 3 and 4}
-assert_equal %q{}, %q{1 and 2 and 3 and nil}
-assert_equal %q{false}, %q{1 and 2 and 3 and false}
-assert_equal %q{}, %q{nil && true}
-assert_equal %q{false}, %q{false && true}
-assert_equal %q{}, %q{
- case 1
- when 2
- :ng
- end}
-assert_equal %q{ok}, %q{
- case 1
- when 10,20,30
- :ng1
- when 1,2,3
- :ok
- when 100,200,300
- :ng2
- else
- :elseng
- end}
-assert_equal %q{elseok}, %q{
- case 123
- when 10,20,30
- :ng1
- when 1,2,3
- :ng2
- when 100,200,300
- :ng3
- else
- :elseok
- end
-}
-assert_equal %q{ok}, %q{
- case 'test'
- when /testx/
- :ng1
- when /test/
- :ok
- when /tetxx/
- :ng2
- else
- :ng_else
- end
-}
-assert_equal %q{ok}, %q{
- case Object.new
- when Object
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- case Object
- when Object.new
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- case 'test'
- when 'tes'
- :ng
- when 'te'
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- case 'test'
- when 'tes'
- :ng
- when 'te'
- :ng
- when 'test'
- :ok
- end
-}
-assert_equal %q{ng}, %q{
- case 'test'
- when 'tes'
- :ng
- when /te/
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- case 'test'
- when 'tes'
- :ng
- when /test/
- :ok
- else
- :ng
- end
-}
-assert_equal %q{100}, %q{
- def test(arg)
- case 1
- when 2
- 3
- end
- return arg
- end
-
- test(100)
-}
-assert_equal %q{ok}, %q{
- ary = [1, 2]
- case 1
- when *ary
- :ok
- else
- :ng
- end
-}
-assert_equal %q{ok}, %q{
- ary = [1, 2]
- case 3
- when *ary
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- ary = [1, 2]
- case 1
- when :x, *ary
- :ok
- when :z
- :ng1
- else
- :ng2
- end
-}
-assert_equal %q{ok}, %q{
- ary = [1, 2]
- case 3
- when :x, *ary
- :ng1
- when :z
- :ng2
- else
- :ok
- end
-}
-assert_equal %q{[:false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep]}, %q{
-
- def make_perm ary, num
- if num == 1
- ary.map{|e| [e]}
- else
- base = make_perm(ary, num-1)
- res = []
- base.each{|b|
- ary.each{|e|
- res << [e] + b
- }
- }
- res
- end
- end
-
- def each_test
- conds = make_perm(['fv', 'tv'], 3)
- bangs = make_perm(['', '!'], 3)
- exprs = make_perm(['and', 'or'], 3)
- ['if', 'unless'].each{|syn|
- conds.each{|cs|
- bangs.each{|bs|
- exprs.each{|es|
- yield(syn, cs, bs, es)
- }
- }
- }
- }
- end
-
- fv = false
- tv = true
-
- $ans = []
- each_test{|syn, conds, bangs, exprs|
- c1, c2, c3 = conds
- bang1, bang2, bang3 = bangs
- e1, e2 = exprs
- eval %Q{
- #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
- $ans << :then
- else
- $ans << :false
- end
- }
- }
-
- each_test{|syn, conds, bangs, exprs|
- c1, c2, c3 = conds
- bang1, bang2, bang3 = bangs
- e1, e2 = exprs
- eval %Q{
- #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
- $ans << :then
- end
- $ans << :sep
- }
- }
- $ans
-}
-assert_equal %q{}, %q{
- defined?(m)
-}
-assert_equal %q{method}, %q{
- def m
- end
- defined?(m)
-}
-assert_equal %q{}, %q{
- defined?(a.class)
-}
-assert_equal %q{method}, %q{
- a = 1
- defined?(a.class)
-}
-assert_equal %q{["method", "method", "method", "method", nil, nil, "method", "method", "method", nil]}, %q{
- class C
- def test
- [defined?(m1()), defined?(self.m1), defined?(C.new.m1),
- defined?(m2()), defined?(self.m2), defined?(C.new.m2),
- defined?(m3()), defined?(self.m3), defined?(C.new.m3)]
- end
- def m1
- end
- private
- def m2
- end
- protected
- def m3
- end
- end
- C.new.test + [defined?(C.new.m3)]
-}
-assert_equal %q{[nil, nil, nil, nil, "global-variable", "global-variable", nil, nil]}, %q{
- $ans = [defined?($1), defined?($2), defined?($3), defined?($4)]
- /(a)(b)/ =~ 'ab'
- $ans + [defined?($1), defined?($2), defined?($3), defined?($4)]
-}
-assert_equal %q{nilselftruefalse}, %q{
- defined?(nil) + defined?(self) +
- defined?(true) + defined?(false)
-}
-assert_equal %q{}, %q{
- defined?(@a)
-}
-assert_equal %q{instance-variable}, %q{
- @a = 1
- defined?(@a)
-}
-assert_equal %q{}, %q{
- defined?(@@a)
-}
-assert_equal %q{class variable}, %q{
- @@a = 1
- defined?(@@a)
-}
-assert_equal %q{}, %q{
- defined?($a)
-}
-assert_equal %q{global-variable}, %q{
- $a = 1
- defined?($a)
-}
-assert_equal %q{}, %q{
- defined?(C_definedtest)
-}
-assert_equal %q{constant}, %q{
- C_definedtest = 1
- defined?(C_definedtest)
-}
-assert_equal %q{}, %q{
- defined?(::C_definedtest)
-}
-assert_equal %q{constant}, %q{
- C_definedtest = 1
- defined?(::C_definedtest)
-}
-assert_equal %q{}, %q{
- defined?(C_definedtestA::C_definedtestB::C_definedtestC)
-}
-assert_equal %q{constant}, %q{
- class C_definedtestA
- class C_definedtestB
- C_definedtestC = 1
- end
- end
- defined?(C_definedtestA::C_definedtestB::C_definedtestC)
-}
-assert_equal %q{30}, %q{
- sum = 0
- 30.times{|ib|
- if ib % 10 == 0 .. true
- sum += ib
- end
- }
- sum
-}
-assert_equal %q{63}, %q{
- sum = 0
- 30.times{|ib|
- if ib % 10 == 0 ... true
- sum += ib
- end
- }
- sum
-}
-assert_equal %q{[["NUM", "Type: NUM\n"], ["NUM", "123\n"], ["NUM", "456\n"], ["NUM", "Type: ARP\n"], ["NUM", "aaa\n"], ["NUM", "bbb\n"], ["NUM", "\f\n"], ["ARP", "Type: ARP\n"], ["ARP", "aaa\n"], ["ARP", "bbb\n"]]}, %q{
- t = nil
- unless ''.respond_to? :lines
- class String
- def lines
- self
- end
- end
- end
- ary = []
-"this must not print
-Type: NUM
-123
-456
-Type: ARP
-aaa
-bbb
-\f
-this must not print
-hoge
-Type: ARP
-aaa
-bbb
-".lines.each{|l|
- if (t = l[/^Type: (.*)/, 1])..(/^\f/ =~ l)
- ary << [t, l]
- end
- }
- ary
-}
-assert_equal %q{1}, %q{if true then 1 ; end}
-assert_equal %q{}, %q{if false then 1 ; end}
-assert_equal %q{1}, %q{if true then 1 ; else; 2; end}
-assert_equal %q{2}, %q{if false then 1 ; else; 2; end}
-assert_equal %q{}, %q{if true then ; elsif true then ; 1 ; end}
-assert_equal %q{1}, %q{if false then ; elsif true then ; 1 ; end}
-assert_equal %q{}, %q{unless true then 1 ; end}
-assert_equal %q{1}, %q{unless false then 1 ; end}
-assert_equal %q{2}, %q{unless true then 1 ; else; 2; end}
-assert_equal %q{1}, %q{unless false then 1 ; else; 2; end}
-assert_equal %q{1}, %q{1 if true}
-assert_equal %q{}, %q{1 if false}
-assert_equal %q{}, %q{1 if nil}
-assert_equal %q{}, %q{1 unless true}
-assert_equal %q{1}, %q{1 unless false}
-assert_equal %q{1}, %q{1 unless nil}
-assert_equal %q{1}, %q{1 || 2 || 3 || 4}
-assert_equal %q{1}, %q{1 || false || 3 || 4}
-assert_equal %q{2}, %q{nil || 2 || 3 || 4}
-assert_equal %q{2}, %q{false || 2 || 3 || 4}
-assert_equal %q{false}, %q{nil || false || nil || false}
-assert_equal %q{1}, %q{1 or 2 or 3 or 4}
-assert_equal %q{1}, %q{1 or false or 3 or 4}
-assert_equal %q{2}, %q{nil or 2 or 3 or 4}
-assert_equal %q{2}, %q{false or 2 or 3 or 4}
-assert_equal %q{1}, %q{if true && ""; then 1; end}
-assert_equal %q{1}, %q{if nil || true; then 1; end}
-assert_equal %q{false}, %q{nil or false or nil or false}
-assert_equal %q{elseng}, %q{
- case
- when 1==2, 2==3
- :ng1
- when false, 4==5
- :ok
- when false
- :ng2
- else
- :elseng
- end
-}
-assert_equal %q{ok}, %q{
- case
- when nil, nil
- :ng1
- when 1,2,3
- :ok
- when false, false
- :ng2
- else
- :elseng
- end
-}
-assert_equal %q{elseok}, %q{
- case
- when nil
- :ng1
- when false
- :ng2
- else
- :elseok
- end}
-assert_equal %q{}, %q{
- case
- when 1
- end
-}
-assert_equal %q{ok}, %q{
- r = nil
- ary = []
- case
- when false
- r = :ng1
- when false, false
- r = :ng2
- when *ary
- r = :ng3
- when false, *ary
- r = :ng4
- when true, *ary
- r = :ok
- end
- r
-}
-assert_equal %q{ok}, %q{
- ary = []
- case
- when false, *ary
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- ary = [false, nil]
- case
- when *ary
- :ng
- else
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- ary = [false, nil]
- case
- when *ary
- :ng
- when true
- :ok
- else
- :ng2
- end
-}
-assert_equal %q{ng}, %q{
- ary = [false, nil]
- case
- when *ary
- :ok
- else
- :ng
- end
-}
-assert_equal %q{ok}, %q{
- ary = [false, true]
- case
- when *ary
- :ok
- else
- :ng
- end
-}
-assert_equal %q{ok}, %q{
- ary = [false, true]
- case
- when false, false
- when false, *ary
- :ok
- else
- :ng
- end
-}
-assert_equal %q{}, %q{
- i = 0
- while i < 10
- i+=1
- end}
-assert_equal %q{10}, %q{
- i = 0
- while i < 10
- i+=1
- end; i}
-assert_equal %q{}, %q{
- i = 0
- until i > 10
- i+=1
- end}
-assert_equal %q{11}, %q{
- i = 0
- until i > 10
- i+=1
- end; i}
-assert_equal %q{1}, %q{
- i = 0
- begin
- i+=1
- end while false
- i
-}
-assert_equal %q{1}, %q{
- i = 0
- begin
- i+=1
- end until true
- i
-}
-def assert_syntax_error expected, code, message = ''
- assert_equal "#{expected}",
- "begin eval(%q{#{code}}, nil, '', 0)"'; rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end', message
-end
-assert_syntax_error "unterminated string meets end of file", '().."', '[ruby-dev:29732]'
-assert_equal %q{[]}, %q{$&;[]}, '[ruby-dev:31068]'
-assert_syntax_error "syntax error, unexpected *, expecting '}'", %q{{*0}}, '[ruby-dev:31072]'
-assert_syntax_error "`@0' is not allowed as an instance variable name", %q{@0..0}, '[ruby-dev:31095]'
-assert_syntax_error "identifier $00 is not valid to get", %q{$00..0}, '[ruby-dev:31100]'
-assert_syntax_error "identifier $00 is not valid to set", %q{0..$00=1}
-assert_equal %q{0}, %q{[*0];0}, '[ruby-dev:31102]'
-assert_syntax_error "syntax error, unexpected ')'", %q{v0,(*,v1,) = 0}, '[ruby-dev:31104]'
-assert_equal %q{1}, %q{
- class << (ary=[]); def []; 0; end; def []=(x); super(0,x);end;end; ary[]+=1
-}, '[ruby-dev:31110]'
-assert_syntax_error "Can't set variable $1", %q{0..$1=1}, '[ruby-dev:31118]'
-assert_valid_syntax %q{1.times{1+(1&&next)}}, '[ruby-dev:31119]'
-assert_valid_syntax %q{x=-1;loop{x+=1&&redo if (x+=1).zero?}}, '[ruby-dev:31119]'
-assert_syntax_error %q{syntax error, unexpected end-of-input}, %q{!}, '[ruby-dev:31243]'
-assert_equal %q{[nil]}, %q{[()]}, '[ruby-dev:31252]'
-assert_equal %q{true}, %q{!_=()}, '[ruby-dev:31263]'
-assert_equal 'ok', %q{while true; redo; end if 1 == 2; :ok}, '[ruby-dev:31360]'
-assert_equal 'ok', %q{
- 1.times {
- begin
- ensure
- next
- end
- }; :ok
-}, '[ruby-dev:31373]'
-assert_equal 'ok', %q{
- flag = false
- 1.times {
- next if flag
- flag = true
- begin
- ensure
- redo
- end
- }; :ok
-}, '[ruby-dev:31373]'
-
-assert_equal 'ok', %q{
- 1.times{
- p(1, (next; 2))
- }; :ok
-}
-assert_equal '3', %q{
- i = 0
- 1 + (while true
- break 2 if (i+=1) > 1
- next
- end)
-}
-assert_equal '3', %q{
- i = 0
- 1 + (while true
- break 2 if (i+=1) > 1
- p(1, (next; 2))
- end)
-}
-# redo
-assert_equal 'ok', %q{
- i = 0
- 1.times{
- break if i>1
- i+=1
- p(1, (redo; 2))
- }; :ok
-}
-assert_equal '3', %q{
- i = 0
- 1 + (while true
- break 2 if (i+=1) > 1
- redo
- end)
-}
-assert_equal '3', %q{
- i = 0
- 1 + (while true
- break 2 if (i+=1) > 1
- p(1, (redo; 2))
- end)
-}
-assert_equal '1', %q{
- a = [0]
- a[*a]+=1
-}
-assert_equal '2', %q{
- ary = [0]
- case 1
- when *ary, 1
- 1
- end +
- case
- when *ary
- 1
- end
-}
-
-assert_match /invalid multibyte char/, %q{
- STDERR.reopen(STDOUT)
- eval("\"\xf0".force_encoding("utf-8"))
-}, '[ruby-dev:32429]'
-
-# method ! and !=
-assert_equal 'true', %q{!false}
-assert_equal 'true', %q{1 == 1}
-assert_equal 'true', %q{1 != 2}
-assert_equal 'true', %q{
- class C; def !=(obj); true; end; end
- C.new != 1
-}
-assert_equal 'true', %q{
- class C; def !@; true; end; end
- !C.new
-}
-assert_normal_exit %q{
- eval "while true; return; end rescue p $!"
-}, '[ruby-dev:31663]'
-assert_equal '1', %q{
- def bar
- raise
- end
-
- def foo
- 1.times{
- begin
- return bar
- rescue
- :ok
- end
- }
- end
-
- foo
-}
-
-assert_equal 'ok', %q{
- counter = 2
- while true
- counter -= 1
- next if counter != 0
- break
- end
- :ok
-}, '[ruby-core:14385]'
-
-assert_equal 'ok', %q{
- counter = 2
- while true
- counter -= 1
- next if counter != 0
- break :ok
- end # direct
-}, '[ruby-core:14385]'
-
-assert_equal 'ok', %q{
- counter = 2
- while true
- counter -= 1
- break if counter == 0
- "#{next}"
- end
- :ok
-}, 'reported by Yusuke ENDOH'
-
-assert_equal 'ok', %q{
- counter = 2
- while true
- counter -= 1
- break if counter == 0
- next
- redo
- end
- :ok
-}, 'reported by Yusuke ENDOH'
-
-assert_equal 'ok', %q{
- counter = 2
- while true
- counter -= 1
- break if counter == 0
- next
- "#{ redo }"
- end
- :ok
-}, 'reported by Yusuke ENDOH'
-
-assert_normal_exit %q{
- begin
- raise
- rescue
- counter = 2
- while true
- counter -= 1
- break if counter == 0
- next
- retry
- end
- end
-}, 'reported by Yusuke ENDOH'
-
-assert_normal_exit %q{
- counter = 2
- while true
- counter -= 1
- break if counter == 0
- next
- "#{ break }"
- end
-}, 'reported by Yusuke ENDOH'
-
-assert_normal_exit %q{
- counter = 2
- while true
- counter -= 1
- next if counter != 0
- "#{ break }"
- end
-}, 'reported by Yusuke ENDOH'
-
-assert_equal 'ok', %q{
- 1.times do
- [
- 1, 2, 3, 4, 5, 6, 7, 8,
- begin
- false ? next : p
- break while true
- end
- ]
- end
- :ok
-}, '[ruby-dev:32882]'
-
-assert_equal "1\n2\n", %q{
- i = 0
- while i<2
- i += 1
- next p(i)
- end
-}
-
-assert_valid_syntax('1.times {|i|print (42),1;}', '[ruby-list:44479]')
-
-assert_equal 'ok', %q{
- def a() end
- begin
- if defined?(a(1).a)
- :ng
- else
- :ok
- end
- rescue
- :ng
- end
-}, '[ruby-core:16010]'
-
-assert_equal 'ok', %q{
- def a() end
- begin
- if defined?(a::B)
- :ng
- else
- :ok
- end
- rescue
- :ng
- end
-}, '[ruby-core:16010]'
-
-assert_normal_exit %q{
- defined? C && 0
-}
-
-assert_normal_exit %q{
- class C
- def m
- defined?(super())
- end
- end
- C.new.m
-}
-
-assert_equal 'ok', %q{
- class X < RuntimeError;end
- x = [X]
- begin
- raise X
- rescue *x
- :ok
- end
-}, '[ruby-core:14537]'
-
-assert_equal 'ok', %q{
- a = [false]
- (a[0] &&= true) == false ? :ok : :ng
-}, '[ruby-dev:34679]'
-
-assert_normal_exit %q{
- a = []
- 100.times {|i| a << i << nil << nil }
- p a.compact!
-}
-
-assert_equal 'ok', %q{
- "#{}""#{}ok"
-}, '[ruby-dev:38968]'
-
-
-assert_equal 'ok', %q{
- "o" "#{}k"
-}, '[ruby-dev:38980]'
-
-bug2415 = '[ruby-core:26961]'
-assert_normal_exit %q{
- 0.times do
- 0.times do
- def x(a=1, b, *rest); nil end
- end
- end
-}, bug2415
-
-assert_normal_exit %q{
- 0.times do
- 0.times do
- def x@; nil end
- end
- end
-}, bug2415
-
-assert_normal_exit %q{
- 0.times do
- 0.times do
- def x(a = 0.times do
- def y(a=1, b, *rest); nil; end
- end)
- nil
- end
- end
- end
-}, bug2415
-
-assert_normal_exit %q{
- 0.times do
- 0.times do
- def x(a = 0.times do
- def x@; nil; end
- end)
- nil
- end
- end
- end
-}, bug2415
-
-assert_normal_exit %q{
- a {
- b {|c.d| }
- e
- }
-}, '[ruby-dev:39861]'
-
-bug1240 = '[ruby-core:22637]'
-assert_valid_syntax('x y { "#{}".z { } }', bug1240)
-assert_valid_syntax('x y { "#{}".z do end }', bug1240)
-
-assert_valid_syntax('y "#{a 1}" do end', '[ruby-core:29579]')
-assert_normal_exit %q{
- def foo(&block)
- yield
- end
-
- foo do
- s = defined?(raise + 1)
- Class
- end
-}, '[ruby-core:30293]'
diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb
deleted file mode 100644
index d64f44be49..0000000000
--- a/bootstraptest/test_thread.rb
+++ /dev/null
@@ -1,476 +0,0 @@
-# Thread and Fiber
-
-assert_equal %q{ok}, %q{
- Thread.new{
- }.join
- :ok
-}
-assert_equal %q{ok}, %q{
- Thread.new{
- :ok
- }.value
-}
-assert_equal %q{ok}, %q{
-begin
- v = 0
- (1..200).map{|i|
- Thread.new{
- i
- }
- }.each{|t|
- v += t.value
- }
- v == 20100 ? :ok : v
-rescue ThreadError => e
- :ok if /can't create Thread/ =~ e.message
-end
-}
-assert_equal %q{5000}, %q{
- 5000.times{|e|
- (1..2).map{
- Thread.new{
- }
- }.each{|e|
- e.join()
- }
- }
-}
-assert_equal %q{5000}, %q{
- 5000.times{|e|
- (1..2).map{
- Thread.new{
- }
- }.each{|e|
- e.join(1000000000)
- }
- }
-}
-assert_equal %q{ok}, %q{
-begin
- :ok if 5000 == 5000.times{
- t = Thread.new{}
- while t.alive?
- Thread.pass
- end
- }
-rescue NoMemoryError
- :ok
-end
-}
-assert_equal %q{100}, %q{
- 100.times{
- Thread.new{loop{Thread.pass}}
- }
-}
-assert_equal %q{ok}, %q{
- Thread.new{
- :ok
- }.join.value
-}
-assert_equal %q{ok}, %q{
- begin
- Thread.new{
- raise "ok"
- }.join
- rescue => e
- e
- end
-}
-assert_equal %q{ok}, %q{
- ans = nil
- t = Thread.new{
- begin
- sleep 0.5
- ensure
- ans = :ok
- end
- }
- Thread.pass until t.stop?
- t.kill
- t.join
- ans
-}
-assert_equal %q{ok}, %q{
- t = Thread.new{
- sleep
- }
- sleep 0.1
- t.raise
- begin
- t.join
- :ng
- rescue
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- t = Thread.new{
- loop{}
- }
- Thread.pass
- t.raise
- begin
- t.join
- :ng
- rescue
- :ok
- end
-}
-assert_equal %q{ok}, %q{
- t = Thread.new{
- }
- Thread.pass
- t.join
- t.raise # raise to exited thread
- begin
- t.join
- :ok
- rescue
- :ng
- end
-}
-assert_equal %q{run}, %q{
- t = Thread.new{
- loop{}
- }
- st = t.status
- t.kill
- st
-}
-assert_equal %q{sleep}, %q{
- t = Thread.new{
- sleep
- }
- sleep 0.1
- st = t.status
- t.kill
- st
-}
-assert_equal %q{false}, %q{
- t = Thread.new{
- }
- t.kill
- sleep 0.1
- t.status
-}
-assert_equal %q{[ThreadGroup, true]}, %q{
- ptg = Thread.current.group
- Thread.new{
- ctg = Thread.current.group
- [ctg.class, ctg == ptg]
- }.value
-}
-assert_equal %q{[1, 1]}, %q{
- thg = ThreadGroup.new
-
- t = Thread.new{
- thg.add Thread.current
- sleep
- }
- sleep 0.1
- [thg.list.size, ThreadGroup::Default.list.size]
-}
-assert_equal %q{true}, %q{
- thg = ThreadGroup.new
-
- t = Thread.new{sleep 5}
- thg.add t
- thg.list.include?(t)
-}
-assert_equal %q{[true, nil, true]}, %q{
- /a/ =~ 'a'
- $a = $~
- Thread.new{
- $b = $~
- /b/ =~ 'b'
- $c = $~
- }.join
- $d = $~
- [$a == $d, $b, $c != $d]
-}
-assert_equal %q{11}, %q{
- Thread.current[:a] = 1
- Thread.new{
- Thread.current[:a] = 10
- Thread.pass
- Thread.current[:a]
- }.value + Thread.current[:a]
-}
-assert_normal_exit %q{
- begin
- 100.times do |i|
- begin
- th = Thread.start(Thread.current) {|u| u.raise }
- raise
- rescue
- ensure
- th.join
- end
- end
- rescue
- end
-}, '[ruby-dev:31371]'
-
-assert_equal 'true', %{
- t = Thread.new { loop {} }
- begin
- pid = fork {
- exit t.status != "run"
- }
- Process.wait pid
- $?.success?
- rescue NotImplementedError
- true
- end
-}
-
-assert_equal 'ok', %{
- open("zzz.rb", "w") do |f|
- f.puts <<-END
- begin
- Thread.new { fork { GC.start } }.join
- pid, status = Process.wait2
- $result = status.success? ? :ok : :ng
- rescue NotImplementedError
- $result = :ok
- end
- END
- end
- require "./zzz.rb"
- $result
-}
-
-assert_finish 3, %{
- th = Thread.new {sleep 0.2}
- th.join(0.1)
- th.join
-}
-
-assert_finish 3, %{
- require 'timeout'
- th = Thread.new {sleep 0.2}
- begin
- Timeout.timeout(0.1) {th.join}
- rescue Timeout::Error
- end
- th.join
-}
-
-assert_normal_exit %q{
- STDERR.reopen(STDOUT)
- exec "/"
-}
-
-assert_normal_exit %q{
- (0..10).map {
- Thread.new {
- 10000.times {
- Object.new.to_s
- }
- }
- }.each {|t|
- t.join
- }
-}
-
-assert_equal 'ok', %q{
- def m
- t = Thread.new { while true; // =~ "" end }
- sleep 0.01
- 10.times {
- if /((ab)*(ab)*)*(b)/ =~ "ab"*7
- return :ng if !$4
- return :ng if $~.size != 5
- end
- }
- :ok
- ensure
- Thread.kill t
- end
- m
-}, '[ruby-dev:34492]'
-
-assert_normal_exit %q{
- at_exit { Fiber.new{}.resume }
-}
-
-assert_normal_exit %q{
- g = enum_for(:local_variables)
- loop { g.next }
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- g = enum_for(:block_given?)
- loop { g.next }
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- g = enum_for(:binding)
- loop { g.next }
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- g = "abc".enum_for(:scan, /./)
- loop { g.next }
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- g = Module.enum_for(:new)
- loop { g.next }
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- Fiber.new(&Object.method(:class_eval)).resume("foo")
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
- Thread.new("foo", &Object.method(:class_eval)).join
-}, '[ruby-dev:34128]'
-
-assert_equal 'ok', %q{
- begin
- Thread.new { Thread.stop }
- Thread.stop
- :ng
- rescue Exception
- :ok
- end
-}
-
-assert_equal 'ok', %q{
- begin
- m1, m2 = Mutex.new, Mutex.new
- f1 = f2 = false
- Thread.new { m1.lock; f2 = true; sleep 0.001 until f1; m2.lock }
- m2.lock; f1 = true; sleep 0.001 until f2; m1.lock
- :ng
- rescue Exception
- :ok
- end
-}
-
-assert_equal 'ok', %q{
- m = Mutex.new
- Thread.new { m.lock }; sleep 0.1; m.lock
- :ok
-}
-
-assert_equal 'ok', %q{
- m = Mutex.new
- Thread.new { m.lock }; m.lock
- :ok
-}
-
-assert_equal 'ok', %q{
- m = Mutex.new
- Thread.new { m.lock }.join; m.lock
- :ok
-}
-
-assert_equal 'ok', %q{
- m = Mutex.new
- Thread.new { m.lock; sleep 0.2 }
- sleep 0.1; m.lock
- :ok
-}
-
-assert_equal 'ok', %q{
- m = Mutex.new
- Thread.new { m.lock; sleep 0.2; m.unlock }
- sleep 0.1; m.lock
- :ok
-}
-
-assert_equal 'ok', %q{
- t = Thread.new {`echo`}
- t.join
- $? ? :ng : :ok
-}, '[ruby-dev:35414]'
-
-assert_equal 'ok', %q{
- begin
- 100.times{
- (1..100).map{ Thread.new(true) {|x| x == false } }.each{|th| th.join}
- }
- rescue NoMemoryError, StandardError
- end
- :ok
-}
-
-assert_equal 'ok', %{
- open("zzz.rb", "w") do |f|
- f.puts <<-'end;' # do
- begin
- m = Mutex.new
- parent = Thread.current
- th1 = Thread.new { m.lock; sleep }
- sleep 0.01 until th1.stop?
- Thread.new do
- sleep 0.01 until parent.stop?
- begin
- fork { GC.start }
- rescue Exception
- parent.raise $!
- end
- th1.run
- end
- m.lock
- pid, status = Process.wait2
- $result = status.success? ? :ok : :ng
- rescue NotImplementedError
- $result = :ok
- end
- end;
- end
- require "./zzz.rb"
- $result
-}
-
-assert_finish 3, %q{
- require 'thread'
-
- lock = Mutex.new
- cond = ConditionVariable.new
- t = Thread.new do
- lock.synchronize do
- cond.wait(lock)
- end
- end
-
- begin
- pid = fork do
- # Child
- STDOUT.write "This is the child process.\n"
- STDOUT.write "Child process exiting.\n"
- end
- Process.waitpid(pid)
- rescue NotImplementedError
- end
-}, '[ruby-core:23572]'
-
-assert_equal 'ok', %q{
- begin
- Process.waitpid2(fork {})[1].success? ? 'ok' : 'ng'
- rescue NotImplementedError
- 'ok'
- end
-}
-
-assert_equal 'foo', %q{
- i = 0
- Thread.start {sleep 1; exit!}
- f = proc {|s, c| /#{c.call; s}/o }
- th2 = Thread.new {
- sleep 0.01 until i == 1
- i = 2
- f.call("bar", proc {sleep 2});
- nil
- }
- th1 = Thread.new {
- f.call("foo", proc {i = 1; sleep 0.01 until i == 2; sleep 0.01})
- nil
- }
- [th1, th2].each {|t| t.join }
- GC.start
- f.call.source
-}
diff --git a/ccan/build_assert/build_assert.h b/ccan/build_assert/build_assert.h
deleted file mode 100644
index a04d1d4709..0000000000
--- a/ccan/build_assert/build_assert.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
-#ifndef CCAN_BUILD_ASSERT_H
-#define CCAN_BUILD_ASSERT_H
-
-/**
- * BUILD_ASSERT - assert a build-time dependency.
- * @cond: the compile-time condition which must be true.
- *
- * Your compile will fail if the condition isn't true, or can't be evaluated
- * by the compiler. This can only be used within a function.
- *
- * Example:
- * #include <stddef.h>
- * ...
- * static char *foo_to_char(struct foo *foo)
- * {
- * // This code needs string to be at start of foo.
- * BUILD_ASSERT(offsetof(struct foo, string) == 0);
- * return (char *)foo;
- * }
- */
-#define BUILD_ASSERT(cond) \
- do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
-
-/**
- * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
- * @cond: the compile-time condition which must be true.
- *
- * Your compile will fail if the condition isn't true, or can't be evaluated
- * by the compiler. This can be used in an expression: its value is "0".
- *
- * Example:
- * #define foo_to_char(foo) \
- * ((char *)(foo) \
- * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
- */
-#define BUILD_ASSERT_OR_ZERO(cond) \
- (sizeof(char [1 - 2*!(cond)]) - 1)
-
-#endif /* CCAN_BUILD_ASSERT_H */
diff --git a/ccan/check_type/check_type.h b/ccan/check_type/check_type.h
deleted file mode 100644
index 1f77a535e4..0000000000
--- a/ccan/check_type/check_type.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
-#ifndef CCAN_CHECK_TYPE_H
-#define CCAN_CHECK_TYPE_H
-
-/**
- * check_type - issue a warning or build failure if type is not correct.
- * @expr: the expression whose type we should check (not evaluated).
- * @type: the exact type we expect the expression to be.
- *
- * This macro is usually used within other macros to try to ensure that a macro
- * argument is of the expected type. No type promotion of the expression is
- * done: an unsigned int is not the same as an int!
- *
- * check_type() always evaluates to 0.
- *
- * If your compiler does not support typeof, then the best we can do is fail
- * to compile if the sizes of the types are unequal (a less complete check).
- *
- * Example:
- * // They should always pass a 64-bit value to _set_some_value!
- * #define set_some_value(expr) \
- * _set_some_value((check_type((expr), uint64_t), (expr)))
- */
-
-/**
- * check_types_match - issue a warning or build failure if types are not same.
- * @expr1: the first expression (not evaluated).
- * @expr2: the second expression (not evaluated).
- *
- * This macro is usually used within other macros to try to ensure that
- * arguments are of identical types. No type promotion of the expressions is
- * done: an unsigned int is not the same as an int!
- *
- * check_types_match() always evaluates to 0.
- *
- * If your compiler does not support typeof, then the best we can do is fail
- * to compile if the sizes of the types are unequal (a less complete check).
- *
- * Example:
- * // Do subtraction to get to enclosing type, but make sure that
- * // pointer is of correct type for that member.
- * #define container_of(mbr_ptr, encl_type, mbr) \
- * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \
- * ((encl_type *) \
- * ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr))))
- */
-#if HAVE_TYPEOF
-#define check_type(expr, type) \
- ((typeof(expr) *)0 != (type *)0)
-
-#define check_types_match(expr1, expr2) \
- ((typeof(expr1) *)0 != (typeof(expr2) *)0)
-#else
-#include "ccan/build_assert/build_assert.h"
-/* Without typeof, we can only test the sizes. */
-#define check_type(expr, type) \
- BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
-
-#define check_types_match(expr1, expr2) \
- BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
-#endif /* HAVE_TYPEOF */
-
-#endif /* CCAN_CHECK_TYPE_H */
diff --git a/ccan/container_of/container_of.h b/ccan/container_of/container_of.h
deleted file mode 100644
index ae3e1fc81f..0000000000
--- a/ccan/container_of/container_of.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
-#ifndef CCAN_CONTAINER_OF_H
-#define CCAN_CONTAINER_OF_H
-#include "ccan/check_type/check_type.h"
-
-/**
- * container_of - get pointer to enclosing structure
- * @member_ptr: pointer to the structure member
- * @containing_type: the type this member is within
- * @member: the name of this member within the structure.
- *
- * Given a pointer to a member of a structure, this macro does pointer
- * subtraction to return the pointer to the enclosing type.
- *
- * Example:
- * struct foo {
- * int fielda, fieldb;
- * // ...
- * };
- * struct info {
- * int some_other_field;
- * struct foo my_foo;
- * };
- *
- * static struct info *foo_to_info(struct foo *foo)
- * {
- * return container_of(foo, struct info, my_foo);
- * }
- */
-#define container_of(member_ptr, containing_type, member) \
- ((containing_type *) \
- ((char *)(member_ptr) \
- - container_off(containing_type, member)) \
- + check_types_match(*(member_ptr), ((containing_type *)0)->member))
-
-
-/**
- * container_of_or_null - get pointer to enclosing structure, or NULL
- * @member_ptr: pointer to the structure member
- * @containing_type: the type this member is within
- * @member: the name of this member within the structure.
- *
- * Given a pointer to a member of a structure, this macro does pointer
- * subtraction to return the pointer to the enclosing type, unless it
- * is given NULL, in which case it also returns NULL.
- *
- * Example:
- * struct foo {
- * int fielda, fieldb;
- * // ...
- * };
- * struct info {
- * int some_other_field;
- * struct foo my_foo;
- * };
- *
- * static struct info *foo_to_info_allowing_null(struct foo *foo)
- * {
- * return container_of_or_null(foo, struct info, my_foo);
- * }
- */
-static inline char *container_of_or_null_(void *member_ptr, size_t offset)
-{
- return member_ptr ? (char *)member_ptr - offset : NULL;
-}
-#define container_of_or_null(member_ptr, containing_type, member) \
- ((containing_type *) \
- container_of_or_null_(member_ptr, \
- container_off(containing_type, member)) \
- + check_types_match(*(member_ptr), ((containing_type *)0)->member))
-
-/**
- * container_off - get offset to enclosing structure
- * @containing_type: the type this member is within
- * @member: the name of this member within the structure.
- *
- * Given a pointer to a member of a structure, this macro does
- * typechecking and figures out the offset to the enclosing type.
- *
- * Example:
- * struct foo {
- * int fielda, fieldb;
- * // ...
- * };
- * struct info {
- * int some_other_field;
- * struct foo my_foo;
- * };
- *
- * static struct info *foo_to_info(struct foo *foo)
- * {
- * size_t off = container_off(struct info, my_foo);
- * return (void *)((char *)foo - off);
- * }
- */
-#define container_off(containing_type, member) \
- offsetof(containing_type, member)
-
-/**
- * container_of_var - get pointer to enclosing structure using a variable
- * @member_ptr: pointer to the structure member
- * @container_var: a pointer of same type as this member's container
- * @member: the name of this member within the structure.
- *
- * Given a pointer to a member of a structure, this macro does pointer
- * subtraction to return the pointer to the enclosing type.
- *
- * Example:
- * static struct info *foo_to_i(struct foo *foo)
- * {
- * struct info *i = container_of_var(foo, i, my_foo);
- * return i;
- * }
- */
-#if HAVE_TYPEOF
-#define container_of_var(member_ptr, container_var, member) \
- container_of(member_ptr, typeof(*container_var), member)
-#else
-#define container_of_var(member_ptr, container_var, member) \
- ((void *)((char *)(member_ptr) - \
- container_off_var(container_var, member)))
-#endif
-
-/**
- * container_off_var - get offset of a field in enclosing structure
- * @container_var: a pointer to a container structure
- * @member: the name of a member within the structure.
- *
- * Given (any) pointer to a structure and a its member name, this
- * macro does pointer subtraction to return offset of member in a
- * structure memory layout.
- *
- */
-#if HAVE_TYPEOF
-#define container_off_var(var, member) \
- container_off(typeof(*var), member)
-#else
-#define container_off_var(var, member) \
- ((const char *)&(var)->member - (const char *)(var))
-#endif
-
-#endif /* CCAN_CONTAINER_OF_H */
diff --git a/ccan/licenses/BSD-MIT b/ccan/licenses/BSD-MIT
deleted file mode 100644
index 89de354795..0000000000
--- a/ccan/licenses/BSD-MIT
+++ /dev/null
@@ -1,17 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/ccan/licenses/CC0 b/ccan/licenses/CC0
deleted file mode 100644
index feb9b118e6..0000000000
--- a/ccan/licenses/CC0
+++ /dev/null
@@ -1,28 +0,0 @@
-Statement of Purpose
-
-The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
-
-Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
-
-For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
-
-1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
-
- the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
- moral rights retained by the original author(s) and/or performer(s);
- publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
- rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
- rights protecting the extraction, dissemination, use and reuse of data in a Work;
- database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
- other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
-
-2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
-
-3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
-
-4. Limitations and Disclaimers.
-
- No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
- Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
- Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
- Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
diff --git a/ccan/list/list.h b/ccan/list/list.h
deleted file mode 100644
index ca9f9f1f7f..0000000000
--- a/ccan/list/list.h
+++ /dev/null
@@ -1,773 +0,0 @@
-/* Licensed under BSD-MIT - see ccan/licenses/BSD-MIT file for details */
-#ifndef CCAN_LIST_H
-#define CCAN_LIST_H
-#include <assert.h>
-#include "ccan/str/str.h"
-#include "ccan/container_of/container_of.h"
-#include "ccan/check_type/check_type.h"
-
-/**
- * struct list_node - an entry in a doubly-linked list
- * @next: next entry (self if empty)
- * @prev: previous entry (self if empty)
- *
- * This is used as an entry in a linked list.
- * Example:
- * struct child {
- * const char *name;
- * // Linked list of all us children.
- * struct list_node list;
- * };
- */
-struct list_node
-{
- struct list_node *next, *prev;
-};
-
-/**
- * struct list_head - the head of a doubly-linked list
- * @h: the list_head (containing next and prev pointers)
- *
- * This is used as the head of a linked list.
- * Example:
- * struct parent {
- * const char *name;
- * struct list_head children;
- * unsigned int num_children;
- * };
- */
-struct list_head
-{
- struct list_node n;
-};
-
-#define LIST_LOC __FILE__ ":" stringify(__LINE__)
-#define list_debug(h, loc) ((void)loc, h)
-#define list_debug_node(n, loc) ((void)loc, n)
-
-/**
- * LIST_HEAD_INIT - initializer for an empty list_head
- * @name: the name of the list.
- *
- * Explicit initializer for an empty list.
- *
- * See also:
- * LIST_HEAD, list_head_init()
- *
- * Example:
- * static struct list_head my_list = LIST_HEAD_INIT(my_list);
- */
-#define LIST_HEAD_INIT(name) { { &name.n, &name.n } }
-
-/**
- * LIST_HEAD - define and initialize an empty list_head
- * @name: the name of the list.
- *
- * The LIST_HEAD macro defines a list_head and initializes it to an empty
- * list. It can be prepended by "static" to define a static list_head.
- *
- * See also:
- * LIST_HEAD_INIT, list_head_init()
- *
- * Example:
- * static LIST_HEAD(my_global_list);
- */
-#define LIST_HEAD(name) \
- struct list_head name = LIST_HEAD_INIT(name)
-
-/**
- * list_head_init - initialize a list_head
- * @h: the list_head to set to the empty list
- *
- * Example:
- * ...
- * struct parent *parent = malloc(sizeof(*parent));
- *
- * list_head_init(&parent->children);
- * parent->num_children = 0;
- */
-static inline void list_head_init(struct list_head *h)
-{
- h->n.next = h->n.prev = &h->n;
-}
-
-/**
- * list_node_init - initialize a list_node
- * @n: the list_node to link to itself.
- *
- * You don't need to use this normally! But it lets you list_del(@n)
- * safely.
- */
-static inline void list_node_init(struct list_node *n)
-{
- n->next = n->prev = n;
-}
-
-/**
- * list_add_after - add an entry after an existing node in a linked list
- * @h: the list_head to add the node to (for debugging)
- * @p: the existing list_node to add the node after
- * @n: the new list_node to add to the list.
- *
- * The existing list_node must already be a member of the list.
- * The new list_node does not need to be initialized; it will be overwritten.
- *
- * Example:
- * struct child c1, c2, c3;
- * LIST_HEAD(h);
- *
- * list_add_tail(&h, &c1.list);
- * list_add_tail(&h, &c3.list);
- * list_add_after(&h, &c1.list, &c2.list);
- */
-#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC)
-static inline void list_add_after_(struct list_head *h,
- struct list_node *p,
- struct list_node *n,
- const char *abortstr)
-{
- n->next = p->next;
- n->prev = p;
- p->next->prev = n;
- p->next = n;
- (void)list_debug(h, abortstr);
-}
-
-/**
- * list_add - add an entry at the start of a linked list.
- * @h: the list_head to add the node to
- * @n: the list_node to add to the list.
- *
- * The list_node does not need to be initialized; it will be overwritten.
- * Example:
- * struct child *child = malloc(sizeof(*child));
- *
- * child->name = "marvin";
- * list_add(&parent->children, &child->list);
- * parent->num_children++;
- */
-#define list_add(h, n) list_add_(h, n, LIST_LOC)
-static inline void list_add_(struct list_head *h,
- struct list_node *n,
- const char *abortstr)
-{
- list_add_after_(h, &h->n, n, abortstr);
-}
-
-/**
- * list_add_before - add an entry before an existing node in a linked list
- * @h: the list_head to add the node to (for debugging)
- * @p: the existing list_node to add the node before
- * @n: the new list_node to add to the list.
- *
- * The existing list_node must already be a member of the list.
- * The new list_node does not need to be initialized; it will be overwritten.
- *
- * Example:
- * list_head_init(&h);
- * list_add_tail(&h, &c1.list);
- * list_add_tail(&h, &c3.list);
- * list_add_before(&h, &c3.list, &c2.list);
- */
-#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC)
-static inline void list_add_before_(struct list_head *h,
- struct list_node *p,
- struct list_node *n,
- const char *abortstr)
-{
- n->next = p;
- n->prev = p->prev;
- p->prev->next = n;
- p->prev = n;
- (void)list_debug(h, abortstr);
-}
-
-/**
- * list_add_tail - add an entry at the end of a linked list.
- * @h: the list_head to add the node to
- * @n: the list_node to add to the list.
- *
- * The list_node does not need to be initialized; it will be overwritten.
- * Example:
- * list_add_tail(&parent->children, &child->list);
- * parent->num_children++;
- */
-#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC)
-static inline void list_add_tail_(struct list_head *h,
- struct list_node *n,
- const char *abortstr)
-{
- list_add_before_(h, &h->n, n, abortstr);
-}
-
-/**
- * list_empty - is a list empty?
- * @h: the list_head
- *
- * If the list is empty, returns true.
- *
- * Example:
- * assert(list_empty(&parent->children) == (parent->num_children == 0));
- */
-#define list_empty(h) list_empty_(h, LIST_LOC)
-static inline int list_empty_(const struct list_head *h, const char* abortstr)
-{
- (void)list_debug(h, abortstr);
- return h->n.next == &h->n;
-}
-
-/**
- * list_empty_nodebug - is a list empty (and don't perform debug checks)?
- * @h: the list_head
- *
- * If the list is empty, returns true.
- * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it
- * will NOT perform debug checks. Only use this function if you REALLY
- * know what you're doing.
- *
- * Example:
- * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0));
- */
-#ifndef CCAN_LIST_DEBUG
-#define list_empty_nodebug(h) list_empty(h)
-#else
-static inline int list_empty_nodebug(const struct list_head *h)
-{
- return h->n.next == &h->n;
-}
-#endif
-
-/**
- * list_del - delete an entry from an (unknown) linked list.
- * @n: the list_node to delete from the list.
- *
- * Note that this leaves @n in an undefined state; it can be added to
- * another list, but not deleted again.
- *
- * See also:
- * list_del_from(), list_del_init()
- *
- * Example:
- * list_del(&child->list);
- * parent->num_children--;
- */
-#define list_del(n) list_del_(n, LIST_LOC)
-static inline void list_del_(struct list_node *n, const char* abortstr)
-{
- (void)list_debug_node(n, abortstr);
- n->next->prev = n->prev;
- n->prev->next = n->next;
-#ifdef CCAN_LIST_DEBUG
- /* Catch use-after-del. */
- n->next = n->prev = NULL;
-#endif
-}
-
-/**
- * list_del_init - delete a node, and reset it so it can be deleted again.
- * @n: the list_node to be deleted.
- *
- * list_del(@n) or list_del_init() again after this will be safe,
- * which can be useful in some cases.
- *
- * See also:
- * list_del_from(), list_del()
- *
- * Example:
- * list_del_init(&child->list);
- * parent->num_children--;
- */
-#define list_del_init(n) list_del_init_(n, LIST_LOC)
-static inline void list_del_init_(struct list_node *n, const char *abortstr)
-{
- list_del_(n, abortstr);
- list_node_init(n);
-}
-
-/**
- * list_del_from - delete an entry from a known linked list.
- * @h: the list_head the node is in.
- * @n: the list_node to delete from the list.
- *
- * This explicitly indicates which list a node is expected to be in,
- * which is better documentation and can catch more bugs.
- *
- * See also: list_del()
- *
- * Example:
- * list_del_from(&parent->children, &child->list);
- * parent->num_children--;
- */
-static inline void list_del_from(struct list_head *h, struct list_node *n)
-{
-#ifdef CCAN_LIST_DEBUG
- {
- /* Thorough check: make sure it was in list! */
- struct list_node *i;
- for (i = h->n.next; i != n; i = i->next)
- assert(i != &h->n);
- }
-#endif /* CCAN_LIST_DEBUG */
-
- /* Quick test that catches a surprising number of bugs. */
- assert(!list_empty(h));
- list_del(n);
-}
-
-/**
- * list_swap - swap out an entry from an (unknown) linked list for a new one.
- * @o: the list_node to replace from the list.
- * @n: the list_node to insert in place of the old one.
- *
- * Note that this leaves @o in an undefined state; it can be added to
- * another list, but not deleted/swapped again.
- *
- * See also:
- * list_del()
- *
- * Example:
- * struct child x1, x2;
- * LIST_HEAD(xh);
- *
- * list_add(&xh, &x1.list);
- * list_swap(&x1.list, &x2.list);
- */
-#define list_swap(o, n) list_swap_(o, n, LIST_LOC)
-static inline void list_swap_(struct list_node *o,
- struct list_node *n,
- const char* abortstr)
-{
- (void)list_debug_node(o, abortstr);
- *n = *o;
- n->next->prev = n;
- n->prev->next = n;
-#ifdef CCAN_LIST_DEBUG
- /* Catch use-after-del. */
- o->next = o->prev = NULL;
-#endif
-}
-
-/**
- * list_entry - convert a list_node back into the structure containing it.
- * @n: the list_node
- * @type: the type of the entry
- * @member: the list_node member of the type
- *
- * Example:
- * // First list entry is children.next; convert back to child.
- * child = list_entry(parent->children.n.next, struct child, list);
- *
- * See Also:
- * list_top(), list_for_each()
- */
-#define list_entry(n, type, member) container_of(n, type, member)
-
-/**
- * list_top - get the first entry in a list
- * @h: the list_head
- * @type: the type of the entry
- * @member: the list_node member of the type
- *
- * If the list is empty, returns NULL.
- *
- * Example:
- * struct child *first;
- * first = list_top(&parent->children, struct child, list);
- * if (!first)
- * printf("Empty list!\n");
- */
-#define list_top(h, type, member) \
- ((type *)list_top_((h), list_off_(type, member)))
-
-static inline const void *list_top_(const struct list_head *h, size_t off)
-{
- if (list_empty(h))
- return NULL;
- return (const char *)h->n.next - off;
-}
-
-/**
- * list_pop - remove the first entry in a list
- * @h: the list_head
- * @type: the type of the entry
- * @member: the list_node member of the type
- *
- * If the list is empty, returns NULL.
- *
- * Example:
- * struct child *one;
- * one = list_pop(&parent->children, struct child, list);
- * if (!one)
- * printf("Empty list!\n");
- */
-#define list_pop(h, type, member) \
- ((type *)list_pop_((h), list_off_(type, member)))
-
-static inline const void *list_pop_(const struct list_head *h, size_t off)
-{
- struct list_node *n;
-
- if (list_empty(h))
- return NULL;
- n = h->n.next;
- list_del(n);
- return (const char *)n - off;
-}
-
-/**
- * list_tail - get the last entry in a list
- * @h: the list_head
- * @type: the type of the entry
- * @member: the list_node member of the type
- *
- * If the list is empty, returns NULL.
- *
- * Example:
- * struct child *last;
- * last = list_tail(&parent->children, struct child, list);
- * if (!last)
- * printf("Empty list!\n");
- */
-#define list_tail(h, type, member) \
- ((type *)list_tail_((h), list_off_(type, member)))
-
-static inline const void *list_tail_(const struct list_head *h, size_t off)
-{
- if (list_empty(h))
- return NULL;
- return (const char *)h->n.prev - off;
-}
-
-/**
- * list_for_each - iterate through a list.
- * @h: the list_head (warning: evaluated multiple times!)
- * @i: the structure containing the list_node
- * @member: the list_node member of the structure
- *
- * This is a convenient wrapper to iterate @i over the entire list. It's
- * a for loop, so you can break and continue as normal.
- *
- * Example:
- * list_for_each(&parent->children, child, list)
- * printf("Name: %s\n", child->name);
- */
-#define list_for_each(h, i, member) \
- list_for_each_off(h, i, list_off_var_(i, member))
-
-/**
- * list_for_each_rev - iterate through a list backwards.
- * @h: the list_head
- * @i: the structure containing the list_node
- * @member: the list_node member of the structure
- *
- * This is a convenient wrapper to iterate @i over the entire list. It's
- * a for loop, so you can break and continue as normal.
- *
- * Example:
- * list_for_each_rev(&parent->children, child, list)
- * printf("Name: %s\n", child->name);
- */
-#define list_for_each_rev(h, i, member) \
- list_for_each_rev_off(h, i, list_off_var_(i, member))
-
-/**
- * list_for_each_rev_safe - iterate through a list backwards,
- * maybe during deletion
- * @h: the list_head
- * @i: the structure containing the list_node
- * @nxt: the structure containing the list_node
- * @member: the list_node member of the structure
- *
- * This is a convenient wrapper to iterate @i over the entire list backwards.
- * It's a for loop, so you can break and continue as normal. The extra
- * variable * @nxt is used to hold the next element, so you can delete @i
- * from the list.
- *
- * Example:
- * struct child *next;
- * list_for_each_rev_safe(&parent->children, child, next, list) {
- * printf("Name: %s\n", child->name);
- * }
- */
-#define list_for_each_rev_safe(h, i, nxt, member) \
- list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))
-
-/**
- * list_for_each_safe - iterate through a list, maybe during deletion
- * @h: the list_head
- * @i: the structure containing the list_node
- * @nxt: the structure containing the list_node
- * @member: the list_node member of the structure
- *
- * This is a convenient wrapper to iterate @i over the entire list. It's
- * a for loop, so you can break and continue as normal. The extra variable
- * @nxt is used to hold the next element, so you can delete @i from the list.
- *
- * Example:
- * list_for_each_safe(&parent->children, child, next, list) {
- * list_del(&child->list);
- * parent->num_children--;
- * }
- */
-#define list_for_each_safe(h, i, nxt, member) \
- list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))
-
-/**
- * list_next - get the next entry in a list
- * @h: the list_head
- * @i: a pointer to an entry in the list.
- * @member: the list_node member of the structure
- *
- * If @i was the last entry in the list, returns NULL.
- *
- * Example:
- * struct child *second;
- * second = list_next(&parent->children, first, list);
- * if (!second)
- * printf("No second child!\n");
- */
-#define list_next(h, i, member) \
- ((list_typeof(i))list_entry_or_null(list_debug(h, \
- __FILE__ ":" stringify(__LINE__)), \
- (i)->member.next, \
- list_off_var_((i), member)))
-
-/**
- * list_prev - get the previous entry in a list
- * @h: the list_head
- * @i: a pointer to an entry in the list.
- * @member: the list_node member of the structure
- *
- * If @i was the first entry in the list, returns NULL.
- *
- * Example:
- * first = list_prev(&parent->children, second, list);
- * if (!first)
- * printf("Can't go back to first child?!\n");
- */
-#define list_prev(h, i, member) \
- ((list_typeof(i))list_entry_or_null(list_debug(h, \
- __FILE__ ":" stringify(__LINE__)), \
- (i)->member.prev, \
- list_off_var_((i), member)))
-
-/**
- * list_append_list - empty one list onto the end of another.
- * @to: the list to append into
- * @from: the list to empty.
- *
- * This takes the entire contents of @from and moves it to the end of
- * @to. After this @from will be empty.
- *
- * Example:
- * struct list_head adopter;
- *
- * list_append_list(&adopter, &parent->children);
- * assert(list_empty(&parent->children));
- * parent->num_children = 0;
- */
-#define list_append_list(t, f) list_append_list_(t, f, \
- __FILE__ ":" stringify(__LINE__))
-static inline void list_append_list_(struct list_head *to,
- struct list_head *from,
- const char *abortstr)
-{
- struct list_node *from_tail = list_debug(from, abortstr)->n.prev;
- struct list_node *to_tail = list_debug(to, abortstr)->n.prev;
-
- /* Sew in head and entire list. */
- to->n.prev = from_tail;
- from_tail->next = &to->n;
- to_tail->next = &from->n;
- from->n.prev = to_tail;
-
- /* Now remove head. */
- list_del(&from->n);
- list_head_init(from);
-}
-
-/**
- * list_prepend_list - empty one list into the start of another.
- * @to: the list to prepend into
- * @from: the list to empty.
- *
- * This takes the entire contents of @from and moves it to the start
- * of @to. After this @from will be empty.
- *
- * Example:
- * list_prepend_list(&adopter, &parent->children);
- * assert(list_empty(&parent->children));
- * parent->num_children = 0;
- */
-#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC)
-static inline void list_prepend_list_(struct list_head *to,
- struct list_head *from,
- const char *abortstr)
-{
- struct list_node *from_tail = list_debug(from, abortstr)->n.prev;
- struct list_node *to_head = list_debug(to, abortstr)->n.next;
-
- /* Sew in head and entire list. */
- to->n.next = &from->n;
- from->n.prev = &to->n;
- to_head->prev = from_tail;
- from_tail->next = to_head;
-
- /* Now remove head. */
- list_del(&from->n);
- list_head_init(from);
-}
-
-/* internal macros, do not use directly */
-#define list_for_each_off_dir_(h, i, off, dir) \
- for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \
- (off)); \
- list_node_from_off_((void *)i, (off)) != &(h)->n; \
- i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \
- (off)))
-
-#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \
- for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \
- (off)), \
- nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \
- (off)); \
- list_node_from_off_(i, (off)) != &(h)->n; \
- i = nxt, \
- nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \
- (off)))
-
-/**
- * list_for_each_off - iterate through a list of memory regions.
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @off: offset(relative to @i) at which list node data resides.
- *
- * This is a low-level wrapper to iterate @i over the entire list, used to
- * implement all oher, more high-level, for-each constructs. It's a for loop,
- * so you can break and continue as normal.
- *
- * WARNING! Being the low-level macro that it is, this wrapper doesn't know
- * nor care about the type of @i. The only assumtion made is that @i points
- * to a chunk of memory that at some @offset, relative to @i, contains a
- * properly filled `struct node_list' which in turn contains pointers to
- * memory chunks and it's turtles all the way down. Whith all that in mind
- * remember that given the wrong pointer/offset couple this macro will
- * happilly churn all you memory untill SEGFAULT stops it, in other words
- * caveat emptor.
- *
- * It is worth mentioning that one of legitimate use-cases for that wrapper
- * is operation on opaque types with known offset for `struct list_node'
- * member(preferably 0), because it allows you not to disclose the type of
- * @i.
- *
- * Example:
- * list_for_each_off(&parent->children, child,
- * offsetof(struct child, list))
- * printf("Name: %s\n", child->name);
- */
-#define list_for_each_off(h, i, off) \
- list_for_each_off_dir_((h),(i),(off),next)
-
-/**
- * list_for_each_rev_off - iterate through a list of memory regions backwards
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @off: offset(relative to @i) at which list node data resides.
- *
- * See list_for_each_off for details
- */
-#define list_for_each_rev_off(h, i, off) \
- list_for_each_off_dir_((h),(i),(off),prev)
-
-/**
- * list_for_each_safe_off - iterate through a list of memory regions, maybe
- * during deletion
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @nxt: the structure containing the list_node
- * @off: offset(relative to @i) at which list node data resides.
- *
- * For details see `list_for_each_off' and `list_for_each_safe'
- * descriptions.
- *
- * Example:
- * list_for_each_safe_off(&parent->children, child,
- * next, offsetof(struct child, list))
- * printf("Name: %s\n", child->name);
- */
-#define list_for_each_safe_off(h, i, nxt, off) \
- list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
-
-/**
- * list_for_each_rev_safe_off - iterate backwards through a list of
- * memory regions, maybe during deletion
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @nxt: the structure containing the list_node
- * @off: offset(relative to @i) at which list node data resides.
- *
- * For details see `list_for_each_rev_off' and `list_for_each_rev_safe'
- * descriptions.
- *
- * Example:
- * list_for_each_rev_safe_off(&parent->children, child,
- * next, offsetof(struct child, list))
- * printf("Name: %s\n", child->name);
- */
-#define list_for_each_rev_safe_off(h, i, nxt, off) \
- list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
-
-/* Other -off variants. */
-#define list_entry_off(n, type, off) \
- ((type *)list_node_from_off_((n), (off)))
-
-#define list_head_off(h, type, off) \
- ((type *)list_head_off((h), (off)))
-
-#define list_tail_off(h, type, off) \
- ((type *)list_tail_((h), (off)))
-
-#define list_add_off(h, n, off) \
- list_add((h), list_node_from_off_((n), (off)))
-
-#define list_del_off(n, off) \
- list_del(list_node_from_off_((n), (off)))
-
-#define list_del_from_off(h, n, off) \
- list_del_from(h, list_node_from_off_((n), (off)))
-
-/* Offset helper functions so we only single-evaluate. */
-static inline void *list_node_to_off_(struct list_node *node, size_t off)
-{
- return (void *)((char *)node - off);
-}
-static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
-{
- return (struct list_node *)((char *)ptr + off);
-}
-
-/* Get the offset of the member, but make sure it's a list_node. */
-#define list_off_(type, member) \
- (container_off(type, member) + \
- check_type(((type *)0)->member, struct list_node))
-
-#define list_off_var_(var, member) \
- (container_off_var(var, member) + \
- check_type(var->member, struct list_node))
-
-#if HAVE_TYPEOF
-#define list_typeof(var) typeof(var)
-#else
-#define list_typeof(var) void *
-#endif
-
-/* Returns member, or NULL if at end of list. */
-static inline void *list_entry_or_null(const struct list_head *h,
- const struct list_node *n,
- size_t off)
-{
- if (n == &h->n)
- return NULL;
- return (char *)n - off;
-}
-#endif /* CCAN_LIST_H */
diff --git a/ccan/str/str.h b/ccan/str/str.h
deleted file mode 100644
index 9a9da9cd3f..0000000000
--- a/ccan/str/str.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
-#ifndef CCAN_STR_H
-#define CCAN_STR_H
-/**
- * stringify - Turn expression into a string literal
- * @expr: any C expression
- *
- * Example:
- * #define PRINT_COND_IF_FALSE(cond) \
- * ((cond) || printf("%s is false!", stringify(cond)))
- */
-#define stringify(expr) stringify_1(expr)
-/* Double-indirection required to stringify expansions */
-#define stringify_1(expr) #expr
-
-#endif /* CCAN_STR_H */
diff --git a/class.c b/class.c
index a72f4dcebd..80f57a1622 100644
--- a/class.c
+++ b/class.c
@@ -3,597 +3,208 @@
class.c -
$Author$
+ $Date$
created at: Tue Aug 10 15:05:44 JST 1993
- Copyright (C) 1993-2007 Yukihiro Matsumoto
+ Copyright (C) 1993-2003 Yukihiro Matsumoto
**********************************************************************/
-/*!
- * \defgroup class Classes and their hierarchy.
- * \par Terminology
- * - class: same as in Ruby.
- * - singleton class: class for a particular object
- * - eigenclass: = singleton class
- * - metaclass: class of a class. metaclass is a kind of singleton class.
- * - metametaclass: class of a metaclass.
- * - meta^(n)-class: class of a meta^(n-1)-class.
- * - attached object: A singleton class knows its unique instance.
- * The instance is called the attached object for the singleton class.
- * \{
- */
-
-#include "internal.h"
-#include "ruby/st.h"
-#include "constant.h"
-#include "vm_core.h"
-#include "id_table.h"
+#include "ruby.h"
+#include "rubysig.h"
+#include "node.h"
+#include "st.h"
#include <ctype.h>
-#define id_attached id__attached__
-
-void
-rb_class_subclass_add(VALUE super, VALUE klass)
-{
- rb_subclass_entry_t *entry, *head;
-
- if (super && super != Qundef) {
- entry = ALLOC(rb_subclass_entry_t);
- entry->klass = klass;
- entry->next = NULL;
-
- head = RCLASS_EXT(super)->subclasses;
- if (head) {
- entry->next = head;
- RCLASS_EXT(head->klass)->parent_subclasses = &entry->next;
- }
-
- RCLASS_EXT(super)->subclasses = entry;
- RCLASS_EXT(klass)->parent_subclasses = &RCLASS_EXT(super)->subclasses;
- }
-}
-
-static void
-rb_module_add_to_subclasses_list(VALUE module, VALUE iclass)
-{
- rb_subclass_entry_t *entry, *head;
-
- entry = ALLOC(rb_subclass_entry_t);
- entry->klass = iclass;
- entry->next = NULL;
-
- head = RCLASS_EXT(module)->subclasses;
- if (head) {
- entry->next = head;
- RCLASS_EXT(head->klass)->module_subclasses = &entry->next;
- }
-
- RCLASS_EXT(module)->subclasses = entry;
- RCLASS_EXT(iclass)->module_subclasses = &RCLASS_EXT(module)->subclasses;
-}
-
-void
-rb_class_remove_from_super_subclasses(VALUE klass)
-{
- rb_subclass_entry_t *entry;
-
- if (RCLASS_EXT(klass)->parent_subclasses) {
- entry = *RCLASS_EXT(klass)->parent_subclasses;
-
- *RCLASS_EXT(klass)->parent_subclasses = entry->next;
- if (entry->next) {
- RCLASS_EXT(entry->next->klass)->parent_subclasses = RCLASS_EXT(klass)->parent_subclasses;
- }
- xfree(entry);
- }
-
- RCLASS_EXT(klass)->parent_subclasses = NULL;
-}
-
-void
-rb_class_remove_from_module_subclasses(VALUE klass)
-{
- rb_subclass_entry_t *entry;
+extern st_table *rb_class_tbl;
- if (RCLASS_EXT(klass)->module_subclasses) {
- entry = *RCLASS_EXT(klass)->module_subclasses;
- *RCLASS_EXT(klass)->module_subclasses = entry->next;
-
- if (entry->next) {
- RCLASS_EXT(entry->next->klass)->module_subclasses = RCLASS_EXT(klass)->module_subclasses;
- }
-
- xfree(entry);
- }
-
- RCLASS_EXT(klass)->module_subclasses = NULL;
-}
-
-void
-rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE arg)
-{
- rb_subclass_entry_t *cur = RCLASS_EXT(klass)->subclasses;
-
- /* do not be tempted to simplify this loop into a for loop, the order of
- operations is important here if `f` modifies the linked list */
- while (cur) {
- VALUE curklass = cur->klass;
- cur = cur->next;
- f(curklass, arg);
- }
-}
-
-static void
-class_detach_subclasses(VALUE klass, VALUE arg)
-{
- rb_class_remove_from_super_subclasses(klass);
-}
-
-void
-rb_class_detach_subclasses(VALUE klass)
-{
- rb_class_foreach_subclass(klass, class_detach_subclasses, Qnil);
-}
-
-static void
-class_detach_module_subclasses(VALUE klass, VALUE arg)
-{
- rb_class_remove_from_module_subclasses(klass);
-}
-
-void
-rb_class_detach_module_subclasses(VALUE klass)
-{
- rb_class_foreach_subclass(klass, class_detach_module_subclasses, Qnil);
-}
-
-/**
- * Allocates a struct RClass for a new class.
- *
- * \param flags initial value for basic.flags of the returned class.
- * \param klass the class of the returned class.
- * \return an uninitialized Class object.
- * \pre \p klass must refer \c Class class or an ancestor of Class.
- * \pre \code (flags | T_CLASS) != 0 \endcode
- * \post the returned class can safely be \c #initialize 'd.
- *
- * \note this function is not Class#allocate.
- */
-static VALUE
-class_alloc(VALUE flags, VALUE klass)
-{
- NEWOBJ_OF(obj, struct RClass, klass, (flags & T_MASK) | FL_PROMOTED1 /* start from age == 2 */ | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0));
- obj->ptr = ZALLOC(rb_classext_t);
- /* ZALLOC
- RCLASS_IV_TBL(obj) = 0;
- RCLASS_CONST_TBL(obj) = 0;
- RCLASS_M_TBL(obj) = 0;
- RCLASS_IV_INDEX_TBL(obj) = 0;
- RCLASS_SET_SUPER((VALUE)obj, 0);
- RCLASS_EXT(obj)->subclasses = NULL;
- RCLASS_EXT(obj)->parent_subclasses = NULL;
- RCLASS_EXT(obj)->module_subclasses = NULL;
- */
- RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj);
- RCLASS_SERIAL(obj) = rb_next_class_serial();
- RCLASS_REFINED_CLASS(obj) = Qnil;
- RCLASS_EXT(obj)->allocator = 0;
-
- return (VALUE)obj;
-}
-
-static void
-RCLASS_M_TBL_INIT(VALUE c)
-{
- RCLASS_M_TBL(c) = rb_id_table_create(0);
-}
-
-/*!
- * A utility function that wraps class_alloc.
- *
- * allocates a class and initializes safely.
- * \param super a class from which the new class derives.
- * \return a class object.
- * \pre \a super must be a class.
- * \post the metaclass of the new class is Class.
- */
VALUE
-rb_class_boot(VALUE super)
+rb_class_boot(super)
+ VALUE super;
{
- VALUE klass = class_alloc(T_CLASS, rb_cClass);
+ NEWOBJ(klass, struct RClass);
+ OBJSETUP(klass, rb_cClass, T_CLASS);
- RCLASS_SET_SUPER(klass, super);
- RCLASS_M_TBL_INIT(klass);
+ klass->super = super;
+ klass->iv_tbl = 0;
+ klass->m_tbl = 0; /* safe GC */
+ klass->m_tbl = st_init_numtable();
OBJ_INFECT(klass, super);
return (VALUE)klass;
}
-
-/*!
- * Ensures a class can be derived from super.
- *
- * \param super a reference to an object.
- * \exception TypeError if \a super is not a Class or \a super is a singleton class.
- */
-void
-rb_check_inheritable(VALUE super)
-{
- if (!RB_TYPE_P(super, T_CLASS)) {
- rb_raise(rb_eTypeError, "superclass must be a Class (%"PRIsVALUE" given)",
- rb_obj_class(super));
- }
- if (RBASIC(super)->flags & FL_SINGLETON) {
- rb_raise(rb_eTypeError, "can't make subclass of singleton class");
- }
- if (super == rb_cClass) {
- rb_raise(rb_eTypeError, "can't make subclass of Class");
- }
-}
-
-
-/*!
- * Creates a new class.
- * \param super a class from which the new class derives.
- * \exception TypeError \a super is not inheritable.
- * \exception TypeError \a super is the Class class.
- */
VALUE
-rb_class_new(VALUE super)
+rb_class_new(super)
+ VALUE super;
{
Check_Type(super, T_CLASS);
- rb_check_inheritable(super);
- return rb_class_boot(super);
-}
-
-static void
-clone_method(VALUE old_klass, VALUE new_klass, ID mid, const rb_method_entry_t *me)
-{
- if (me->def->type == VM_METHOD_TYPE_ISEQ) {
- rb_cref_t *new_cref;
- rb_vm_rewrite_cref(me->def->body.iseq.cref, old_klass, new_klass, &new_cref);
- rb_add_method_iseq(new_klass, mid, me->def->body.iseq.iseqptr, new_cref, METHOD_ENTRY_VISI(me));
+ if (super == rb_cClass) {
+ rb_raise(rb_eTypeError, "can't make subclass of Class");
}
- else {
- rb_method_entry_set(new_klass, mid, me, METHOD_ENTRY_VISI(me));
+ if (FL_TEST(super, FL_SINGLETON)) {
+ rb_raise(rb_eTypeError, "can't make subclass of virtual class");
}
+ return rb_class_boot(super);
}
-struct clone_method_arg {
- VALUE new_klass;
- VALUE old_klass;
-};
-
-static enum rb_id_table_iterator_result
-clone_method_i(ID key, VALUE value, void *data)
-{
- const struct clone_method_arg *arg = (struct clone_method_arg *)data;
- clone_method(arg->old_klass, arg->new_klass, key, (const rb_method_entry_t *)value);
- return ID_TABLE_CONTINUE;
-}
-
-struct clone_const_arg {
- VALUE klass;
+struct clone_method_data {
st_table *tbl;
+ VALUE klass;
};
static int
-clone_const(ID key, const rb_const_entry_t *ce, struct clone_const_arg *arg)
+clone_method(mid, body, data)
+ ID mid;
+ NODE *body;
+ struct clone_method_data *data;
{
- rb_const_entry_t *nce = ALLOC(rb_const_entry_t);
- MEMCPY(nce, ce, rb_const_entry_t, 1);
- RB_OBJ_WRITTEN(arg->klass, Qundef, ce->value);
- RB_OBJ_WRITTEN(arg->klass, Qundef, ce->file);
-
- st_insert(arg->tbl, key, (st_data_t)nce);
- return ST_CONTINUE;
-}
+ NODE *fbody = body->nd_body;
-static int
-clone_const_i(st_data_t key, st_data_t value, st_data_t data)
-{
- return clone_const((ID)key, (const rb_const_entry_t *)value, (struct clone_const_arg *)data);
-}
+ if (fbody && nd_type(fbody) == NODE_SCOPE) {
+ NODE *cref = (NODE*)fbody->nd_rval;
-static void
-class_init_copy_check(VALUE clone, VALUE orig)
-{
- if (orig == rb_cBasicObject) {
- rb_raise(rb_eTypeError, "can't copy the root class");
- }
- if (RCLASS_SUPER(clone) != 0 || clone == rb_cBasicObject) {
- rb_raise(rb_eTypeError, "already initialized class");
- }
- if (FL_TEST(orig, FL_SINGLETON)) {
- rb_raise(rb_eTypeError, "can't copy singleton class");
+ if (cref) cref = cref->nd_next;
+ fbody = rb_copy_node_scope(fbody, NEW_CREF(data->klass, cref));
}
+ st_insert(data->tbl, mid, (st_data_t)NEW_METHOD(fbody, body->nd_noex));
+ return ST_CONTINUE;
}
/* :nodoc: */
VALUE
-rb_mod_init_copy(VALUE clone, VALUE orig)
+rb_mod_init_copy(clone, orig)
+ VALUE clone, orig;
{
- if (RB_TYPE_P(clone, T_CLASS)) {
- class_init_copy_check(clone, orig);
- }
- if (!OBJ_INIT_COPY(clone, orig)) return clone;
+ rb_obj_init_copy(clone, orig);
if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
- rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
- }
- RCLASS_SET_SUPER(clone, RCLASS_SUPER(orig));
- RCLASS_EXT(clone)->allocator = RCLASS_EXT(orig)->allocator;
- if (RCLASS_IV_TBL(clone)) {
- st_free_table(RCLASS_IV_TBL(clone));
- RCLASS_IV_TBL(clone) = 0;
- }
- if (RCLASS_CONST_TBL(clone)) {
- rb_free_const_table(RCLASS_CONST_TBL(clone));
- RCLASS_CONST_TBL(clone) = 0;
- }
- RCLASS_M_TBL(clone) = 0;
- if (RCLASS_IV_TBL(orig)) {
- st_data_t id;
-
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(orig));
- CONST_ID(id, "__tmp_classpath__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
- CONST_ID(id, "__classpath__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
- CONST_ID(id, "__classid__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
+ RBASIC(clone)->klass = RBASIC(orig)->klass;
+ RBASIC(clone)->klass = rb_singleton_class_clone(clone);
}
- if (RCLASS_CONST_TBL(orig)) {
- struct clone_const_arg arg;
+ RCLASS(clone)->super = RCLASS(orig)->super;
+ if (RCLASS(orig)->iv_tbl) {
+ ID id;
- RCLASS_CONST_TBL(clone) = st_init_numtable();
- arg.klass = clone;
- arg.tbl = RCLASS_CONST_TBL(clone);
- st_foreach(RCLASS_CONST_TBL(orig), clone_const_i, (st_data_t)&arg);
+ RCLASS(clone)->iv_tbl = st_copy(RCLASS(orig)->iv_tbl);
+ id = rb_intern("__classpath__");
+ st_delete(RCLASS(clone)->iv_tbl, (st_data_t*)&id, 0);
+ id = rb_intern("__classid__");
+ st_delete(RCLASS(clone)->iv_tbl, (st_data_t*)&id, 0);
}
- if (RCLASS_M_TBL(orig)) {
- struct clone_method_arg arg;
- arg.old_klass = orig;
- arg.new_klass = clone;
- RCLASS_M_TBL_INIT(clone);
- rb_id_table_foreach(RCLASS_M_TBL(orig), clone_method_i, &arg);
+ if (RCLASS(orig)->m_tbl) {
+ struct clone_method_data data;
+
+ data.tbl = RCLASS(clone)->m_tbl = st_init_numtable();
+ data.klass = (VALUE)clone;
+
+ st_foreach(RCLASS(orig)->m_tbl, clone_method, (st_data_t)&data);
}
return clone;
}
+/* :nodoc: */
VALUE
-rb_singleton_class_clone(VALUE obj)
+rb_class_init_copy(clone, orig)
+ VALUE clone, orig;
{
- return rb_singleton_class_clone_and_attach(obj, Qundef);
+ if (RCLASS(clone)->super != 0) {
+ rb_raise(rb_eTypeError, "already initialized class");
+ }
+ if (FL_TEST(orig, FL_SINGLETON)) {
+ rb_raise(rb_eTypeError, "can't copy singleton class");
+ }
+ return rb_mod_init_copy(clone, orig);
}
VALUE
-rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach)
+rb_singleton_class_clone(obj)
+ VALUE obj;
{
- const VALUE klass = RBASIC(obj)->klass;
+ VALUE klass = RBASIC(obj)->klass;
if (!FL_TEST(klass, FL_SINGLETON))
return klass;
else {
/* copy singleton(unnamed) class */
- VALUE clone = class_alloc(RBASIC(klass)->flags, 0);
+ NEWOBJ(clone, struct RClass);
+ OBJSETUP(clone, 0, RBASIC(klass)->flags);
if (BUILTIN_TYPE(obj) == T_CLASS) {
- RBASIC_SET_CLASS(clone, clone);
+ RBASIC(clone)->klass = (VALUE)clone;
}
else {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(klass));
+ RBASIC(clone)->klass = rb_singleton_class_clone(klass);
}
- RCLASS_SET_SUPER(clone, RCLASS_SUPER(klass));
- RCLASS_EXT(clone)->allocator = RCLASS_EXT(klass)->allocator;
- if (RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(klass));
+ clone->super = RCLASS(klass)->super;
+ clone->iv_tbl = 0;
+ clone->m_tbl = 0;
+ if (RCLASS(klass)->iv_tbl) {
+ clone->iv_tbl = st_copy(RCLASS(klass)->iv_tbl);
}
- if (RCLASS_CONST_TBL(klass)) {
- struct clone_const_arg arg;
- RCLASS_CONST_TBL(clone) = st_init_numtable();
- arg.klass = clone;
- arg.tbl = RCLASS_CONST_TBL(clone);
- st_foreach(RCLASS_CONST_TBL(klass), clone_const_i, (st_data_t)&arg);
- }
- if (attach != Qundef) {
- rb_singleton_class_attached(clone, attach);
- }
- RCLASS_M_TBL_INIT(clone);
{
- struct clone_method_arg arg;
- arg.old_klass = klass;
- arg.new_klass = clone;
- rb_id_table_foreach(RCLASS_M_TBL(klass), clone_method_i, &arg);
+ struct clone_method_data data;
+
+ data.tbl = clone->m_tbl = st_init_numtable();
+ switch (TYPE(obj)) {
+ case T_CLASS:
+ case T_MODULE:
+ data.klass = obj;
+ break;
+ default:
+ data.klass = 0;
+ break;
+ }
+
+ st_foreach(RCLASS(klass)->m_tbl, clone_method, (st_data_t)&data);
}
- rb_singleton_class_attached(RBASIC(clone)->klass, clone);
+ rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
FL_SET(clone, FL_SINGLETON);
-
- return clone;
+ return (VALUE)clone;
}
}
-/*!
- * Attach a object to a singleton class.
- * @pre \a klass is the singleton class of \a obj.
- */
void
-rb_singleton_class_attached(VALUE klass, VALUE obj)
+rb_singleton_class_attached(klass, obj)
+ VALUE klass, obj;
{
if (FL_TEST(klass, FL_SINGLETON)) {
- if (!RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(klass) = st_init_numtable();
+ if (!RCLASS(klass)->iv_tbl) {
+ RCLASS(klass)->iv_tbl = st_init_numtable();
}
- rb_class_ivar_set(klass, id_attached, obj);
+ st_insert(RCLASS(klass)->iv_tbl, rb_intern("__attached__"), obj);
}
}
-
-
-#define METACLASS_OF(k) RBASIC(k)->klass
-#define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls)
-
-/*!
- * whether k is a meta^(n)-class of Class class
- * @retval 1 if \a k is a meta^(n)-class of Class class (n >= 0)
- * @retval 0 otherwise
- */
-#define META_CLASS_OF_CLASS_CLASS_P(k) (METACLASS_OF(k) == (k))
-
-static int
-rb_singleton_class_has_metaclass_p(VALUE sklass)
-{
- return rb_attr_get(METACLASS_OF(sklass), id_attached) == sklass;
-}
-
-int
-rb_singleton_class_internal_p(VALUE sklass)
-{
- return (RB_TYPE_P(rb_attr_get(sklass, id_attached), T_CLASS) &&
- !rb_singleton_class_has_metaclass_p(sklass));
-}
-
-/*!
- * whether k has a metaclass
- * @retval 1 if \a k has a metaclass
- * @retval 0 otherwise
- */
-#define HAVE_METACLASS_P(k) \
- (FL_TEST(METACLASS_OF(k), FL_SINGLETON) && \
- rb_singleton_class_has_metaclass_p(k))
-
-/*!
- * ensures \a klass belongs to its own eigenclass.
- * @return the eigenclass of \a klass
- * @post \a klass belongs to the returned eigenclass.
- * i.e. the attached object of the eigenclass is \a klass.
- * @note this macro creates a new eigenclass if necessary.
- */
-#define ENSURE_EIGENCLASS(klass) \
- (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
-
-
-/*!
- * Creates a metaclass of \a klass
- * \param klass a class
- * \return created metaclass for the class
- * \pre \a klass is a Class object
- * \pre \a klass has no singleton class.
- * \post the class of \a klass is the returned class.
- * \post the returned class is meta^(n+1)-class when \a klass is a meta^(n)-klass for n >= 0
- */
-static inline VALUE
-make_metaclass(VALUE klass)
-{
- VALUE super;
- VALUE metaclass = rb_class_boot(Qundef);
-
- FL_SET(metaclass, FL_SINGLETON);
- rb_singleton_class_attached(metaclass, klass);
-
- if (META_CLASS_OF_CLASS_CLASS_P(klass)) {
- SET_METACLASS_OF(klass, metaclass);
- SET_METACLASS_OF(metaclass, metaclass);
- }
- else {
- VALUE tmp = METACLASS_OF(klass); /* for a meta^(n)-class klass, tmp is meta^(n)-class of Class class */
- SET_METACLASS_OF(klass, metaclass);
- SET_METACLASS_OF(metaclass, ENSURE_EIGENCLASS(tmp));
- }
-
- super = RCLASS_SUPER(klass);
- while (RB_TYPE_P(super, T_ICLASS)) super = RCLASS_SUPER(super);
- RCLASS_SET_SUPER(metaclass, super ? ENSURE_EIGENCLASS(super) : rb_cClass);
-
- OBJ_INFECT(metaclass, RCLASS_SUPER(metaclass));
-
- return metaclass;
-}
-
-/*!
- * Creates a singleton class for \a obj.
- * \pre \a obj must not a immediate nor a special const.
- * \pre \a obj must not a Class object.
- * \pre \a obj has no singleton class.
- */
-static inline VALUE
-make_singleton_class(VALUE obj)
+VALUE
+rb_make_metaclass(obj, super)
+ VALUE obj, super;
{
- VALUE orig_class = RBASIC(obj)->klass;
- VALUE klass = rb_class_boot(orig_class);
-
+ VALUE klass = rb_class_boot(super);
FL_SET(klass, FL_SINGLETON);
- RBASIC_SET_CLASS(obj, klass);
+ RBASIC(obj)->klass = klass;
rb_singleton_class_attached(klass, obj);
-
- SET_METACLASS_OF(klass, METACLASS_OF(rb_class_real(orig_class)));
- return klass;
-}
-
-
-static VALUE
-boot_defclass(const char *name, VALUE super)
-{
- VALUE obj = rb_class_boot(super);
- ID id = rb_intern(name);
-
- rb_name_class(obj, id);
- rb_const_set((rb_cObject ? rb_cObject : obj), id, obj);
- return obj;
-}
-
-void
-Init_class_hierarchy(void)
-{
- rb_cBasicObject = boot_defclass("BasicObject", 0);
- rb_cObject = boot_defclass("Object", rb_cBasicObject);
- rb_cModule = boot_defclass("Module", rb_cObject);
- rb_cClass = boot_defclass("Class", rb_cModule);
-
- rb_const_set(rb_cObject, rb_intern_const("BasicObject"), rb_cBasicObject);
- RBASIC_SET_CLASS(rb_cClass, rb_cClass);
- RBASIC_SET_CLASS(rb_cModule, rb_cClass);
- RBASIC_SET_CLASS(rb_cObject, rb_cClass);
- RBASIC_SET_CLASS(rb_cBasicObject, rb_cClass);
-}
-
-
-/*!
- * \internal
- * Creates a new *singleton class* for an object.
- *
- * \pre \a obj has no singleton class.
- * \note DO NOT USE the function in an extension libraries. Use \ref rb_singleton_class.
- * \param obj An object.
- * \param unused ignored.
- * \return The singleton class of the object.
- */
-VALUE
-rb_make_metaclass(VALUE obj, VALUE unused)
-{
- if (BUILTIN_TYPE(obj) == T_CLASS) {
- return make_metaclass(obj);
+ if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
+ RBASIC(klass)->klass = klass;
+ RCLASS(klass)->super = RBASIC(rb_class_real(RCLASS(obj)->super))->klass;
}
else {
- return make_singleton_class(obj);
+ VALUE metasuper = RBASIC(rb_class_real(super))->klass;
+
+ /* metaclass of a superclass may be NULL at boot time */
+ if (metasuper) {
+ RBASIC(klass)->klass = metasuper;
+ }
}
-}
+ return klass;
+}
-/*!
- * Defines a new class.
- * \param id ignored
- * \param super A class from which the new class will derive. NULL means \c Object class.
- * \return the created class
- * \throw TypeError if super is not a \c Class object.
- *
- * \note the returned class will not be associated with \a id.
- * You must explicitly set a class name if necessary.
- */
VALUE
-rb_define_class_id(ID id, VALUE super)
+rb_define_class_id(id, super)
+ ID id;
+ VALUE super;
{
VALUE klass;
@@ -604,43 +215,31 @@ rb_define_class_id(ID id, VALUE super)
return klass;
}
+void
+rb_check_inheritable(super)
+ VALUE super;
+{
+ if (TYPE(super) != T_CLASS) {
+ rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",
+ rb_obj_classname(super));
+ }
+ if (RBASIC(super)->flags & FL_SINGLETON) {
+ rb_raise(rb_eTypeError, "can't make subclass of virtual class");
+ }
+}
-/*!
- * Calls Class#inherited.
- * \param super A class which will be called #inherited.
- * NULL means Object class.
- * \param klass A Class object which derived from \a super
- * \return the value \c Class#inherited's returns
- * \pre Each of \a super and \a klass must be a \c Class object.
- */
VALUE
-rb_class_inherited(VALUE super, VALUE klass)
+rb_class_inherited(super, klass)
+ VALUE super, klass;
{
- ID inherited;
if (!super) super = rb_cObject;
- CONST_ID(inherited, "inherited");
- return rb_funcall(super, inherited, 1, klass);
+ return rb_funcall(super, rb_intern("inherited"), 1, klass);
}
-
-
-/*!
- * Defines a top-level class.
- * \param name name of the class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw NameError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
VALUE
-rb_define_class(const char *name, VALUE super)
+rb_define_class(name, super)
+ const char *name;
+ VALUE super;
{
VALUE klass;
ID id;
@@ -648,12 +247,11 @@ rb_define_class(const char *name, VALUE super)
id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
klass = rb_const_get(rb_cObject, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
- rb_raise(rb_eTypeError, "%s is not a class (%"PRIsVALUE")",
- name, rb_obj_class(klass));
+ if (TYPE(klass) != T_CLASS) {
+ rb_raise(rb_eTypeError, "%s is not a class", name);
}
- if (rb_class_real(RCLASS_SUPER(klass)) != super) {
- rb_raise(rb_eTypeError, "superclass mismatch for class %s", name);
+ if (rb_class_real(RCLASS(klass)->super) != super) {
+ rb_name_error(id, "%s is already defined", name);
}
return klass;
}
@@ -661,7 +259,7 @@ rb_define_class(const char *name, VALUE super)
rb_warn("no super class for `%s', Object assumed", name);
}
klass = rb_define_class_id(id, super);
- rb_vm_add_root_module(id, klass);
+ st_add_direct(rb_class_tbl, id, klass);
rb_name_class(klass, id);
rb_const_set(rb_cObject, id, klass);
rb_class_inherited(super, klass);
@@ -669,89 +267,55 @@ rb_define_class(const char *name, VALUE super)
return klass;
}
-
-/*!
- * Defines a class under the namespace of \a outer.
- * \param outer a class which contains the new class.
- * \param name name of the new class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw TypeError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
VALUE
-rb_define_class_under(VALUE outer, const char *name, VALUE super)
-{
- return rb_define_class_id_under(outer, rb_intern(name), super);
-}
-
-
-/*!
- * Defines a class under the namespace of \a outer.
- * \param outer a class which contains the new class.
- * \param id name of the new class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw TypeError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
-VALUE
-rb_define_class_id_under(VALUE outer, ID id, VALUE super)
+rb_define_class_under(outer, name, super)
+ VALUE outer;
+ const char *name;
+ VALUE super;
{
VALUE klass;
+ ID id;
+ id = rb_intern(name);
if (rb_const_defined_at(outer, id)) {
klass = rb_const_get_at(outer, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
- rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a class"
- " (%"PRIsVALUE")",
- outer, rb_id2str(id), rb_obj_class(klass));
+ if (TYPE(klass) != T_CLASS) {
+ rb_raise(rb_eTypeError, "%s is not a class", name);
}
- if (rb_class_real(RCLASS_SUPER(klass)) != super) {
- rb_raise(rb_eTypeError, "superclass mismatch for class "
- "%"PRIsVALUE"::%"PRIsVALUE""
- " (%"PRIsVALUE" is given but was %"PRIsVALUE")",
- outer, rb_id2str(id), RCLASS_SUPER(klass), super);
+ if (rb_class_real(RCLASS(klass)->super) != super) {
+ rb_name_error(id, "%s is already defined", name);
}
return klass;
}
if (!super) {
- rb_warn("no super class for `%"PRIsVALUE"::%"PRIsVALUE"', Object assumed",
- rb_class_path(outer), rb_id2str(id));
+ rb_warn("no super class for `%s::%s', Object assumed",
+ rb_class2name(outer), name);
}
klass = rb_define_class_id(id, super);
- rb_set_class_path_string(klass, outer, rb_id2str(id));
+ rb_set_class_path(klass, outer, name);
rb_const_set(outer, id, klass);
rb_class_inherited(super, klass);
- rb_gc_register_mark_object(klass);
return klass;
}
VALUE
-rb_module_new(void)
+rb_module_new()
{
- VALUE mdl = class_alloc(T_MODULE, rb_cModule);
- RCLASS_M_TBL_INIT(mdl);
+ NEWOBJ(mdl, struct RClass);
+ OBJSETUP(mdl, rb_cModule, T_MODULE);
+
+ mdl->super = 0;
+ mdl->iv_tbl = 0;
+ mdl->m_tbl = 0;
+ mdl->m_tbl = st_init_numtable();
+
return (VALUE)mdl;
}
VALUE
-rb_define_module_id(ID id)
+rb_define_module_id(id)
+ ID id;
{
VALUE mdl;
@@ -762,7 +326,8 @@ rb_define_module_id(ID id)
}
VALUE
-rb_define_module(const char *name)
+rb_define_module(name)
+ const char *name;
{
VALUE module;
ID id;
@@ -770,73 +335,61 @@ rb_define_module(const char *name)
id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
module = rb_const_get(rb_cObject, id);
- if (!RB_TYPE_P(module, T_MODULE)) {
- rb_raise(rb_eTypeError, "%s is not a module (%"PRIsVALUE")",
- name, rb_obj_class(module));
- }
- return module;
+ if (TYPE(module) == T_MODULE)
+ return module;
+ rb_raise(rb_eTypeError, "%s is not a module", rb_obj_classname(module));
}
module = rb_define_module_id(id);
- rb_vm_add_root_module(id, module);
+ st_add_direct(rb_class_tbl, id, module);
rb_const_set(rb_cObject, id, module);
return module;
}
VALUE
-rb_define_module_under(VALUE outer, const char *name)
-{
- return rb_define_module_id_under(outer, rb_intern(name));
-}
-
-VALUE
-rb_define_module_id_under(VALUE outer, ID id)
+rb_define_module_under(outer, name)
+ VALUE outer;
+ const char *name;
{
VALUE module;
+ ID id;
+ id = rb_intern(name);
if (rb_const_defined_at(outer, id)) {
module = rb_const_get_at(outer, id);
- if (!RB_TYPE_P(module, T_MODULE)) {
- rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a module"
- " (%"PRIsVALUE")",
- outer, rb_id2str(id), rb_obj_class(module));
- }
- return module;
+ if (TYPE(module) == T_MODULE)
+ return module;
+ rb_raise(rb_eTypeError, "%s::%s is not a module",
+ rb_class2name(outer), rb_obj_classname(module));
}
module = rb_define_module_id(id);
rb_const_set(outer, id, module);
- rb_set_class_path_string(module, outer, rb_id2str(id));
- rb_gc_register_mark_object(module);
+ rb_set_class_path(module, outer, name);
return module;
}
-VALUE
-rb_include_class_new(VALUE module, VALUE super)
+static VALUE
+include_class_new(module, super)
+ VALUE module, super;
{
- VALUE klass = class_alloc(T_ICLASS, rb_cClass);
+ NEWOBJ(klass, struct RClass);
+ OBJSETUP(klass, rb_cClass, T_ICLASS);
if (BUILTIN_TYPE(module) == T_ICLASS) {
module = RBASIC(module)->klass;
}
- if (!RCLASS_IV_TBL(module)) {
- RCLASS_IV_TBL(module) = st_init_numtable();
- }
- if (!RCLASS_CONST_TBL(module)) {
- RCLASS_CONST_TBL(module) = st_init_numtable();
+ if (!RCLASS(module)->iv_tbl) {
+ RCLASS(module)->iv_tbl = st_init_numtable();
}
- RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
- RCLASS_CONST_TBL(klass) = RCLASS_CONST_TBL(module);
-
- RCLASS_M_TBL(OBJ_WB_UNPROTECT(klass)) =
- RCLASS_M_TBL(OBJ_WB_UNPROTECT(RCLASS_ORIGIN(module))); /* TODO: unprotected? */
-
- RCLASS_SET_SUPER(klass, super);
- if (RB_TYPE_P(module, T_ICLASS)) {
- RBASIC_SET_CLASS(klass, RBASIC(module)->klass);
+ klass->iv_tbl = RCLASS(module)->iv_tbl;
+ klass->m_tbl = RCLASS(module)->m_tbl;
+ klass->super = super;
+ if (TYPE(module) == T_ICLASS) {
+ RBASIC(klass)->klass = RBASIC(module)->klass;
}
else {
- RBASIC_SET_CLASS(klass, module);
+ RBASIC(klass)->klass = module;
}
OBJ_INFECT(klass, module);
OBJ_INFECT(klass, super);
@@ -844,178 +397,80 @@ rb_include_class_new(VALUE module, VALUE super)
return (VALUE)klass;
}
-static int include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super);
-
void
-rb_include_module(VALUE klass, VALUE module)
+rb_include_module(klass, module)
+ VALUE klass, module;
{
+ VALUE p, c;
int changed = 0;
rb_frozen_class_p(klass);
-
- if (!RB_TYPE_P(module, T_MODULE)) {
+ if (!OBJ_TAINTED(klass)) {
+ rb_secure(4);
+ }
+
+ if (TYPE(module) != T_MODULE) {
Check_Type(module, T_MODULE);
}
OBJ_INFECT(klass, module);
-
- changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, TRUE);
- if (changed < 0)
- rb_raise(rb_eArgError, "cyclic include detected");
-}
-
-static enum rb_id_table_iterator_result
-add_refined_method_entry_i(ID key, VALUE value, void *data)
-{
- rb_add_refined_method_entry((VALUE)data, key);
- return ID_TABLE_CONTINUE;
-}
-
-static int
-include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super)
-{
- VALUE p, iclass;
- int method_changed = 0, constant_changed = 0;
- struct rb_id_table *const klass_m_tbl = RCLASS_M_TBL(RCLASS_ORIGIN(klass));
-
+ c = klass;
while (module) {
- int superclass_seen = FALSE;
+ int superclass_seen = Qfalse;
- if (RCLASS_ORIGIN(module) != module)
- goto skip;
- if (klass_m_tbl && klass_m_tbl == RCLASS_M_TBL(module))
- return -1;
+ if (RCLASS(klass)->m_tbl == RCLASS(module)->m_tbl)
+ rb_raise(rb_eArgError, "cyclic include detected");
/* ignore if the module included already in superclasses */
- for (p = RCLASS_SUPER(klass); p; p = RCLASS_SUPER(p)) {
- int type = BUILTIN_TYPE(p);
- if (type == T_ICLASS) {
- if (RCLASS_M_TBL(p) == RCLASS_M_TBL(module)) {
+ for (p = RCLASS(klass)->super; p; p = RCLASS(p)->super) {
+ switch (BUILTIN_TYPE(p)) {
+ case T_ICLASS:
+ if (RCLASS(p)->m_tbl == RCLASS(module)->m_tbl) {
if (!superclass_seen) {
- c = p; /* move insertion point */
+ c = p; /* move insertion point */
}
goto skip;
}
+ break;
+ case T_CLASS:
+ superclass_seen = Qtrue;
+ break;
}
- else if (type == T_CLASS) {
- if (!search_super) break;
- superclass_seen = TRUE;
- }
- }
- iclass = rb_include_class_new(module, RCLASS_SUPER(c));
- c = RCLASS_SET_SUPER(c, iclass);
-
- {
- VALUE m = module;
- if (BUILTIN_TYPE(m) == T_ICLASS) m = RBASIC(m)->klass;
- rb_module_add_to_subclasses_list(m, iclass);
}
-
- if (FL_TEST(klass, RMODULE_IS_REFINEMENT)) {
- VALUE refined_class =
- rb_refinement_module_get_refined_class(klass);
-
- rb_id_table_foreach(RMODULE_M_TBL(module), add_refined_method_entry_i, (void *)refined_class);
- FL_SET(c, RMODULE_INCLUDED_INTO_REFINEMENT);
- }
- if (RMODULE_M_TBL(module) && rb_id_table_size(RMODULE_M_TBL(module))) method_changed = 1;
- if (RMODULE_CONST_TBL(module) && RMODULE_CONST_TBL(module)->num_entries) constant_changed = 1;
+ c = RCLASS(c)->super = include_class_new(module, RCLASS(c)->super);
+ changed = 1;
skip:
- module = RCLASS_SUPER(module);
- }
-
- if (method_changed) rb_clear_method_cache_by_class(klass);
- if (constant_changed) rb_clear_constant_cache();
-
- return method_changed;
-}
-
-static enum rb_id_table_iterator_result
-move_refined_method(ID key, VALUE value, void *data)
-{
- rb_method_entry_t *me = (rb_method_entry_t *) value;
- VALUE klass = (VALUE)data;
- struct rb_id_table *tbl = RCLASS_M_TBL(klass);
-
- if (me->def->type == VM_METHOD_TYPE_REFINED) {
- if (me->def->body.refined.orig_me) {
- const rb_method_entry_t *orig_me = me->def->body.refined.orig_me, *new_me;
- RB_OBJ_WRITE(me, &me->def->body.refined.orig_me, NULL);
- new_me = rb_method_entry_clone(me);
- rb_id_table_insert(tbl, key, (VALUE)new_me);
- RB_OBJ_WRITTEN(klass, Qundef, new_me);
- rb_method_entry_copy(me, orig_me);
- return ID_TABLE_CONTINUE;
- }
- else {
- rb_id_table_insert(tbl, key, (VALUE)me);
- return ID_TABLE_DELETE;
- }
- }
- else {
- return ID_TABLE_CONTINUE;
- }
-}
-
-void
-rb_prepend_module(VALUE klass, VALUE module)
-{
- VALUE origin;
- int changed = 0;
-
- rb_frozen_class_p(klass);
-
- Check_Type(module, T_MODULE);
-
- OBJ_INFECT(klass, module);
-
- origin = RCLASS_ORIGIN(klass);
- if (origin == klass) {
- origin = class_alloc(T_ICLASS, klass);
- OBJ_WB_UNPROTECT(origin); /* TODO: conservative shading. Need more survey. */
- RCLASS_SET_SUPER(origin, RCLASS_SUPER(klass));
- RCLASS_SET_SUPER(klass, origin);
- RCLASS_SET_ORIGIN(klass, origin);
- RCLASS_M_TBL(origin) = RCLASS_M_TBL(klass);
- RCLASS_M_TBL_INIT(klass);
- rb_id_table_foreach(RCLASS_M_TBL(origin), move_refined_method, (void *)klass);
- }
- changed = include_modules_at(klass, klass, module, FALSE);
- if (changed < 0)
- rb_raise(rb_eArgError, "cyclic prepend detected");
- if (changed) {
- rb_vm_check_redefinition_by_prepend(klass);
+ module = RCLASS(module)->super;
}
+ if (changed) rb_clear_cache();
}
/*
* call-seq:
* mod.included_modules -> array
- *
+ *
* Returns the list of modules included in <i>mod</i>.
- *
+ *
* module Mixin
* end
- *
+ *
* module Outer
* include Mixin
* end
- *
+ *
* Mixin.included_modules #=> []
* Outer.included_modules #=> [Mixin]
*/
VALUE
-rb_mod_included_modules(VALUE mod)
+rb_mod_included_modules(mod)
+ VALUE mod;
{
VALUE ary = rb_ary_new();
VALUE p;
- VALUE origin = RCLASS_ORIGIN(mod);
- for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
- if (p != origin && BUILTIN_TYPE(p) == T_ICLASS) {
- VALUE m = RBASIC(p)->klass;
- if (RB_TYPE_P(m, T_MODULE))
- rb_ary_push(ary, m);
+ for (p = RCLASS(mod)->super; p; p = RCLASS(p)->super) {
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ rb_ary_push(ary, RBASIC(p)->klass);
}
}
return ary;
@@ -1023,11 +478,11 @@ rb_mod_included_modules(VALUE mod)
/*
* call-seq:
- * mod.include?(module) -> true or false
- *
+ * mod.include?(module) => true or false
+ *
* Returns <code>true</code> if <i>module</i> is included in
* <i>mod</i> or one of <i>mod</i>'s ancestors.
- *
+ *
* module A
* end
* class B
@@ -1041,12 +496,14 @@ rb_mod_included_modules(VALUE mod)
*/
VALUE
-rb_mod_include_p(VALUE mod, VALUE mod2)
+rb_mod_include_p(mod, mod2)
+ VALUE mod;
+ VALUE mod2;
{
VALUE p;
Check_Type(mod2, T_MODULE);
- for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
+ for (p = RCLASS(mod)->super; p; p = RCLASS(p)->super) {
if (BUILTIN_TYPE(p) == T_ICLASS) {
if (RBASIC(p)->klass == mod2) return Qtrue;
}
@@ -1057,118 +514,131 @@ rb_mod_include_p(VALUE mod, VALUE mod2)
/*
* call-seq:
* mod.ancestors -> array
- *
- * Returns a list of modules included/prepended in <i>mod</i>
- * (including <i>mod</i> itself).
- *
+ *
+ * Returns a list of modules included in <i>mod</i> (including
+ * <i>mod</i> itself).
+ *
* module Mod
* include Math
* include Comparable
- * prepend Enumerable
* end
- *
- * Mod.ancestors #=> [Enumerable, Mod, Comparable, Math]
- * Math.ancestors #=> [Math]
- * Enumerable.ancestors #=> [Enumerable]
+ *
+ * Mod.ancestors #=> [Mod, Comparable, Math]
+ * Math.ancestors #=> [Math]
*/
VALUE
-rb_mod_ancestors(VALUE mod)
+rb_mod_ancestors(mod)
+ VALUE mod;
{
VALUE p, ary = rb_ary_new();
- for (p = mod; p; p = RCLASS_SUPER(p)) {
+ for (p = mod; p; p = RCLASS(p)->super) {
+ if (FL_TEST(p, FL_SINGLETON))
+ continue;
if (BUILTIN_TYPE(p) == T_ICLASS) {
rb_ary_push(ary, RBASIC(p)->klass);
}
- else if (p == RCLASS_ORIGIN(p)) {
+ else {
rb_ary_push(ary, p);
}
}
return ary;
}
-static int
-ins_methods_push(ID name, rb_method_visibility_t visi, VALUE ary, rb_method_visibility_t expected_visi)
-{
- if (visi == METHOD_VISI_UNDEF) return ST_CONTINUE;
+#define VISI(x) ((x)&NOEX_MASK)
+#define VISI_CHECK(x,f) (VISI(x) == (f))
- switch (expected_visi) {
- case METHOD_VISI_UNDEF:
- if (visi != METHOD_VISI_PRIVATE) rb_ary_push(ary, ID2SYM(name));
+static int
+ins_methods_push(name, type, ary, visi)
+ ID name;
+ long type;
+ VALUE ary;
+ long visi;
+{
+ if (type == -1) return ST_CONTINUE;
+ switch (visi) {
+ case NOEX_PRIVATE:
+ case NOEX_PROTECTED:
+ case NOEX_PUBLIC:
+ visi = (type == visi);
break;
- case METHOD_VISI_PRIVATE:
- case METHOD_VISI_PROTECTED:
- case METHOD_VISI_PUBLIC:
- if (visi == expected_visi) rb_ary_push(ary, ID2SYM(name));
+ default:
+ visi = (type != NOEX_PRIVATE);
break;
}
+ if (visi) {
+ rb_ary_push(ary, rb_str_new2(rb_id2name(name)));
+ }
return ST_CONTINUE;
}
static int
-ins_methods_i(st_data_t name, st_data_t type, st_data_t ary)
+ins_methods_i(name, type, ary)
+ ID name;
+ long type;
+ VALUE ary;
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_UNDEF); /* everything but private */
+ return ins_methods_push(name, type, ary, -1); /* everything but private */
}
static int
-ins_methods_prot_i(st_data_t name, st_data_t type, st_data_t ary)
+ins_methods_prot_i(name, type, ary)
+ ID name;
+ long type;
+ VALUE ary;
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PROTECTED);
+ return ins_methods_push(name, type, ary, NOEX_PROTECTED);
}
static int
-ins_methods_priv_i(st_data_t name, st_data_t type, st_data_t ary)
+ins_methods_priv_i(name, type, ary)
+ ID name;
+ long type;
+ VALUE ary;
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PRIVATE);
+ return ins_methods_push(name, type, ary, NOEX_PRIVATE);
}
static int
-ins_methods_pub_i(st_data_t name, st_data_t type, st_data_t ary)
+ins_methods_pub_i(name, type, ary)
+ ID name;
+ long type;
+ VALUE ary;
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PUBLIC);
+ return ins_methods_push(name, type, ary, NOEX_PUBLIC);
}
-struct method_entry_arg {
+static int
+method_entry(key, body, list)
+ ID key;
+ NODE *body;
st_table *list;
- int recur;
-};
-
-static enum rb_id_table_iterator_result
-method_entry_i(ID key, VALUE value, void *data)
{
- const rb_method_entry_t *me = (const rb_method_entry_t *)value;
- struct method_entry_arg *arg = (struct method_entry_arg *)data;
- rb_method_visibility_t type;
-
- if (me->def->type == VM_METHOD_TYPE_REFINED) {
- VALUE owner = me->owner;
- me = rb_resolve_refined_method(Qnil, me);
- if (!me) return ID_TABLE_CONTINUE;
- if (!arg->recur && me->owner != owner) return ID_TABLE_CONTINUE;
- }
- if (!st_lookup(arg->list, key, 0)) {
- if (UNDEFINED_METHOD_ENTRY_P(me)) {
- type = METHOD_VISI_UNDEF; /* none */
- }
- else {
- type = METHOD_ENTRY_VISI(me);
- }
- st_add_direct(arg->list, key, (st_data_t)type);
+ long type;
+
+ if (key == ID_ALLOCATOR) return ST_CONTINUE;
+ if (!st_lookup(list, key, 0)) {
+ if (!body->nd_body) type = -1; /* none */
+ else type = VISI(body->nd_noex);
+ st_add_direct(list, key, type);
}
- return ID_TABLE_CONTINUE;
+ return ST_CONTINUE;
}
static VALUE
-class_instance_method_list(int argc, const VALUE *argv, VALUE mod, int obj, int (*func) (st_data_t, st_data_t, st_data_t))
+class_instance_method_list(argc, argv, mod, func)
+ int argc;
+ VALUE *argv;
+ VALUE mod;
+ int (*func) _((ID, long, VALUE));
{
VALUE ary;
- int recur, prepended = 0;
- struct method_entry_arg me_arg;
+ int recur;
+ st_table *list;
if (argc == 0) {
- recur = TRUE;
+ recur = Qtrue;
}
else {
VALUE r;
@@ -1176,846 +646,415 @@ class_instance_method_list(int argc, const VALUE *argv, VALUE mod, int obj, int
recur = RTEST(r);
}
- if (!recur && RCLASS_ORIGIN(mod) != mod) {
- mod = RCLASS_ORIGIN(mod);
- prepended = 1;
- }
-
- me_arg.list = st_init_numtable();
- me_arg.recur = recur;
- for (; mod; mod = RCLASS_SUPER(mod)) {
- if (RCLASS_M_TBL(mod)) rb_id_table_foreach(RCLASS_M_TBL(mod), method_entry_i, &me_arg);
- if (BUILTIN_TYPE(mod) == T_ICLASS && !prepended) continue;
- if (obj && FL_TEST(mod, FL_SINGLETON)) continue;
+ list = st_init_numtable();
+ for (; mod; mod = RCLASS(mod)->super) {
+ st_foreach(RCLASS(mod)->m_tbl, method_entry, (st_data_t)list);
+ if (BUILTIN_TYPE(mod) == T_ICLASS) continue;
+ if (FL_TEST(mod, FL_SINGLETON)) continue;
if (!recur) break;
}
ary = rb_ary_new();
- st_foreach(me_arg.list, func, ary);
- st_free_table(me_arg.list);
+ st_foreach(list, func, ary);
+ st_free_table(list);
return ary;
}
/*
* call-seq:
- * mod.instance_methods(include_super=true) -> array
- *
- * Returns an array containing the names of the public and protected instance
- * methods in the receiver. For a module, these are the public and protected methods;
- * for a class, they are the instance (not singleton) methods. If the optional
- * parameter is <code>false</code>, the methods of any ancestors are not included.
- *
+ * mod.instance_methods(include_super=true) => array
+ *
+ * Returns an array containing the names of public instance methods in
+ * the receiver. For a module, these are the public methods; for a
+ * class, they are the instance (not singleton) methods. With no
+ * argument, or with an argument that is <code>false</code>, the
+ * instance methods in <i>mod</i> are returned, otherwise the methods
+ * in <i>mod</i> and <i>mod</i>'s superclasses are returned.
+ *
* module A
* def method1() end
* end
* class B
- * include A
* def method2() end
* end
* class C < B
* def method3() end
* end
- *
- * A.instance_methods(false) #=> [:method1]
- * B.instance_methods(false) #=> [:method2]
- * B.instance_methods(true).include?(:method1) #=> true
- * C.instance_methods(false) #=> [:method3]
- * C.instance_methods.include?(:method2) #=> true
+ *
+ * A.instance_methods #=> ["method1"]
+ * B.instance_methods(false) #=> ["method2"]
+ * C.instance_methods(false) #=> ["method3"]
+ * C.instance_methods(true).length #=> 43
*/
VALUE
-rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod)
+rb_class_instance_methods(argc, argv, mod)
+ int argc;
+ VALUE *argv;
+ VALUE mod;
{
- return class_instance_method_list(argc, argv, mod, 0, ins_methods_i);
+ return class_instance_method_list(argc, argv, mod, ins_methods_i);
}
/*
* call-seq:
- * mod.protected_instance_methods(include_super=true) -> array
- *
+ * mod.protected_instance_methods(include_super=true) => array
+ *
* Returns a list of the protected instance methods defined in
- * <i>mod</i>. If the optional parameter is <code>false</code>, the
- * methods of any ancestors are not included.
+ * <i>mod</i>. If the optional parameter is not <code>false</code>, the
+ * methods of any ancestors are included.
*/
VALUE
-rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod)
+rb_class_protected_instance_methods(argc, argv, mod)
+ int argc;
+ VALUE *argv;
+ VALUE mod;
{
- return class_instance_method_list(argc, argv, mod, 0, ins_methods_prot_i);
+ return class_instance_method_list(argc, argv, mod, ins_methods_prot_i);
}
/*
* call-seq:
- * mod.private_instance_methods(include_super=true) -> array
- *
+ * mod.private_instance_methods(include_super=true) => array
+ *
* Returns a list of the private instance methods defined in
- * <i>mod</i>. If the optional parameter is <code>false</code>, the
- * methods of any ancestors are not included.
- *
+ * <i>mod</i>. If the optional parameter is not <code>false</code>, the
+ * methods of any ancestors are included.
+ *
* module Mod
* def method1() end
* private :method1
* def method2() end
* end
- * Mod.instance_methods #=> [:method2]
- * Mod.private_instance_methods #=> [:method1]
+ * Mod.instance_methods #=> ["method2"]
+ * Mod.private_instance_methods #=> ["method1"]
*/
VALUE
-rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod)
+rb_class_private_instance_methods(argc, argv, mod)
+ int argc;
+ VALUE *argv;
+ VALUE mod;
{
- return class_instance_method_list(argc, argv, mod, 0, ins_methods_priv_i);
+ return class_instance_method_list(argc, argv, mod, ins_methods_priv_i);
}
/*
* call-seq:
- * mod.public_instance_methods(include_super=true) -> array
- *
+ * mod.public_instance_methods(include_super=true) => array
+ *
* Returns a list of the public instance methods defined in <i>mod</i>.
- * If the optional parameter is <code>false</code>, the methods of
- * any ancestors are not included.
+ * If the optional parameter is not <code>false</code>, the methods of
+ * any ancestors are included.
*/
VALUE
-rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod)
+rb_class_public_instance_methods(argc, argv, mod)
+ int argc;
+ VALUE *argv;
+ VALUE mod;
{
- return class_instance_method_list(argc, argv, mod, 0, ins_methods_pub_i);
+ return class_instance_method_list(argc, argv, mod, ins_methods_pub_i);
}
/*
* call-seq:
- * obj.methods(regular=true) -> array
- *
- * Returns a list of the names of public and protected methods of
- * <i>obj</i>. This will include all the methods accessible in
- * <i>obj</i>'s ancestors.
- * If the optional parameter is <code>false</code>, it
- * returns an array of <i>obj<i>'s public and protected singleton methods,
- * the array will not include methods in modules included in <i>obj</i>.
- *
- * class Klass
- * def klass_method()
- * end
- * end
- * k = Klass.new
- * k.methods[0..9] #=> [:klass_method, :nil?, :===,
- * # :==~, :!, :eql?
- * # :hash, :<=>, :class, :singleton_class]
- * k.methods.length #=> 56
- *
- * k.methods(false) #=> []
- * def k.singleton_method; end
- * k.methods(false) #=> [:singleton_method]
- *
- * module M123; def m123; end end
- * k.extend M123
- * k.methods(false) #=> [:singleton_method]
- */
-
-VALUE
-rb_obj_methods(int argc, const VALUE *argv, VALUE obj)
-{
- rb_check_arity(argc, 0, 1);
- if (argc > 0 && !RTEST(argv[0])) {
- return rb_obj_singleton_methods(argc, argv, obj);
- }
- return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_i);
-}
-
-/*
- * call-seq:
- * obj.protected_methods(all=true) -> array
- *
- * Returns the list of protected methods accessible to <i>obj</i>. If
- * the <i>all</i> parameter is set to <code>false</code>, only those methods
- * in the receiver will be listed.
- */
-
-VALUE
-rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj)
-{
- return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_prot_i);
-}
-
-/*
- * call-seq:
- * obj.private_methods(all=true) -> array
- *
- * Returns the list of private methods accessible to <i>obj</i>. If
- * the <i>all</i> parameter is set to <code>false</code>, only those methods
- * in the receiver will be listed.
- */
-
-VALUE
-rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj)
-{
- return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_priv_i);
-}
-
-/*
- * call-seq:
- * obj.public_methods(all=true) -> array
- *
- * Returns the list of public methods accessible to <i>obj</i>. If
- * the <i>all</i> parameter is set to <code>false</code>, only those methods
- * in the receiver will be listed.
- */
-
-VALUE
-rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj)
-{
- return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_pub_i);
-}
-
-/*
- * call-seq:
- * obj.singleton_methods(all=true) -> array
- *
+ * obj.singleton_methods(all=true) => array
+ *
* Returns an array of the names of singleton methods for <i>obj</i>.
* If the optional <i>all</i> parameter is true, the list will include
* methods in modules included in <i>obj</i>.
- * Only public and protected singleton methods are returned.
- *
+ *
* module Other
* def three() end
* end
- *
+ *
* class Single
* def Single.four() end
* end
- *
+ *
* a = Single.new
- *
+ *
* def a.one()
* end
- *
+ *
* class << a
* include Other
* def two()
* end
* end
- *
- * Single.singleton_methods #=> [:four]
- * a.singleton_methods(false) #=> [:two, :one]
- * a.singleton_methods #=> [:two, :one, :three]
+ *
+ * Single.singleton_methods #=> ["four"]
+ * a.singleton_methods(false) #=> ["two", "one"]
+ * a.singleton_methods #=> ["two", "one", "three"]
*/
VALUE
-rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj)
+rb_obj_singleton_methods(argc, argv, obj)
+ int argc;
+ VALUE *argv;
+ VALUE obj;
{
- VALUE recur, ary, klass, origin;
- struct method_entry_arg me_arg;
- struct rb_id_table *mtbl;
+ VALUE recur, ary, klass;
+ st_table *list;
+ rb_scan_args(argc, argv, "01", &recur);
if (argc == 0) {
recur = Qtrue;
}
- else {
- rb_scan_args(argc, argv, "01", &recur);
- }
klass = CLASS_OF(obj);
- origin = RCLASS_ORIGIN(klass);
- me_arg.list = st_init_numtable();
- me_arg.recur = RTEST(recur);
+ list = st_init_numtable();
if (klass && FL_TEST(klass, FL_SINGLETON)) {
- if ((mtbl = RCLASS_M_TBL(origin)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
- klass = RCLASS_SUPER(klass);
+ st_foreach(RCLASS(klass)->m_tbl, method_entry, (st_data_t)list);
+ klass = RCLASS(klass)->super;
}
if (RTEST(recur)) {
- while (klass && (FL_TEST(klass, FL_SINGLETON) || RB_TYPE_P(klass, T_ICLASS))) {
- if (klass != origin && (mtbl = RCLASS_M_TBL(klass)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
- klass = RCLASS_SUPER(klass);
+ while (klass && (FL_TEST(klass, FL_SINGLETON) || TYPE(klass) == T_ICLASS)) {
+ st_foreach(RCLASS(klass)->m_tbl, method_entry, (st_data_t)list);
+ klass = RCLASS(klass)->super;
}
}
ary = rb_ary_new();
- st_foreach(me_arg.list, ins_methods_i, ary);
- st_free_table(me_arg.list);
+ st_foreach(list, ins_methods_i, ary);
+ st_free_table(list);
return ary;
}
-/*!
- * \}
- */
-/*!
- * \defgroup defmethod Defining methods
- * There are some APIs to define a method from C.
- * These API takes a C function as a method body.
- *
- * \par Method body functions
- * Method body functions must return a VALUE and
- * can be one of the following form:
- * <dl>
- * <dt>Fixed number of parameters</dt>
- * <dd>
- * This form is a normal C function, excepting it takes
- * a receiver object as the first argument.
- *
- * \code
- * static VALUE my_method(VALUE self, VALUE x, VALUE y);
- * \endcode
- * </dd>
- * <dt>argc and argv style</dt>
- * <dd>
- * This form takes three parameters: \a argc, \a argv and \a self.
- * \a self is the receiver. \a argc is the number of arguments.
- * \a argv is a pointer to an array of the arguments.
- *
- * \code
- * static VALUE my_method(int argc, VALUE *argv, VALUE self);
- * \endcode
- * </dd>
- * <dt>Ruby array style</dt>
- * <dd>
- * This form takes two parameters: self and args.
- * \a self is the receiver. \a args is an Array object which
- * contains the arguments.
- *
- * \code
- * static VALUE my_method(VALUE self, VALUE args);
- * \endcode
- * </dd>
- *
- * \par Number of parameters
- * Method defining APIs takes the number of parameters which the
- * method will takes. This number is called \a argc.
- * \a argc can be:
- * <dl>
- * <dt>zero or positive number</dt>
- * <dd>This means the method body function takes a fixed number of parameters</dd>
- * <dt>-1</dt>
- * <dd>This means the method body function is "argc and argv" style.</dd>
- * <dt>-2</dt>
- * <dd>This means the method body function is "self and args" style.</dd>
- * </dl>
- * \{
- */
-
void
-rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc)
+rb_define_method_id(klass, name, func, argc)
+ VALUE klass;
+ ID name;
+ VALUE (*func)();
+ int argc;
{
- rb_add_method_cfunc(klass, mid, func, argc, METHOD_VISI_PUBLIC);
+ rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC);
}
void
-rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
+rb_define_method(klass, name, func, argc)
+ VALUE klass;
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
- rb_add_method_cfunc(klass, rb_intern(name), func, argc, METHOD_VISI_PUBLIC);
+ ID id = rb_intern(name);
+ int ex = NOEX_PUBLIC;
+
+
+ rb_add_method(klass, id, NEW_CFUNC(func, argc), ex);
}
void
-rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
+rb_define_protected_method(klass, name, func, argc)
+ VALUE klass;
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
- rb_add_method_cfunc(klass, rb_intern(name), func, argc, METHOD_VISI_PROTECTED);
+ rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PROTECTED);
}
void
-rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
+rb_define_private_method(klass, name, func, argc)
+ VALUE klass;
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
- rb_add_method_cfunc(klass, rb_intern(name), func, argc, METHOD_VISI_PRIVATE);
+ rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE);
}
void
-rb_undef_method(VALUE klass, const char *name)
+rb_undef_method(klass, name)
+ VALUE klass;
+ const char *name;
{
- rb_add_method(klass, rb_intern(name), VM_METHOD_TYPE_UNDEF, 0, METHOD_VISI_UNDEF);
+ rb_add_method(klass, rb_intern(name), 0, NOEX_UNDEF);
}
-/*!
- * \}
- */
-/*!
- * \addtogroup class
- * \{
- */
-
#define SPECIAL_SINGLETON(x,c) do {\
if (obj == (x)) {\
- return (c);\
+ return c;\
}\
} while (0)
-static inline VALUE
-special_singleton_class_of(VALUE obj)
-{
- SPECIAL_SINGLETON(Qnil, rb_cNilClass);
- SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);
- SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);
- return Qnil;
-}
-
VALUE
-rb_special_singleton_class(VALUE obj)
-{
- return special_singleton_class_of(obj);
-}
-
-/*!
- * \internal
- * Returns the singleton class of \a obj. Creates it if necessary.
- *
- * \note DO NOT expose the returned singleton class to
- * outside of class.c.
- * Use \ref rb_singleton_class instead for
- * consistency of the metaclass hierarchy.
- */
-static VALUE
-singleton_class_of(VALUE obj)
+rb_singleton_class(obj)
+ VALUE obj;
{
VALUE klass;
- if (FIXNUM_P(obj) || FLONUM_P(obj) || STATIC_SYM_P(obj)) {
- no_singleton:
+ if (FIXNUM_P(obj) || SYMBOL_P(obj)) {
rb_raise(rb_eTypeError, "can't define singleton");
}
- if (SPECIAL_CONST_P(obj)) {
- klass = special_singleton_class_of(obj);
- if (NIL_P(klass))
- rb_bug("unknown immediate %p", (void *)obj);
- return klass;
- }
- else {
- switch (BUILTIN_TYPE(obj)) {
- case T_FLOAT: case T_BIGNUM: case T_SYMBOL:
- goto no_singleton;
- }
+ if (rb_special_const_p(obj)) {
+ SPECIAL_SINGLETON(Qnil, rb_cNilClass);
+ SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);
+ SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);
+ rb_bug("unknown immediate %ld", obj);
}
- klass = RBASIC(obj)->klass;
- if (!(FL_TEST(klass, FL_SINGLETON) &&
- rb_ivar_get(klass, id_attached) == obj)) {
- klass = rb_make_metaclass(obj, klass);
+ DEFER_INTS;
+ if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) &&
+ rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj) {
+ klass = RBASIC(obj)->klass;
+ }
+ else {
+ klass = rb_make_metaclass(obj, RBASIC(obj)->klass);
}
-
if (OBJ_TAINTED(obj)) {
OBJ_TAINT(klass);
}
else {
FL_UNSET(klass, FL_TAINT);
}
- if (OBJ_FROZEN(obj)) OBJ_FREEZE_RAW(klass);
+ if (OBJ_FROZEN(obj)) OBJ_FREEZE(klass);
+ ALLOW_INTS;
return klass;
}
void
-rb_freeze_singleton_class(VALUE x)
+rb_define_singleton_method(obj, name, func, argc)
+ VALUE obj;
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
- /* should not propagate to meta-meta-class, and so on */
- if (!(RBASIC(x)->flags & FL_SINGLETON)) {
- VALUE klass = RBASIC_CLASS(x);
- if (klass && (klass = RCLASS_ORIGIN(klass)) != 0 &&
- FL_TEST(klass, (FL_SINGLETON|FL_FREEZE)) == FL_SINGLETON) {
- OBJ_FREEZE_RAW(klass);
- }
- }
+ rb_define_method(rb_singleton_class(obj), name, func, argc);
}
-/*!
- * Returns the singleton class of \a obj, or nil if obj is not a
- * singleton object.
- *
- * \param obj an arbitrary object.
- * \return the singleton class or nil.
- */
-VALUE
-rb_singleton_class_get(VALUE obj)
-{
- VALUE klass;
-
- if (SPECIAL_CONST_P(obj)) {
- return rb_special_singleton_class(obj);
- }
- klass = RBASIC(obj)->klass;
- if (!FL_TEST(klass, FL_SINGLETON)) return Qnil;
- if (rb_ivar_get(klass, id_attached) != obj) return Qnil;
- return klass;
-}
-
-/*!
- * Returns the singleton class of \a obj. Creates it if necessary.
- *
- * \param obj an arbitrary object.
- * \throw TypeError if \a obj is a Fixnum or a Symbol.
- * \return the singleton class.
- *
- * \post \a obj has its own singleton class.
- * \post if \a obj is a class,
- * the returned singleton class also has its own
- * singleton class in order to keep consistency of the
- * inheritance structure of metaclasses.
- * \note a new singleton class will be created
- * if \a obj does not have it.
- * \note the singleton classes for nil, true and false are:
- * NilClass, TrueClass and FalseClass.
- */
-VALUE
-rb_singleton_class(VALUE obj)
-{
- VALUE klass = singleton_class_of(obj);
-
- /* ensures an exposed class belongs to its own eigenclass */
- if (RB_TYPE_P(obj, T_CLASS)) (void)ENSURE_EIGENCLASS(klass);
-
- return klass;
-}
-
-/*!
- * \}
- */
-
-/*!
- * \addtogroup defmethod
- * \{
- */
-
-/*!
- * Defines a singleton method for \a obj.
- * \param obj an arbitrary object
- * \param name name of the singleton method
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
void
-rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc)
-{
- rb_define_method(singleton_class_of(obj), name, func, argc);
-}
-
-
-
-/*!
- * Defines a module function for \a module.
- * \param module an module or a class.
- * \param name name of the function
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
-void
-rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS), int argc)
+rb_define_module_function(module, name, func, argc)
+ VALUE module;
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
rb_define_private_method(module, name, func, argc);
rb_define_singleton_method(module, name, func, argc);
}
-
-/*!
- * Defines a global function
- * \param name name of the function
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
void
-rb_define_global_function(const char *name, VALUE (*func)(ANYARGS), int argc)
+rb_define_global_function(name, func, argc)
+ const char *name;
+ VALUE (*func)();
+ int argc;
{
rb_define_module_function(rb_mKernel, name, func, argc);
}
-
-/*!
- * Defines an alias of a method.
- * \param klass the class which the original method belongs to
- * \param name1 a new name for the method
- * \param name2 the original name of the method
- */
void
-rb_define_alias(VALUE klass, const char *name1, const char *name2)
+rb_define_alias(klass, name1, name2)
+ VALUE klass;
+ const char *name1, *name2;
{
rb_alias(klass, rb_intern(name1), rb_intern(name2));
}
-/*!
- * Defines (a) public accessor method(s) for an attribute.
- * \param klass the class which the attribute will belongs to
- * \param name name of the attribute
- * \param read a getter method for the attribute will be defined if \a read is non-zero.
- * \param write a setter method for the attribute will be defined if \a write is non-zero.
- */
void
-rb_define_attr(VALUE klass, const char *name, int read, int write)
-{
- rb_attr(klass, rb_intern(name), read, write, FALSE);
-}
-
-int
-rb_obj_basic_to_s_p(VALUE obj)
+rb_define_attr(klass, name, read, write)
+ VALUE klass;
+ const char *name;
+ int read, write;
{
- const rb_method_entry_t *me = rb_method_entry(CLASS_OF(obj), rb_intern("to_s"));
- if (me && me->def && me->def->type == VM_METHOD_TYPE_CFUNC &&
- me->def->body.cfunc.func == rb_any_to_s)
- return 1;
- return 0;
+ rb_attr(klass, rb_intern(name), read, write, Qfalse);
}
+#ifdef HAVE_STDARG_PROTOTYPES
#include <stdarg.h>
+#define va_init_list(a,b) va_start(a,b)
+#else
+#include <varargs.h>
+#define va_init_list(a,b) va_start(a)
+#endif
int
+#ifdef HAVE_STDARG_PROTOTYPES
rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
-{
- int i;
+#else
+rb_scan_args(argc, argv, fmt, va_alist)
+ int argc;
+ const VALUE *argv;
+ const char *fmt;
+ va_dcl
+#endif
+{
+ int n, i = 0;
const char *p = fmt;
VALUE *var;
va_list vargs;
- int f_var = 0, f_hash = 0, f_block = 0;
- int n_lead = 0, n_opt = 0, n_trail = 0, n_mand;
- int argi = 0;
- VALUE hash = Qnil;
+
+ va_init_list(vargs, fmt);
+
+ if (*p == '*') goto rest_arg;
if (ISDIGIT(*p)) {
- n_lead = *p - '0';
- p++;
- if (ISDIGIT(*p)) {
- n_opt = *p - '0';
- p++;
- if (ISDIGIT(*p)) {
- n_trail = *p - '0';
- p++;
- goto block_arg;
- }
+ n = *p - '0';
+ if (n > argc)
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, n);
+ for (i=0; i<n; i++) {
+ var = va_arg(vargs, VALUE*);
+ if (var) *var = argv[i];
}
- }
- if (*p == '*') {
- f_var = 1;
- p++;
- if (ISDIGIT(*p)) {
- n_trail = *p - '0';
- p++;
- }
- }
- block_arg:
- if (*p == ':') {
- f_hash = 1;
p++;
}
- if (*p == '&') {
- f_block = 1;
- p++;
- }
- if (*p != '\0') {
- rb_fatal("bad scan arg format: %s", fmt);
+ else {
+ goto error;
}
- n_mand = n_lead + n_trail;
-
- if (argc < n_mand)
- goto argc_error;
-
- va_start(vargs, fmt);
-
- /* capture an option hash - phase 1: pop */
- if (f_hash && n_mand < argc) {
- VALUE last = argv[argc - 1];
- if (NIL_P(last)) {
- /* nil is taken as an empty option hash only if it is not
- ambiguous; i.e. '*' is not specified and arguments are
- given more than sufficient */
- if (!f_var && n_mand + n_opt < argc)
- argc--;
- }
- else {
- hash = rb_check_hash_type(last);
- if (!NIL_P(hash)) {
- VALUE opts = rb_extract_keywords(&hash);
- if (!hash) argc--;
- hash = opts ? opts : Qnil;
+ if (ISDIGIT(*p)) {
+ n = i + *p - '0';
+ for (; i<n; i++) {
+ var = va_arg(vargs, VALUE*);
+ if (argc > i) {
+ if (var) *var = argv[i];
+ }
+ else {
+ if (var) *var = Qnil;
}
}
+ p++;
}
- /* capture leading mandatory arguments */
- for (i = n_lead; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = argv[argi];
- argi++;
- }
- /* capture optional arguments */
- for (i = n_opt; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (argi < argc - n_trail) {
- if (var) *var = argv[argi];
- argi++;
- }
- else {
- if (var) *var = Qnil;
- }
- }
- /* capture variable length arguments */
- if (f_var) {
- int n_var = argc - argi - n_trail;
-
- var = va_arg(vargs, VALUE *);
- if (0 < n_var) {
- if (var) *var = rb_ary_new4(n_var, &argv[argi]);
- argi += n_var;
+
+ if(*p == '*') {
+ rest_arg:
+ var = va_arg(vargs, VALUE*);
+ if (argc > i) {
+ if (var) *var = rb_ary_new4(argc-i, argv+i);
+ i = argc;
}
else {
if (var) *var = rb_ary_new();
}
+ p++;
}
- /* capture trailing mandatory arguments */
- for (i = n_trail; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = argv[argi];
- argi++;
- }
- /* capture an option hash - phase 2: assignment */
- if (f_hash) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = hash;
- }
- /* capture iterator block */
- if (f_block) {
- var = va_arg(vargs, VALUE *);
+
+ if (*p == '&') {
+ var = va_arg(vargs, VALUE*);
if (rb_block_given_p()) {
*var = rb_block_proc();
}
else {
*var = Qnil;
}
+ p++;
}
va_end(vargs);
- if (argi < argc) {
- argc_error:
- rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
- }
-
- return argc;
-}
-
-VALUE
-rb_keyword_error_new(const char *error, VALUE keys)
-{
- const char *msg = "";
- VALUE error_message;
-
- if (RARRAY_LEN(keys) == 1) {
- keys = RARRAY_AREF(keys, 0);
- }
- else {
- keys = rb_ary_join(keys, rb_usascii_str_new2(", "));
- msg = "s";
- }
-
- error_message = rb_sprintf("%s keyword%s: %"PRIsVALUE, error, msg, keys);
-
- return rb_exc_new_str(rb_eArgError, error_message);
-}
-
-NORETURN(static void rb_keyword_error(const char *error, VALUE keys));
-static void
-rb_keyword_error(const char *error, VALUE keys)
-{
- rb_exc_raise(rb_keyword_error_new(error, keys));
-}
-
-NORETURN(static void unknown_keyword_error(VALUE hash, const ID *table, int keywords));
-static void
-unknown_keyword_error(VALUE hash, const ID *table, int keywords)
-{
- st_table *tbl = rb_hash_tbl_raw(hash);
- VALUE keys;
- int i;
- for (i = 0; i < keywords; i++) {
- st_data_t key = ID2SYM(table[i]);
- st_delete(tbl, &key, NULL);
+ if (*p != '\0') {
+ goto error;
}
- keys = rb_funcallv(hash, rb_intern("keys"), 0, 0);
- if (!RB_TYPE_P(keys, T_ARRAY)) rb_raise(rb_eArgError, "unknown keyword");
- rb_keyword_error("unknown", keys);
-}
-
-static int
-separate_symbol(st_data_t key, st_data_t value, st_data_t arg)
-{
- VALUE *kwdhash = (VALUE *)arg;
-
- if (!SYMBOL_P(key)) kwdhash++;
- if (!*kwdhash) *kwdhash = rb_hash_new();
- rb_hash_aset(*kwdhash, (VALUE)key, (VALUE)value);
- return ST_CONTINUE;
-}
-
-VALUE
-rb_extract_keywords(VALUE *orighash)
-{
- VALUE parthash[2] = {0, 0};
- VALUE hash = *orighash;
- if (RHASH_EMPTY_P(hash)) {
- *orighash = 0;
- return hash;
+ if (argc > i) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, i);
}
- st_foreach(rb_hash_tbl_raw(hash), separate_symbol, (st_data_t)&parthash);
- *orighash = parthash[1];
- return parthash[0];
-}
-
-int
-rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
-{
- int i = 0, j;
- int rest = 0;
- VALUE missing = Qnil;
- st_data_t key;
-
-#define extract_kwarg(keyword, val) \
- (key = (st_data_t)(keyword), values ? \
- st_delete(rb_hash_tbl_raw(keyword_hash), &key, (val)) : \
- st_lookup(rb_hash_tbl_raw(keyword_hash), key, (val)))
- if (NIL_P(keyword_hash)) keyword_hash = 0;
-
- if (optional < 0) {
- rest = 1;
- optional = -1-optional;
- }
- if (values) {
- for (j = 0; j < required + optional; j++) {
- values[j] = Qundef;
- }
- }
- if (required) {
- for (; i < required; i++) {
- VALUE keyword = ID2SYM(table[i]);
- if (keyword_hash) {
- st_data_t val;
- if (extract_kwarg(keyword, &val)) {
- if (values) values[i] = (VALUE)val;
- continue;
- }
- }
- if (NIL_P(missing)) missing = rb_ary_tmp_new(1);
- rb_ary_push(missing, keyword);
- }
- if (!NIL_P(missing)) {
- rb_keyword_error("missing", missing);
- }
- }
- j = i;
- if (optional && keyword_hash) {
- for (i = 0; i < optional; i++) {
- st_data_t val;
- if (extract_kwarg(ID2SYM(table[required+i]), &val)) {
- if (values) values[required+i] = (VALUE)val;
- j++;
- }
- }
- }
- if (!rest && keyword_hash) {
- if (RHASH_SIZE(keyword_hash) > (unsigned int)j) {
- unknown_keyword_error(keyword_hash, table, required+optional);
- }
- }
- return j;
-#undef extract_kwarg
-}
+ return argc;
-int
-rb_class_has_methods(VALUE c)
-{
- return rb_id_table_size(RCLASS_M_TBL(c)) == 0 ? FALSE : TRUE;
+ error:
+ rb_fatal("bad scan arg format: %s", fmt);
+ return 0;
}
-
-/*!
- * \}
- */
diff --git a/common.mk b/common.mk
index d6811f42d9..6d5b35dee6 100644
--- a/common.mk
+++ b/common.mk